ClaudeCodeSDK.OptionBuilder (claude_code_sdk v0.0.1)
View SourceSmart option builder for Claude Code SDK configurations.
This module provides pre-configured option sets and builder patterns for
common use cases. Instead of manually constructing ClaudeCodeSDK.Options
structs, you can use these convenience functions to get sensible defaults
for different environments and scenarios.
Design Philosophy
- Environment-aware: Automatically adapt to dev, test, and production
- Security-first: Production configs are restrictive by default
- Composable: Mix and match presets with custom overrides
- Practical: Based on real-world usage patterns
Quick Start
# Get options for current environment
options = ClaudeCodeSDK.OptionBuilder.for_environment()
# Use a specific preset
options = ClaudeCodeSDK.OptionBuilder.build_development_options()
# Customize a preset
options = ClaudeCodeSDK.OptionBuilder.merge(:development, %{max_turns: 15})
Environment Presets
Environment | Security | Tools | Turn Limit | Use Case |
---|---|---|---|---|
Development | Permissive | All tools | 10 | Local development |
Staging | Moderate | Read-only | 5 | Testing/CI |
Production | Restrictive | Read-only | 3 | Production analysis |
Use Case Presets
Preset | Tools | Purpose | Permissions |
---|---|---|---|
Analysis | Read, Grep, Find | Code review | Read-only |
Documentation | Read, Write | Doc generation | File creation |
Chat | None | Simple Q&A | No tools |
Sandboxed | Custom | Safe execution | Isolated |
Summary
Functions
Lists all available preset names.
Builds options optimized for code analysis tasks.
Builds options for simple chat and Q&A interactions.
Builds options suitable for development environment.
Builds options for documentation generation tasks.
Builds options suitable for production environment.
Builds options suitable for staging/testing environment.
Builds options for test generation and testing tasks.
Builds options for a specific environment based on Mix.env().
Merges custom options with a base configuration.
Creates options for quick, one-off queries.
Creates a sandboxed configuration for safe execution.
Validates that an options struct has sensible configuration.
Adds additional allowed tools to any options.
Adds a custom system prompt to any options.
Sets a custom turn limit for any options.
Adds a custom working directory to any options.
Functions
@spec available_presets() :: [atom()]
Lists all available preset names.
Useful for dynamic configuration or validation.
Examples
presets = ClaudeCodeSDK.OptionBuilder.available_presets()
# => [:development, :staging, :production, :analysis, :chat, :documentation, :testing]
@spec build_analysis_options() :: ClaudeCodeSDK.Options.t()
Builds options optimized for code analysis tasks.
Use for: Code reviews, security audits, quality analysis
Features:
- Read and search tools for thorough analysis
- Higher turn limit (7) for comprehensive review
- No modification permissions for safety
- Specialized system prompt for analysis focus
Examples
options = ClaudeCodeSDK.OptionBuilder.build_analysis_options()
ClaudeCodeSDK.query("Review this module for potential issues", options)
@spec build_chat_options() :: ClaudeCodeSDK.Options.t()
Builds options for simple chat and Q&A interactions.
Use for: Help desk, documentation queries, general assistance
Features:
- Single turn for quick responses
- Text output for simple display
- No tool access to prevent unintended actions
- Minimal permissions
Examples
options = ClaudeCodeSDK.OptionBuilder.build_chat_options()
ClaudeCodeSDK.query("What is the difference between async and sync?", options)
@spec build_development_options() :: ClaudeCodeSDK.Options.t()
Builds options suitable for development environment.
Use for: Local development, debugging, experimentation
Features:
- Higher turn limit (10) for complex tasks
- Verbose output for debugging
- All tools allowed for full functionality
- Edit permissions accepted for rapid iteration
- Stream JSON output for real-time feedback
Examples
# Basic development setup
options = ClaudeCodeSDK.OptionBuilder.build_development_options()
ClaudeCodeSDK.query("Help me debug this function", options)
# Development with custom system prompt
options =
ClaudeCodeSDK.OptionBuilder.build_development_options()
|> ClaudeCodeSDK.OptionBuilder.with_system_prompt("You are a debugging expert")
@spec build_documentation_options() :: ClaudeCodeSDK.Options.t()
Builds options for documentation generation tasks.
Use for: API docs, README generation, code documentation
Features:
- Read access to understand existing code
- Write access for creating documentation files
- Higher turn limit (8) for comprehensive docs
- Accept edits mode for file creation
- Specialized prompt for documentation focus
Examples
options = ClaudeCodeSDK.OptionBuilder.build_documentation_options()
ClaudeCodeSDK.query("Generate API documentation for this module", options)
@spec build_production_options() :: ClaudeCodeSDK.Options.t()
Builds options suitable for production environment.
Use for: Production monitoring, read-only analysis, customer-facing features
Features:
- Low turn limit (3) for efficiency
- Read-only access only
- Plan mode for safety
- Minimal tool access
- Structured JSON output
Examples
# Production-safe code analysis
options = ClaudeCodeSDK.OptionBuilder.build_production_options()
ClaudeCodeSDK.query("Explain what this function does", options)
@spec build_staging_options() :: ClaudeCodeSDK.Options.t()
Builds options suitable for staging/testing environment.
Use for: CI/CD pipelines, automated testing, code review
Features:
- Moderate turn limit (5) for focused tasks
- Read-only tools for safety
- Plan mode prevents automatic changes
- Bash disabled to prevent system modifications
- JSON output for structured results
Examples
# Use in CI for code analysis
options = ClaudeCodeSDK.OptionBuilder.build_staging_options()
ClaudeCodeSDK.query("Analyze this code for security issues", options)
@spec build_testing_options() :: ClaudeCodeSDK.Options.t()
Builds options for test generation and testing tasks.
Use for: Unit test creation, test analysis, quality assurance
Features:
- Read access to understand code under test
- Write access for creating test files
- Moderate turn limit for thorough test coverage
- Testing-focused system prompt
Examples
options = ClaudeCodeSDK.OptionBuilder.build_testing_options()
ClaudeCodeSDK.query("Generate comprehensive unit tests for this module", options)
@spec for_environment() :: ClaudeCodeSDK.Options.t()
Builds options for a specific environment based on Mix.env().
Automatically selects appropriate options based on current environment:
:dev
-> development options (permissive, verbose):test
-> staging options (moderate restrictions):prod
-> production options (restrictive, safe)
This is the recommended way to get environment-appropriate defaults.
Examples
# Get options for current environment
options = ClaudeCodeSDK.OptionBuilder.for_environment()
# In development, this gives you full access
# In production, this gives you read-only access
@spec merge(atom() | ClaudeCodeSDK.Options.t(), map()) :: ClaudeCodeSDK.Options.t()
Merges custom options with a base configuration.
Allows you to start with a preset and customize specific fields. This is the recommended pattern for customizing presets.
Parameters
base
- Base preset (atom) or Options structcustom
- Map of custom options to override
Examples
# Start with development preset, customize turn limit
options = ClaudeCodeSDK.OptionBuilder.merge(:development, %{max_turns: 15})
# Start with analysis preset, add custom prompt
options = ClaudeCodeSDK.OptionBuilder.merge(:analysis, %{
system_prompt: "Focus on security vulnerabilities",
max_turns: 10
})
# Merge with existing options
base_options = ClaudeCodeSDK.OptionBuilder.build_chat_options()
options = ClaudeCodeSDK.OptionBuilder.merge(base_options, %{max_turns: 3})
@spec quick() :: ClaudeCodeSDK.Options.t()
Creates options for quick, one-off queries.
Use for: Simple questions, quick checks, lightweight operations
Features:
- Single turn limit
- Text output for simplicity
- No tools for safety
- Fast response
Examples
options = ClaudeCodeSDK.OptionBuilder.quick()
ClaudeCodeSDK.query("What does this error mean?", options)
@spec sandboxed(String.t(), [String.t()]) :: ClaudeCodeSDK.Options.t()
Creates a sandboxed configuration for safe execution.
Use for: Untrusted code execution, isolated environments, testing
Features:
- Isolated to specific directory
- Bypass permissions (safe within sandbox)
- Customizable tool access
- No bash access by default
Parameters
sandbox_path
- Path to sandbox directoryallowed_tools
- List of tools to allow (default: ["Read", "Write"])
Examples
# Basic sandbox
options = ClaudeCodeSDK.OptionBuilder.sandboxed("/tmp/sandbox")
# Sandbox with custom tools
options = ClaudeCodeSDK.OptionBuilder.sandboxed("/tmp/safe", ["Read", "Write", "Grep"])
@spec validate(ClaudeCodeSDK.Options.t()) :: {:ok, ClaudeCodeSDK.Options.t()} | {:warning, ClaudeCodeSDK.Options.t(), [String.t()]} | {:error, String.t()}
Validates that an options struct has sensible configuration.
Checks for common misconfigurations and provides warnings.
Parameters
options
- Options struct to validate
Returns
{:ok, options}
if valid{:warning, options, warnings}
if valid but has warnings{:error, reason}
if invalid
Examples
options = ClaudeCodeSDK.OptionBuilder.build_development_options()
{:ok, _} = ClaudeCodeSDK.OptionBuilder.validate(options)
@spec with_additional_tools(ClaudeCodeSDK.Options.t(), [String.t()]) :: ClaudeCodeSDK.Options.t()
Adds additional allowed tools to any options.
Parameters
options
- Options struct to modifytools
- List of additional tools to allow
Examples
options =
ClaudeCodeSDK.OptionBuilder.build_production_options()
|> ClaudeCodeSDK.OptionBuilder.with_additional_tools(["Grep"])
@spec with_system_prompt(String.t()) :: ClaudeCodeSDK.Options.t()
Adds a custom system prompt to any options.
Parameters
prompt
- System prompt to useoptions
- Options struct to modify (optional, creates new if not provided)
Examples
options = ClaudeCodeSDK.OptionBuilder.with_system_prompt("You are a security expert")
options =
ClaudeCodeSDK.OptionBuilder.build_analysis_options()
|> ClaudeCodeSDK.OptionBuilder.with_system_prompt("You are a security expert")
@spec with_system_prompt(ClaudeCodeSDK.Options.t(), String.t()) :: ClaudeCodeSDK.Options.t()
@spec with_turn_limit(ClaudeCodeSDK.Options.t(), pos_integer()) :: ClaudeCodeSDK.Options.t()
Sets a custom turn limit for any options.
Parameters
options
- Options struct to modifyturns
- Maximum number of turns
Examples
options =
ClaudeCodeSDK.OptionBuilder.build_chat_options()
|> ClaudeCodeSDK.OptionBuilder.with_turn_limit(5)
@spec with_working_directory(String.t()) :: ClaudeCodeSDK.Options.t()
Adds a custom working directory to any options.
Parameters
cwd
- Working directory pathoptions
- Options struct to modify (optional, creates new if not provided)
Examples
options = ClaudeCodeSDK.OptionBuilder.with_working_directory("/project")
options =
ClaudeCodeSDK.OptionBuilder.build_development_options()
|> ClaudeCodeSDK.OptionBuilder.with_working_directory("/project")
@spec with_working_directory(ClaudeCodeSDK.Options.t(), String.t()) :: ClaudeCodeSDK.Options.t()