Key Updates in Claude Code v2.1.316 - Effort Specification for Subagents and Deprecation of Opus 4.8 Fast Mode

Key Updates in Claude Code v2.1.316 - Effort Specification for Subagents and Deprecation of Opus 4.8 Fast Mode

Claude Code v2.1.316 is out. Subagent effort can now be set via an environment variable, and many security fixes are included. Today, I tried out CLAUDE_CODE_SUBAGENT_EFFORT.
2026.10.31

This page has been translated by machine translation. View original

I'm Ishikawa from the Cloud Business Division. Claude Code v2.1.316 (released 2026-10-31) is out. v2.1.315 (released 2026-10-30) was also published to npm the day before, but the CHANGELOG has no entry for v2.1.315, so this article covers the changes in v2.1.316. Today, I tried out CLAUDE_CODE_SUBAGENT_EFFORT.

The previous update article is here.

https://dev.classmethod.jp/articles/20261030-cc-updates-v2-1-314/

Update Summary

v2.1.316 includes 55 changes. According to the CHANGELOG, there are 34 fixes (Fixed), 10 additions (Added), 5 improvements (Improved), 5 changes (Changed), and 1 deprecation (Deprecated). In this article, 6 of these that relate to enforcing permissions, restrictions, and policies are grouped under Security, and 1 deprecation and 1 behavior change are treated as breaking changes and deprecations. The release also includes changes targeting Claude apps gateway (6), the VS Code extension (5), cloud sessions (5), and Claude Tag for Slack (4).

Also, Claude's official X account announced a rename of the paid Claude plans. "Max 5x" becomes "Max", and "Max 20x" becomes "Ultra". Pricing stays the same, with Max at $100 per month and Ultra at $200 per month, and existing subscribers don't need to do anything. In addition, the "usage limit every 5 hours" is removed for identity-verified Ultra accounts. This applies to most existing subscribers starting today. To prevent abuse, new accounts temporarily keep the limit until verification is complete, and you'll be notified by email when it is lifted. Weekly limits are unchanged.

https://x.com/claudeai/status/2116220869479428500

Notable Updates

Added CLAUDE_CODE_SUBAGENT_EFFORT to specify the subagent effort

The environment variable CLAUDE_CODE_SUBAGENT_EFFORT has been added. When nothing else specifies an effort, subagents run at the effort level specified by this variable instead of inheriting the session's effort.

If you often delegate investigation or review to subagents, I think it's worth considering keeping the main session at a high effort while lowering the effort for subagents only.

Added CLAUDE_CODE_DISABLE_ULTRATHINK to disable the ultrathink keyword

The environment variable CLAUDE_CODE_DISABLE_ULTRATHINK has been added. It disables the ultrathink keyword.

The official documentation explains that ultrathink, when included in a prompt, is a keyword that requests deeper reasoning for that turn without changing the session's effort setting. When entered in the terminal prompt, it may also raise that turn to xhigh effort. In v2.1.316, the VS Code extension was also changed so that turns containing ultrathink run at xhigh effort.

If you want to keep running with the effort value you set in your configuration, I think you can use this environment variable to stop the turn's effort from being raised by prompts containing ultrathink.

Deprecation of fast mode for Opus 4.8

Fast mode for Opus 4.8 was deprecated as of October 30, 2026, and will be removed on November 30, 2026. After removal, fast mode requests to Opus 4.8 will return an error, and there will be no fallback to regular Opus 4.8. The CHANGELOG advises migrating to Opus 5.5 to keep the faster speed. The behavior before and after removal is summarized below in "Breaking Changes and Deprecations".

If you use fast mode with Opus 4.8, requests will return errors after the November 30 removal, so I think it's safest to complete the switch to Opus 5.5 before then.

Added guardrail.input_tagging to the Bedrock upstream of Claude apps gateway

guardrail.input_tagging has been added to the Amazon Bedrock upstream of Claude apps gateway. It wraps the prompt in the input tags required by the prompt attack filter of Amazon Bedrock Guardrails. Specifying all_messages_and_system also tags the system prompt.

Note that the Amazon Bedrock documentation explains that when using guardrails with InvokeModel and InvokeModelWithResponseStream, prompt attacks are not filtered without input tags.

Organizations that use Amazon Bedrock through Claude apps gateway and have enabled the guardrail prompt attack filter should check this setting.

Fixed missing enforcement of --restricted and Claude apps gateway model restrictions

The following 2 issues were fixed.

  • --restricted sessions could upload files outside the working directory when a Read allow rule covered them
  • Claude apps gateway did not check all models specified in a request against availableModels, deniedModels, and models (after the fix, requests specifying a blocked model return a 400 error indicating the relevant field name)

These fixes make restrictions apply on paths where they previously were not enforced, so I think updating early is advisable for those who narrow the read scope with --restricted or organizations that manage the models in use through gateway model restrictions.

Fixed model aliases not falling back to the older model on Vertex AI and Amazon Bedrock

An issue was fixed where, on Vertex AI and Amazon Bedrock, when the latest model was not yet available in the account or region, sonnet, opus, and haiku did not fall back to the older model and instead showed an error in the middle of the session.

I think this fix will benefit those who specify models by alias on Bedrock or Vertex AI and ran into mid-session errors before a new model became available in their account or region.

Fixed shell commands remaining after Claude Code exits

An issue was fixed where, on macOS and Linux, shell commands kept running after Claude Code exited on its own (for example, when credentials were rejected or a cloud session was archived).

Running shell commands no longer remain after Claude Code exits on its own due to rejected authentication or an archived cloud session, so I think this fix is reassuring for those who often delegate long-running commands.

Update Details

New Features

  • Added the environment variable CLAUDE_CODE_SUBAGENT_EFFORT: when nothing else specifies an effort, subagents run at the effort level specified by this variable instead of inheriting the session's effort.
  • Added the environment variable CLAUDE_CODE_DISABLE_ULTRATHINK: disables the ultrathink keyword.
  • Added the environment variable CLAUDE_CODE_DISABLE_LOOPED_CROSS_CERT_DROP: keeps cross-certificates for systems that certify each other in a loop. This is intended for servers whose private CA requires such certificates.
  • Added pooled group budgets to Claude apps gateway: in addition to each member's individual limit, you can set one monthly budget shared by the members of a group. It is configured with pooled_budget in the spend limits admin API.
  • Added managed.policy_mode: layered to Claude apps gateway: all policies matching a developer are applied, and each policy is merged on top of the policies below it in the list. Only the first matching policy is not the only one applied.
  • Added guardrail.input_tagging to the Amazon Bedrock upstream of Claude apps gateway: wraps the prompt in the input tags required by the prompt attack filter of Amazon Bedrock Guardrails. all_messages_and_system also tags the system prompt.
  • [VS Code] Added sign-in to Claude apps gateway from the chat panel: you can sign in without using the terminal.
  • [Cloud sessions] Added form cards: you can fill in or decline forms requested by MCP servers, so requests are no longer canceled without being shown to the user.
  • [Cloud sessions] Added a "Catching up…" line: shown while a cloud session or Remote Control session you switched back to is updating its messages to the latest state.
  • [Code Review] Added a findings-by-severity card to the analytics page: shows the total findings for the period, a daily chart stacked by severity, and counts per severity.

Security

  • Fixed --restricted sessions uploading files outside the working directory: this occurred when a Read allow rule covered them.
  • Fixed Claude apps gateway not checking all models in a request: the check against availableModels, deniedModels, and models is covered. Requests specifying a blocked model return a 400 error indicating the relevant field name.
  • Fixed PowerShell hooks not blocking with exit code 2: this occurred when the command started with a type cast, param, using, or an attribute.
  • Fixed built-in exceptions returning to managed autoMode.allow: for lists that did not include "$defaults", built-in exceptions came back through the host app's --settings, the first rule added in /permissions, or /auto-mode-setup.
  • Changed autoMode.allow without "$defaults" to still keep the built-in rules for scheduled tasks: the built-in rules for scheduled task prompts are no longer removed.
  • Changed the handling of server-managed settings for Team and Enterprise logins: settings fetched from Anthropic's API are applied without an approval prompt, and saved copies that fail validation are rejected (also covered below in "Breaking Changes and Deprecations").

Improvements

  • Improved the display of /code-review results: for /code-review started from the Code tab in Claude Desktop or from the web, results for cloud sessions and claude remote-control sessions are shown as findings cards instead of a plain-text list.
  • Improved /diff in large repositories: the repository-wide git commands run on each update are usually reduced by one, and when git is slow, the interval between updates is lengthened.
  • Improved SSL certificate error messages: possible causes (such as a server that doesn't send intermediate certificates) and how to address each are displayed.
  • [VS Code] Changed the handling of ultrathink: turns containing ultrathink run at xhigh effort and are displayed in rainbow colors in the chat box, as in the terminal.
  • [Cloud sessions] Changed network secret permissions: Enterprise members can add and delete as well as view them in their own cloud environments.
  • [Claude Tag] Changed the "Respond automatically" switch for Slack channels: it is now an option under "How Claude participates" on the channel's Configure page and in Claude Tag's admin settings.
  • In addition, the messages shown when a GitHub remote is not found (/ultrareview, cloud sessions, and cloud agents) and the display of the Changes pane in cloud sessions have been improved.

Fixes

  • Fixed shell commands remaining after exit: when Claude Code exited on its own (rejected credentials, an archived cloud session, etc.), shell commands kept running on macOS and Linux.
  • Fixed model aliases causing errors on Vertex AI and Amazon Bedrock: when the latest model was not yet available in the account or region, sonnet, opus, and haiku did not fall back to the older model and showed an error in the middle of the session.
  • Fixed bash scripts hanging when SHELLOPTS is exported: when SHELLOPTS was exported, bash scripts launched from the Bash tool hung after the first command.
  • Fixed requests hanging on corrupted compressed responses: when a compressed response was cut off or corrupted midway, some network requests hung waiting for a response.
  • Fixed Enter being needed twice to submit prompts containing invisible characters: for normal prompts, the first Enter removes the invisible characters and submits, and commands still wait for confirmation.
  • Fixed subagent model inheritance being lost on resume: a subagent that inherited its parent subagent's model switched to the main model when resumed by a background job or message.
  • Fixed Grep and Glob returning no results on Windows: this occurred when the search process did not exit even after being killed by a timeout.
  • [VS Code] Fixed the Effort slider and other items not appearing with a model setting tagged [1m]: when the model setting was something like opus[1m], the Effort slider, Ultracode switch, and model name were not displayed.
  • [VS Code] Fixed conversations returning in Auto mode after plan approval: a conversation whose plan was approved with "Yes, and manually approve edits" came back in the Auto mode state after a reload or restart.
  • A quietly welcome fix: when you specified a model this version doesn't recognize with /model <id>, it did not warn that auto-compact assumes a 200K context window. This fix should make it easier for those using custom model IDs through a gateway to notice why compaction starts earlier than expected.
  • In addition, many minor bugs were fixed, including the handling of aliases and functions in the Bash tool's shell, the display and failure handling when auto mode stops a turn, plugin MCP and SDK, self-hosted runners, cloud sessions, and Claude Tag (Slack).

Breaking Changes and Deprecations

This article covers the following 2 items.

Deprecation of fast mode for Opus 4.8 (scheduled for removal on November 30, 2026)

Fast mode for Opus 4.8 was deprecated as of October 30, 2026. After its removal on November 30, 2026, fast mode requests to Opus 4.8 will return an error, and there will be no fallback to regular Opus 4.8. An example of the behavior separated by date is below. The behavior before removal is inferred from the CHANGELOG statement "After removal, fast mode requests on Opus 4.8 return an error".

Before removal (until 2026-11-29, inferred):

Use fast mode with Opus 4.8 → processed in fast mode (deprecated)

After removal (from 2026-11-30):

Use fast mode with Opus 4.8 → error (no fallback to regular Opus 4.8)
To keep the faster speed → migrate to Opus 5.5

Server-managed settings for Team and Enterprise are applied without an approval prompt

For Team and Enterprise logins, server-managed settings fetched from Anthropic's API are now applied without an approval prompt. Saved copies that fail validation are rejected. An example of the behavior is below. The behavior before the change is inferred from the CHANGELOG statement "now apply without an approval prompt". The CHANGELOG does not describe the behavior before the change regarding the handling of saved copies.

Before the change (until v2.1.315, inferred):

Team/Enterprise login
Server-managed settings fetched from Anthropic's API → approval prompt → applied

After the change (from v2.1.316):

Team/Enterprise login
Server-managed settings fetched from Anthropic's API → applied without an approval prompt
Saved copies that fail validation → rejected

Trying CLAUDE_CODE_SUBAGENT_EFFORT

I compared with and without the environment variable to see whether, when CLAUDE_CODE_SUBAGENT_EFFORT (added in v2.1.316) is set, the subagent runs at a different effort from the session.

The official documentation explains that a subagent's effort can also be specified through the effort field in the subagent definition or the effort parameter that Claude passes at invocation. Based on the official documentation and the CHANGELOG, the precedence of subagent effort is summarized below (1 is the highest priority).

Priority How it is specified Target it applies to
1 Environment variable CLAUDE_CODE_EFFORT_LEVEL The main session and subagents
2 The effort parameter at invocation (v2.1.292 and later) Non-fork subagents
3 The effort field in the subagent definition That subagent
4 Environment variable CLAUDE_CODE_SUBAGENT_EFFORT (added in v2.1.316) Subagents with neither 2 nor 3 specified
5 The session's effort (--effort, /effort, effortLevel setting) Subagents with none of 1 to 4 specified (inherited)
  • The position of 4 is an inference, assuming that "something else" in the CHANGELOG's "when nothing else names one" refers to 2 and 3.
  • Which takes precedence when both 1 and 4 are set is not described in the official documentation or the CHANGELOG, and I did not check it this time.
  • 2 is the parameter Claude passes to the invocation when asked to run a subagent at a specific effort.

This time I did not use 2 or 3, specified only the session's effort (5), and compared with and without 4.

Verification Method

In the following commands, the absolute path of the verification directory is stored in the shell variable V. For this verification, I used a directory created under a temporary directory for the Claude Code session. If you try this yourself, create an empty directory as in the example below, put its path in V, and then run the commands.

# Example: create an empty directory for verification and put its path in V
% V="$(mktemp -d)"
% mkdir -p $V/work
% cd $V/work

The verification conditions are as follows.

  • Run claude -p with $V/work as the working directory, and have it launch one general-purpose subagent with the Agent tool
  • Set the session's effort to high with --effort high
  • Limit the available tools to Agent only with --tools Agent, and do not load MCP servers with --strict-mcp-config
  • Do not specify an effort in the prompt

Without the environment variable

% claude -p --max-turns 1 --effort high --tools Agent --strict-mcp-config \
  --output-format stream-json --verbose \
  "Agent ツールで general-purpose サブエージェントを 1 つ起動し、「ok」とだけ返答させてください" > $V/runA.jsonl

With the environment variable (CLAUDE_CODE_SUBAGENT_EFFORT=low)

% CLAUDE_CODE_SUBAGENT_EFFORT=low claude -p --max-turns 1 --effort high --tools Agent --strict-mcp-config \
  --output-format stream-json --verbose \
  "Agent ツールで general-purpose サブエージェントを 1 つ起動し、「ok」とだけ返答させてください" > $V/runB.jsonl

Checking the Results

I checked the effort in the session records (JSONL) that Claude Code saves automatically. In this environment, the main session's record was saved at ~/.claude/projects/<directory corresponding to the working directory>/<session ID>.jsonl, and the subagent's record was saved at <session ID>/subagents/agent-*.jsonl in the same location. The following command derives this directory from the session ID and tallies the effort values in the assistant records of each record.

% for r in runA runB; do
    SID=$(jq -r 'select(.type=="system" and .subtype=="init") | .session_id' $V/$r.jsonl | head -1)
    P=$(dirname "$(ls -d ~/.claude/projects/*/"$SID".jsonl)")
    echo "== $r"
    echo "main:";     jq -r 'select(.type=="assistant") | .effort' "$P/$SID.jsonl" | sort | uniq -c
    echo "subagent:"; jq -r 'select(.type=="assistant") | .effort' "$P/$SID"/subagents/agent-*.jsonl | sort | uniq -c
  done
== runA
main:
   2 high
subagent:
   2 high
== runB
main:
   2 high
subagent:
   2 low

The numbers are the count of assistant records in each record that have that effort value.

  • Without the environment variable (runA), the subagent also ran at high, the same as the session.
  • With the environment variable (CLAUDE_CODE_SUBAGENT_EFFORT=low) (runB), the main session stayed at high and only the subagent ran at low.

Previously, setting the main session to a high effort made the subagent run at the same effort, and I think it's a welcome change that a single environment variable now lets you separate them.

Conclusion

I think v2.1.316 is a version that lets you specify the subagent effort with an environment variable, and also fixes paths where --restricted and the Claude apps gateway model restrictions were not being enforced. Since fast mode for Opus 4.8 is scheduled for removal on November 30, 2026, I think those using it should try the migration target, Opus 5.5, early.

If you often use subagents or use fast mode with Opus 4.8, why not update and give it a try?

References

https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

https://code.claude.com/docs/en/changelog

https://code.claude.com/docs/en/sub-agents

https://code.claude.com/docs/en/env-vars

https://code.claude.com/docs/en/model-config

https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-prompt-attack.html

https://dev.classmethod.jp/articles/20261030-cc-updates-v2-1-314/


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

Share this article

AI白書