✦ Sirius Forester · α Canis Majoris · local-first
The foreman for your coding-agent fleet.
Sirius claims tasks from a local issue tracker, locks the code each task touches, runs your agent, and refuses to call anything done until the affected tests pass. SQLite ledger: no cloud, no accounts, no LLM calls of its own.
{"worker":"sirius/oak","phase":"claim","issue":"AMT-12"}{"worker":"sirius/elm","phase":"claim","issue":"AMT-15"}{"worker":"sirius/oak","phase":"lock","symbols":["auth::verify"]}{"worker":"sirius/oak","phase":"gate","result":"PASS [subset(3)]"}{"worker":"sirius/elm","phase":"receipt","forward":true,"reverse":true}
Run three agents against one repo,
and the same four failures appear fast.
Sirius is not an issue tracker, a code graph, CI, or a merge tool. It is the supervisor loop that makes the tools you already have safe to run in parallel.
Failure 01t+00:04
Two agents grab the same task.
Both burn tokens on the same issue, then fight over the merge.
one claim per task, enforced at the ledgerFailure 02t+00:11
Edits collide silently.
Two workers touch the same function; last write wins and nobody notices.
one lock per symbol, claimed before work startsFailure 03t+00:26
“Done” without running the tests.
An agent declares victory without exercising the tests its change affects.
the gate fails closed: affected tests must passFailure 04t+7d
A week later, nobody knows why.
A function changed, the agent is gone, and the reasoning went with it.
every completion files a two-way receiptEight phases. Every iteration.
Claim order is enforced: issue first, symbols second, release in reverse. A lock collision releases the issue back with a comment naming the blocker.
Exit codes: 0 ok · 1 failure · 2 usage error · 3 gate blocked. Every command takes --json.
Four verbs, honestly instrumented.
Works for humans and CI, not just agents: file a receipt by hand, read provenance in either direction, gate any completion.
sirius linkfile a receipt by hand$ sirius link AMT-7 --symbols auth::verify,auth::mint
linked issue AMT-7 → 2 symbols (forward: true, reverse: true) sirius whyprovenance, both directions$ sirius why auth::verify # issues & decisions behind this symbol $ sirius why AMT-7 # symbols this issue touched
sirius gatetest-gate a completion$ sirius gate AMT-7 --tier safe --target-status in_review
gate safe for AMT-7: PASS [subset(3)] (3 tests) → in_review sirius runthe loop, N workers$ sirius run --workers 3 --from todo \
--agent-cmd 'claude -p "fix the claimed issue"'
# {"worker":"sirius/oak","phase":"gate","result":"PASS"} Every change carries its reason.
A receipt stamps the symbols onto the issue and the issue onto each code node, forward and reverse. Ask sirius why from either side, a week or a year later.
issue AMT-7 harden token verify decision D-3 rotate signing keys quarterly gate PASS 2026-07-02 · subset(3)
Fixture-mode harnesses today — live numbers when the loop is measured end to end. Reproduce any of them: bun run bench/soak.ts. See the benchmarks
On your machine in two minutes.
No toolchain needed — prebuilt binaries are checksummed and Sigstore-signed. sirius doctor checks the five facts Sirius depends on and tells you exactly what is missing. The gate fails closed until you give it your test command.
$ /sirius:install-binary # Claude Code plugin: verifies + installs the signed binary # or, without the plugin: curl -fsSL .../install-sirius.sh | sh # or, from source (needs Rust ≥ 1.74): cargo install --path . $ cd /path/to/your/repo # one that has .ametrite/ and .hayven/ $ sirius init # creates .sirius/{sirius.db,config.json} $ sirius doctor [OK] amt_present_and_schema: amt 0.1.0, ametrite schema v4 (>= v3) [FAIL] hayven_daemon_7777: no 200 from http://localhost:7777 CONTRACT DRIFT DETECTED
Four instruments, one suite.
Sirius writes only its own ledger. It talks to its companions strictly through their CLIs.
sirius-forester ↗
The foreman. Claims, locks, gates, receipts. Rust, SQLite, offline.
hayvenhurst ↗
The code graph. Locking, affected-test selection, provenance stamps.
ametrite ↗
The issue tracker. Local Linear+Obsidian for agents; schema ≥ v3.
catryna wikinelli ↗
The wiki. Living MDX docs your agent writes and your team reads, in .docs/.