cli-agents
API Reference

Types

RunOptions, CliName, McpServer, and provider-specific option structs

Types

All types are re-exported from the crate root and implement Serialize/Deserialize for easy JSON interop.

CliName

Enum of supported CLI agents.

pub enum CliName {
    Claude,
    Codex,
    Gemini,
}

Serializes to lowercase strings: "claude", "codex", "gemini". Implements Display with the same output.

RunOptions

Configuration for a single run() call. All fields except task are optional.

pub struct RunOptions {
    pub cli: Option<CliName>,
    pub task: String,
    pub system_prompt: Option<String>,
    pub system_prompt_file: Option<String>,
    pub mcp_servers: Option<HashMap<String, McpServer>>,
    pub cwd: Option<String>,
    pub model: Option<String>,
    pub idle_timeout_ms: Option<u64>,
    pub total_timeout_ms: Option<u64>,
    pub max_consecutive_tool_failures: Option<u32>,
    pub env: Option<HashMap<String, String>>,
    pub executable_path: Option<String>,
    pub resume_session_id: Option<String>,
    pub max_output_bytes: Option<usize>,
    pub skip_permissions: bool,
    pub providers: Option<ProviderOptions>,
}
FieldDefaultDescription
cliNone (auto-discover)Which CLI to use
taskrequiredThe prompt/task to send to the agent
system_promptNoneInline system prompt
system_prompt_fileNonePath to a system prompt file (takes precedence over system_prompt)
mcp_serversNoneMCP servers to connect
cwd"."Working directory for the CLI process
modelNoneModel name (e.g. "sonnet", "o3", "gemini-2.0-flash")
idle_timeout_ms300,000Idle timeout in milliseconds
total_timeout_msNoneTotal timeout in milliseconds
max_consecutive_tool_failures3Max consecutive tool failures before aborting
envNoneExtra environment variables for the CLI process
executable_pathNoneExplicit path to the CLI binary (skips discovery — requires cli to be set)
resume_session_idNoneSession ID to resume a previous conversation
max_output_bytes10 MBMax stdout buffer before aborting
skip_permissionsfalseBypass CLI permission prompts
providersNoneProvider-specific options

Serializes with camelCase field names and implements Default.

McpServer

Configuration for an MCP (Model Context Protocol) server.

pub struct McpServer {
    // Stdio transport
    pub command: Option<String>,
    pub args: Option<Vec<String>>,
    pub env: Option<HashMap<String, String>>,
    pub cwd: Option<String>,

    // HTTP/SSE transport
    pub url: Option<String>,
    pub transport_type: Option<McpTransport>,
    pub headers: Option<HashMap<String, String>>,

    // Tool filtering
    pub include_tools: Option<Vec<String>>,
    pub exclude_tools: Option<Vec<String>>,

    // Timeouts
    pub timeout: Option<u64>,
}

Use either stdio fields (command, args) or HTTP/SSE fields (url, transport_type), not both.

McpTransport

pub enum McpTransport {
    Stdio,
    Sse,
    Http,
}

ProviderOptions

Container for provider-specific option structs:

pub struct ProviderOptions {
    pub claude: Option<ClaudeOptions>,
    pub codex: Option<CodexOptions>,
    pub gemini: Option<GeminiOptions>,
}

Only the options matching the active CLI are used. You can safely set options for all providers.

ClaudeOptions

pub struct ClaudeOptions {
    pub allowed_tools: Option<String>,
    pub disallowed_tools: Option<String>,
    pub tools: Option<String>,
    pub append_system_prompt: Option<String>,
    pub max_turns: Option<u32>,
    pub max_budget_usd: Option<f64>,
    pub max_thinking_tokens: Option<u32>,
    pub continue_session: Option<bool>,
    pub include_partial_messages: Option<bool>,
    pub effort: Option<String>,
    pub agents: Option<serde_json::Value>,
}
FieldDescription
allowed_toolsComma-separated list of allowed tools
disallowed_toolsComma-separated list of disallowed tools
toolsComma-separated list of tools to make available
append_system_promptText appended to the system prompt
max_turnsMaximum number of agent turns
max_budget_usdSpending limit in USD
max_thinking_tokensCap on thinking/reasoning tokens
continue_sessionContinue the last session
include_partial_messagesInclude partial messages in streaming
effortEffort level ("low", "medium", "high")
agentsAgent configuration as JSON

CodexOptions

pub struct CodexOptions {
    pub approval_policy: Option<String>,
    pub sandbox_mode: Option<String>,
    pub additional_directories: Option<Vec<String>>,
    pub images: Option<Vec<String>>,
    pub output_schema: Option<String>,
}
FieldDescription
approval_policy"full-auto", "suggest", or "auto-edit"
sandbox_modeSandbox mode (e.g. "workspace-write")
additional_directoriesExtra directories Codex can access
imagesImage file paths to include
output_schemaJSON schema for structured output

GeminiOptions

pub struct GeminiOptions {
    pub approval_mode: Option<String>,
    pub sandbox: Option<bool>,
    pub extra_args: Option<Vec<String>>,
}
FieldDescription
approval_modeApproval mode (e.g. "auto")
sandboxEnable sandbox mode
extra_argsAdditional CLI arguments passed directly to the Gemini binary

On this page