Repository navigation
Landscape sweep: Opus judgment workers without WebFetch (context-mode fetches, skills kept); repository check ignores Codex's empty .git mount targets - #398
Conversation
…oots The OmniRoute smoke (wf_6576675c-0d6) passed every harness check except one. Both GPT-6 workers reported skills_used: []. Each tried to load its pinned skills (search-first, iterative-retrieval, verification-before-completion, supply-chain-risk-auditor, fp-check) with context-mode's ctx_execute_file. context-mode 1.0.169 refuses paths outside its project directory, here the runner's <work-dir>/empty, unless a Read(...) allow rule in <project>/.claude/settings.json names them (build/security.js evaluateProjectContainment and readToolPermissionPatterns, issue #852). The native lane's GPT-6 had reported them used. build_args.py now writes <work-dir>/empty/.claude/settings.json for the gateway lane. It allows Read on Codex's user skill roots only, $CODEX_HOME/skills and $HOME/.agents/skills (codex-rs/ext/skills/src/host_roots.rs at rust-v0.157.1), as absolute globs, since context-mode matches literally. staged.json records the roots symbolically. A native restage removes the file. Codex reads no .claude/ files, so no Codex project layer is added. The README records the rule and the 2026-09-27 web-search measurement: - /v1/alpha/search is 404 at a58000c7; - upstream PR #13788 answers from OmniRoute's search registry (duckduckgo-free when keyless), not OpenAI's hosted search. The stale note about the default worker profile goes, since #389 put it on main. The failing control: the new test errors against main's build_args.py (no settings file). Tests: tests.test_saturation_ledger + tests.test_landscape_sweep_harness, 167 run, OK (3 skipped). validate.py and build_ecosystem.py --check passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
… model shells The GPT-6 review of ec9f071 returned needs_changes with one medium finding. context-mode 1.0.169 matches an allow rule against the raw path as well as the resolved one (security.js evaluateFilePath), so the <root>/** rules also admitted <root>/../elsewhere, sibling paths under the root and outward symlinks. The claim of "there and nowhere else" did not hold, and the test only checked serialization. - The lane now gets one exact Read(...) rule per file under $HOME/.agents/skills. That is where install_skills.py puts the pinned skills; the lane's $CODEX_HOME/skills holds only Codex's .system cache. Symlinked directories are followed, each real directory is listed once, and a path containing * or ? is left out. context-mode escapes and anchors every other character, so an exact rule matches only its path. - staged.json records the symbolic root and the file count. - New behavioral test: test_context_mode_reads_only_the_listed_skill_files runs context-mode's own readToolPermissionPatterns and evaluateProjectContainment on the staged file (set CONTEXT_MODE_SECURITY_JS to an installed build/security.js). Listed files pass; a sibling, an outside file and two .. traversals do not. Its control shows a <root>/** rule admitting the traversal. The first revision fails it (sibling and traversal allowed). Also, a residual the gateway owner found while reviewing their Codex templates: Codex 0.157.1 applies its default *KEY*/*SECRET*/*TOKEN* excludes only when ignore_default_excludes is false, and that defaults to true (codex-rs/config/src/shell_environment_policy.rs:136). A real gateway key would therefore reach model-run commands. The lane config now sets [shell_environment_policy.filters] OMNIROUTE_API_KEY = "exclude" (codex-rs/protocol/src/config_types.rs:222-230). Live probe on a lane staged from this revision, with a synthetic non-placeholder key through the keyless gateway: - GPT-6's shell reported the variable absent; - ctx_execute_file read fp-check/SKILL.md; - ctx_execute_file refused ~/.agents/skills/../../code/.../README.md. Tests: 168 run, OK (3 skipped), with CONTEXT_MODE_SECURITY_JS set. validate.py and build_ecosystem.py --check passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…_execute's reach The GPT-6 re-check of 45a9d77 confirmed the exact rules reject traversal, sibling and outside paths. It admits listed files, references and symlinked skill directories. The key filter removes the variable from model commands while env_key still reaches the provider. One case stays open, and it is upstream matcher behavior. context-mode 1.0.169 turns backslashes into slashes before matching (security.js evaluateFilePath) but its executor opens the literal Linux name. A planted symlink named <home>/.agents\skills\demo\SKILL.md therefore passed and read an outside file. No rule can exclude it, since deny matching normalizes the same way. Per the bounded review loop this is recorded as a residual, not fixed: - no such file exists; - creating one takes write access that ctx_execute already has. The README and comments also state the wider fact the review surfaced: the #852 boundary limits ctx_execute_file only, while ctx_execute (left enabled by the stack-worker profile) runs code with the user's own file access outside Codex's read-only sandbox. Tests: 168 run, OK (3 skipped), with CONTEXT_MODE_SECURITY_JS set. validate.py and build_ecosystem.py --check passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…ll-roots-20260927
…heck ignores Codex's empty .git targets Smoke 2 (wf_e4dee61f-e66) passed every harness check. The token lane's per-agent tool count, which the user flagged, found two gaps: - All 15 Claude page fetches used WebFetch and none used context-mode's ctx_fetch_and_index, even with the token-lanes guidance injected. WebFetch hands the page to a smaller model and returns its answer, so a quoted command could be a paraphrase. - The facts refuter, a verification role, ran on Sonnet. The user's model rule reserves Sonnet for command wrappers and mechanical extraction. Changes: - New agent type adoption/agents/claude/landscape-sweep-worker.md: Opus, effort max, disallowedTools: WebFetch, and no tools list, so it inherits Skill and the ctx_* tools (disallowedTools and inheritance per code.claude.com/docs/en/sub-agents). stack-researcher also lacks WebFetch but has no Skill tool, so the templates' pinned skills would be lost. - sweep.js runs discover (both rounds), refute-facts, refute-fit and the critic as that type. refute-facts moves to Opus. The worker prompts say: find pages with WebSearch, fetch with ctx_fetch_and_index, read with ctx_search. None mentions WebFetch. The GPT-6 wrappers keep the default type and Sonnet: they only run commands and return the raw result. - convert.py's alias for refute-facts is now opus. - README: the model roles, the rationale, and the agent install prerequisite. The facts role is not moved to GPT-6: that changes a vote's family, which the survival rule and copy check key on, so it needs its own comparison first. Also a robustness fix found while testing. Codex's Linux sandbox creates empty .git/.agents/.codex mount targets under its writable roots, /tmp included, while a sandboxed command runs, and removes them afterwards (codex-rs/linux-sandbox/src/bwrap.rs at rust-v0.157.1, SyntheticMountTarget). Other sessions' workspace-write Codex jobs made /tmp/.git appear several times a minute, and inside_repository() then refused work directories under /tmp at random: the sweep's own, and the tests' temp directories. sweep_common.py and the standalone codex_job.py now take a repository marker to be a .git directory holding HEAD, or a non-empty .git file. The failing control: the new test fails against the old check (empty dir and empty file counted as repositories). tests/test_install_claude_profile.py counts eleven shipped agents. Tests: test_install_claude_profile, test_token_lanes_subagent_start, test_adoption_docs_consistency, test_verdict_lane_vendoring, test_saturation_ledger and test_landscape_sweep_harness give 279 run, OK (7 skipped), with CONTEXT_MODE_SECURITY_JS set. validate.py and build_ecosystem.py --check passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…gent-20260927 # Conflicts: # manifests/evidence.json
…ry; skills_used only where the schema has it The GPT-6 cross-family review of bf4c3ae returned needs_changes. - medium: git allows .git/HEAD to be a symlink to a branch with no commit yet (git v2.43.0 path.c validate_headref). A dangling HEAD fails is_file(), so both marker functions returned None for a real repository that the old check refused. They now also accept HEAD as a symlink. A new test case covers it; the first revision fails it, and git reports such a layout as inside a work tree. - low: the worker body told every role to report skills_used, but the critic's schema has no such field (additionalProperties false). The body now says to list skills only when the return schema has skills_used. Tests: 279 run, OK (7 skipped), with CONTEXT_MODE_SECURITY_JS set. validate.py and build_ecosystem.py --check passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
|
GPT-6 cross-family review of bf4c3ae (
The review also confirmed:
Tests at 8c03324: 279 run, OK (7 skipped). Smoke 3 ( 🤖 Generated with Claude Code |
|
Integration: smoke 3 passes, and the fetch-routing gap is closed.
Per-agent tool counts from the transcripts:
For comparison, smoke 2 (before this PR) had 15 WebFetch calls and 0
Attempt history:
🤖 Generated with Claude Code |
manifests/evidence.json follows the hot-file protocol: main's copy, with this branch's files re-registered. #402 made .claude/agents/ a byte-for-byte project-scope copy of adoption/agents/claude/ (test_project_scope_agents_are_ the_installed_definitions), so landscape-sweep-worker.md gets its project copy. It is force-added and not hash-listed, like the other ten. Tests: test_install_claude_profile, test_token_lanes_subagent_start, test_adoption_docs_consistency, test_verdict_lane_vendoring, test_saturation_ledger, test_landscape_sweep_harness: 287 run, OK (7 skipped). validate.py passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…_search at its default limit The token lane counted smoke 3's tool results (wf_c7bc3ee8-c16). Fetch routing was fixed by #398 (3 of 3 through ctx_fetch_and_index), but containment was not: 45 of 134 results were over 5 KB, carrying 79.6% of result bytes. ctx_execute had 27 of 52 over 5 KB and ctx_search 11 of 20. The likely causes are ctx_execute without `intent` and high ctx_search limits. The #381 targets are M3 at no more than 1 non-exception result over 5 KB per child with no more than 20% of bytes, and M5 at no more than 10% of ctx results over 5 KB. The fix uses context-mode's own contract. The ctx_execute and ctx_batch_execute `intent` parameter: "When provided and output is large (>5KB), indexes output into knowledge base and returns section titles + previews — not full content". ctx_search's default limit is 3. The worker body (adoption/agents/claude/landscape-sweep-worker.md and its byte-identical .claude/agents copy) now requires an intent on every ctx_execute or ctx_batch_execute call, ctx_search at its default limit with specific queries, and derived answers only. The token lane owns the host token-lanes block (the same rule) and the enforcement fallback: a PreToolUse refusal of ctx_execute without intent, used only if the next one-layer smoke shows prose alone does not move M3/M5. Tests: test_install_claude_profile + test_landscape_sweep_harness OK. validate.py passed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…_search at its default limit (#403) The token lane counted smoke 3's tool results (wf_c7bc3ee8-c16). Fetch routing was fixed by #398 (3 of 3 through ctx_fetch_and_index), but containment was not: 45 of 134 results were over 5 KB, carrying 79.6% of result bytes. ctx_execute had 27 of 52 over 5 KB and ctx_search 11 of 20. The likely causes are ctx_execute without `intent` and high ctx_search limits. The #381 targets are M3 at no more than 1 non-exception result over 5 KB per child with no more than 20% of bytes, and M5 at no more than 10% of ctx results over 5 KB. The fix uses context-mode's own contract. The ctx_execute and ctx_batch_execute `intent` parameter: "When provided and output is large (>5KB), indexes output into knowledge base and returns section titles + previews — not full content". ctx_search's default limit is 3. The worker body (adoption/agents/claude/landscape-sweep-worker.md and its byte-identical .claude/agents copy) now requires an intent on every ctx_execute or ctx_batch_execute call, ctx_search at its default limit with specific queries, and derived answers only. The token lane owns the host token-lanes block (the same rule) and the enforcement fallback: a PreToolUse refusal of ctx_execute without intent, used only if the next one-layer smoke shows prose alone does not move M3/M5. Tests: test_install_claude_profile + test_landscape_sweep_harness OK. validate.py passed. Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5 Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
…erturn variables Repair round for the verification-line addendum and the skills-trial carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6, R-F7, GAP-3, GAP-6, GAP-7). Skills-trial addendum: - The review no longer "replaces" the count-based prune rule. It adds a with/without comparison that varies the builder's preload for the skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and Codex enablement stays under that rule. A disagreement is written into the manifest update the trial window end already requires. - Other sources and role changes: the landscape-sweep templates name both skills from 1b0e459 (templates.json common; build_args.py L59 TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0 baseline counts (child-lane baseline README L128-130) match that list without proving cause; #398 (5483412) and #402 (d022295) change the sweep workers' type and model and the builder's model inside C1. - Boundaries: the installer writes no install record (shutil.copy2 at install_claude_profile.py L113, L143 keeps the source mtime), and #381 step 2 freezes hashes, not install times. Verification-line addendum: - The builder runs model: opus, which is Opus 5.5 on this host since September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice reaches it through the 5.5 guide's L9; before #402 it ran sonnet. - #381 records hashes, not an install time; a Supersedes note corrects the qmd addendum's L389 wording the same way. - Overturn names what each comparison varies: default-block line 13, a non-Opus child set, the builder line with the preload held on, or a prompting-guide reversal. - Line 13's quote, the local file:line policy, the re-read of every documentation quote at its cited line (2026-09-28 08:55Z), the installed SKILL.md hash check and the control's own returned lines. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…erturn variables Repair round for the verification-line addendum and the skills-trial carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6, R-F7, GAP-3, GAP-6, GAP-7). Skills-trial addendum: - The review no longer "replaces" the count-based prune rule. It adds a with/without comparison that varies the builder's preload for the skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and Codex enablement stays under that rule. A disagreement is written into the manifest update the trial window end already requires. - Other sources and role changes: the landscape-sweep templates name both skills from 1b0e459 (templates.json common; build_args.py L59 TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0 baseline counts (child-lane baseline README L128-130) match that list without proving cause; #398 (5483412) and #402 (d022295) change the sweep workers' type and model and the builder's model inside C1. - Boundaries: the installer writes no install record (shutil.copy2 at install_claude_profile.py L113, L143 keeps the source mtime), and #381 step 2 freezes hashes, not install times. Verification-line addendum: - The builder runs model: opus, which is Opus 5.5 on this host since September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice reaches it through the 5.5 guide's L9; before #402 it ran sonnet. - #381 records hashes, not an install time; a Supersedes note corrects the qmd addendum's L389 wording the same way. - Overturn names what each comparison varies: default-block line 13, a non-Opus child set, the builder line with the preload held on, or a prompting-guide reversal. - Line 13's quote, the local file:line policy, the re-read of every documentation quote at its cited line (2026-09-28 08:55Z), the installed SKILL.md hash check and the control's own returned lines. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…erturn variables Repair round for the verification-line addendum and the skills-trial carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6, R-F7, GAP-3, GAP-6, GAP-7). Skills-trial addendum: - The review no longer "replaces" the count-based prune rule. It adds a with/without comparison that varies the builder's preload for the skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and Codex enablement stays under that rule. A disagreement is written into the manifest update the trial window end already requires. - Other sources and role changes: the landscape-sweep templates name both skills from 1b0e459 (templates.json common; build_args.py L59 TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0 baseline counts (child-lane baseline README L128-130) match that list without proving cause; #398 (5483412) and #402 (d022295) change the sweep workers' type and model and the builder's model inside C1. - Boundaries: the installer writes no install record (shutil.copy2 at install_claude_profile.py L113, L143 keeps the source mtime), and #381 step 2 freezes hashes, not install times. Verification-line addendum: - The builder runs model: opus, which is Opus 5.5 on this host since September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice reaches it through the 5.5 guide's L9; before #402 it ran sonnet. - #381 records hashes, not an install time; a Supersedes note corrects the qmd addendum's L389 wording the same way. - Overturn names what each comparison varies: default-block line 13, a non-Opus child set, the builder line with the preload held on, or a prompting-guide reversal. - Line 13's quote, the local file:line policy, the re-read of every documentation quote at its cited line (2026-09-28 08:55Z), the installed SKILL.md hash check and the control's own returned lines. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…erturn variables Repair round for the verification-line addendum and the skills-trial carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6, R-F7, GAP-3, GAP-6, GAP-7). Skills-trial addendum: - The review no longer "replaces" the count-based prune rule. It adds a with/without comparison that varies the builder's preload for the skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and Codex enablement stays under that rule. A disagreement is written into the manifest update the trial window end already requires. - Other sources and role changes: the landscape-sweep templates name both skills from 1b0e459 (templates.json common; build_args.py L59 TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0 baseline counts (child-lane baseline README L128-130) match that list without proving cause; #398 (5483412) and #402 (d022295) change the sweep workers' type and model and the builder's model inside C1. - Boundaries: the installer writes no install record (shutil.copy2 at install_claude_profile.py L113, L143 keeps the source mtime), and #381 step 2 freezes hashes, not install times. Verification-line addendum: - The builder runs model: opus, which is Opus 5.5 on this host since September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice reaches it through the 5.5 guide's L9; before #402 it ran sonnet. - #381 records hashes, not an install time; a Supersedes note corrects the qmd addendum's L389 wording the same way. - Overturn names what each comparison varies: default-block line 13, a non-Opus child set, the builder line with the preload held on, or a prompting-guide reversal. - Line 13's quote, the local file:line policy, the re-read of every documentation quote at its cited line (2026-09-28 08:55Z), the installed SKILL.md hash check and the control's own returned lines. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…l line (AN-15, after #447) (#456) * Token-lanes carrier: evidence line replaces the verification-skill instruction Default block line 13 now asks for evidence (the command and what it returned, or the file:line read) and keeps the search-first sentence: 4,094 -> 4,088 bytes against the unchanged 4,100-byte bound (AN-15). The builder block drops its verification sentence (2,883 -> 2,747 bytes): isolated-builder.md:7-9 preloads the skill and :12 names it. Sources: code.claude.com/docs/en/best-practices.md L52 (show evidence); platform.claude.com prompting-claude-opus-5.md L61, L81 (remove explicit verification instructions), prompting-claude-opus-5-5.md L9 (carried forward), claude-prompting-best-practices.md L780 (Opus 5 exception). Handbook mirror: carrier line, its sources paragraph naming only search-first, and the builder table row and variant. Tests: the default key phrase becomes "Show evidence before a success claim", the builder drops the skill phrase, and no block may name the withdrawn skill. SHA256SUMS refreshed for both blocks. No installer run. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Decision records: verification-line addendum and skills-trial carrier conditions Token-lanes decision, addendum 2026-09-28: why the default carrier line now asks only for evidence (Opus 5 guide L61, L81; Opus 5.5 guide L9; prompting best practices L780; Claude Code best practices L52), why the builder line is removed on its own merits (isolated-builder.md L5, L7-9, L12; sub-agents reference L600), sizes, the failing-first control, the non-Opus boundary, alternatives, #381 freeze and overturn. Skills-trial record, addendum 2026-09-28: condition log C0-C3 (#378, 2026-10-25 review rule for verification-before-completion: a with/without comparison on frozen builder tasks through an upstream harness named with its pin (tokens, elapsed time, review-found defects). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Decision records: date the builder preload boundary; drop an unretained count Skills-trial condition log: isolated-builder's verification-before-completion preload and the body line that names it came from #376 (623d34f, 2026-09-27T03:38:47Z per TZ=UTC git log -S on adoption/agents/claude/isolated-builder.md), a boundary inside C0, not a constant across every condition. The one recorded install time is attributed as measured-gaps.md reports it (the coordinator's local measurement), without naming a host. Token-lanes addendum: the community alternative keeps superpowers as the verifiable example and drops a survey count that is not retained in the repository. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Token-lanes carrier: tag the evidence sentence's upstream item; narrow the no-verification claim Repair round for the verification-line change (review findings R-F2, R-F7). - token-lanes-block.md line 13 moves "(code.claude.com best practices)" to follow "the command and what it returned", the item Claude Code best practices L52 names (https://code.claude.com/docs/en/best-practices.md, re-read 2026-09-28). The file:line alternative is local policy, not in L52. Zero-byte reorder: the block stays 4,088 bytes and line 13 295. - SHA256SUMS lists the new block hash; `sha256sum -c SHA256SUMS` passes. - Handbook: the mirrored line follows, and the sources paragraph records the file:line alternative as local policy. It now says the carrier gives no instruction to verify finished work and names no verification skill, since the codebase-memory line still checks caller lists (handbook L264). - Test comment: WITHDRAWN_PHRASES is a literal skill-name check, not a check for every verification wording. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Decision records: keep the manifest prune rule, name confounds and overturn variables Repair round for the verification-line addendum and the skills-trial carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6, R-F7, GAP-3, GAP-6, GAP-7). Skills-trial addendum: - The review no longer "replaces" the count-based prune rule. It adds a with/without comparison that varies the builder's preload for the skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and Codex enablement stays under that rule. A disagreement is written into the manifest update the trial window end already requires. - Other sources and role changes: the landscape-sweep templates name both skills from 1b0e459 (templates.json common; build_args.py L59 TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0 baseline counts (child-lane baseline README L128-130) match that list without proving cause; #398 (5483412) and #402 (d022295) change the sweep workers' type and model and the builder's model inside C1. - Boundaries: the installer writes no install record (shutil.copy2 at install_claude_profile.py L113, L143 keeps the source mtime), and #381 step 2 freezes hashes, not install times. Verification-line addendum: - The builder runs model: opus, which is Opus 5.5 on this host since September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice reaches it through the 5.5 guide's L9; before #402 it ran sonnet. - #381 records hashes, not an install time; a Supersedes note corrects the qmd addendum's L389 wording the same way. - Overturn names what each comparison varies: default-block line 13, a non-Opus child set, the builder line with the preload held on, or a prompting-guide reversal. - Line 13's quote, the local file:line policy, the re-read of every documentation quote at its cited line (2026-09-28 08:55Z), the installed SKILL.md hash check and the control's own returned lines. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Token-lanes record: the no-command-output case needs neither Bash nor ctx_execute security-reviewer has no Bash but runs commands through Context Mode's ctx_execute (Codex review), so the rationale is qualified to children with no command runner. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Evidence manifest: re-register this change's files Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
What
Smoke 2 of the landscape sweep (
wf_e4dee61f-e66) passed every harness check. The token lane's per-agent tool count, which the user flagged, showed two practice gaps.ctx_fetch_and_index, even with the token-lanes guidance injected. WebFetch hands the page to a smaller model and returns its answer, so a quoted command could be a paraphrase.The fix:
adoption/agents/claude/landscape-sweep-worker.md: Opus, effort max,disallowedTools: WebFetch, with notoolslist. It inherits Skill and thectx_*tools (thedisallowedToolsfield and tool inheritance are per code.claude.com/docs/en/sub-agents).stack-researcheralso excludes WebFetch, but it has no Skill tool, so the templates' pinned skills would be lost.ctx_fetch_and_indexandctx_search, and no WebFetch.sweep.js:ctx_fetch_and_indexand read them withctx_search, and none mentions WebFetch;convert.py: the alias forrefute-factsis nowopus.Robustness fix, found while testing.
.git,.agentsand.codexmount targets under its writable roots,/tmpincluded, while a sandboxed command runs, and removes them afterwards (codex-rs/linux-sandbox/src/bwrap.rsat rust-v0.157.1,SyntheticMountTarget)./tmp/.gitappear several times a minute (observed directly), andinside_repository()then refused work directories under/tmpat random. That hit the sweep's own work directory and the tests' temp directories.sweep_common.pyand the standalonecodex_job.pynow take a repository marker to be a.gitdirectory holdingHEAD, or a non-empty.gitfile.Verification
test_install_claude_profile(eleven shipped agents),test_token_lanes_subagent_start,test_adoption_docs_consistency,test_verdict_lane_vendoring,test_saturation_ledgerandtest_landscape_sweep_harnessgive 279 run, OK (7 skipped), withCONTEXT_MODE_SECURITY_JSset. The suite also passed twice while/tmp/.gitwas flickering.validate.pyandbuild_ecosystem.py --checkpassed.wf_c7bc3ee8-c16, harness bf4c3ae, the type installed on this host) is running. The token lane will count per-agent tools on it: WebFetch should be 0 andctx_fetch_and_indexabove 0. The result and the GPT-6 review are posted here before merge.SOTA sources
Claude Code subagents: code.claude.com/docs/en/sub-agents. The agent type rests on four points there:
disallowedTools,modelandeffort;disallowedTools;~/.claude/agents/is watched for new files.The GPT-6 review confirmed with installed Claude Code 2.1.283 that the Workflow resolves
agentTypethrough the same registry and applies explicitmodel/effort.context-mode 1.0.169 (installed plugin):
ctx_fetch_and_indexandctx_search. These are the fetch-and-read tools the token practice routes pages through (docs/token-session-handbook.md, token-lanes block).Codex rust-v0.157.1:
codex-rs/linux-sandbox/src/bwrap.rs:SyntheticMountTarget, protected.git/.agents/.codexunder writable roots, mount construction at L1219-1235;codex-rs/linux-sandbox/src/linux_run_main.rsL1105-1123: removal after bwrap.git v2.43.0
path.cvalidate_headref(L667-684):HEADmay be a symlink to an unborn branch. It is the source for the repair round's marker rule.Model rule: the user's global CLAUDE.md, "Opus 5.5 at effort max for ... research, review, verification and synthesis; Sonnet or Haiku only for pure command wrappers, mechanical extraction and probes".
🤖 Generated with Claude Code
https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5