Skip to content

fix(interface): offer codex none and pi ultracode, which both CLIs accept - #122

Merged
drewstone merged 1 commit into
mainfrom
fix/reasoning-efforts-measured
Aug 4, 2026
Merged

fix(interface): offer codex none and pi ultracode, which both CLIs accept#122
drewstone merged 1 commit into
mainfrom
fix/reasoning-efforts-measured

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

reasoningEffortsFor is what the sandbox picker offers. Measured against the pinned CLI binaries, two levels were reachable all along and the picker hid them:

  • codex could not reach none — the API enumerates none first in its own invalid-value error, so turning thinking off was expressible the entire time it was unselectable.
  • pi could not reach ultracodepi --thinking accepts max, which canonical ultracode maps to, so pi's top rung was unreachable from the UI.

The docstring above the table was itself a stale hand-written claim: it asserted codex starts at minimal and pi stops at xhigh. Both are wrong against the binaries.

Measured

Against the versions agent-dev-container pins (infra/nix/agent-clis.nix), not a developer PATH — those disagree by a minor version on every harness:

harness version accepted
codex 0.145.0 none, minimal, low, medium, high, xhigh, max, ultra
claude-code 2.1.218 low, medium, high, xhigh, max
pi 0.81.1 off, minimal, low, medium, high, xhigh, max
openclaw 2026.7.1-2 off, minimal, low, medium, high, xhigh, adaptive, max
kimi-code (kimi-cli) 1.49.0 boolean --thinking / --no-thinking

Two things worth carrying in the docstring, both recorded:

  • codex accepts ultra end-to-end (session header echoes reasoning effort: ultra) even though its own enumeration stops at max. ultra2 is rejected, so this is a real value, not lax parsing.
  • claude-code warns and substitutes rather than rejecting. An unsupported --effort prints "ignoring it and using the default effort" and runs anyway — so an overstated set there is a silent downgrade, not an error. Its set must stay conservative.

The upstream probe and its drift gate live in agent-dev-container (scripts/probe-reasoning-capabilities.mjs, docs/reference/reasoning-capabilities.json), where a test now asserts the shipped mapper never emits a value the CLI was not measured to accept.

Verification

  • agent-interface: 332/332 tests, tsc --noEmit clean, run in a fresh worktree off main with a clean install.
  • Expectations updated in harness-capabilities.test.ts for both sets and for the maxEffort: "high" narrowing case, which now includes none.
  • Patch changeset included.

…s accept

Measured against the pinned CLI binaries rather than the adapters' own
belief about them, two levels were reachable all along and the picker
hid them:

  codex enumerates `none` FIRST in its own invalid-value error, so
  turning thinking off was expressible the whole time it was unselectable.

  `pi --thinking` accepts `max`, which canonical `ultracode` maps to, so
  pi's top rung was unreachable from the UI.

The docstring is corrected in the same change — it was itself a stale
hand-written table asserting codex started at `minimal` and pi stopped at
`xhigh`. It now records what was measured, including that codex accepts
`ultra` despite its own enumeration omitting it, and that claude-code
WARNS-and-substitutes rather than rejecting an unsupported value, which
is why its set must not overstate: an overstated level there is a silent
downgrade rather than an error.

@tangletools tangletools left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — e96ef4a1

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-08-04T05:54:53Z

@drewstone
drewstone merged commit 682814e into main Aug 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants