Claude Agent SDK Specification
This document provides a comprehensive specification of the Claude Agent SDK, comparing feature parity across the official TypeScript and Python SDKs with this Ruby implementation.
Reference Versions:
TypeScript SDK: v0.2.80 (npm package)
Python SDK: from GitHub (commit 13e119a)
Ruby SDK: This repository
Last Updated: 2026-03-20
Options/Configuration
Message Types
Content Blocks
Control Protocol
Hooks
Permissions
MCP Support
Sessions
Subagents
Sandbox Settings
Error Handling
Client API
Configuration options for SDK queries and clients.
Option
TypeScript
Python
Ruby
Notes
model
✅
✅
✅
Claude model identifier
fallbackModel
✅
✅
✅
Fallback if primary fails
systemPrompt
✅
✅
✅
String or preset object
appendSystemPrompt
✅
✅
✅
Append to system prompt (via preset)
tools
✅
✅
✅
Array or preset
allowedTools
✅
✅
✅
Auto-allowed tools
disallowedTools
✅
✅
✅
Blocked tools
permissionMode
✅
✅
✅
default/acceptEdits/plan/bypassPermissions/dontAsk
allowDangerouslySkipPermissions
✅
❌
✅
Required for bypassPermissions
canUseTool
✅
✅
✅
Permission callback
permissionPromptToolName
✅
✅
✅
MCP tool for permission prompts
maxTurns
✅
✅
✅
Max conversation turns
maxBudgetUsd
✅
✅
✅
Max USD budget
thinking
✅
✅
✅
Thinking mode config (adaptive/enabled/disabled) (v0.2.35+)
effort
✅
✅
✅
Response effort level (low/medium/high/max) (v0.2.35+)
maxThinkingTokens
✅
✅
✅
Max thinking tokens (deprecated in TS, use thinking)
continue
✅
✅
✅
Continue most recent conversation
resume
✅
✅
✅
Resume session by ID
sessionId
✅
❌
✅
Custom UUID for conversations (v0.2.33)
resumeSessionAt
✅
❌
✅
Resume to specific message UUID
forkSession
✅
✅
✅
Fork on resume
persistSession
✅
❌
✅
Whether to persist to disk
enableFileCheckpointing
✅
✅
✅
Track file changes for rewind
includePartialMessages
✅
✅
✅
Include stream events
outputFormat
✅
✅
✅
JSON schema for structured output
mcpServers
✅
✅
✅
MCP server configurations
strictMcpConfig
✅
❌
✅
Strict validation of MCP config
hooks
✅
✅
✅
Hook callbacks
agents
✅
✅
✅
Custom subagent definitions
agent
✅
❌
✅
Agent name for main thread
cwd
✅
✅
✅
Working directory
additionalDirectories
✅
✅
✅
Extra allowed directories
env
✅
✅
✅
Environment variables
sandbox
✅
✅
✅
Sandbox settings
settingSources
✅
✅
✅
Which settings to load
settings
✅
✅
✅
Additional settings (path or object)
plugins
✅
✅
✅
Plugin configurations
betas
✅
✅
✅
Beta features (e.g., context-1m-2025-08-07)
abortController
✅
❌
✅
Cancellation controller
stderr
✅
✅
✅
Stderr callback
spawnClaudeCodeProcess
✅
❌
✅
Custom spawn function
pathToClaudeCodeExecutable
✅
✅
✅
Custom CLI path
executable
✅
N/A
N/A
JS runtime (node/bun/deno) - JS-specific
executableArgs
✅
N/A
N/A
JS runtime args - JS-specific
extraArgs
✅
✅
✅
Extra CLI arguments
promptSuggestions
✅
❌
✅
Enable prompt suggestion after each turn (v0.2.47)
debug
✅
❌
✅
Enable verbose debug logging
debugFile
✅
❌
✅
Write debug logs to specific file path
toolConfig
✅
❌
✅
Tool behavior config (e.g., askUserQuestion preview format)
onElicitation
✅
❌
✅
MCP elicitation request handler callback
agentProgressSummaries
✅
❌
✅
Progress summaries for subagents (v0.2.72)
Messages exchanged between SDK and CLI.
Message Type
TypeScript
Python
Ruby
Notes
UserMessage
✅
✅
✅
User input
UserMessageReplay
✅
❌
✅
Replayed user message on resume
AssistantMessage
✅
✅
✅
Claude response
SystemMessage
✅
✅
✅
System/init messages
ResultMessage
✅
✅
✅
Final result with usage
StreamEvent
✅
✅
✅
Partial streaming events
CompactBoundaryMessage
✅
❌
✅
Conversation compaction marker
StatusMessage
✅
❌
✅
Status updates (compacting)
ToolProgressMessage
✅
❌
✅
Long-running tool progress
HookStartedMessage
✅
❌
✅
Hook execution started
HookProgressMessage
✅
❌
✅
Hook progress during execution
HookResponseMessage
✅
❌
✅
Hook execution output
AuthStatusMessage
✅
❌
✅
Authentication status
TaskNotificationMessage
✅
✅
✅
Background task completion
ToolUseSummaryMessage
✅
❌
✅
Summary of tool use (collapsed)
TaskStartedMessage
✅
✅
✅
Subagent task registered (v0.2.45)
TaskProgressMessage
✅
✅
✅
Background task progress (v0.2.51)
RateLimitEvent
✅
✅
✅
Rate limit status changes
PromptSuggestionMessage
✅
❌
✅
Suggested next prompt (v0.2.47)
FilesPersistedEvent
✅
❌
✅
File persistence confirmation
ElicitationCompleteMessage
✅
❌
✅
MCP elicitation completed
LocalCommandOutputMessage
✅
❌
✅
Local command output
APIRetryMessage
✅
❌
✅
API retry notification (v0.2.77)
Field
TypeScript
Python
Ruby
Notes
attempt
✅
❌
✅
Current retry attempt number
max_retries
✅
❌
✅
Maximum retry count
retry_delay_ms
✅
❌
✅
Delay before retry in milliseconds
error_status
✅
❌
✅
HTTP status code (null for conn errors)
error
✅
❌
✅
Error type (AssistantMessageError)
Field
TypeScript
Python
Ruby
Notes
subtype
✅
✅
✅
success/error_*
duration_ms
✅
✅
✅
Total duration
duration_api_ms
✅
✅
✅
API call duration
is_error
✅
✅
✅
Error flag
num_turns
✅
✅
✅
Turn count
result
✅
✅
✅
Text result (on success)
total_cost_usd
✅
✅
✅
Total cost
usage
✅
✅
✅
Token usage
modelUsage
✅
❌
✅
Per-model usage
permission_denials
✅
❌
✅
Denied permissions
structured_output
✅
✅
✅
JSON schema output
errors
✅
❌
✅
Error messages
uuid
✅
❌
✅
Message UUID
session_id
✅
✅
✅
Session ID
stop_reason
✅
✅
✅
Why model stopped
fast_mode_state
✅
❌
✅
Fast mode status
Subtype
TypeScript
Python
Ruby
Notes
success
✅
✅
✅
Successful completion
error_during_execution
✅
✅
✅
Runtime error
error_max_turns
✅
✅
✅
Max turns exceeded
error_max_budget_usd
✅
✅
✅
Budget exceeded
error_max_structured_output_retries
✅
❌
✅
Structured output retries exceeded
Field
TypeScript
Python
Ruby
Notes
task_id
✅
✅
✅
Task identifier
tool_use_id
✅
✅
✅
Correlating tool call ID
status
✅
✅
✅
completed/failed/stopped
output_file
✅
✅
✅
Path to task output
summary
✅
✅
✅
Task summary
usage
✅
✅
✅
Tokens/tool counts/duration
Field
TypeScript
Python
Ruby
Notes
tool_use_id
✅
❌
✅
Tool use ID
tool_name
✅
❌
✅
Tool name
parent_tool_use_id
✅
❌
✅
Parent tool use ID
elapsed_time_seconds
✅
❌
✅
Elapsed time
task_id
✅
❌
✅
Associated task ID
Field
TypeScript
Python
Ruby
Notes
status
✅
❌
✅
Current status
permissionMode
✅
❌
✅
Current permission mode
HookResponseMessage Fields
Field
TypeScript
Python
Ruby
Notes
uuid
✅
❌
✅
Message UUID
session_id
✅
❌
✅
Session ID
hook_id
✅
❌
✅
Unique hook execution ID
hook_name
✅
❌
✅
Hook name
hook_event
✅
❌
✅
Event type (PreToolUse, PostToolUse...)
output
✅
❌
✅
Combined output string
stdout
✅
❌
✅
Standard output
stderr
✅
❌
✅
Standard error
exit_code
✅
❌
✅
Hook process exit code
outcome
✅
❌
✅
'success' / 'error' / 'cancelled'
HookProgressMessage Fields
Field
TypeScript
Python
Ruby
Notes
uuid
✅
❌
✅
Message UUID
session_id
✅
❌
✅
Session ID
hook_id
✅
❌
✅
Unique hook execution ID
hook_name
✅
❌
✅
Hook name
hook_event
✅
❌
✅
Event type
output
✅
❌
✅
Combined output so far
stdout
✅
❌
✅
Standard output so far
stderr
✅
❌
✅
Standard error so far
Field
TypeScript
Python
Ruby
Notes
task_id
✅
✅
✅
Task identifier
tool_use_id
✅
✅
✅
Correlating tool use ID
description
✅
✅
✅
Task description
task_type
✅
✅
✅
Task type (e.g., bash)
prompt
✅
❌
✅
Task prompt (v0.2.75)
Field
TypeScript
Python
Ruby
Notes
task_id
✅
✅
✅
Task identifier
tool_use_id
✅
✅
✅
Correlating tool use ID
description
✅
✅
✅
Current progress description
usage
✅
✅
✅
Cumulative {total_tokens, tool_uses, duration_ms}
last_tool_name
✅
✅
✅
Last tool executed
summary
✅
❌
✅
AI-generated progress summary (v0.2.72)
Field
TypeScript
Python
Ruby
Notes
isAuthenticating
✅
❌
✅
Authentication active
output
✅
❌
✅
Auth output messages
error
✅
❌
✅
Auth error message
Field
TypeScript
Python
Ruby
Notes
summary
✅
❌
✅
Summary text
preceding_tool_use_ids
✅
❌
✅
Tool use IDs being summarized
Field
TypeScript
Python
Ruby
Notes
rate_limit_info
✅
✅
✅
Rate limit details object
Rate limit info contains: status, resetsAt, rateLimitType, utilization, isUsingOverage, overageStatus, overageResetsAt, overageDisabledReason (v0.2.49+), surpassedThreshold.
Field
TypeScript
Python
Ruby
Notes
suggestion
✅
❌
✅
Suggested next prompt
Field
TypeScript
Python
Ruby
Notes
files
✅
❌
✅
Successfully persisted {filename, file_id}
failed
✅
❌
✅
Failed files {filename, error}
processed_at
✅
❌
✅
Processing timestamp
Content block types within messages.
Block Type
TypeScript
Python
Ruby
Notes
TextBlock
✅
✅
✅
Text content
ThinkingBlock
✅
✅
✅
Extended thinking
ToolUseBlock
✅
✅
✅
Tool invocation
ToolResultBlock
✅
✅
✅
Tool result
ServerToolUseBlock
✅
❌
✅
MCP server tool use
ServerToolResultBlock
✅
❌
✅
MCP server tool result
ImageContentBlock
✅
❌
✅
Image data (base64/URL)
Field
TypeScript
Python
Ruby
id
✅
✅
✅
name
✅
✅
✅
input
✅
✅
✅
Field
TypeScript
Python
Ruby
thinking
✅
✅
✅
signature
✅
✅
✅
Bidirectional control protocol for SDK-CLI communication.
Request Subtype
TypeScript
Python
Ruby
Notes
initialize
✅
✅
✅
Initialize session with hooks/MCP
interrupt
✅
✅
✅
Interrupt current operation
can_use_tool
✅
✅
✅
Permission callback
hook_callback
✅
✅
✅
Execute hook callback
set_permission_mode
✅
✅
✅
Change permission mode
set_model
✅
✅
✅
Change model
set_max_thinking_tokens
✅
❌
✅
Change thinking tokens limit
rewind_files
✅
✅
✅
Rewind file checkpoints (supports dry_run)
mcp_message
✅
✅
✅
Route MCP message
mcp_set_servers
✅
❌
✅
Dynamically set MCP servers
mcp_status
✅
✅
✅
Get MCP server status
mcp_reconnect
✅
✅
✅
Reconnect to MCP server
mcp_toggle
✅
✅
✅
Enable/disable MCP server
stop_task
✅
✅
✅
Stop a running background task
mcp_authenticate
✅
❌
✅
Authenticate MCP server (v0.2.52)
mcp_clear_auth
✅
❌
✅
Clear MCP server auth (v0.2.52)
supported_commands
✅
❌
✅
Get available slash commands
supported_models
✅
❌
✅
Get available models
account_info
✅
❌
✅
Get account information
apply_flag_settings
✅
❌
✅
Merge settings into flag layer
supported_agents
✅
❌
✅
Get available subagents (v0.2.63)
cancel_async_message
✅
❌
✅
Cancel queued user message by UUID (v0.2.76)
get_settings
✅
❌
✅
Get effective merged settings (v0.2.72)
Type
TypeScript
Python
Ruby
Notes
SlashCommand
✅
❌
✅
Available command info
ModelInfo
✅
❌
✅
Model information
McpServerStatus
✅
❌
✅
MCP server status
AccountInfo
✅
❌
✅
Account information
InitializationResult
✅
❌
✅
Full init response
McpSetServersResult
✅
❌
✅
Set servers result
RewindFilesResult
✅
✅
✅
Rewind result
AgentInfo
✅
❌
✅
Available agent info
Field
TypeScript
Python
Ruby
Notes
value
✅
❌
✅
Model identifier
displayName
✅
❌
✅
Human-readable name
description
✅
❌
✅
Model description
supportsEffort
✅
❌
✅
Whether model supports effort
supportedEffortLevels
✅
❌
✅
Available effort levels
supportsAdaptiveThinking
✅
❌
✅
Whether adaptive thinking works
supportsFastMode
✅
❌
✅
Whether model supports fast mode (v0.2.69)
supportsAutoMode
✅
❌
✅
Whether model supports auto mode (v0.2.75)
Field
TypeScript
Python
Ruby
Notes
name
✅
✅
✅
Server name
status
✅
✅
✅
Connection status
serverInfo
✅
✅
✅
Server name/version
error
✅
✅
✅
Error message (when failed)
config
✅
✅
✅
Server configuration
scope
✅
✅
✅
Config scope (project, user, etc.)
tools
✅
✅
✅
Tools with annotations
InitializationResult Fields
Field
TypeScript
Python
Ruby
Notes
commands
✅
❌
✅
Available slash commands
output_style
✅
❌
✅
Current output style
available_output_styles
✅
❌
✅
All available output styles
models
✅
❌
✅
Available models (ModelInfo[])
account
✅
❌
✅
Account information (AccountInfo)
agents
✅
❌
✅
Available agents (AgentInfo[])
fast_mode_state
✅
❌
✅
Fast mode status (v0.2.75)
Field
TypeScript
Python
Ruby
Notes
canRewind
✅
✅
✅
Whether rewind is possible
error
✅
❌
✅
Error message if can't rewind
filesChanged
✅
❌
✅
List of changed file paths
insertions
✅
❌
✅
Number of line insertions
deletions
✅
❌
✅
Number of line deletions
McpSetServersResult Fields
Field
TypeScript
Python
Ruby
Notes
added
✅
❌
✅
Server names that were added
removed
✅
❌
✅
Server names that were removed
errors
✅
❌
✅
Map of server name to error
Field
TypeScript
Python
Ruby
Notes
name
✅
❌
✅
Agent type identifier
description
✅
❌
✅
When to use this agent
model
✅
❌
✅
Model alias (inherits if omitted)
Event hooks for intercepting and modifying SDK behavior.
Event
TypeScript
Python
Ruby
Notes
PreToolUse
✅
✅
✅
Before tool execution
PostToolUse
✅
✅
✅
After tool execution
PostToolUseFailure
✅
✅
✅
After tool failure (Py v0.1.26)
Notification
✅
✅
✅
System notifications (Py v0.1.29)
UserPromptSubmit
✅
✅
✅
User message submitted
SessionStart
✅
✅
✅
Session starts
SessionEnd
✅
❌
✅
Session ends
Stop
✅
✅
✅
Agent stops
StopFailure
✅
❌
✅
Agent stops due to API error
SubagentStart
✅
✅
✅
Subagent starts (Py v0.1.29)
SubagentStop
✅
✅
✅
Subagent stops
PreCompact
✅
✅
✅
Before compaction
PostCompact
✅
❌
✅
After compaction (v0.2.76)
PermissionRequest
✅
✅
✅
Permission requested (Py v0.1.29)
Setup
✅
❌
✅
Initial setup/maintenance
TeammateIdle
✅
❌
✅
Teammate idle (v0.2.33)
TaskCompleted
✅
❌
✅
Task completed (v0.2.33)
Elicitation
✅
❌
✅
MCP elicitation request
ElicitationResult
✅
❌
✅
MCP elicitation response
ConfigChange
✅
❌
✅
Config file changed (v0.2.49)
WorktreeCreate
✅
❌
✅
Worktree creation (v0.2.50)
WorktreeRemove
✅
❌
✅
Worktree removal (v0.2.50)
InstructionsLoaded
✅
❌
✅
CLAUDE.md file loaded (v0.2.69)
Input Type
TypeScript
Python
Ruby
PreToolUseHookInput
✅
✅
✅
PostToolUseHookInput
✅
✅
✅
PostToolUseFailureHookInput
✅
✅
✅
NotificationHookInput
✅
✅
✅
UserPromptSubmitHookInput
✅
✅
✅
SessionStartHookInput
✅
❌
✅
SessionEndHookInput
✅
❌
✅
StopHookInput
✅
✅
✅
StopFailureHookInput
✅
❌
✅
SubagentStartHookInput
✅
✅
✅
SubagentStopHookInput
✅
✅
✅
PreCompactHookInput
✅
✅
✅
PostCompactHookInput
✅
❌
✅
PermissionRequestHookInput
✅
✅
✅
SetupHookInput
✅
❌
✅
TeammateIdleHookInput
✅
❌
✅
TaskCompletedHookInput
✅
❌
✅
ElicitationHookInput
✅
❌
✅
ElicitationResultHookInput
✅
❌
✅
ConfigChangeHookInput
✅
❌
✅
WorktreeCreateHookInput
✅
❌
✅
WorktreeRemoveHookInput
✅
❌
✅
InstructionsLoadedHookInput
✅
❌
✅
Field
TypeScript
Python
Ruby
Notes
session_id
✅
✅
✅
Session identifier
transcript_path
✅
✅
✅
Path to session transcript
cwd
✅
✅
✅
Working directory
permission_mode
✅
❌
✅
Current permission mode
agent_id
✅
✅
✅
Subagent ID (when in subagent context) (v0.2.69)
agent_type
✅
✅
✅
Agent type name (v0.2.69)
Field
TypeScript
Python
Ruby
Notes
stop_hook_active
✅
✅
✅
Whether stop hook is active
last_assistant_message
✅
❌
✅
Last assistant message text (v0.2.51+)
StopFailureHookInput Fields
Field
TypeScript
Python
Ruby
Notes
error
✅
❌
✅
API error type (AssistantMessageError)
error_details
✅
❌
✅
Additional error details
last_assistant_message
✅
❌
✅
Last assistant message text
SubagentStopHookInput Fields
Field
TypeScript
Python
Ruby
Notes
stop_hook_active
✅
✅
✅
Whether stop hook is active
agent_id
✅
✅
✅
Subagent identifier
agent_transcript_path
✅
✅
✅
Path to agent transcript
agent_type
✅
✅
✅
Agent type
last_assistant_message
✅
❌
✅
Last assistant message text (v0.2.51+)
Output Field
TypeScript
Python
Ruby
Notes
continue
✅
✅
✅
Continue execution
async
✅
✅
✅
Async hook execution
asyncTimeout
✅
✅
✅
Async timeout
suppressOutput
✅
✅
✅
Hide stdout
stopReason
✅
✅
✅
Stop message
decision
✅
✅
✅
Block decision
systemMessage
✅
✅
✅
System message
reason
✅
✅
✅
Reason feedback
hookSpecificOutput
✅
✅
✅
Event-specific output
Hook-Specific Output Fields
Event-specific fields returned via hookSpecificOutput:
PreToolUseHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
permissionDecision
✅
✅
✅
allow, deny, or ask
permissionDecisionReason
✅
✅
✅
Reason for permission decision
updatedInput
✅
✅
✅
Modified tool input
additionalContext
✅
✅
✅
Context string returned to model
PostToolUseHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
updatedMCPToolOutput
✅
✅
✅
Modified MCP tool output
PostToolUseFailureHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
SessionStartHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
PostCompactHookInput Fields
Field
TypeScript
Python
Ruby
Notes
trigger
✅
❌
✅
'manual' or 'auto'
compact_summary
✅
❌
✅
Summary produced by compaction
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
❌
✅
Context string returned to model
SubagentStartHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
UserPromptSubmitHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
PermissionRequestHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
decision
✅
✅
✅
{ behavior: 'allow'/'deny', ... } obj
NotificationHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
additionalContext
✅
✅
✅
Context string returned to model
ElicitationHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
action
✅
❌
✅
accept/decline/cancel
content
✅
❌
✅
Response content for form mode
ElicitationResultHookSpecificOutput
Field
TypeScript
Python
Ruby
Notes
action
✅
❌
✅
accept/decline/cancel
content
✅
❌
✅
Response content
Field
TypeScript
Python
Ruby
matcher
✅
✅
✅
hooks / callbacks
✅
✅
✅
timeout
✅
✅
✅
Permission handling and updates.
Mode
TypeScript
Python
Ruby
Notes
default
✅
✅
✅
Standard prompting
acceptEdits
✅
✅
✅
Auto-accept edits
plan
✅
✅
✅
Planning mode
bypassPermissions
✅
✅
✅
Skip all checks
dontAsk
✅
❌
✅
Never prompt
Type
TypeScript
Python
Ruby
PermissionResultAllow
✅
✅
✅
PermissionResultDeny
✅
✅
✅
Field
TypeScript
Python
Ruby
behavior
✅
✅
✅
updatedInput
✅
✅
✅
updatedPermissions
✅
✅
✅
message (deny)
✅
✅
✅
interrupt (deny)
✅
✅
✅
toolUseID
✅
❌
✅
Update Type
TypeScript
Python
Ruby
addRules
✅
✅
✅
replaceRules
✅
✅
✅
removeRules
✅
✅
✅
setMode
✅
✅
✅
addDirectories
✅
✅
✅
removeDirectories
✅
✅
✅
Permission Update Destinations
Destination
TypeScript
Python
Ruby
userSettings
✅
✅
✅
projectSettings
✅
✅
✅
localSettings
✅
✅
✅
session
✅
✅
✅
cliArg
✅
❌
✅
Field
TypeScript
Python
Ruby
Notes
signal
✅
✅
✅
Abort signal
suggestions
✅
✅
✅
Permission suggestions
blockedPath
✅
❌
✅
Blocked file path
decisionReason
✅
❌
✅
Why permission triggered
toolUseID
✅
❌
✅
Tool call ID
agentID
✅
❌
✅
Subagent ID if applicable
description
✅
❌
✅
Human-readable tool description (v0.2.75)
title
✅
❌
✅
Full permission prompt sentence (v0.2.77)
displayName
✅
❌
✅
Short noun phrase for tool action (v0.2.77)
Model Context Protocol server support.
Type
TypeScript
Python
Ruby
Notes
stdio
✅
✅
✅
Subprocess with stdio
sse
✅
✅
✅
Server-sent events
http
✅
✅
✅
HTTP transport
sdk
✅
✅
✅
In-process SDK server
claudeai-proxy
✅
❌
✅
Claude.ai proxy server (managed)
Field
TypeScript
Python
Ruby
type
✅
✅
✅
command
✅
✅
✅
args
✅
✅
✅
env
✅
✅
✅
Field
TypeScript
Python
Ruby
type
✅
✅
✅
url
✅
✅
✅
headers
✅
✅
✅
Field
TypeScript
Python
Ruby
type
✅
✅
✅
name
✅
✅
✅
instance
✅
✅
✅
Field
TypeScript
Python
Ruby
type
✅
❌
✅
url
✅
❌
✅
id
✅
❌
✅
Feature
TypeScript
Python
Ruby
Notes
createSdkMcpServer
✅
✅
✅
Create SDK server
tool() helper
✅
✅
✅
Create tool definition
Tool input schema
✅ (Zod)
✅
✅ (Hash/JSON Schema)
Schema definition
Tool annotations
✅
✅
✅
MCP tool hints (v0.2.27)
Session management and resumption.
Feature
TypeScript
Python
Ruby
Notes
Session ID tracking
✅
✅
✅
Via messages
Resume by ID
✅
✅
✅
resume option
Resume at message
✅
❌
✅
resumeSessionAt
Fork session
✅
✅
✅
forkSession option
Persist session
✅
❌
✅
persistSession option
Continue most recent
✅
✅
✅
continue option
Feature
TypeScript
Python
Ruby
Notes
listSessions()
✅
✅
✅
List past sessions with metadata (v0.2.53)
getSessionMessages()
✅
✅
✅
Read session transcript messages (v0.2.59)
getSessionInfo()
✅
✅
✅
Get single session metadata (v0.2.75)
renameSession()
✅
✅
✅
Rename a session (v0.2.74)
tagSession()
✅
✅
✅
Tag a session (v0.2.75)
forkSession()
✅
❌
✅
Fork/branch a session (v0.2.76)
Field
TypeScript
Python
Ruby
Notes
dir
✅
✅
✅
Project directory (includes worktrees)
limit
✅
✅
✅
Maximum number of sessions to return
includeWorktrees
✅
✅
✅
Include git worktree sessions (default: true)
offset
✅
❌
✅
Pagination offset (v0.2.75)
GetSessionMessagesOptions
Field
TypeScript
Python
Ruby
Notes
dir
✅
✅
✅
Project directory to find session in
limit
✅
✅
✅
Maximum number of messages to return
offset
✅
✅
✅
Number of messages to skip from the start
Field
TypeScript
Python
Ruby
Notes
type
✅
✅
✅
'user' or 'assistant'
uuid
✅
✅
✅
Message UUID
session_id
✅
✅
✅
Session ID
message
✅
✅
✅
Raw message content
parent_tool_use_id
✅
✅
✅
Parent tool use ID (always null)
Field
TypeScript
Python
Ruby
Notes
sessionId
✅
✅
✅
Session UUID
summary
✅
✅
✅
Display title/summary
lastModified
✅
✅
✅
Last modified time (ms since epoch)
fileSize
✅
✅
✅
Session file size in bytes
customTitle
✅
✅
✅
User-set title via /rename
firstPrompt
✅
✅
✅
First meaningful user prompt
gitBranch
✅
✅
✅
Git branch at end of session
cwd
✅
✅
✅
Working directory for session
tag
✅
✅
✅
User-set tag (v0.2.75)
createdAt
✅
✅
✅
Creation time in ms (v0.2.75)
Field
TypeScript
Python
Ruby
Notes
dir
✅
❌
✅
Project directory
upToMessageId
✅
❌
✅
Slice transcript up to this UUID (inclusive)
title
✅
❌
✅
Custom title for the fork
Field
TypeScript
Python
Ruby
Notes
sessionId
✅
❌
✅
New forked session UUID
V2 Session API (Unstable)
Feature
TypeScript
Python
Ruby
Notes
SDKSession interface
✅
❌
✅
Multi-turn session object
unstable_v2_createSession
✅
❌
✅
Create new session
unstable_v2_resumeSession
✅
❌
✅
Resume existing session
unstable_v2_prompt
✅
❌
✅
One-shot prompt
Custom subagent definitions.
Field
TypeScript
Python
Ruby
Notes
description
✅
✅
✅
When to use agent
prompt
✅
✅
✅
Agent system prompt
tools
✅
✅
✅
Allowed tools
disallowedTools
✅
❌
✅
Blocked tools
model
✅
✅
✅
Model override (sonnet/opus/haiku/inherit)
mcpServers
✅
✅
✅
Agent-specific MCP servers
criticalSystemReminder_EXPERIMENTAL
✅
❌
✅
Critical reminder (experimental)
skills
✅
✅
✅
Skills to preload into agent context
memory
❌
✅
❌
Memory scope for agent (Python-only v0.1.49)
maxTurns
✅
❌
✅
Max agentic turns before stopping
Sandbox configuration for command execution isolation.
Field
TypeScript
Python
Ruby
enabled
✅
✅
✅
autoAllowBashIfSandboxed
✅
✅
✅
excludedCommands
✅
✅
✅
allowUnsandboxedCommands
✅
✅
✅
network
✅
✅
✅
ignoreViolations
✅
✅
✅
enableWeakerNestedSandbox
✅
✅
✅
enableWeakerNetworkIsolation
✅
❌
✅
ripgrep
✅
❌
✅
filesystem
✅
❌
✅
Field
TypeScript
Python
Ruby
allowWrite
✅
❌
✅
denyWrite
✅
❌
✅
denyRead
✅
❌
✅
allowRead
✅
❌
✅
allowManagedReadPathsOnly
✅
❌
✅
Field
TypeScript
Python
Ruby
allowedDomains
✅
❌
✅
allowManagedDomainsOnly
✅
❌
✅
allowUnixSockets
✅
✅
✅
allowAllUnixSockets
✅
✅
✅
allowLocalBinding
✅
✅
✅
httpProxyPort
✅
✅
✅
socksProxyPort
✅
✅
✅
Error types and hierarchy.
Error Type
TypeScript
Python
Ruby
Notes
Base Error
✅
✅
✅
Error / ClaudeAgent::Error
AbortError
✅
❌
✅
Operation cancelled
CLINotFoundError
❌
✅
✅
CLI not found
CLIVersionError
❌
❌
✅
CLI version too old
CLIConnectionError
❌
✅
✅
Connection failed
ProcessError
❌
✅
✅
CLI process failed
JSONDecodeError
❌
✅
✅
JSON parsing failed
MessageParseError
❌
✅
✅
Message parsing failed
TimeoutError
❌
❌
✅
Control request timeout
ConfigurationError
❌
❌
✅
Invalid configuration
Error Type
TypeScript
Python
Ruby
authentication_failed
✅
✅
✅
billing_error
✅
✅
✅
rate_limit
✅
✅
✅
invalid_request
✅
✅
✅
server_error
✅
✅
✅
unknown
✅
✅
✅
max_output_tokens
✅
❌
✅
Public API surface for SDK clients.
Feature
TypeScript
Python
Ruby
Notes
listSessions()
✅
✅
✅
List past sessions with metadata (v0.2.53)
getSessionMessages()
✅
✅
✅
Read session transcript (v0.2.59)
getSessionInfo()
✅
✅
✅
Get single session metadata (v0.2.75)
renameSession()
✅
✅
✅
Rename a session (v0.2.74)
tagSession()
✅
✅
✅
Tag a session (v0.2.75)
forkSession()
✅
❌
✅
Fork/branch a session (v0.2.76)
Feature
TypeScript
Python
Ruby
Notes
One-shot query function
✅ query()
✅ query()
✅ ClaudeAgent.query()
Simple prompts
Returns async generator
✅
✅
✅ (Enumerator)
Streaming messages
Method
TypeScript
Python
Ruby
Notes
interrupt()
✅
✅
✅
Interrupt execution
setPermissionMode()
✅
✅
✅
Change permission mode
setModel()
✅
✅
✅
Change model
setMaxThinkingTokens()
✅
❌
✅
Set thinking limit
supportedCommands()
✅
❌
✅
Get slash commands
supportedModels()
✅
❌
✅
Get available models
mcpServerStatus()
✅
✅
✅
Get MCP status
accountInfo()
✅
❌
✅
Get account info
rewindFiles()
✅
✅
✅
Rewind file changes
setMcpServers()
✅
❌
✅
Dynamic MCP servers
reconnectMcpServer()
✅
✅
✅
Reconnect MCP server
toggleMcpServer()
✅
✅
✅
Enable/disable MCP
stopTask()
✅
✅
✅
Stop running task
streamInput()
✅
✅
✅
Stream user input
initializationResult()
✅
✅
✅
Full init response (Py: get_server_info())
close()
✅
✅
✅
Close query/session
supportedAgents()
✅
❌
✅
Get available subagents (v0.2.63)
Feature
TypeScript
Python
Ruby
Notes
Multi-turn client
❌
✅ ClaudeSDKClient
✅ ClaudeAgent::Client
Interactive sessions
connect()
N/A
✅
✅
Start session
disconnect()
N/A
✅
✅
End session
send_message()
N/A
✅
✅
Send user message
receive_response()
N/A
✅
✅
Receive until result
stream_input()
N/A
❌
✅
Stream input messages
abort!()
N/A
❌
✅
Abort operations
Control methods
N/A
Partial
✅
Python: interrupt, setPermissionMode, setModel, rewindFiles, mcpStatus, reconnectMcp, toggleMcp, stopTask; Ruby: all
Feature
TypeScript
Python
Ruby
Notes
Transport interface
✅
✅
✅
Transport abstraction
Process transport
✅
✅
✅
Subprocess communication
Custom spawn
✅
❌
✅
VM/container support
✅ = Fully implemented
❌ = Not implemented
N/A = Not applicable (language-specific feature)
Partial = Partially implemented
Primary reference for API surface — sdk.d.ts provides complete type definitions
executable/executableArgs are JS-specific (node/bun/deno)
Does NOT have user, init/initOnly/maintenance as typed Options (use extraArgs or settingSources)
Some features present in types but undocumented in changelog: StopFailure hook, Elicitation/ElicitationResult hooks, onElicitation option, ElicitationCompleteMessage, LocalCommandOutputMessage, FastModeState
Partial control protocol: supports interrupt, setPermissionMode, setModel, rewindFiles, mcpStatus, reconnectMcp, toggleMcp, stopTask
Has add_mcp_server()/remove_mcp_server() client methods (not in TypeScript)
AgentDefinition.memory is Python-only (not in TypeScript or Ruby)
Missing hooks: SessionEnd, StopFailure, Setup, TeammateIdle, TaskCompleted, Elicitation, ElicitationResult, ConfigChange, WorktreeCreate, WorktreeRemove, InstructionsLoaded, PostCompact
Missing options: allowDangerouslySkipPermissions, persistSession, resumeSessionAt, sessionId, strictMcpConfig, debug/debugFile, promptSuggestions, onElicitation, toolConfig, agentProgressSummaries, agent (main thread agent), dontAsk permission mode
ToolPermissionContext missing blockedPath, decisionReason, toolUseID, agentID, description, title, displayName
Missing: forkSession(), offset on list_sessions, cancel_async_message, get_settings, APIRetryMessage
Ruby SDK (This Repository)
Feature parity with TypeScript SDK v0.2.80
Complete control protocol, hook, and V2 Session API support
Dedicated Client class for multi-turn conversations
executable/executableArgs marked N/A (JS runtime options)