DEV Community

Cover image for Claude Code 2.1.316: subagent effort becomes a setting, ultrathink gets a kill switch, and Opus fast mode has 30 days left
Piekwerk
Piekwerk

Posted on

Claude Code 2.1.316: subagent effort becomes a setting, ultrathink gets a kill switch, and Opus fast mode has 30 days left

Claude Code 2.1.316 hit npm at 00:42 UTC this morning. I read the changelog over coffee because this release touches the three things I care about most in an agent config: what effort level subagents run at, what the ultrathink keyword costs, and which model settings quietly carry an expiry date.

One numbering detail first. The changelog goes 2.1.312, then 2.1.314, then 2.1.316. Version 2.1.313 is the number the trojanized Claude Code extension claimed on Cursor's marketplace last week, so the real release train skipped it. 2.1.315 shipped to npm on October 30 with no changelog entry at all. If you version-pin in CI, pin to numbers that actually exist in the release history.

Subagents stop inheriting your effort level

The line that matters: CLAUDE_CODE_SUBAGENT_EFFORT sets the effort level subagents run at when nothing else names one, instead of inheriting the session's.

That default inheritance is the quiet cost multiplier in multi-agent runs. When I fan work out to subagents, each one picks up the effort level of the session that spawned it. A session I set to high effort for a hard design question will also run its log-reading, file-summarizing, checklist-running subagents at high effort. Those jobs do not need it. I wrote about the coordination side of running agents in parallel before. This is the budget side of the same setup, and until today there was no session-wide default for it. You named the effort in each subagent prompt, or you accepted the inheritance.

Where I would set it

The standard place is the env block in settings:

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_EFFORT": "low"
  }
}
Enter fullscreen mode Exit fullscreen mode

Or as a one-off for a single project:

CLAUDE_CODE_SUBAGENT_EFFORT=low claude
Enter fullscreen mode Exit fullscreen mode

One honest caveat: the changelog does not enumerate the accepted values. The effort settings the product exposes are the picker levels, low through xhigh, so start with the level you actually want delegated work to run at and confirm on your install with /model. The point of the setting is the split itself. Your main session can reason at high effort while the delegated work runs at a lower one.

The ultrathink keyword gets an off switch

CLAUDE_CODE_DISABLE_ULTRATHINK turns the ultrathink keyword off entirely.

Context for why that exists. This release also aligns VS Code with the terminal: typing ultrathink now runs that turn at xhigh effort, with a rainbow indicator in the chat box. Ultrathink is not a thinking-budget nudge anymore, it selects the top of the effort range for the whole turn.

That is what you want when you typed it on purpose. It is not what you want when the word shows up somewhere you did not intend: a pasted terminal log, a doc the agent reads, a rules file that mentions it in prose. The keyword fires on the text, not on your intent. If a team wants predictable spend, an off switch that kills the keyword and makes effort an explicit choice is the safer default. Solo users who never type it by accident lose nothing by leaving it on.

Opus 4.8 fast mode has a hard stop on November 30

The deprecation line has a date in it, which is why I treat it as the urgent item. Fast mode for Opus 4.8 was deprecated on October 30. It gets removed on November 30. After removal, fast mode requests on Opus 4.8 return an error and do not fall back to standard Opus 4.8. The migration path named in the changelog is Opus 5.5, which matches what I saw when Claude Code switched its default model.

Check anything that pins a model string:

grep -rn "opus" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

If a script or a managed config selects fast mode on Opus 4.8, November 30 is not a slowdown, it is an error. This is also a good moment to pin exact model ids instead of aliases, because the alias surface keeps moving.

Three additions for teams on the apps gateway

Most of this release faces individual developers, but three items land on the Claude apps gateway:

  • pooled_budget on the spend limits admin API: one monthly budget that a group's members share, on top of each member's own limit. Team-level ceilings without per-person lockstep.
  • managed.policy_mode: layered: every policy that matches a developer now applies, each merged over the ones below it, instead of only the first match winning. It is opt-in, and turning it on changes what your policy stack effectively means, so audit the stack before you flip it.
  • guardrail.input_tagging on Bedrock upstreams: wraps prompts in the input tags that an Amazon Bedrock guardrail's prompt attacks filter needs, with all_messages_and_system also tagging the system prompt.

Fixes worth reading twice

Two fixes matter beyond their one-line descriptions.

--restricted sessions no longer upload files from outside the working directories when a Read allow rule covered them. A read permission widening into upload reach is exactly the kind of cross-tool interaction I watch for in guardrail configurations, and this one got closed.

Subagents that inherited a parent subagent's model no longer move to the main model when a background job or message wakes them. If you run nested delegation, a cheap subagent model was sometimes flipping back to the expensive main model mid-run. That is a real budget leak, now fixed.

Also smaller but welcome: the sonnet, opus and haiku aliases on Vertex AI and Bedrock no longer show an error mid-session when the newest model is not yet available to the account or region. They switch to an older model, which is what they were supposed to do all along.

What to check before the weekend

  1. Grep your settings and CI scripts for model pins that mention fast mode or Opus 4.8. November 30 turns them into errors.
  2. Decide a default subagent effort and write it into settings instead of inheriting the session's.
  3. If the word ultrathink can appear in anything your agent reads, decide whether you want the keyword live at all.
  4. On the gateway, review pooled budgets and the layered policy mode before someone else enables them for you.

The direction is consistent across releases: effort, model and budget keep getting separated into independently configurable pieces. Every split is a knob you now own. Set the defaults deliberately, and the inheritance stops deciding for you.

Top comments (0)