Your agent pushed this as done. Spot the bug.
Real code, real council. Take a look, then press convene.
$ curl -fsSL https://dootsabha.pages.dev/install.sh | shfrom real sittings
Not just this diff. Six more it stopped.
- 01security · P1
The health check passed an open firewall.
A leftover rule let sandboxes reach host SSH. The check said healthy, and the work had been called done.
codexa private project - 02security · design
A reinstalled plugin would inherit every grant.
Permissions were keyed on the plugin's name: same name, same powers. Caught before any code was written.
- 03data loss · P1
A truncated recording, still marked lossless.
Two names for one file, a case alias or a hard link, let a second pane overwrite a live recording.
codexshux #238 ↗ - 04process safety · blocker
The reaper could kill a stranger.
It signalled a saved process group after the leader was gone; whoever reused the pid took the SIGKILL.
codexshux #258 ↗ - 05wrong result · major
A timed-out chair exited 0.
The fallback chair hid the timeout, so callers read success. codex caught it; grok did not.
codexdootsabha #22 ↗ - 06said done, wasn't · overclaim
“All four sites are guarded.” Two were.
grok, reviewing the branch that made it the default, broke the config and watched zero tests fail.
grokdootsabha #26 ↗
for the human watching
Watch it deliberate.
Each stage, each agent, live in your terminal. Your agent asks for --json and gets none of this.
codex ✓ · grok ✓
for the agent calling it
A contract, not a chat.
--jsonExactly one document on stdout. Logs stay on stderr.
schema_version: 1On every JSON document. Fields are added, never renamed.
exit 0 2 3 4 5 6One code per caller action. Branch on it; never parse prose.
--progress-fileNDJSON to tail while it runs. The last line holds the exit code.
status --jsonWhich agents are installed and answering, before you plan.
--timeoutA budget per call, a ceiling per run. Both exit 4 and say which fired.
SIGTERMEvery agent stops first. The run still records how it ended.
npx skills addA skill that tells your agent when to convene and how to read the result.
No API keys. Your subscriptions.
It runs the CLIs you already pay for, signed in as you.
Made for agents, not eyeballs.
$ dootsabha sabha --agents codex,grok \ --json --progress-file run.ndjson \ "$(git diff main)" > verdict.json
case $? in 0|5) jq .synthesis verdict.json ;; # 5: one agent down 4) retry --timeout 20m ;; 3) dootsabha status ;; 2|6) fix_the_call ;; esac
your defaults
One file sets the rules.
Each seat's model and effort, the chair, the budgets. A flag overrides any of it for one run.
--chair--rounds--timeoutdootsabha config showproviders: codex: model: gpt-6.1-sol grok: model: grok-4.7 flags: [--reasoning-effort, high] claude: model: claude-opus-5-5council: chair: claude # who writes the verdict rounds: 1 # up to 5timeout: 10m # each agent callsession_timeout: 30m # the whole sitting
Your next PR, on trial.
- councilsabhā
- consultparāmarśa
- reviewsamīkṣā
- refinesaṃśodhana
$ curl -fsSL https://dootsabha.pages.dev/install.sh | sh$ npx skills add indrasvat/dootsabha$ dootsabha status