Skip to content

Launcher: interactive terminal launches start at effort max (--effort max only when nothing chose an effort); receipt and decision record - #483

Merged
seathatflowsinourveins merged 5 commits into
mainfrom
claude/max-default-effort-20260929
Sep 29, 2026
Merged

seathatflowsinourveins merged 5 commits into
mainfrom
claude/max-default-effort-20260929

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes, in one or two sentences: the claude launcher that install_native writes (both bootstrap scripts, byte-identical) now starts an interactive terminal launch at effort max by adding --effort max only when nothing else chose an effort (terminal on stdin and stdout, no -p/--print or --effort, CLAUDE_CODE_EFFORT_LEVEL unset, client 2.1.284 or newer), with its tests, docs, the decision record and a native receipt. The same launcher was applied to this host by hand with a backup and a read-back.
  • Base commit: ba31dcd0 (main when rebased on 2026-09-29; the manifest commit was redone on main's copy; Skills path parity: install_skills, skills_status and skill_usage join global paths as skills 1.7.0 does #482 landed afterwards and GitHub reports the merge as clean)
  • Lane: lane:foundation
  • Owned paths touched: adoption/bootstrap-linux.sh, adoption/bootstrap-macos.sh, adoption/bootstrap.md, adoption/platforms/macos-arm64.md, tests/test_adoption_bootstrap.py, docs/decisions/2026-09-29-max-default-effort.md, evidence/receipts/claude-max-default-effort-20260929.json, and the last commit's manifests/evidence.json. Not touched: AGENTS.md, the portable and host CLAUDE.md, the recipes, the settings files and the effort guard (the session that owns the Sonnet 5.5 / Opus 5.5 dispatch text, Sonnet 5.5 and Opus 5.5 dispatch: fan-out units on Sonnet 5.5, judgment on Opus 5.5, effort and default child model saved in settings (2.1.284 probes) #479, amends those in one lane:shared follow-up that cites this record; the record says how the guard treats a session the launcher starts at max).

SOTA sources

  • Claude Code 2.1.284, the latest release (anthropics/claude-code v2.1.284, 2026-09-28; main at dec92bc8 when read on 2026-09-29): CHANGELOG 2.1.284 ("Changed Ultracode into its own toggle in /effort ... it no longer forces xhigh effort and stays on at any effort level"); the docs pages settings reference, ultracode, model configuration, Adjust effort level (max is not accepted as a saved level; applies to the current session only) and environment variables, CLAUDE_CODE_EFFORT_LEVEL (takes precedence over --effort, /effort and the saved levels), fetched 2026-09-29; the installed 2.1.284 binary's settings schema and Ultracode gate, read with bounded windows (receipt binary_schema).
  • Effort guidance and measurements: Anthropic's effort page (Sonnet 5.5 and Opus 5.5 sections), the Claude Sonnet 5.5 and Claude Opus 5.5 system cards (PDF sha256 89cfd6a6... and 7311c9c6..., sections 8.4, 8.5, 6.5.1), Cognition's FrontierCode v1.1 data file, the Artificial Analysis Terminal-Bench 4.0 page and Cursor's CursorBench page, all read 2026-09-29 and re-checked by an independent verifier (30 of 40 claims confirmed, 10 corrected as written in the record), then fact-checked once more by a read-only GPT-6 run (nine wording corrections, each re-fetched from Cognition's data.json, Anthropic's launch page footnote 2 and Zapier's leaderboard 1.0.6, all applied).
  • The macOS pty behaviour behind the test-helper fix: apple-oss-distributions/xnu bsd/kern/tty_dev.c (ptsclose, last commit f6217f89) calls ttyclose in bsd/kern/tty.c (last commit 8d741a5d), whose ttyflush(tp, FREAD | FWRITE) empties the terminal's queues at the last slave close; read 2026-09-29.
  • Prior art for a flag-adding wrapper: Ramsbaby/jarvis infra/bin/claude-xhigh.sh (blob 66e75106, repository pushed 2026-09-28, not archived).
  • The generator this extends: this repository's own install_native (adoption/bootstrap-linux.sh, identical to the macOS copy, enforced by test_both_scripts_share_one_install_native).

Evidence-class table

Claim Evidence class Command / receipt
Interactive Sonnet 5.5 session launched through a login shell with the installed launcher ran at max; after /effort xhigh the next message ran at xhigh; an explicit --effort xhigh launch and a claude -p run inside a terminal ran at xhigh (each read from the client's own transcript) native_proven receipt claude-max-default-effort-20260929, interactive_after_host_replacement (also run first with the generated launcher on PATH)
Seventeen headless probes: saved xhigh baselines, --effort max, children (stage with no effort, stage low, unnamed subagent, definition medium), --settings env layer showing the variable route flattens child efforts, ultracode:false, Haiku native_proven (one host, one release) receipt headless_probes; re-derived from the raw transcripts by an independent verifier: 17 of 17 match
The 2.1.284 binary accepts only low, medium, high, xhigh for effortLevel and modelSettings.<model>.effortLevel, and its Ultracode gate has no effort term source_review receipt binary_schema
The launcher adds the flag only in the intended cases, on both platforms local_integration 27-case table on real pseudo-terminals, nine broken launchers the table must reject: python3 -m unittest tests.test_adoption_bootstrap.InteractiveEffortLauncherTests. The first CI run failed validate-macos on these tests (empty capture: the helper closed its slave descriptor before reading, and macOS discards unread terminal output at the last slave close); the helper now holds the slave open and reads while the launcher runs. Linux passes locally; the macOS result is this PR's next validate-macos run
Vendor and third-party max-against-xhigh measurements source_review decision record, section "What the vendor and third-party measurements say"

Local commands run

$ TMPDIR=/var/tmp PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_adoption_bootstrap tests.test_adoption_bootstrap_macos tests.test_adoption_docs_consistency tests.test_adoption_contract
Ran 290 tests in 74.681s
OK (skipped=33)
$ python3 scripts/validate.py
{"components": 69, "hashed_files": 7993, "profiles": 4, "receipts": 167, "status": "passed"}

Decision record

docs/decisions/2026-09-29-max-default-effort.md: the selection, six alternatives with why each was rejected, coverage limits, overturn conditions and limitations. It says, plainly, that the default rests on the user's requirement and not on a measured gain on this repository's work: for Sonnet 5.5 the direction of the effect differs between Terminal-Bench in --bare mode (max wins) and FrontierCode in the full client (max loses at about 12.6 times the tokens on Main; these results do not isolate the effect of skills or subagents), and for Opus 5.5 the gains vary by benchmark and come at higher cost, with their value for this repository unmeasured. claude --effort xhigh is the one-word opt-out.

Cross-family reviews: (1) one read-only GPT-6 round on the launcher (gpt-6-astra, effort max, live search), five findings, all handled in one repair round (short-flag clusters, --, a client-version floor, a leaking pty helper, a lossy argument recorder); the reviewer's suggestion to parse value-taking options was not adopted (the launcher cannot know the client's option table), and the limit is documented and tested in its safe direction. (2) A second read-only GPT-6 run fact-checked the record's vendor section: nine wording corrections, all applied after re-fetching the figures; one suggestion (naming Cognition's tokens field as output tokens) could not be confirmed from the fetched sources and was not adopted.

Host evidence

Not applicable: no file under evidence/hosts/ changes. The host launcher was replaced by hand (announced to the live sessions first): before 165 bytes, after 1,810 bytes, hashes in the receipt.

Checklist

  • New/changed GitHub Actions are pinned to a full commit SHA with a version comment (no floating tags): no workflow changes.
  • New/changed workflows declare top-level permissions: contents: read: no workflow changes.
  • No secrets are printed, logged or committed; no new required secret was added without a documented owner.
  • No new paid hosting, subscription or billing surface was introduced.
  • Peer-owned untracked files and worktrees were preserved (not deleted, moved or overwritten).

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 29, 2026
Scout and others added 5 commits September 28, 2026 22:38
… max only when nothing chose an effort)

Claude Code cannot save max (the 2.1.284 settings schema takes low, medium, high, xhigh for
effortLevel and modelSettings) and CLAUDE_CODE_EFFORT_LEVEL would override every --effort,
/effort and child effort, so the documented --effort flag is added by the launcher that
install_native writes, in both bootstrap scripts (identical copies). It adds --effort max only
when stdin and stdout are a terminal, no -p/--print (also as a short-flag cluster such as -pc),
no --effort, CLAUDE_CODE_EFFORT_LEVEL unset, nothing after a "--", and the client reports
2.1.284 or newer (2.1.284 keeps Ultracode on at any effort level; on 2.1.281 a max session turned
orchestration off). Another command name gets the plain launcher.

Tests (tests/test_adoption_bootstrap.py): InteractiveEffortLauncherTests runs the generated
launcher on real pseudo-terminals against a stub client that reports a version and records its
exact arguments as JSON: a 27-case table (terminal, -p, --print, -pc, -cp, --, empty and
multi-line arguments, explicit --effort, the effort variable, no terminal, pipes, clients from
2.1.281 to 3.0.1, unreadable version) and nine broken launchers that the table must reject.
The pty helper kills and reaps a timed-out child and closes both descriptors on every path.

Cross-family review (one GPT-6 read-only round) found five issues, all handled in one repair
round: clusters, "--" and operands, the version floor, the leaking helper and a lossy recorder.
Decision record: docs/decisions/2026-09-29-max-default-effort.md.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…evidence, reviews and vendor sections

The native receipt (kind native_cli_e2e, component claude-code) built by a script that asserts every
row against the client's own transcripts before writing: seventeen headless probes (saved xhigh
baselines, --effort max, children, the --settings env layer, ultracode false, Haiku), four interactive
terminal cases through a login shell on the installed launcher (max; xhigh after /effort xhigh;
explicit --effort xhigh; claude -p in a terminal), the 2.1.284 binary's settings-schema windows and
Ultracode gate, the repository tests re-run, and the host launcher's before/after hashes. An
independent verifier re-derived the headless rows from the raw transcripts (17 of 17).

The decision record gains the verified vendor and third-party max-against-xhigh measurements
(30 of 40 claims confirmed, 10 corrected, none unsupported), the settings audit (31 of 36 rows
confirmed, 5 corrected; nothing else to change), the one prior-art wrapper found, the review round
and the corrected description of which interactive runs the receipt holds.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…ion; relate the record to #479 and the effort guard

A second read-only GPT-6 run with live search checked the vendor section against its sources and returned nine wording
corrections (five low, four medium). The coordinator re-fetched Cognition's data.json, Anthropic's Sonnet 5.5 launch page (footnote 2)
and Zapier's leaderboard (1.0.6) and applied all nine: the guidance sentence is scoped to the cited pages, the xhigh token saving
carries its similar-performance context, the FrontierCode token, cost and time figures are labelled Main with the Extended figures
beside them, Anthropic's two-case footnote is stated as two cases, Extended is an effective tie (63.58% against 63.53%), the Zapier
figures carry their default-fallbacks label (42.47% against 35.77%), --bare skips automatic discovery, the two Claude Code results
point in different directions without isolating skills or subagents, and the Opus 5.5 gain is stated as varying by benchmark.
One suggestion (Cognition's tokens field as output tokens) could not be confirmed from the fetched sources and was not adopted.

The header now names the rebase base (ba31dcd), quotes #479's addendum ("not adopted ... left to the user") as the trigger this
record acts on, and describes how the effort guard treats a session that the launcher starts at max (SessionEnd returns at
xhigh or above; the SessionStart warning is settings-derived and advisory).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…minal is read (macOS discards unread output at the last slave close)

On the macos-15 runner (run 36512404577, job validate-macos) the three InteractiveEffortLauncherTests cases failed with an empty
capture: the helper closed its copy of the slave right after starting the launcher and read the master only after the child had exited.
XNU's ptsclose calls ttyclose, whose ttyflush(tp, FREAD | FWRITE) empties both queues at the last close of the slave, so the stub's
two lines were gone before the read; Linux keeps them, which is why the same tests passed there.

The helper now holds the slave open, reads the master while the launcher runs (it stops when the stub's two lines are in, or when
the child has exited and nothing more arrives), captures stderr, and puts it in the failure message. The Linux run of the class
passes (3 tests); the macOS result is the next CI run.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…evidence.json (hot-file commit, last)

Receipt entry claude-max-default-effort-20260929 (native_cli_e2e, claude-code) and the hashes of the six changed or new files, on
top of main's manifest at ba31dcd (docs/lanes.md protocol: main's copy, register each file, component_matrix and
new_host_grand_list --write; validate.py passes: 69 components, 7993 hashed files, 167 receipts).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/max-default-effort-20260929 branch from 1da14a5 to 3800f80 Compare September 29, 2026 02:47
@seathatflowsinourveins
seathatflowsinourveins merged commit a452a0a into main Sep 29, 2026
26 of 30 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/max-default-effort-20260929 branch September 29, 2026 03:40
seathatflowsinourveins added a commit that referenced this pull request Sep 29, 2026
…llback; AGENTS.md line 35 and the instruction text state the 2.1.284 rule (#487)

* Coordinator effort: max through the ecosystem launcher, saved xhigh as the fallback

States the rule of the max-default record (session native-agent-stack-03, #483) where the
coordinator's effort is described. A terminal session started through the ecosystem `claude`
launcher runs at max (`claude --effort xhigh` opts out); a launch that skips it (IDE, desktop,
web) uses the saved per-model xhigh, because a saved max is not accepted; headless -p runs pass
--effort per call site; CLAUDE_CODE_EFFORT_LEVEL stays unset at every scope. Ultracode stays on
at any effort on 2.1.284, so the 2.1.281 reason for keeping the coordinator at xhigh is history.
The default rests on the user's requirement, not on a measured gain here (Sonnet 5.5 lost to
xhigh on FrontierCode in the full client at about 12.6 times the tokens, and Opus 5.5 gained
little). Updated: the portable CLAUDE.md, the workflows README and its coordinator row (with the
two contract tests that pin that row), both recipes, the dispatch record's coordinator row, effort
paragraph and a dated addendum, the 2026-09-23 addendum (its overturn condition is acted on) and
the anti-pattern row that pointed at AGENTS.md. `--effort max` with ultracode false ran at max
with the reminder absent (the other receipt's cases C3 and C4).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Receipt: an explicit --effort max defeats a committed project effortLevel of xhigh

Three headless probes on Claude Code 2.1.284 in a scratch directory whose only project file holds
the shape of this repository's committed settings (effortLevel xhigh): --effort max ran Sonnet 5.5
and Opus 5.5 at max with the Ultracode reminder present, and the same file without the flag ran
Sonnet 5.5 at xhigh. This is the case the ecosystem launcher relies on inside this repository
(the launcher's own receipt ran in a scratch directory with no project file).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Follow-up repair: an explicit session effort reaches a child that names none

The cross-family check of this follow-up found the effort rule for a child that names no effort
too narrow: the max-default receipt (cases F5 to F7) shows that a headless session given an
explicit `--effort max` passes it to an unnamed subagent and to a Workflow stage that names no
effort, while a project agent whose frontmatter says medium stays at medium. The rule is now one
sentence in every copy: a child that names no effort runs at its frontmatter effort, else at the
effort the session was given explicitly (`--effort`, `/effort` or the model picker), else at its
model's saved level or default. The workflows README, the Ultracode recipe, two test comments and
the AGENTS.md line state it; the dispatch record's addendum and the 2026-09-23 addendum record
that the receipt answers the headless question their Measured sections left open.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* AGENTS.md: state the 2.1.284 coordinator-effort rule; hot files: evidence registration

AGENTS.md line 35 (a shared hot file) drops the three clauses that Claude Code 2.1.284 made false
(the coordinator "stays at xhigh under Ultracode", "because a max session turns its workflow
orchestration off", and "a stage without its own effort inherits the coordinator's xhigh") and
states the rule of the max-default record: terminal sessions started through the ecosystem
launcher run at max with saved xhigh as the fallback, Ultracode stays on at any effort, headless
runs pass --effort per call site, CLAUDE_CODE_EFFORT_LEVEL stays unset, a child that names no
effort runs at its frontmatter effort, else the effort the session was given explicitly, else its
model's saved level or default, and an unnamed model follows the definition, then
CLAUDE_CODE_SUBAGENT_MODEL, then the lead. Registers the new receipt and the hashes of the files
this branch changes in manifests/evidence.json, on main's current copy (last commit).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant