Repository navigation
Route each Claude agent definition to its table's model and effort - #1045
Merged
seathatflowsinourveins merged 5 commits intoOct 13, 2026
Merged
Conversation
seathatflowsinourveins
force-pushed
the
claude/api-actions-effort-routing-20261012
branch
from
October 12, 2026 19:20
32280b5 to
ea7a04e
Compare
seathatflowsinourveins
force-pushed
the
claude/api-actions-effort-routing-20261012
branch
from
October 12, 2026 19:42
ea7a04e to
eb188d0
Compare
seathatflowsinourveins
marked this pull request as ready for review
October 12, 2026 20:17
seathatflowsinourveins
force-pushed
the
claude/api-actions-effort-routing-20261012
branch
from
October 12, 2026 20:59
eb188d0 to
adf3d70
Compare
Collaborator
Author
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: adf3d70ba3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 13, 2026
…r drop at relaunch Fix round 2 of #1045, after Astra's delta read and the command center's Claude delta at 1bb32f4. - P2-A (Astra's first blocker): the README's contract summary, its task-matched-models bullet and an envelope comment still put every project agent at max and said the contract fails an agent off max. Each project agent carries its routed effort (AGENT_EFFORT); a saved stage binds max. A contract assertion rejects the stale guidance, with replace-all mutations; it fails on 1bb32f4's README and passes here. - P2-B (the command center's): the repository's own ecosystem launcher (adoption/bootstrap-linux.sh, bootstrap-macos.sh) still adds --effort max to an interactive launch that names no effort, and this change leaves it. The routing paragraph, the coordinator row, the decision record's alternative and the contract pin now say so; a new assertion rejects the relaunch claim. - The workflows SHA256SUMS and the evidence manifest follow the new bytes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 13, 2026
…r drop at relaunch Fix round 2 of #1045, after Astra's delta read and the command center's Claude delta at 1bb32f4. - P2-A (Astra's first blocker): the README's contract summary, its task-matched-models bullet and an envelope comment still put every project agent at max and said the contract fails an agent off max. Each project agent carries its routed effort (AGENT_EFFORT); a saved stage binds max. A contract assertion rejects the stale guidance, with replace-all mutations; it fails on 1bb32f4's README and passes here. - P2-B (the command center's): the repository's own ecosystem launcher (adoption/bootstrap-linux.sh, bootstrap-macos.sh) still adds --effort max to an interactive launch that names no effort, and this change leaves it. The routing paragraph, the coordinator row, the decision record's alternative and the contract pin now say so; a new assertion rejects the relaunch claim. - The workflows SHA256SUMS and the evidence manifest follow the new bytes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
force-pushed
the
claude/api-actions-effort-routing-20261012
branch
from
October 13, 2026 07:13
70ff275 to
6c8348d
Compare
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 13, 2026
…s regression Astra's registry read of #1045 at 6c8348d (P2): the registry-only rebase re-registered only the paths main's manifest already listed, so four rows this change had added were lost: .claude/agents/semantic-evidence-reviewer.md, source-scout.md, stack-verifier.md and docs/decisions/2026-10-12-model-effort-routing.md. Each is re-registered with scripts/host_receipts.py register_file, keeping main's rows; each row equals its 70ff275 row. ShippedAgentEffortTests.test_every_routed_definition_and_the_routing_record_are_registered requires a current manifest row for every lowered definition in each shipped copy and for the routing record; it fails at 6c8348d on exactly these four paths and passes here. Co-Authored-By: Claude Opus 5.5 <[email protected]>
4 tasks done
The command center's ruling of 2026-10-12 on model and effort routing (audit finding CPA-C-001): every shipped agent definition ran at effort max. Each now carries the model and effort of the ruling's table: source-scout and stack-verifier Sonnet/medium, stack-researcher Sonnet/high, isolated-builder Opus/high, the three reviewers Opus/xhigh; the blind roles and the landscape sweep keep their protocol's max. A saved workflow stage still binds effort max. Measured on Claude Code 2.1.296: a child launched with `name` (a teammate) drops a per-launch effort and runs at its definition's, else the session's; an unnamed child takes the per-launch effort. So the definition is where the level is set, and the coordinator guidance is to launch without `name` for another level. docs/decisions/2026-10-12-model-effort-routing.md supersedes 2026-09-23-max-effort-default.md for effort. The install-profile test and the examples' static contract hold each agent at its routed level; on main's definitions they fail 7 times, once per rerouted agent. Co-Authored-By: Claude Opus 5.5 <[email protected]>
CI shard 6 at 1cd0019 failed test_every_cited_line_names_the_key three times: the supersession banner moved docs/decisions/2026-09-23-max- effort-default.md down two lines and the coordinator paragraph moved examples/claude-native/workflows/README.md down one, so three locators in upstream-surface-dispositions.json no longer named their keys. The fourth (ultracode at :61) still named its key by coincidence and moves too. Each new line is the old line through the diff's hunks, checked to name its key; the file is re-registered in manifests/evidence.json. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ules Fix round 1 for the command center's Claude read at eb188d0 (CHANGES_REQUESTED, two P2s and P3s; Astra's read ACKed): - P2-a: the decision record carries the ruling's unchanged routing run 5 clause: Opus for trading, gate reads and sole-Claude-read micros, and Sonnet only for non-gate foundation work. stack-verifier (Sonnet, medium) is described as checking claims on non-gate work, and gate verification uses evidence-reviewer or stack-verifier launched without `name` and with a per-launch Opus at xhigh, because a named child drops a per-launch effort. The README's agent, role and routing rows say so. - P2-b: that a saved Workflow stage's effort wins over a definition's rests on Q3 of 2026-09-23-max-effort-default.md (Claude Code 2.1.281, Sonnet 5), not on the 2.1.296 probes, which were Agent-tool spawns. test-envelope.mjs, the task-model-routing row and the decision record cite it and say it is not re-measured on 2.1.296. - P3s: - source-scout's Sonnet/medium is stated as this record's departure from the ruling's Haiku/low row, which the ruling has not accepted; - the named-child rule is scoped to the interactive sessions it was measured in (a headless named spawn stays a subagent); - changelog line 657 is quoted as the plugin-defined agent it names; - "Haiku 4.5" becomes the unversioned Haiku the cited record names; - the vacuous `!= effort: max` test now exercises the routed check; - the README's coordinator rows follow the ruling's main-session xhigh (the contract pin and its mutation move with them); - Astra's P3: the "effort max" guidance bullet and the envelope's comments distinguish a saved stage's max from each definition's routed effort. The decision record's after-measurement now separates fresh from resumed, named from unnamed and interactive from headless children, Workflow stages and reinstallation. The workflows SHA256SUMS, one dispositions locator and the manifest are re-derived. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…r drop at relaunch Fix round 2 of #1045, after Astra's delta read and the command center's Claude delta at 1bb32f4. - P2-A (Astra's first blocker): the README's contract summary, its task-matched-models bullet and an envelope comment still put every project agent at max and said the contract fails an agent off max. Each project agent carries its routed effort (AGENT_EFFORT); a saved stage binds max. A contract assertion rejects the stale guidance, with replace-all mutations; it fails on 1bb32f4's README and passes here. - P2-B (the command center's): the repository's own ecosystem launcher (adoption/bootstrap-linux.sh, bootstrap-macos.sh) still adds --effort max to an interactive launch that names no effort, and this change leaves it. The routing paragraph, the coordinator row, the decision record's alternative and the contract pin now say so; a new assertion rejects the relaunch claim. - The workflows SHA256SUMS and the evidence manifest follow the new bytes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…s regression Astra's registry read of #1045 at 6c8348d (P2): the registry-only rebase re-registered only the paths main's manifest already listed, so four rows this change had added were lost: .claude/agents/semantic-evidence-reviewer.md, source-scout.md, stack-verifier.md and docs/decisions/2026-10-12-model-effort-routing.md. Each is re-registered with scripts/host_receipts.py register_file, keeping main's rows; each row equals its 70ff275 row. ShippedAgentEffortTests.test_every_routed_definition_and_the_routing_record_are_registered requires a current manifest row for every lowered definition in each shipped copy and for the routing record; it fails at 6c8348d on exactly these four paths and passes here. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
force-pushed
the
claude/api-actions-effort-routing-20261012
branch
from
October 13, 2026 09:14
7906b88 to
af1d2a6
Compare
seathatflowsinourveins
deleted the
claude/api-actions-effort-routing-20261012
branch
October 13, 2026 10:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
max; each now carries the model and effort of the command center's 2026-10-12 routing table (the blind roles and the landscape sweep keep their protocol'smax), and a new decision record supersedes the 2026-09-23 max-effort default for effort, with the measurement of what decides a child's effort on Claude Code 2.1.296.d6056831(main, after fix(trading): accept paper host version paths in capacity env URLs #1069; first opened on2f59d744, rebased five times, each time for a registry-only conflict inmanifests/evidence.json). The last rebase (head7906b883toaf1d2a6c) kept this change's own rows: all 34 registered files this change touches have a current row, and every non-registry file keeps itsgit patch-id --stable. The earlier rebase, at the landing cue (head70ff2753to6c8348d2), re-registered this change's files withscripts/host_receipts.pyregister_file, not a hand merge. Every one of the 34 other changed files keeps itsgit patch-id --stable;validate.pypasses. That rebase re-registered only the paths main's manifest already listed, so it dropped four rows this change had added. Astra's registry read at6c8348d2(P2) caught it, and7906b883restores them withregister_file, each equal to its70ff2753row:.claude/agents/semantic-evidence-reviewer.md,source-scout.md,stack-verifier.mdanddocs/decisions/2026-10-12-model-effort-routing.md.ShippedAgentEffortTests.test_every_routed_definition_and_the_routing_record_are_registeredfails at6c8348d2on exactly those four and passes here;validate.pychecks only rows that exist.lane:foundationadoption/agents/claude/*.md,.claude/agents/*.md,examples/claude-native/agents/*.md(the three byte-identical copies),examples/claude-native/workflows/README.md(agent, routing and role tables; coordinator guidance),examples/claude-native/workflows/test-envelope.mjsandtest-contract-mutations.mjs(and theirSHA256SUMS),tests/test_install_claude_profile.py,tests/test_task_model_routing.py,tests/test_token_e2e_preregistration.py,docs/decisions/2026-09-30-task-model-routing.md(seven agent rows restated, addendum),evidence/artifacts/token-adoption-e2e-20260926/README.md(append-only Amendment 5: the five role-body pins),catalogs/foundation/decisions.json(thelean-workflow-child-routingactivation text),docs/decisions/2026-10-12-model-effort-routing.md(new),docs/decisions/2026-09-23-max-effort-default.md(supersession banner),catalogs/foundation/upstream-surface-dispositions.json(four locators moved past the new lines, second commit),manifests/evidence.json(re-registration)The table (agent: model, effort):
source-scout,stack-verifier: Sonnet, medium (extraction, inventories, re-runs and claim checks without judgment)stack-researcher: Sonnet, high (research and synthesis on named sources)isolated-builder: Opus, high (builders, gate-code tier by default; a non-gate build is launched with a per-launch Sonnet)evidence-reviewer,security-reviewer,semantic-evidence-reviewer: Opus, xhigh (reviews)blind-lane-reviewer,blind-adjudicator,blind-judge,landscape-sweep-worker: Opus, max (unchanged, their protocol's value)No definition is on Haiku: the only same-packet extraction trial (2026-09-21) scored Haiku at 9/14 against Sonnet's 14/14 (the record names no Haiku version), and Haiku 5.5 is unmeasured on that task; Haiku stays a per-launch choice for mechanical work.
What decides a child's effort on 2.1.296 (fresh headless one-turn probes and interactive children, read from the
effortfield of the native transcripts; full table in the decision record):effort, else its definition's, else the session's level. A session started with--effort maxdoes not override either.name, a teammate) in an interactive session: its definition's effort, else the session's level; a per-launcheffortis dropped. The per-launchmodelis honored either way. Under-por the Agent SDK the named case is not measured.maxdespite per-launch efforts fromlowtoxhigh) came from naming, not from the session flag, and in interactive sessions the definition is the lever that reaches every child (under-por the Agent SDK the named case is not measured). Coordinator guidance, now in the workflows README and the registry: launch withoutnamefor a per-launch effort.Follow-ups (not in this change):
--effort maxset the session level and that of named children whose definition sets none:adoption/bootstrap-linux.sh:907-924,adoption/bootstrap-macos.sh:1083-1096), inside this repository. It still adds--effort maxto an interactive launch that names no effort, and this change leaves it as it is (the command center's Claude delta read, P2-B). A main session runs at the ruling's xhigh when launched with--effort xhigh. The coordinator's terminal default (docs/decisions/2026-09-29-max-default-effort.md) is not decided here.effort: 'max', the contract'sSTAGE_EFFORT) is unchanged; routing stages by work class is its own reviewed change.recipes/claude-native-ultracode.md,recipes/claude-native-profile.md) keep their dated sections; the old record's banner points to the new one.tools/adoption/install_claude_profile.py.eb188d0f(ACK, no blockers). It carried toadf3d70b, a pure rebase by patch-id, and not to1bb32f44: fix round 1 changes the tests, the README and the contract, so it is read as a delta. Four P3s (the first is taken in fix round 1):sub-agents.md,model-config.mdand the cited changelog lines (mirror commit3deb8736), and a sanitized structured record of the named-child observation without private transcript hashes.70ff2753(ACK, no blockers):oauthlibignores expired on 2026-10-13. That is inherited from main and is the command center's incident; this change touches neither the config nor its tests.test-contract-mutations.mjs:76, a comment outside the changed lines, still says a stage or agent offmaxmust fail. At the next contract-comment edit it should saymaxfor stages and the routed effort for definitions.70ff2753(PASS_WITH_P3):max, and the envelope's stale-guidance pattern does not match them. One (:1195) says the lead and the project definitions both specifymax; the other (:1197) says project agents declareeffort: max. The next contract edit should correct both and extend the pattern, with a mutation for each.test-contract-mutations.mjs:76-77says an agent offmaxmust fail, which:89-94contradict, andtest-envelope.mjs:442still says "saved xhigh fallback".Corrections (fix round 1,
1bb32f44). The command center's Claude read ateb188d0f(CHANGES_REQUESTED; Astra ACKed) found two P2s and P3s:stack-verifier(Sonnet, medium) checks claims on non-gate work.evidence-reviewer, orstack-verifierlaunched withoutnameand with a per-launch Opus at xhigh, because a named child drops a per-launch effort.2026-09-23-max-effort-default.md(Claude Code 2.1.281, Sonnet 5), not on the 2.1.296 probes, which were Agent-tool spawns. The envelope, the task-model-routing row and the decision record cite Q3 and say the rule is not re-measured on 2.1.296. Re-measuring needs a Workflow run; the record's after-measurement includes it.source-scout's Sonnet/medium is stated as this record's departure from the ruling's Haiku/low row;!= effort: maxtest now exercises the routed check;maxfrom each definition's routed effort.Corrections (fix round 2,
70ff2753). Astra's delta read and the command center's Claude delta read at1bb32f44both asked for changes. The command center accepted thesource-scoutdeparture: Sonnet at medium, for non-gate extraction, per routing run 5.maxand said the contract fails an agent offmax: the README's contract summary (:1076-1077), its task-matched-models bullet (:1098), and an envelope comment.maxand each project agent its routed effort (AGENT_EFFORT). The:1098bullet's coordinator clause follows the routing row, as in round 1.--effort max, so the README must not say the launchers drop it at relaunch.:1161), the coordinator row (:1165), the contract pin, its mutation, and the decision record's launcher alternative. They now say that launcher still adds the flag and that a main session gets xhigh with--effort xhigh.1bb32f44's README the envelope fails 3 of 256 checks: the coordinator pin, the stale per-agent phrases and the relaunch claim. Here it passes all 256. The mutations pass 80 of 80.SHA256SUMSand the evidence manifest follow the new bytes.adf3d70b(edited 2026-10-12, 23:51Z). The launcher sentence and the named-child scope above are fixed in this edit.c63c83a8the merge conflicts only inmanifests/evidence.json; a registry-only rebase is ready on cue.SOTA sources
dd3f22aa021a3525f48227321c34eab28b322d7ab77cb3d5fc01ddd048e8f6ea): line 316 (theeffortfrontmatter field overrides the session level, notCLAUDE_CODE_EFFORT_LEVEL) and lines 417-421 (a per-invocationeffortoverrides the field for a non-fork subagent, from 2.1.292).8f65d1b1463bc7e24fa0eeeadd290278162b1f26c56be6190a1db510de8d7ca0): lines 605-613 (the session's effort resolution order; per-model levels for Opus 5.5).CHANGELOG.md(local mirror; 2.1.296 at line 3): line 298 (2.1.292 added the Agent tool'seffortparameter) and line 657 (a plugin-defined agent spawned by name runs with its own definition's effort; the named-child rule for project agents rests on this PR's own probes, not on that line).claude --version2.1.296, measured as above.Evidence-class table
native_provenreaders/effort-probes-20261012/, SHA256SUMS)local_integrationtests.test_install_claude_profile.ShippedAgentEffortTestson main's agents:FAILED (failures=7);node test-envelope.mjson main's agents: 7 failureslocal_integrationnode test-envelope.mjs: 254 passed, 0 failed;node test-contract-mutations.mjs: 76 passed, 0 failedlocal_integrationpython3 scripts/validate.pyandevidence_manifest.py --check(below)Local commands run
Decision record
docs/decisions/2026-10-12-model-effort-routing.md(supersedesdocs/decisions/2026-09-23-max-effort-default.mdfor effort): the table, the probe evidence and the upstream lines, the alternatives (a per-launch effort only; the launcher flag only; Haiku for the scout) and the reopen rule.Host evidence
Not applicable: no receipt changes.
Checklist
version comment (no floating tags). (none changed)
permissions: {}and grant each jobonly what it needs (
contents: read, or an explicitly justified addition). (none changed)added without a documented owner.
moved or overwritten).
🤖 Generated with Claude Code