mirror of
https://github.com/anthropics/claude-code-sdk-python.git
synced 2025-12-23 09:19:52 +00:00
Some checks are pending
Lint / lint (push) Waiting to run
Test / test (macos-latest, 3.10) (push) Waiting to run
Test / test (macos-latest, 3.11) (push) Waiting to run
Test / test (macos-latest, 3.13) (push) Waiting to run
Test / test (ubuntu-latest, 3.10) (push) Waiting to run
Test / test (macos-latest, 3.12) (push) Waiting to run
Test / test (ubuntu-latest, 3.11) (push) Waiting to run
Test / test (ubuntu-latest, 3.12) (push) Waiting to run
Test / test (ubuntu-latest, 3.13) (push) Waiting to run
Test / test (windows-latest, 3.10) (push) Waiting to run
Test / test (windows-latest, 3.11) (push) Waiting to run
Test / test (windows-latest, 3.12) (push) Waiting to run
Test / test (windows-latest, 3.13) (push) Waiting to run
Test / test-e2e (macos-latest, 3.10) (push) Blocked by required conditions
Test / test-e2e (macos-latest, 3.11) (push) Blocked by required conditions
Test / test-e2e (ubuntu-latest, 3.10) (push) Blocked by required conditions
Test / test-e2e (ubuntu-latest, 3.12) (push) Blocked by required conditions
Test / test-e2e (ubuntu-latest, 3.13) (push) Blocked by required conditions
Test / test-e2e (windows-latest, 3.10) (push) Blocked by required conditions
Test / test-e2e (windows-latest, 3.11) (push) Blocked by required conditions
Test / test-e2e (macos-latest, 3.12) (push) Blocked by required conditions
Test / test-e2e (macos-latest, 3.13) (push) Blocked by required conditions
Test / test-e2e (ubuntu-latest, 3.11) (push) Blocked by required conditions
Test / test-e2e (windows-latest, 3.13) (push) Blocked by required conditions
Test / test-examples (3.13) (push) Blocked by required conditions
Test / test-e2e (windows-latest, 3.12) (push) Blocked by required conditions
Add support for the `tools` option matching the TypeScript SDK, which
controls the base set of available tools separately from
allowed/disallowed tool filtering.
Supports three modes:
- Array of tool names: `["Read", "Edit", "Bash"]`
- Empty array: `[]` (disables all built-in tools)
- Preset object: `{"type": "preset", "preset": "claude_code"}`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
111 lines
3.5 KiB
Python
111 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Example demonstrating the tools option and verifying tools in system message."""
|
|
|
|
import anyio
|
|
|
|
from claude_agent_sdk import (
|
|
AssistantMessage,
|
|
ClaudeAgentOptions,
|
|
ResultMessage,
|
|
SystemMessage,
|
|
TextBlock,
|
|
query,
|
|
)
|
|
|
|
|
|
async def tools_array_example():
|
|
"""Example with tools as array of specific tool names."""
|
|
print("=== Tools Array Example ===")
|
|
print("Setting tools=['Read', 'Glob', 'Grep']")
|
|
print()
|
|
|
|
options = ClaudeAgentOptions(
|
|
tools=["Read", "Glob", "Grep"],
|
|
max_turns=1,
|
|
)
|
|
|
|
async for message in query(
|
|
prompt="What tools do you have available? Just list them briefly.",
|
|
options=options,
|
|
):
|
|
if isinstance(message, SystemMessage) and message.subtype == "init":
|
|
tools = message.data.get("tools", [])
|
|
print(f"Tools from system message: {tools}")
|
|
print()
|
|
elif isinstance(message, AssistantMessage):
|
|
for block in message.content:
|
|
if isinstance(block, TextBlock):
|
|
print(f"Claude: {block.text}")
|
|
elif isinstance(message, ResultMessage):
|
|
if message.total_cost_usd:
|
|
print(f"\nCost: ${message.total_cost_usd:.4f}")
|
|
print()
|
|
|
|
|
|
async def tools_empty_array_example():
|
|
"""Example with tools as empty array (disables all built-in tools)."""
|
|
print("=== Tools Empty Array Example ===")
|
|
print("Setting tools=[] (disables all built-in tools)")
|
|
print()
|
|
|
|
options = ClaudeAgentOptions(
|
|
tools=[],
|
|
max_turns=1,
|
|
)
|
|
|
|
async for message in query(
|
|
prompt="What tools do you have available? Just list them briefly.",
|
|
options=options,
|
|
):
|
|
if isinstance(message, SystemMessage) and message.subtype == "init":
|
|
tools = message.data.get("tools", [])
|
|
print(f"Tools from system message: {tools}")
|
|
print()
|
|
elif isinstance(message, AssistantMessage):
|
|
for block in message.content:
|
|
if isinstance(block, TextBlock):
|
|
print(f"Claude: {block.text}")
|
|
elif isinstance(message, ResultMessage):
|
|
if message.total_cost_usd:
|
|
print(f"\nCost: ${message.total_cost_usd:.4f}")
|
|
print()
|
|
|
|
|
|
async def tools_preset_example():
|
|
"""Example with tools preset (all default Claude Code tools)."""
|
|
print("=== Tools Preset Example ===")
|
|
print("Setting tools={'type': 'preset', 'preset': 'claude_code'}")
|
|
print()
|
|
|
|
options = ClaudeAgentOptions(
|
|
tools={"type": "preset", "preset": "claude_code"},
|
|
max_turns=1,
|
|
)
|
|
|
|
async for message in query(
|
|
prompt="What tools do you have available? Just list them briefly.",
|
|
options=options,
|
|
):
|
|
if isinstance(message, SystemMessage) and message.subtype == "init":
|
|
tools = message.data.get("tools", [])
|
|
print(f"Tools from system message ({len(tools)} tools): {tools[:5]}...")
|
|
print()
|
|
elif isinstance(message, AssistantMessage):
|
|
for block in message.content:
|
|
if isinstance(block, TextBlock):
|
|
print(f"Claude: {block.text}")
|
|
elif isinstance(message, ResultMessage):
|
|
if message.total_cost_usd:
|
|
print(f"\nCost: ${message.total_cost_usd:.4f}")
|
|
print()
|
|
|
|
|
|
async def main():
|
|
"""Run all examples."""
|
|
await tools_array_example()
|
|
await tools_empty_array_example()
|
|
await tools_preset_example()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
anyio.run(main)
|