conductor 3ceb3e5084
Auto-version and Release / release (push) Failing after 25s
CI Pipeline / lint (push) Failing after 34s
deploy / deploy (push) Failing after 15m31s
CI Pipeline / go-surface (push) Failing after 20s
CI Pipeline / rust-surface (push) Failing after 8s
CI Pipeline / canary (push) Failing after 1m46s
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / type-check (push) Failing after 37s
CI Pipeline / gitea-offline (push) Successful in 14s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 22m45s
chore(release): auto-bump version to 0.355.0 — earned by # (minor: converged release (push-to-master bump))
Promotion record: (unknown)
2026-10-25 03:09:58 +00:00
2026-10-17 12:02:43 +01:00
2026-10-24 17:39:32 +01:00
2026-10-10 22:01:46 +01:00
feat(governor): WAVE D56 — the provider-aware dispatch governor + the live tok/s readout (ADMIT-wave-d56-governor; Gitea #2580 + #2581, owner doctrine 2026-10-24: cloud-first routing, no consent gates on cloud, routing scope = factory lane assignment): (1) TELEMETRY — runecore.Governor samples live tok/s per provider from the engine's REAL turns (provider output-token accounting wired on every wire: ollama eval_count, [OI] completion_tokens, anthropic output_tokens, gemini candidatesTokenCount; honest token-estimate fallback when the wire carries none; a zero-token turn is never a sample); rolling per-provider samples + (provider,lanes) EMA saturation curve persisted via the hot-state pattern (~/.rune/hot/provider_throughput.json, atomic temp+rename, survives restarts); (2) SATURATION MODEL — lane cap = the highest lanes bucket whose marginal tok/s gain clears the floor (RUNE_GOVERNOR_CAP_FLOOR, default 5); no curve = honest cap 1, never invented headroom; (3) CONNECTION-HEALTH (#2581) — the core polls the registry's enabled providers on a 60s cadence (reachable/authenticated/tok/s/error_rate/last_error); the route refuses unreachable, never-probed-alive and 429-throttled providers (a throttle is worse than not spawning) while day-one pre-probe routing passes through; (4) LANE POOLS + CLOUD-FIRST — Route() orders cloud rows ahead of local (the servedByLocalBinding law), least-loaded within a tier, lane pools tracked via Acquire/ReleaseLane; (5) CLASSIFIER INTEGRATION — dispatch-classifier LoadCapacity reads the same hot file; PARALLEL verdicts become throughput-aware ('governor: N lanes free at current tok/s'), the thin pipe states '0 lanes free ... serialize, no fan-out benefit', unknown capacity stays honest; registry/lock semantics byte-unchanged (locks untouched, asserted); (6) INFO BAR READOUT — /v1/status gains the governor section; both bridge seams (serve + library) carry it; the info bar renders ' · 38 tok/s' after the context readout and NOTHING when nothing was measured (the bar never guesses); the sub-agents section shows the governor's own state row (lanes in use/cap, measured tok/s or '—'); red-first tests: governor laws (samples/persist/cap/cloud-first/health/thin-pipe/lanes), classifier capacity laws, bridge both-seam propagation, hermetic fake-serve info-bar proof '(13%) · 38 tok/s'; go test -race -short green on rune-core, dispatch-classifier, tui; vet/gofmt clean; deployed build_paired → ~/.local/share/rune/bin/rune-tui + rune-core rebuilt, core restarted — /v1/status serving the governor section live
2026-10-25 01:21:55 +00:00
feat(governor): WAVE D56 — the provider-aware dispatch governor + the live tok/s readout (ADMIT-wave-d56-governor; Gitea #2580 + #2581, owner doctrine 2026-10-24: cloud-first routing, no consent gates on cloud, routing scope = factory lane assignment): (1) TELEMETRY — runecore.Governor samples live tok/s per provider from the engine's REAL turns (provider output-token accounting wired on every wire: ollama eval_count, [OI] completion_tokens, anthropic output_tokens, gemini candidatesTokenCount; honest token-estimate fallback when the wire carries none; a zero-token turn is never a sample); rolling per-provider samples + (provider,lanes) EMA saturation curve persisted via the hot-state pattern (~/.rune/hot/provider_throughput.json, atomic temp+rename, survives restarts); (2) SATURATION MODEL — lane cap = the highest lanes bucket whose marginal tok/s gain clears the floor (RUNE_GOVERNOR_CAP_FLOOR, default 5); no curve = honest cap 1, never invented headroom; (3) CONNECTION-HEALTH (#2581) — the core polls the registry's enabled providers on a 60s cadence (reachable/authenticated/tok/s/error_rate/last_error); the route refuses unreachable, never-probed-alive and 429-throttled providers (a throttle is worse than not spawning) while day-one pre-probe routing passes through; (4) LANE POOLS + CLOUD-FIRST — Route() orders cloud rows ahead of local (the servedByLocalBinding law), least-loaded within a tier, lane pools tracked via Acquire/ReleaseLane; (5) CLASSIFIER INTEGRATION — dispatch-classifier LoadCapacity reads the same hot file; PARALLEL verdicts become throughput-aware ('governor: N lanes free at current tok/s'), the thin pipe states '0 lanes free ... serialize, no fan-out benefit', unknown capacity stays honest; registry/lock semantics byte-unchanged (locks untouched, asserted); (6) INFO BAR READOUT — /v1/status gains the governor section; both bridge seams (serve + library) carry it; the info bar renders ' · 38 tok/s' after the context readout and NOTHING when nothing was measured (the bar never guesses); the sub-agents section shows the governor's own state row (lanes in use/cap, measured tok/s or '—'); red-first tests: governor laws (samples/persist/cap/cloud-first/health/thin-pipe/lanes), classifier capacity laws, bridge both-seam propagation, hermetic fake-serve info-bar proof '(13%) · 38 tok/s'; go test -race -short green on rune-core, dispatch-classifier, tui; vet/gofmt clean; deployed build_paired → ~/.local/share/rune/bin/rune-tui + rune-core rebuilt, core restarted — /v1/status serving the governor section live
2026-10-25 01:21:55 +00:00
feat(governor): WAVE D56 — the provider-aware dispatch governor + the live tok/s readout (ADMIT-wave-d56-governor; Gitea #2580 + #2581, owner doctrine 2026-10-24: cloud-first routing, no consent gates on cloud, routing scope = factory lane assignment): (1) TELEMETRY — runecore.Governor samples live tok/s per provider from the engine's REAL turns (provider output-token accounting wired on every wire: ollama eval_count, [OI] completion_tokens, anthropic output_tokens, gemini candidatesTokenCount; honest token-estimate fallback when the wire carries none; a zero-token turn is never a sample); rolling per-provider samples + (provider,lanes) EMA saturation curve persisted via the hot-state pattern (~/.rune/hot/provider_throughput.json, atomic temp+rename, survives restarts); (2) SATURATION MODEL — lane cap = the highest lanes bucket whose marginal tok/s gain clears the floor (RUNE_GOVERNOR_CAP_FLOOR, default 5); no curve = honest cap 1, never invented headroom; (3) CONNECTION-HEALTH (#2581) — the core polls the registry's enabled providers on a 60s cadence (reachable/authenticated/tok/s/error_rate/last_error); the route refuses unreachable, never-probed-alive and 429-throttled providers (a throttle is worse than not spawning) while day-one pre-probe routing passes through; (4) LANE POOLS + CLOUD-FIRST — Route() orders cloud rows ahead of local (the servedByLocalBinding law), least-loaded within a tier, lane pools tracked via Acquire/ReleaseLane; (5) CLASSIFIER INTEGRATION — dispatch-classifier LoadCapacity reads the same hot file; PARALLEL verdicts become throughput-aware ('governor: N lanes free at current tok/s'), the thin pipe states '0 lanes free ... serialize, no fan-out benefit', unknown capacity stays honest; registry/lock semantics byte-unchanged (locks untouched, asserted); (6) INFO BAR READOUT — /v1/status gains the governor section; both bridge seams (serve + library) carry it; the info bar renders ' · 38 tok/s' after the context readout and NOTHING when nothing was measured (the bar never guesses); the sub-agents section shows the governor's own state row (lanes in use/cap, measured tok/s or '—'); red-first tests: governor laws (samples/persist/cap/cloud-first/health/thin-pipe/lanes), classifier capacity laws, bridge both-seam propagation, hermetic fake-serve info-bar proof '(13%) · 38 tok/s'; go test -race -short green on rune-core, dispatch-classifier, tui; vet/gofmt clean; deployed build_paired → ~/.local/share/rune/bin/rune-tui + rune-core rebuilt, core restarted — /v1/status serving the governor section live
2026-10-25 01:21:55 +00:00

Rune

Current release: v0.355.0

Highlights — from the latest release (v0.355.0)

  • Plain-English jargon dictionary covers the v0.329 vocabulary, plus catch-all sentence simplification pass.

Behind-the-scenes upkeep: 1 commit(s) of docs, tests and tooling this release.


What Rune is

Rune is a personal AI agent that lives on Nick's computer and talks like a person. Ask her something in ordinary language and she answers, does the work, and remembers.

The language model inside her is deliberately treated as a replaceable part — the "thinking engine" she borrows to reason. Everything that actually makes her Rune is kept by Rune itself, independently of any one model provider:

  • her memory of conversations and what happened;
  • the tasks she is working on and how far they got;
  • the skills and techniques she has learned;
  • her own judgement, built up from real outcomes.

If the underlying model is swapped tomorrow, she is still Rune.


How you talk to her

Chat is where you simply talk. It works like a continuous conversation, not a series of separate questions: she keeps the thread, follows corrections, and answers follow-ups in context. You can keep chatting while she is busy — she works in the background and speaks when she has something to say.

Tasks is the operations board. When she is doing real work, the plan, the current step, the commands she ran, and what actually happened all show up here — recorded from what really occurred, not from what she claims. You watch the work happen without interrupting it, and finished work lands here rather than cluttering the conversation.


What she can do

  • Act on the PC in task mode. Give her real work and she runs commands, reads and edits files, runs the tests, looks at the result, and tries again if it failed — checking real evidence before she says something is done. She does not accept her own word as proof.
  • Remember. Conversations, task outcomes, and records persist across restarts in her own store, so a new session picks up where the last one ended.
  • Learn skills. Successful techniques are kept as reusable knowledge — the skills engine runs on the Go side and its live state shows in her interface.
  • Know her limits. For anything destructive or irreversible she asks first, and she separates what she is capable of from what she is authorised to do.

How to run

rune

The rune command boots the deployed chat window (a text interface in the terminal). To build the current state from source:

bash scripts/build_paired.sh

How she's built

One sentence: a Go agent core does the thinking and acting; a Go "front door" is the only door to it; the chat window in your terminal talks only to that door.

you ⇄ chat window (terminal)
        ⇄ front door  (127.0.0.1:8377)
        ⇄ agent core  (127.0.0.1:8376)
              ├── conversation & tasks
              ├── memory store
              └── tool loop: reason → act → check → act again → verify → answer
  • The agent core is the runtime: it holds the conversation, the task ledger, the memory, and the loop that lets her use tools and keep working until the job is genuinely done.
  • The front door is a small Go web interface that stands in front of the core. The chat window never touches the core directly — every request goes through the door, which keeps one honest, inspectable path for everything.
  • The chat window shows the two panes above (chat and tasks) plus a live activity strip, and it can run while the front door is down by carrying its own copy of the door as a child process.

The older Python runtime is being retired: new capability lands in Go, and no new Python is added.


What's real vs what's planned

Rune is under active development, and the project holds itself to a strict rule: a thing counts as real only when ordinary execution actually uses it. Code that exists but isn't wired into daily behaviour is labelled as such, not counted.

The authoritative map of what currently runs — and what is still a prototype or planned — is:

  • docs/v1/AUTHORITY_MAP.md
  • config/v1_authority_map.json

Documentation

  • docs/v1/AUTHORITY_MAP.md — what is live vs prototype vs planned
  • docs/wiki/Home.md — documentation index
  • docs/wiki/Operations.md — operational procedures
  • docs/wiki/Backup-and-Restore.md — Gitea backup and restore
  • docs/openspec/ — experience and architecture specs

Development

Run the Go test batteries (with the race detector, the project's deep code testing):

cd src/go/release-notes && go test ./... -race
cd tui && go test ./... -race

CI installs Python dependencies only from the committed, fully-pinned requirements-ci.txt (issue #150). After any dependency edit in pyproject.toml, regenerate and commit the lock:

uv pip compile pyproject.toml -o requirements-ci.txt --extra dev --extra memory --python-version 3.11
python3 scripts/check_dep_lock.py   # must print "in sync" before committing

License

Private — Nick's personal AI agent.

S
Description
Rune — sovereign adaptive runtime: LLM-authored agentic system with canonical orchestration (event/task/conversation authorities), ContextBroker, native tool loop, observable failure tiers, durable inference traces, and a machine-checkable structural contract. Fully traced development: spec+quality dual gates, canaries, coverage. v0.50.0.
Readme
406 MiB
2 Stars 1 Watchers 1 Forks
Rune v0.359.0
Latest
2026-10-25 21:46:39 +00:00
Languages
Python 51.1%
Go 32.8%
Rust 15.6%
Shell 0.3%
TypeScript 0.2%