Documentation
¶
Overview ¶
Package claudecode provides the Claude Code SDK for Go.
This SDK enables programmatic interaction with Claude Code CLI through two main APIs: - Query() for one-shot requests with automatic cleanup - Client for bidirectional streaming conversations
The SDK follows Go-native patterns with goroutines and channels instead of async/await, providing context-first design for cancellation and timeouts.
Example usage:
import "github.com/jrpospos/claude-code-sdk-go" // One-shot query messages, err := claudecode.Query(ctx, "Hello, Claude!") if err != nil { log.Fatal(err) } // Streaming client client := claudecode.NewClient( claudecode.WithSystemPrompt("You are a helpful assistant"), ) defer client.Close()
The SDK provides 100% feature parity with the Python SDK while embracing Go idioms and patterns.
Index ¶
- Constants
- Variables
- func WithClient(ctx context.Context, fn func(Client) error, opts ...Option) error
- func WithClientTransport(ctx context.Context, transport Transport, fn func(Client) error, ...) error
- type AssistantMessage
- type BaseError
- type CLINotFoundError
- type Client
- type ClientImpl
- func (c *ClientImpl) Connect(ctx context.Context, _ ...StreamMessage) error
- func (c *ClientImpl) Disconnect() error
- func (c *ClientImpl) Interrupt(ctx context.Context) error
- func (c *ClientImpl) Query(ctx context.Context, prompt string) error
- func (c *ClientImpl) QueryStream(ctx context.Context, messages <-chan StreamMessage) error
- func (c *ClientImpl) QueryWithSession(ctx context.Context, prompt string, sessionID string) error
- func (c *ClientImpl) ReceiveMessages(_ context.Context) <-chan Message
- func (c *ClientImpl) ReceiveResponse(_ context.Context) MessageIterator
- type ConnectionError
- type ContentBlock
- type JSONDecodeError
- type McpHTTPServerConfig
- type McpSSEServerConfig
- type McpServerConfig
- type McpServerType
- type McpStdioServerConfig
- type Message
- type MessageIterator
- type MessageParseError
- type Option
- func WithAddDirs(dirs ...string) Option
- func WithAllowedTools(tools ...string) Option
- func WithAppendSystemPrompt(prompt string) Option
- func WithCLIPath(path string) Option
- func WithContinueConversation(continueConversation bool) Option
- func WithCwd(cwd string) Option
- func WithDisallowedTools(tools ...string) Option
- func WithExtraArgs(args map[string]*string) Option
- func WithMaxThinkingTokens(tokens int) Option
- func WithMaxTurns(turns int) Option
- func WithMcpServers(servers map[string]McpServerConfig) Option
- func WithModel(model string) Option
- func WithPermissionMode(mode PermissionMode) Option
- func WithPermissionPromptToolName(toolName string) Option
- func WithResume(sessionID string) Option
- func WithSettings(settings string) Option
- func WithSystemPrompt(prompt string) Option
- func WithTransport(_ Transport) Option
- type Options
- type PermissionMode
- type ProcessError
- type ResultMessage
- type SDKError
- type StreamMessage
- type SystemMessage
- type TextBlock
- type ThinkingBlock
- type ToolResultBlock
- type ToolUseBlock
- type Transport
- type UserMessage
Constants ¶
const ( PermissionModeDefault = shared.PermissionModeDefault PermissionModeAcceptEdits = shared.PermissionModeAcceptEdits PermissionModePlan = shared.PermissionModePlan PermissionModeBypassPermissions = shared.PermissionModeBypassPermissions McpServerTypeStdio = shared.McpServerTypeStdio McpServerTypeSSE = shared.McpServerTypeSSE McpServerTypeHTTP = shared.McpServerTypeHTTP )
Re-export constants
const ( MessageTypeUser = shared.MessageTypeUser MessageTypeAssistant = shared.MessageTypeAssistant MessageTypeSystem = shared.MessageTypeSystem MessageTypeResult = shared.MessageTypeResult )
Re-export message type constants
const ( ContentBlockTypeText = shared.ContentBlockTypeText ContentBlockTypeThinking = shared.ContentBlockTypeThinking ContentBlockTypeToolUse = shared.ContentBlockTypeToolUse ContentBlockTypeToolResult = shared.ContentBlockTypeToolResult )
Re-export content block type constants
const Version = "0.1.0"
Version represents the current version of the Claude Code SDK for Go.
Variables ¶
var ErrNoMoreMessages = errors.New("no more messages")
ErrNoMoreMessages indicates the message iterator has no more messages.
var NewCLINotFoundError = shared.NewCLINotFoundError
NewCLINotFoundError creates a new CLI not found error.
var NewConnectionError = shared.NewConnectionError
NewConnectionError creates a new connection error.
var NewJSONDecodeError = shared.NewJSONDecodeError
NewJSONDecodeError creates a new JSON decode error.
var NewMessageParseError = shared.NewMessageParseError
NewMessageParseError creates a new message parse error.
var NewProcessError = shared.NewProcessError
NewProcessError creates a new process error.
Functions ¶
func WithClient ¶
WithClient provides Go-idiomatic resource management equivalent to Python SDK's async context manager. It automatically connects to Claude Code CLI, executes the provided function, and ensures proper cleanup. This eliminates the need for manual Connect/Disconnect calls and prevents resource leaks.
The function follows Go's established resource management patterns using defer for guaranteed cleanup, similar to how database connections, files, and other resources are typically managed in Go.
Example - Basic usage:
err := claudecode.WithClient(ctx, func(client claudecode.Client) error { return client.Query(ctx, "What is 2+2?") }) if err != nil { log.Fatal(err) }
Example - With configuration options:
err := claudecode.WithClient(ctx, func(client claudecode.Client) error { if err := client.Query(ctx, "Calculate the area of a circle with radius 5"); err != nil { return err } // Process responses for msg := range client.ReceiveMessages(ctx) { if assistantMsg, ok := msg.(*claudecode.AssistantMessage); ok { fmt.Println("Claude:", assistantMsg.Content[0].(*claudecode.TextBlock).Text) } } return nil }, claudecode.WithSystemPrompt("You are a helpful math tutor"), claudecode.WithAllowedTools("Read", "Write"))
The client will be automatically connected before fn is called and disconnected after fn returns, even if fn returns an error or panics. This provides 100% functional parity with Python SDK's 'async with ClaudeSDKClient()' pattern while using idiomatic Go resource management.
Parameters:
- ctx: Context for connection management and cancellation
- fn: Function to execute with the connected client
- opts: Optional client configuration options
Returns an error if connection fails or if fn returns an error. Disconnect errors are handled gracefully without overriding the original error from fn.
func WithClientTransport ¶
func WithClientTransport(ctx context.Context, transport Transport, fn func(Client) error, opts ...Option) error
WithClientTransport provides Go-idiomatic resource management with a custom transport for testing. This is the testing-friendly version of WithClient that accepts an explicit transport parameter.
Usage in tests:
transport := newClientMockTransport() err := WithClientTransport(ctx, transport, func(client claudecode.Client) error { return client.Query(ctx, "What is 2+2?") }, opts...)
Parameters:
- ctx: Context for connection management and cancellation
- transport: Custom transport to use (typically a mock for testing)
- fn: Function to execute with the connected client
- opts: Optional client configuration options
Returns an error if connection fails or if fn returns an error. Disconnect errors are handled gracefully without overriding the original error from fn.
Types ¶
type AssistantMessage ¶
type AssistantMessage = shared.AssistantMessage
AssistantMessage represents a message from the assistant.
type CLINotFoundError ¶
type CLINotFoundError = shared.CLINotFoundError
CLINotFoundError indicates that the Claude Code CLI was not found.
type Client ¶
type Client interface { Connect(ctx context.Context, prompt ...StreamMessage) error Disconnect() error Query(ctx context.Context, prompt string) error QueryWithSession(ctx context.Context, prompt string, sessionID string) error QueryStream(ctx context.Context, messages <-chan StreamMessage) error ReceiveMessages(ctx context.Context) <-chan Message ReceiveResponse(ctx context.Context) MessageIterator Interrupt(ctx context.Context) error }
Client provides bidirectional streaming communication with Claude Code CLI.
func NewClientWithTransport ¶
NewClientWithTransport creates a new Client with a custom transport (for testing).
type ClientImpl ¶
type ClientImpl struct {
// contains filtered or unexported fields
}
ClientImpl implements the Client interface.
func (*ClientImpl) Connect ¶
func (c *ClientImpl) Connect(ctx context.Context, _ ...StreamMessage) error
Connect establishes a connection to the Claude Code CLI.
func (*ClientImpl) Disconnect ¶
func (c *ClientImpl) Disconnect() error
Disconnect closes the connection to the Claude Code CLI.
func (*ClientImpl) Interrupt ¶
func (c *ClientImpl) Interrupt(ctx context.Context) error
Interrupt sends an interrupt signal to stop the current operation.
func (*ClientImpl) Query ¶
func (c *ClientImpl) Query(ctx context.Context, prompt string) error
Query sends a simple text query using the default session. This is equivalent to QueryWithSession(ctx, prompt, "default").
Example:
client.Query(ctx, "What is Go?")
func (*ClientImpl) QueryStream ¶
func (c *ClientImpl) QueryStream(ctx context.Context, messages <-chan StreamMessage) error
QueryStream sends a stream of messages.
func (*ClientImpl) QueryWithSession ¶ added in v0.2.4
QueryWithSession sends a simple text query using the specified session ID. Each session maintains its own conversation context, allowing for isolated conversations within the same client connection.
If sessionID is empty, it defaults to "default".
Example:
client.QueryWithSession(ctx, "Remember this", "my-session") client.QueryWithSession(ctx, "What did I just say?", "my-session") // Remembers context client.Query(ctx, "What did I just say?") // Won't remember, different session
func (*ClientImpl) ReceiveMessages ¶
func (c *ClientImpl) ReceiveMessages(_ context.Context) <-chan Message
ReceiveMessages returns a channel of incoming messages.
func (*ClientImpl) ReceiveResponse ¶
func (c *ClientImpl) ReceiveResponse(_ context.Context) MessageIterator
ReceiveResponse returns an iterator for the response messages.
type ConnectionError ¶
type ConnectionError = shared.ConnectionError
ConnectionError represents errors that occur during CLI connection.
type ContentBlock ¶
type ContentBlock = shared.ContentBlock
ContentBlock represents a content block within a message.
type JSONDecodeError ¶
type JSONDecodeError = shared.JSONDecodeError
JSONDecodeError represents JSON parsing errors from CLI responses.
type McpHTTPServerConfig ¶
type McpHTTPServerConfig = shared.McpHTTPServerConfig
McpHTTPServerConfig represents an HTTP MCP server configuration.
type McpSSEServerConfig ¶
type McpSSEServerConfig = shared.McpSSEServerConfig
McpSSEServerConfig represents an SSE MCP server configuration.
type McpServerConfig ¶
type McpServerConfig = shared.McpServerConfig
McpServerConfig represents an MCP server configuration.
type McpServerType ¶
type McpServerType = shared.McpServerType
McpServerType defines the type of MCP server.
type McpStdioServerConfig ¶
type McpStdioServerConfig = shared.McpStdioServerConfig
McpStdioServerConfig represents a stdio MCP server configuration.
type MessageIterator ¶
type MessageIterator = shared.MessageIterator
MessageIterator provides iteration over messages.
func Query ¶
Query executes a one-shot query with automatic cleanup. This follows the Python SDK pattern but uses dependency injection for transport.
func QueryWithTransport ¶
func QueryWithTransport( ctx context.Context, prompt string, transport Transport, opts ...Option, ) (MessageIterator, error)
QueryWithTransport executes a query with a custom transport. The transport parameter is required and must not be nil.
type MessageParseError ¶
type MessageParseError = shared.MessageParseError
MessageParseError represents errors parsing message content.
type Option ¶
type Option func(*Options)
Option configures Options using the functional options pattern.
func WithAddDirs ¶
WithAddDirs adds directories to the context.
func WithAllowedTools ¶
WithAllowedTools sets the allowed tools list.
func WithAppendSystemPrompt ¶
WithAppendSystemPrompt sets the append system prompt.
func WithContinueConversation ¶
WithContinueConversation enables conversation continuation.
func WithDisallowedTools ¶
WithDisallowedTools sets the disallowed tools list.
func WithExtraArgs ¶
WithExtraArgs sets arbitrary CLI flags via ExtraArgs.
func WithMaxThinkingTokens ¶
WithMaxThinkingTokens sets the maximum thinking tokens.
func WithMaxTurns ¶
WithMaxTurns sets the maximum number of conversation turns.
func WithMcpServers ¶
func WithMcpServers(servers map[string]McpServerConfig) Option
WithMcpServers sets the MCP server configurations.
func WithPermissionMode ¶
func WithPermissionMode(mode PermissionMode) Option
WithPermissionMode sets the permission mode.
func WithPermissionPromptToolName ¶
WithPermissionPromptToolName sets the permission prompt tool name.
func WithResume ¶
WithResume sets the session ID to resume.
func WithSettings ¶
WithSettings sets the settings file path or JSON string.
func WithSystemPrompt ¶
WithSystemPrompt sets the system prompt.
func WithTransport ¶
WithTransport sets a custom transport for testing. Since Transport is not part of Options struct, this is handled in client creation.
type Options ¶
Options contains configuration for Claude Code CLI interactions.
func NewOptions ¶
NewOptions creates Options with default values using functional options pattern.
type PermissionMode ¶
type PermissionMode = shared.PermissionMode
PermissionMode defines the permission handling mode.
type ProcessError ¶
type ProcessError = shared.ProcessError
ProcessError represents errors from the CLI process execution.
type ResultMessage ¶
type ResultMessage = shared.ResultMessage
ResultMessage represents a result or status message.
type StreamMessage ¶
type StreamMessage = shared.StreamMessage
StreamMessage represents a message in the streaming protocol.
type SystemMessage ¶
type SystemMessage = shared.SystemMessage
SystemMessage represents a system prompt message.
type ThinkingBlock ¶
type ThinkingBlock = shared.ThinkingBlock
ThinkingBlock represents a thinking content block.
type ToolResultBlock ¶
type ToolResultBlock = shared.ToolResultBlock
ToolResultBlock represents a tool result content block.
type ToolUseBlock ¶
type ToolUseBlock = shared.ToolUseBlock
ToolUseBlock represents a tool usage content block.
type Transport ¶
type Transport interface { Connect(ctx context.Context) error SendMessage(ctx context.Context, message StreamMessage) error ReceiveMessages(ctx context.Context) (<-chan Message, <-chan error) Interrupt(ctx context.Context) error Close() error }
Transport abstracts the communication layer with Claude Code CLI. This interface stays in main package because it's used by client code.
type UserMessage ¶
type UserMessage = shared.UserMessage
UserMessage represents a message from the user.
Directories
¶
Path | Synopsis |
---|---|
internal
|
|
cli
Package cli provides CLI discovery and command building functionality.
|
Package cli provides CLI discovery and command building functionality. |
parser
Package parser provides JSON message parsing functionality with speculative parsing and buffer management.
|
Package parser provides JSON message parsing functionality with speculative parsing and buffer management. |
shared
Package shared provides shared types and interfaces used across internal packages.
|
Package shared provides shared types and interfaces used across internal packages. |
subprocess
Package subprocess provides the subprocess transport implementation for Claude Code CLI.
|
Package subprocess provides the subprocess transport implementation for Claude Code CLI. |