You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ad86f97
Browse filesBrowse the repository at this point in the historyBrowse files
Act on the terminus session's feedback: tell dissent from a spent budget, return the record, resume and scope from the CLI
A meeting that ran out of turns or stopped moving with nobody voting against now
reports unsettled and exits 5, so a caller can buy more turns instead of reading
that as disagreement; the verdict also carries dissent, the stop reason, and the
votes. --json returns the ballots, the objections with the condition that resolves
each one, the candidate text, the members and the metrics, so a dissent can be
quoted without scraping Markdown. New verbs resume and reconvene, with resume
carrying a budget-closed meeting on for more cycles: the floor reopens on the same
record and the next draft is a new candidate version. The seats are printed before
the first call, naming which of them bill per token. --exclude puts paths out of
scope as an instruction to the members, said plainly to be an instruction and not a
boundary, and a document is now put to members as material to weigh on its own
terms rather than as the owner's argument.
Also fixes stdout being truncated when the output was piped, which made an early
JSON read come back empty.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The council reads your working tree, finds the change with `git status` and `git diff`, and judges that change, not the project. The exit status is the answer: **0** approved, **2** objections remain, **3** checks failed, **4** verification incomplete, **1** something went wrong.
25
+
The council reads your working tree, finds the change with `git status` and `git diff`, and judges that change, not the project. The exit status is the answer:
26
+
27
+
| Status | Meaning |
28
+
| --- | --- |
29
+
| 0 | Approved. Every voter approved and nothing is open. |
30
+
| 2 | A member voted against the candidate. Real dissent; read the objections. |
31
+
| 3 | A command the council ran on the candidate failed. |
32
+
| 4 | Verification incomplete: there is a candidate, but the vote did not finish. |
33
+
| 5 | Unsettled: the meeting ran out of turns or stopped moving, with nobody dissenting. Buy it more turns rather than treating it as disagreement. |
34
+
| 1 | Something went wrong. Read the message. |
35
+
36
+
Nothing is printed on standard output until the verdict; progress goes to standard error. Do not pipe the output into a parser before the command exits.
26
37
27
38
**Ask a question that has no single right answer.** Design choices, migration plans, tradeoffs:
28
39
@@ -39,8 +50,11 @@ Read the whole report, not just the verdict. The value is in the objections, whi
39
50
-**Approved.** Say so, and name anything the council flagged anyway.
40
51
-**Objections remain.** Do not treat this as failure. Report the objections to the person in their own words, say which ones you agree with, and fix what is worth fixing.
41
52
-**Checks failed.** A command the council ran on the candidate failed. That is a fact, not an opinion; act on it.
53
+
-**Unsettled.** The clock ran out, not the argument. `overrule resume <id> --cycles 3` carries on with the same council and record instead of paying for the openings again, and `--note "<what to settle>"` goes in as the owner's own message.
42
54
-**Error.** Report what the message said. Do not retry in a loop.
43
55
56
+
With `--json` you get the record, not only the prose: `verdict` (with `dissent`, `stopReason`, and the vote counts), `ballots[]`, `objections[]` with each one's `resolvingCondition`, the `candidate` text, `members`, `metrics`, and the meeting `url`. Quote from those fields rather than scraping the Markdown.
57
+
44
58
Never present the council's findings as your own verification. Say where they came from. If a finding contradicts what you know about the code, check it yourself before passing it on: the members read the tree, but they can be wrong, and two of them agreeing does not make a thing true.
45
59
46
60
## Rules
@@ -56,12 +70,14 @@ Never present the council's findings as your own verification. Say where they ca
56
70
| Option | What it does |
57
71
| --- | --- |
58
72
|`--playbook <id>`| Start from a report template. `overrule playbooks` lists them: security, changes, bugs, dependencies, architecture, tests, performance, readiness. |
59
-
|`--members <names>`| Pick the council by connection name. The default seats everything ready, up to eight. |
73
+
|`--members <names>`| Pick the council by connection name. **The default seats everything ready, up to eight, which can include members billed per token on the owner's API accounts.** The command prints the seats and which of them bill before the first call. |
60
74
|`--cycles <n>`| Turns per member. 1 is a quick read, 2 is a real argument, more is a long meeting. |
61
75
|`--deep-research`| Members that can browse research the subject before taking a position, citing sources. Slower and more expensive. |
62
-
|`--attach <file>`| Give the council a document: a plan, a diff, a spec. Repeatable. |
76
+
|`--attach <file>`| Give the council a document: a plan, a diff, a spec. Repeatable. Documents are put to the members as material to weigh on its own terms, separate from the brief, which is the owner's framing. Attach the source rather than your summary of it. |
77
+
|`--exclude <path>`| Tell members a path is out of scope, so their positions are not anchored on your notes. An instruction to the council, not a boundary the machine enforces. Repeatable. |
63
78
|`--no-wait`| Print the meeting id and return immediately; pick it up later with `overrule watch <id>`. |
64
-
|`--json`| One object: `{ id, status, verdict, final, error, url }`. Use this, and read `final`. |
79
+
|`--json`| The whole record as one object: verdict, ballots, objections, candidate, members, metrics, url. Use this. |
80
+
|`--turn-limit <s>`| Seconds one member may take. Raise it above the 180 second default when research is on, or a slow member loses its seat. |
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@ node bin/overrule.mjs ask "Is this migration plan sound?" --deep-research --json
87
87
node bin/overrule.mjs list
88
88
```
89
89
90
-
`review` attaches a folder read-only and takes a report template; `ask` holds a plain meeting. Both wait for the verdict, print the report on standard output, and set the exit status: **0** approved, **2** objections remain, **3** checks failed, **4** verification incomplete, **1** error. With `--json` the output is one object with the verdict, the final text, and the meeting id, which is what an agent should read. `--no-wait` prints the id instead of waiting, and `watch` or `show` picks it up later. `--attach` sends a file, `--members` and `--drafter` pick the council, and `--level workspace-write` lets the drafter implement rather than only report.
90
+
`review` attaches a folder read-only and takes a report template; `ask` holds a plain meeting. Both wait for the verdict, print the report on standard output, and set the exit status: **0** approved, **2** objections remain because a member voted against, **3** checks failed, **4** verification incomplete, **5** unsettled because the meeting ran out of turns with nobody dissenting, **1** error. `resume <id> --cycles 3` buys an unsettled meeting more turns without paying for the openings again, and `reconvene <id> "<what next>"` opens a new session on the same record. With `--json` the output is one object holding the verdict (with the vote counts, whether anyone dissented, and why the meeting closed), the ballots, the objections with the condition that resolves each one, the candidate text, the members, and the meeting id, which is what an agent should read. `--no-wait` prints the id instead of waiting, and `watch` or `show` picks it up later. `--attach` sends a file, `--members` and `--drafter` pick the council, and `--level workspace-write` lets the drafter implement rather than only report.
91
91
92
92
A coding agent can therefore finish a change and hand it straight to the council:
@@ -137,7 +144,7 @@ function workspacePayload(options) {
137
144
if(!level)returnundefined;
138
145
if(level==='full-access'&&!options['acknowledge-full-access'])fail('Full access needs --acknowledge-full-access: every member with tools can do anything your account can do on that machine.');
constseating=`Seating ${members.seats.map(p=>`${p.name}${bootstrap.types[p.type]?.cli ? '' : ' (billed per token)'}`).join(', ')}${workspace ? ` on ${workspace.path} (${workspace.level})` : ''}`;
263
+
if(!options.quiet)err(seating+(billed.length&&!options.members ? `\n${billed.length} of these bill your API accounts per token. Pass --members to choose the council yourself.` : ''));
0 commit comments