Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/claude_agent_sdk/_internal/transport/subprocess_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ def _build_command(self) -> list[str]:
# Preset object - 'claude_code' preset maps to 'default'
cmd.extend(["--tools", "default"])

if self._options.allowed_tools:
if self._options.allowed_tools is not None:
cmd.extend(["--allowedTools", ",".join(self._options.allowed_tools)])

if self._options.max_turns:
Expand Down
2 changes: 1 addition & 1 deletion src/claude_agent_sdk/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ class ClaudeAgentOptions:
"""Query options for Claude SDK."""

tools: list[str] | ToolsPreset | None = None
allowed_tools: list[str] = field(default_factory=list)
allowed_tools: list[str] | None = None
system_prompt: str | SystemPromptPreset | None = None
mcp_servers: dict[str, McpServerConfig] | str | Path = field(default_factory=dict)
permission_mode: PermissionMode | None = None
Expand Down
20 changes: 20 additions & 0 deletions tests/test_transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,26 @@ def test_build_command_with_tools_preset(self):
tools_idx = cmd.index("--tools")
assert cmd[tools_idx + 1] == "default"

def test_build_command_with_allowed_tools_empty_array(self):
"""Test that allowed_tools=[] passes --allowedTools with empty value."""
transport = SubprocessCLITransport(
prompt="test",
options=make_options(allowed_tools=[]),
)
cmd = transport._build_command()
assert "--allowedTools" in cmd
allowed_idx = cmd.index("--allowedTools")
assert cmd[allowed_idx + 1] == ""

def test_build_command_without_allowed_tools(self):
"""Test that allowed_tools=None (default) omits --allowedTools."""
transport = SubprocessCLITransport(
prompt="test",
options=make_options(),
)
cmd = transport._build_command()
assert "--allowedTools" not in cmd

def test_build_command_without_tools(self):
"""Test building CLI command without tools option (default None)."""
transport = SubprocessCLITransport(
Expand Down
2 changes: 1 addition & 1 deletion tests/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class TestOptions:
def test_default_options(self):
"""Test Options with default values."""
options = ClaudeAgentOptions()
assert options.allowed_tools == []
assert options.allowed_tools is None
assert options.system_prompt is None
assert options.permission_mode is None
assert options.continue_conversation is False
Expand Down