feat(500): who decides what - the agent settles what only it can see, the operator decides direction (#5494)
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 13s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m7s
CI & Build / Python tests (push) Successful in 1m58s
CI & Build / Build & push image (push) Successful in 27s
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 13s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m7s
CI & Build / Python tests (push) Successful in 1m58s
CI & Build / Build & push image (push) Successful in 27s
The operator's line (2026-10-09), reconciling their 2026-09-21 ruling (#4218, "you are the judge") with "not that Claude should make all decisions": judging covers the work and its records - facts, findings, measurements, whether work is done - and direction stays theirs: priorities, what the thing should be, trade-offs only they can price, anything they live with, and every act hard to undo or facing outward. - reply_shapes: a one-line form in the core (every turn), the full text in the asks slice (where a question gets handed back). Slice budget 1400 -> 1600 for it. - reporting-back "You are the judge": "the operator reads the decision - they do not make it" replaced; the line is drawn by who can see the evidence, not by how hard the call is. - plugin version minted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "scribe",
|
"name": "scribe",
|
||||||
"description": "Scribe for Claude Code: connects the scribe MCP server, adds the hooks that deliver live project state and relevant records at the right moment, ships the shared client-neutral Scribe skills (using-scribe, writing-plans, reporting-back, systematic-debugging, verification, brainstorming, reusing-code, shape-accounting, family-canon), and syncs your saved Scribe Processes as skills (/scribe:sync).",
|
"description": "Scribe for Claude Code: connects the scribe MCP server, adds the hooks that deliver live project state and relevant records at the right moment, ships the shared client-neutral Scribe skills (using-scribe, writing-plans, reporting-back, systematic-debugging, verification, brainstorming, reusing-code, shape-accounting, family-canon), and syncs your saved Scribe Processes as skills (/scribe:sync).",
|
||||||
"version": "2026.10.06.1827",
|
"version": "2026.10.09.1835",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Bryan Van Deusen"
|
"name": "Bryan Van Deusen"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -111,8 +111,11 @@ default differ, the preference is what they asked for.
|
|||||||
## You are the judge
|
## You are the judge
|
||||||
|
|
||||||
You are the judge of record for the work itself: what a shape is, whether a
|
You are the judge of record for the work itself: what a shape is, whether a
|
||||||
finding holds, whether a record is right, whether something is done. The
|
finding holds, whether a record is right, whether something is done — the
|
||||||
operator reads the decision — they do not make it.
|
questions only you can see the evidence for. Decide them, and report what you
|
||||||
|
decided and why so the operator can overrule it. **Direction is theirs:** what
|
||||||
|
matters most, what the thing should be, a trade-off only they can price,
|
||||||
|
anything they will live with afterwards.
|
||||||
|
|
||||||
**A finding surfaced and not judged is a finding dropped, not deferred.** This
|
**A finding surfaced and not judged is a finding dropped, not deferred.** This
|
||||||
is the failure that hides inside a good report: the symptom named, the cause
|
is the failure that hides inside a good report: the symptom named, the cause
|
||||||
@@ -125,11 +128,12 @@ So: decide, act, and report what you decided and why. If the evidence is
|
|||||||
genuinely balanced, say which way you went and what would change your mind —
|
genuinely balanced, say which way you went and what would change your mind —
|
||||||
that is still a decision.
|
that is still a decision.
|
||||||
|
|
||||||
**What DOES go to them**, and the distinction is the act, not the difficulty:
|
**What DOES go to them** is direction, and every act that is hard to reverse
|
||||||
spending their money, reaching their infrastructure, merging to a protected
|
or faces outward: spending their money, reaching their infrastructure, merging
|
||||||
branch, anything hard to reverse or facing outward — the **Handoff** and
|
to a protected branch — the **Decision**, **Handoff** and **Approval** shapes
|
||||||
**Approval** shapes below. Judging a record is never one of these. A hard call
|
below. The test is who can see the evidence, not how hard the call is: a hard
|
||||||
is still yours; an irreversible act is still theirs.
|
question of fact is still yours, and an easy question of direction is still
|
||||||
|
theirs.
|
||||||
|
|
||||||
**Judging is attended, not automatic.** You judge by reading the evidence and
|
**Judging is attended, not automatic.** You judge by reading the evidence and
|
||||||
recording why. A threshold, a sweep or a rule that reclassifies in bulk with
|
recording why. A threshold, a sweep or a rule that reclassifies in bulk with
|
||||||
|
|||||||
@@ -72,13 +72,15 @@ class ReplyShape:
|
|||||||
CORE_KEY = "core"
|
CORE_KEY = "core"
|
||||||
|
|
||||||
# ~550 tokens at four characters a token. The core is paid for in every
|
# ~550 tokens at four characters a token. The core is paid for in every
|
||||||
# session, so this is the ceiling the test holds it to — not a target. It
|
# session, so this is the ceiling the test holds it to — not a target. It sits
|
||||||
# shipped at ~1,800, leaving room for the one-line judgement (milestone 500
|
# at ~2,050 with the judgement line (milestone 500 step 2): close to full, so a
|
||||||
# step 2) and little else.
|
# sentence added now has to replace one.
|
||||||
CORE_BUDGET_CHARS = 2200
|
CORE_BUDGET_CHARS = 2200
|
||||||
# A slice is paid for only at its moment, and once per session; it can afford
|
# A slice is paid for only at its moment, and once per session; it can afford
|
||||||
# more than the core and still has to stay a slice, not the old skill again.
|
# more than the core and still has to stay a slice, not the old skill again.
|
||||||
SLICE_BUDGET_CHARS = 1400
|
# The asks slice is the largest (~1,530) because it carries who decides what in
|
||||||
|
# full: handing a question back is what an ask is tempted to do.
|
||||||
|
SLICE_BUDGET_CHARS = 1600
|
||||||
|
|
||||||
|
|
||||||
_CORE = """\
|
_CORE = """\
|
||||||
@@ -96,6 +98,9 @@ record rather than recalled. Work with no record behind it says so.
|
|||||||
- **Answer the standing questions, even with "nothing"**: does anything need them, and \
|
- **Answer the standing questions, even with "nothing"**: does anything need them, and \
|
||||||
what happens next. A section that explains earns its place only when it changes what \
|
what happens next. A section that explains earns its place only when it changes what \
|
||||||
they do or decide; the rest belongs in the record's log.
|
they do or decide; the rest belongs in the record's log.
|
||||||
|
- **Decide what only you can see; ask about direction.** Whether a finding holds, what a \
|
||||||
|
measurement says, whether the work is done: settle it, act, and say why so they can \
|
||||||
|
overrule it. Priorities, choices they will live with, and anything hard to undo are theirs.
|
||||||
- **A decision they have made is the input to the work.** Act on it; reopen it only \
|
- **A decision they have made is the input to the work.** Act on it; reopen it only \
|
||||||
for new evidence, said once.
|
for new evidence, said once.
|
||||||
- **Holding an action until they say yes?** Put it near the top, under "Approval requested".
|
- **Holding an action until they say yes?** Put it near the top, under "Approval requested".
|
||||||
@@ -143,9 +148,17 @@ them · how it is undone.
|
|||||||
- **Conflict** (what you are about to do clashes with a rule, a plan or an earlier \
|
- **Conflict** (what you are about to do clashes with a rule, a plan or an earlier \
|
||||||
decision) — what it says · what you were about to do · where they clash · A or B?
|
decision) — what it says · what you were about to do · where they clash · A or B?
|
||||||
|
|
||||||
Before asking, check whether you can find the answer yourself: something you can read \
|
**Who decides what.** You decide what only you can see the evidence for: whether a \
|
||||||
or measure is a fact to check, not a question to send. When an option rests on existing \
|
finding holds, what a measurement says, whether a record is right, whether the work is \
|
||||||
behaviour, say whose call that was — theirs (cite it) or a past session's nobody confirmed."""
|
done, and anything you can settle by reading or measuring. Decide, act, and say why, so \
|
||||||
|
they can overrule it; "your call" on one of these hands them a question they cannot see \
|
||||||
|
into. Evenly balanced evidence is still yours — say which way you went and what would \
|
||||||
|
change your mind. They decide direction: what matters most, what the thing should be, a \
|
||||||
|
trade-off only they can price, anything they will live with afterwards — and every act \
|
||||||
|
that is hard to undo or reaches outside the work.
|
||||||
|
|
||||||
|
When an option rests on existing behaviour, say whose call that was — theirs (cite it) \
|
||||||
|
or a past session's nobody confirmed."""
|
||||||
|
|
||||||
|
|
||||||
_PLAN = """\
|
_PLAN = """\
|
||||||
|
|||||||
@@ -78,6 +78,17 @@ def test_the_core_carries_the_length_discipline():
|
|||||||
assert "what can go" in text
|
assert "what can go" in text
|
||||||
|
|
||||||
|
|
||||||
|
def test_who_decides_what_rides_every_reply_and_every_ask():
|
||||||
|
"""The operator's line (milestone 500 step 2): the agent settles what
|
||||||
|
only it can see, the operator decides direction. A one-liner every turn,
|
||||||
|
in full where a question is about to be handed back."""
|
||||||
|
core = reply_shapes.core().text.lower()
|
||||||
|
asks = reply_shapes.SHAPES["asks"].text.lower()
|
||||||
|
assert "decide what only you can see" in core and "direction" in core
|
||||||
|
assert "who decides what" in asks
|
||||||
|
assert "decide direction" in asks and "hard to undo" in asks
|
||||||
|
|
||||||
|
|
||||||
def test_the_core_is_not_a_slice():
|
def test_the_core_is_not_a_slice():
|
||||||
"""It rides every turn, whatever moment the turn reaches — so a moment
|
"""It rides every turn, whatever moment the turn reaches — so a moment
|
||||||
lookup never hands it out a second time."""
|
lookup never hands it out a second time."""
|
||||||
|
|||||||
Reference in New Issue
Block a user