From 7be296f12ed5977b9edff62f79d2884fb3b3666d Mon Sep 17 00:00:00 2001 From: blois Date: Thu, 30 Oct 2025 15:14:42 -0700 Subject: [PATCH] feat: add max_thinking_tokens option to ClaudeAgentOptions (#298) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for controlling the maximum number of tokens allocated to extended thinking blocks via the max_thinking_tokens parameter. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude --- .gitignore | 1 + .../_internal/transport/subprocess_cli.py | 5 +++++ src/claude_agent_sdk/types.py | 2 ++ tests/test_transport.py | 11 +++++++++++ 4 files changed, 19 insertions(+) diff --git a/.gitignore b/.gitignore index 7e6d2df..6be5cc4 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ venv/ ENV/ env/ .venv +uv.lock # IDEs .vscode/ diff --git a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py index 1ec352f..ac0ac83 100644 --- a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py +++ b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py @@ -216,6 +216,11 @@ class SubprocessCLITransport(Transport): # String mode: use --print with the prompt cmd.extend(["--print", "--", str(self._prompt)]) + if self._options.max_thinking_tokens is not None: + cmd.extend( + ["--max-thinking-tokens", str(self._options.max_thinking_tokens)] + ) + # Check if command line is too long (Windows limitation) cmd_str = " ".join(cmd) if len(cmd_str) > _CMD_LENGTH_LIMIT and self._options.agents: diff --git a/src/claude_agent_sdk/types.py b/src/claude_agent_sdk/types.py index efeaf70..bb551d0 100644 --- a/src/claude_agent_sdk/types.py +++ b/src/claude_agent_sdk/types.py @@ -554,6 +554,8 @@ class ClaudeAgentOptions: setting_sources: list[SettingSource] | None = None # Plugin configurations for custom plugins plugins: list[SdkPluginConfig] = field(default_factory=list) + # Max tokens for thinking blocks + max_thinking_tokens: int | None = None # SDK Control Protocol diff --git a/tests/test_transport.py b/tests/test_transport.py index f23dcbf..00ccd90 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -129,6 +129,17 @@ class TestSubprocessCLITransport: assert "--max-turns" in cmd assert "5" in cmd + def test_build_command_with_max_thinking_tokens(self): + """Test building CLI command with max_thinking_tokens option.""" + transport = SubprocessCLITransport( + prompt="test", + options=make_options(max_thinking_tokens=5000), + ) + + cmd = transport._build_command() + assert "--max-thinking-tokens" in cmd + assert "5000" in cmd + def test_build_command_with_add_dirs(self): """Test building CLI command with add_dirs option.""" from pathlib import Path