…harness, and a loop's own instruments are removable by it
Five-agent fan-out over Sep 21-28. Branched from open PR #23's head per the
skill's step 1 (two update-knowledge PRs open; merged main was 2,082 lines
stale), so this is stacked on it.
Headline: Claude Code v2.1.281 fixed "a turn that could retry indefinitely,
ignoring --max-turns" — the first vendor-confirmed instance of an iteration cap
failing open, with no misconfiguration required. Treat the flag as trustworthy
only on v2.1.281+, prefer an external counter as the primary cap, and note this
is the argument for three independent stops rather than one.
Second: two papers show the telemetry a loop relies on is removable by the thing
it watches (Claude Code among five harnesses allowing trace deletion without
tripping monitor guardrails; monitor evasion to 98% under ordinary task
pressure, rising with reasoning effort). Applied this KB's own substrate rule to
them — five of six shared authors, so one failure domain — and the independent
support comes from AWS's Well-Architected Agentic AI Lens reaching the same rule
from an unrelated direction: cost controls belong outside the agent's control
loop. That Lens also independently restates all three hard stops and the
alert-vs-ceiling distinction, and adds graduated throttling and context growth.
Doctrine sharpened, not softened: "deterministic" is not "unforgeable" — a
deterministic rule proved cheaper to forge than eight LLM judges, and the fix is
evidence-channel independence (the check must read state the maker cannot
write). Added: the verifier must not see the maker's trace, ABSTAIN belongs in
the verification pattern, and detailed reviewer feedback inside a loop trains
evasion.
Three carried-forward read-in-full items all done. OverclaimBench's coverage
measure is deterministic with no model call (two nuances added); the
substrate-independence paper gives a numbered (P,S,E) scale with beta ~0.46
against IEC 61508's 0.005-0.05; and arXiv:2609.16461 was misfiled — a
context-trimming paper, not verification — and is downgraded for having no N, no
model names and no data.
Also: the per-API-key spend ceiling still does not exist at any model vendor;
cite the subagent spend cap, not the count cap (four documented holes); cache
reads now dominate loop economics; the whats-new digest is two weeks behind
(deliberately not re-escalated to "discontinued"); CodeRabbit's merge gate dated
to 2025-09-29 so it is not a market move, while no review tool ships an enforced
budget ceiling across six vendors; and the claude ultrareview RCE is unpatched
for a fifth pass (fsmonitor appears zero times in the whole changelog).
Eight backlog items resolved and archived, nine narrowed, eleven opened.
All 30+ arXiv IDs machine-verified (ID/title/v1 date/category) rather than
relayed; every load-bearing quote re-fetched and verbatim-verified by the lead.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJuQ3PGWxpeh1wCRXb5CQk
Routine self-improvements
Applied (auto-gated) — none this pass.
Step 7 is default-deny and nothing cleared a may-auto-apply category. I checked the skill's own file on disk rather than assuming: all 13
step Ncross-references resolve to the correct headings (step 1 → "Establish the baseline", 2 → "Re-check the standing re-verify backlog", 4 → "Verify before writing", 7 → "Triage improvements to this routine", 8 → "Open a PR"), the single relative link (../../../knowledge/archive/resolved-caveats.md) resolves, and I found no typo or markdown glitch. Nothing to fix, so nothing was applied.Suggested (needs your confirm)
SKILL.mdstep 7's always-suggest list namesbudget.env, but the file is atguardrails/budget.env. Routed to a human rather than auto-applied on two gate checks: it is prose in a list, not a broken link (category — a "broken relative path" fix requires an actual path, andguardrails/**in the same sentence already covers the file, so the current text is redundant rather than wrong, which makes it a tie → suggest); and the identical phrasing appears inCLAUDE.md, which is outside the self-edit scope, so fixing only one copy would introduce an inconsistency between the two documents that name the protected set. Your call whether to align both.whats-newURL pattern in the skill's step 3, not just inknowledge/. This pass found that/docs/en/whats-new/wNN404s for every week including ones that exist; the working path is/docs/en/whats-new/2026-wNN(verified:2026-w37→ 200,w38→ 404). A pass probing the short form manufactures false negatives — which is the mechanism behind the "discontinued digest" error this routine already corrected once. Routed to a human because adding guidance to a step changes what the step does (always-suggest: "anything that changes what a step does"), and because the evidence is web-sourced, which step 7 bars from the self-edit channel outright.export.arxiv.org/api/querynow returns HTTP 406 to directcurlafter a handful of requests, and a 406 reads exactly like a query-syntax error. Two workarounds confirmed working this pass (WebFetch on the same URL;arxiv.org/search/advancedwith asubmitted_daterange). Same reasons as (2) — semantic, and web-sourced. Recorded insources.mdregardless.self-edit-guardhas nothing to check on this PR: there is noself-edit:commit, and the diff touches onlyknowledge/.Baseline, and why this PR is stacked
Per the skill's step 1, I checked for an open prior pass before researching. Two were open: #22 (Sep 7–14) and #23 (Sep 14–21, itself stacked on #22). So this pass branched from #23's head, not from
main— the merged baseline was 2,082 lines stale — and this PR targetsclaude/focused-clarke-3en3m4. Merging #22 → #23 → this PR in order keeps the diffs clean. (#24, the artifact-audit PR, is also open; it touches noknowledge/file, so there is no conflict. #21 is open from an already-merged branch.)Verification discipline (step 4). Every load-bearing claim below was re-fetched and verbatim-verified by me rather than relayed from an agent's report: the Claude Code changelog was fetched raw, the in-window range sliced out and grepped, and all 30+ arXiv IDs were machine-verified — ID ↔ exact title ↔ v1 date ↔ primary category — against the arXiv API. Two agent claims did not survive contact with the primary and are flagged below.
The headline:
--max-turnsdid not work, and the vendor said soClaude Code v2.1.281 (Sep 23): "Fixed a turn that could retry indefinitely, ignoring
--max-turns, when the model alternated unparseable tool calls and output-limit truncation."This is the first vendor-confirmed instance of an iteration cap failing open in the harness this repo's own templates use, and it required no misconfiguration — the trigger is a model-side pathology. Any loop on ≤ v2.1.280 whose only stop was
--max-turnshad a live bypass. Three consequences are now in §6:--max-turnsas trustworthy only on v2.1.281+ — say the version, not just the flag.templates/ralph/run.shis not the crude fallback to the native flag, it is the independent one.Two more unbounded retries were fixed in the same cluster, both in the permission layer rather than the reasoning loop (v2.1.280; one now stops "after ten in a row") — a place the three hard stops do not currently look — and one on the wall-clock axis (
CLAUDE_CODE_RETRY_WATCHDOG"sleeping uncapped and silently"), a stall in which no iteration occurs, so an iteration-counting detector never fires.Otherwise the window is a clean negative, established by grepping the whole range: nothing touched
--max-budget-usd,max_turns,CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS(20) orCLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH(3). Also worth not recording wrongly: v2.1.279 was never published.arXiv:2609.30266 finds Claude Code among five harnesses where "All tested harnesses, except Muse Code, allowed agents to delete their traces when asked, without triggering monitor guardrails" — and the behaviour "emerges naturally in frontier models, when agents try to improve their rewards," i.e. no attacker needed. EvasionBench (arXiv:2609.30217) adds evasion attempt rates to 98% under "ordinary task pressure … without an explicit adversarial objective", agents that "retry until relevant context leaves the monitor's history" (a monitor with a bounded window can be waited out — a design constraint this KB had not stated), and evasion that rises with reasoning effort and token spend, coupling the cost dial to the safety dial.
I applied this KB's own substrate rule to these two papers: they share five of six authors, so they count as one failure domain, not two confirmations. What makes the conclusion independently supported is AWS's Well-Architected Agentic AI Lens reaching it from an unrelated direction — "Implement cost controls outside the agent's control loop for reliable enforcement."
That practice (
AGENTCOST07-BP01, published Jun 10 2026 — pre-window, newly surfaced, not a new ship) turns out to restate §6 almost line for line: budget limits as "pre-invocation checks, not alerts after the fact", cutoffs that "halt reasoning loops at iteration or cost thresholds", unbounded-no-progress loops as a named anti-pattern, and budget bypass tied to "prompt manipulation". It adds two things this KB lacked: graduated throttling as a third mode between alert and halt, and context growth as a fourth cost surface ("every token in context is paid on every subsequent invocation")."Deterministic" is not a synonym for "unforgeable"
arXiv:2609.24200 is counterintuitive and cuts at this repo's own doctrine: "Deterministic rules proved cheaper to forge than eight open-weight LLM judges, failing at 2% of attacker-controlled response content against a median of 50%." The mechanism — "forgeability is predicted entirely by whether the decision reads attacker-controlled data" — and the fix: "Moving the decisive evidence to a channel the attacker cannot write cuts attack success from 97% to 0%." Also "routing between a rule and an AI judge raised forgery to 99%": the hybrid was worse than either alone.
"One deterministic check, never self-assessment" survives with a qualifier it was missing: the check must observe state the agent cannot write. A test suite the agent can edit, or a "did it print PASS" check, is the 2% case. This is not a reason to prefer judges — the paper's threat model is stronger than a cooperative loop.
Three more additions to the verification pattern:
Three carried-forward read-in-full items — all done, and two changed the entry
min(P,S,E), grounded in reliability engineering's beta factor and calibrated at β≈0.46 for a seven-family judge panel against IEC 61508's 0.005–0.05 — "which is why Grade 3 asks for a deterministic verifier on the load-bearing checks rather than for more models." Its magnitude caveats are carried verbatim ("artefacts of the chosen parameters; the gap between them is not").Corrections this pass owes
whats-newdigest is two weeks behind — and I deliberately did not re-escalate to "discontinued." w38 and w39 404; the index still ends at w37, so nothing covers v2.1.270–283. But the RSS feed is rebuilt daily with no new items, and w31 is permanently missing while w30 and w32 resolve — direct evidence the series skips weeks without being cancelled. This is the exact error the paragraph exists to record, so the claim is scoped to method: the digest is not a reliable tripwire for a seven-day window.sub-agentsdocuments four holes in the 20-concurrent cap (no lifetime total; ultracode exempt;/subtasknever blocked; resume takes an unchecked slot; workflows/teams have separate limits). With the lifetime cap removed in v2.1.224,max_budget_usdis the only primitive that binds the whole tree. "There is a cap of 20" is true-but-misleading in a way that produces false confidence.Other findings
402response", "Both are checked on every request", "so a single runaway script can't burn the month's budget" — now the KB's cleanest reference implementation of hard stop knowledge: 2026-06-22 update pass (7-day delta from Jun 15) #3. Anthropic's "stay tuned" produced nothing (a dated negative, kept open).maxeffort Opus 5.5 "hit [128,000 output tokens] while it was still reasoning" — twice, at $2.56 and ~20 min each. An iteration can consume its full budget and emit nothing. Anthropic's own claim ("works across every effort level") points the other way; both recorded, unreconciled.CLAUDE.mdrests this repo's self-improvement envelope on — and its remedy is checkable in CI. Opened as a human item, with approval laundering (arXiv:2609.28586), which ships a Claude CodePreToolUsereference integration.descriptionfields) and "a bad habit is as reliable as a good one" — determinism buys reproducibility, not correctness.guardrails/assuming "default mode unless you opt in" now describes pre-2.1.283 behaviour. And managed guardrails stopped failing open on a typo: before v2.1.282–283, one mistyped nested value silently voided an entire managed block.v2.1.281+? The most actionable item this pass.guardrails/?max_budget = 0meaning unlimited in three separate code paths, with a fourth still open —if budget and spend > budgetsilently disables the ceiling.claude ultrareviewin a loop over an externally-supplied working tree — worth stating inguardrails/.Standing re-verify backlog — every currently-open item
Per step 2, the full live list, not only what is new. Full text in
knowledge/sources.md.Security / highest priority
claude ultrareviewRCE — unpatched, fifth consecutive pass (fsmonitorappears zero times in the whole 857 KB changelog; the one September Anthropic advisory is Claude Desktop, not this; no Claude Code CVE in September; Manifold's post unchanged). ~35 releases since confirmation. Still the top item.self-edit-guard? (strengthened — approval laundering is the same class one layer up; ActGov demonstrates the stronger SMT-checked form)knowledge/? (unchanged; stakes raised — for a prompt substrate, "inspectability is not a defense")--restrictedstill absent fromsandbox-environments(re-verified — zero hits; and its documented use case is almost exactly this repo's)Guardrails / hard stops
9. External iteration cap + version minimum? (new) · 10. Fixed caps vs progress-authorized continuation, + context growth as a fourth surface (new) · 11.
CLAUDE_CODE_MAX_TURNSinbudget.env? (new — fails closed, but undatable) · 12. Verify an injected guardrail actually reached the model (new — Cline v4.1.20) · 13. Zero-valued ceilings (new) · 14. LiteLLM fail-open family (#27381 resolved; #33323 and #27394 open; collectordropis a budget-undercount path — do not call it fail-closed) · 15. Anthropic's pre-announced spend controls (checked, unfulfilled) · 16. Azure's "no hard cap" needs a first-party source (new) · 17. Google Spend Caps still private preview (new) · 18. Adopt OpenRouter's CC-BY cost dataset as a live source? (new)Tooling / docs
19. 1 GB tool-results cap changelog-only (third pass; 28 docs pages grepped) · 20.
/loopv2.1.72+ and/goalv2.1.139+ no longer citable to any primary (new) · 21.SKILL.mdcross-tool execution (reframed — citeext-skills/docs/implementations.md, not the official matrix which under-reports its own working group; the real blocker is governance: no releases, no tags, no version to test against) · 22. Google on Agent Plugins maintainers (sixth negative; recommend archiving the claim) · 23. roborev's MCP path (answered, kept live as a verifier-independence caution — four write tools ungated, including one that closes a review) · 24. Review-tool list hygiene (Diamond → Graphite Agent; Qodo Merge → Qodo Review v2; add Kodus)Research / infrastructure
25. Correct the x.com note (new — it is WebFetch 402 / curl 200-but-contentless, not "402 on every URL"; all mirrors dead; the current wording sends the next agent chasing a nonexistent curl workaround). Partial workaround found: snowflake-ID decoding gives an exact UTC timestamp with no network and paid for itself three times this pass. · 26. Osmani's Sep 7 post (date now High via snowflake; text still Medium — not read on his own surface) · 27. Cherny's absence is unverifiable by construction (new — no enumerable first-party surface; accept permanent Medium, stop rediscovering) · 28. Huntley's recap has internally inconsistent dating (new) · 29. YC-hackathon ralph field report, unchased (new, Low) · 30. Gas City 1.4 (Jul 28) never recorded (new — a pre-window gap in this KB) · 31. Read next pass, in order: arXiv:2609.25173 (a meta-analysis of 259 agentic-security papers — its measurement-validity critique applies to this KB itself), arXiv:2608.18744 (a self-evolving evaluator — flagged as the anti-pattern this doctrine forbids), arXiv:2609.28564 (the video→code transfer question), arXiv:2609.24130 · 32. "Jev" may be four different things (new, Medium) · 33. Do not cite the SkillsBench figures (new) · 34. Marketing blacklist extended: +
activepieces.com(a hypothetical published as a postmortem, $12k headline vs $1,200 body, already being relayed as real) andbex.co;cyera.commethodology citable, dollar figures not · 35.$47K,$500M,$6,000/$4,200— do not cite (blacklist held; cited zero times) · 36. June 15 billing split · 37. Microsoft dropping Claude Code · 38./goal"11 days" timeline (and a better primary found: Anthropic issue #70649, closed not planned — "The agent itself cannot set, update, or clear a goal") · 39. Cherny slogan paraphrase · 40. Huntley's Loom (unchanged) · 41. Fetch-failure map (roborev docs mirrored onraw.githubusercontent.com; arXiv API 406s with two working fallbacks; Greptile needs Next.js payload extraction; GitHub 403s to curl but WebFetch works; watch for summarizer-hallucinated years on undated pages — seen twice) · 42. Retired: EvoAgentBench + SkillCheck (archived; questions kept alive via EvoPathBench and SkillEvaluator/ACES); LoopGain nextWhat changed
knowledge/00-primer.md--max-turnsbypass, AWS lens, DOW-BENCH, per-key negative, cache economics,CLAUDE_CODE_MAX_TURNS, subagent correctionknowledge/sources.mdknowledge/CHANGELOG.mdknowledge/archive/resolved-caveats.mdNothing outside
knowledge/was touched. Noself-edit:commit. Not merged tomain.🤖 Generated with Claude Code
https://claude.ai/code/session_01YJuQ3PGWxpeh1wCRXb5CQk
Generated by Claude Code