Repository navigation
OUTERLOOP_AUTHOR_EFFORT: set a Claude author's effort level - #598
Conversation
The author's effort level, read when each session starts. Judges, the steward and other backends ignore it; author_config_error refuses an unknown level at start, in the tick, and on each wake.
|
Thanks Chris, this looks good. The full gate passes on the head commit here (3089 passed, 7 skipped), so the 11 local failures look specific to your machine. One request before merge:
|
… agent.reasoning_effort Review: the setting's name is backend-neutral, so a Codex or Hermes author honors it too. Codex gets a kernel-owned -c model_reasoning_effort. Hermes gets agent.reasoning_effort in the seeded config.yaml, and the capture wrapper hands the level to the agent, since run_agent.main builds its agent without a reasoning config and never reads that key. One level list and one check for every backend; judges and the steward keep their defaults.
|
Thanks! Pushed 689e55f to cover every backend.
|
|
Thanks Chris, this covers it. Good catch that the pinned Hermes's Review of 689e55f (local Codex review, since the review bot does not run on fork PRs yet): no blocking findings. The full gate passes here (3098 passed, 7 skipped). Judges and the steward never get an effort level, the Codex One optional follow-up, not needed for merge: no test covers the contained Hermes path. Removing the |
One optional operator setting that sets the author's effort level on every backend.
OUTERLOOP_AUTHOR_EFFORT: the author's effort level.Every author harness has a reasoning-effort control, but the kernel never sets one, so every author runs at its harness's default. An operator who wants a cheaper author, or a deliberately less capable one for an experiment, can today only change the model.
low,medium,high,xhigh,max, the levels all three harnesses share. Unset or blank leaves each harness's default and its argv and config unchanged.--effort <level>. The pinned Claude Code release (2.1.285) has the flag; I checked the pinned binary itself (checksum matchesharnesses.toml).-c model_reasoning_effort="<level>"as a kernel-owned setting after the operator's-cargs, so project config cannot override it.agent.reasoning_effortin the seededconfig.yaml.run_agent.mainbuilds its agent without a reasoning config and never reads that key, sohermes_capture.pyalso hands the level to the agent (viaOUTERLOOP_HERMES_EFFORT), the sameparse_reasoning_effortvalue Hermes's own CLI would pass. Unset, the wrapper changes nothing. On acustom_providersendpoint Hermes sends it as a top-levelreasoning_effortand drops the field for the rest of the session if the server rejects it.author_config_errorrefuses an unknown level for every backend, so start, the tick, overrides, rebind and each wake all reject a typo before any spend.OUTERLOOP_CODEX_WEB_SEARCH, and is not stored in the run record. A parked run picks up a change at its next wake. The key is added toTICK_ENV_KEYSand the deploy step's allowlist, whichtest_tick_env_keys_match_the_deploy_allowlistkeeps identical.docs/reference/environment.mddocuments it, including that an author on an endpoint profile gets it too.Verification
test_harness.py: the Claude flag reaches argv only when set; the setting is parsed and normalized, and an unknown level is refused.test_endpoints.py: each backend's own setting at the process boundary on an endpoint, with and without a level (Claude argv, Codex kernel-owned-cafter the operator's, Hermesconfig.yamland wrapper channel).test_session_evidence.py: the capture wrapper gives the agent the reasoning config only when a level is set.test_attempt.py:author_config_errorchecks the level for every backend;build_harnesspasses it through.test_author_overrides.py: the fresh climb and the dispatched wake both pass the current setting on every backend, and a change between them is picked up, unlike the bound model.maincheckout on my machine (confirmed machine-specific in review).Compatibility: one new optional operator setting. No run records, ledger, inbox, or cache formats change. Older kernels ignore the setting, and deployments that leave it unset behave exactly as before.