effortLevel "max" not serialized to settings.json and not passed to statusLine stdin

Resolved 💬 4 comments Opened Mar 16, 2026 by Masato-Inu Closed Apr 13, 2026

Bug Description

When setting effort level to "max" (available for Opus 4.6 models), two issues prevent custom statusLine scripts from detecting it:

  1. sI6 serializer doesn't handle "max" — the effort value is not persisted to settings.json
  2. ePz statusLine data builder doesn't include efforteffortLevel/effortValue is absent from the JSON passed to statusLine commands via stdin

Steps to Reproduce

  1. Select Opus 4.6 model with "max" effort (via /model or Set model menu)
  2. Confirm right-side built-in display shows max · /effort
  3. Check ~/.claude/settings.json → still shows "effortLevel": "high" (previous value)
  4. Custom statusLine script receives no effort information via stdin JSON

Root Cause (from source analysis, v2.1.74)

Issue 1: sI6 serializer

The valid effort levels array includes "max":

a46 = ["low", "medium", "high", "max"];

But the serializer function sI6 (which saves to settings.json) was not updated:

function sI6(A) {
  if (A === "low" || A === "medium" || A === "high") return A;
  return;  // "max" → undefined, not persisted!
}

This means:

  • Setting effort to "max" stores undefined in settings → the old value remains
  • If settings.json is manually edited to "effortLevel": "max", Claude Code reads it through sI6 → gets undefined → falls back to model default, effectively changing the actual effort level (unexpected side effect)

Issue 2: ePz statusLine data builder

The ePz function constructs the JSON object passed to statusLine commands via stdin. It includes model, cost, context_window, cwd, workspace, etc., but does not include effortLevel or effortValue at all.

The internal app state does track effortValue correctly (the built-in right-side display works), but this value is never forwarded to statusLine.

Expected Behavior

  1. sI6 should serialize "max" like other valid values
  2. ePz should include the current effort level in the statusLine JSON, e.g.:

``json
{
"effortLevel": "max",
...
}
``

Environment

  • Claude Code version: 2.1.74 (Build: 2026-03-11T23:30:02Z)
  • OS: Windows 11 Pro
  • Model: Opus 4.6 (1M context)

Workaround

None currently available. Custom statusLine scripts cannot detect "max" effort level from either stdin JSON or settings.json fallback.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗