Sirius Forester GitHub ↗
ε The console

The console

A local web board for the fleet — who is doing what, and is anything blocked, in one glance. Bun, zero npm runtime dependencies, port 1777.

The Sirius Console answers one question for a bystander — who is doing what, and is anything blocked — without a terminal. It is Bun.serve, vanilla TypeScript, zero npm runtime dependencies, on port :1777. Like every other write path in the suite, it opens all three stores read-only and mutates only by shelling out to sirius <cmd> --json.

Run it

Against a seeded fixture ledger — no sirius binary required, so you can see the whole thing in about thirty seconds:

bun run demo          # seeds a fixture ledger and serves :1777

Against a real workspace, once sirius init has created .sirius/sirius.db:

cd /path/to/repo && bun run /path/to/web/src/server.ts   # walks up for .sirius/

What it shows

  • Fleet board — one card per worker: current issue (with its title when the Ametrite store is readable), the code entities held, per-entity oracle verdicts (registered / blocked / forced), gate status, and the filed receipt with a two-way ✓✓ / partial ◐ flag. Live via server-sent events.
  • History — throughput per hour, median and average cycle time, gate-escape attempts, collision near-misses, two-way receipt coverage, and tokens; plus recent-iterations and policy-events tables.
  • Receipts — click any receipt to open a drawer with its issue or decision, the symbols stamped, forward and reverse provenance, the iterations that filed it, and sirius why enrichment when the binary is present.
  • Config — a read-only view of .sirius/config.json, marking which keys come from the file versus the committed defaults.

How it stays read-only

The console never writes any SQLite. Workspace discovery and reads happen over read-only WAL connections; live updates come from polling PRAGMA data_version and streaming a text/event-stream. The only mutation path is the sirius --json shell-out boundary, so the console can never corrupt a store it is only meant to observe.

MethodPathPurpose
GET/eventsSSE — fires on data_version change
GET/api/fleetfleet board JSON
GET/api/historyhistory stats + recent iterations
GET/api/receipt/:idreceipt detail + sirius why
GET/api/config.sirius/config.json (or defaults)
POST/api/gateshells sirius gate <issue> --json
POST/api/linkshells sirius link … --json

The why enrichment and the POST mutation routes light up automatically once the real sirius binary is on PATH.