Skip to main content

Crate gemini_cli_sdk

Crate gemini_cli_sdk 

Source
Expand description

Rust SDK wrapping Google’s Gemini CLI as a subprocess via JSON-RPC 2.0.

§Architecture

The SDK communicates with the gemini binary using the --experimental-acp JSON-RPC 2.0 mode. Each Client manages a single subprocess session. Responses are translated from raw wire types to the public Message enum.

§Quick Start — one-shot query

#[tokio::main]
async fn main() -> gemini_cli_sdk::Result<()> {
    let messages = gemini_cli_sdk::query("Explain quantum computing in one sentence").await?;
    for msg in messages {
        if let Some(text) = msg.assistant_text() {
            println!("{text}");
        }
    }
    Ok(())
}

§Quick Start — stateful multi-turn session

use gemini_cli_sdk::{Client, ClientConfig};

#[tokio::main]
async fn main() -> gemini_cli_sdk::Result<()> {
    let config = ClientConfig::builder()
        .prompt("Explain quantum computing")
        .build();
    let mut client = Client::new(config)?;
    let _info = client.connect().await?;
    // send() returns a Stream; consume it then close.
    client.close().await?;
    Ok(())
}

Re-exports§

pub use errors::Error;
pub use errors::Result;
pub use config::AuthMethod;
pub use config::ClientConfig;
pub use config::PermissionMode;
pub use config::SystemPrompt;
pub use callback::sync_callback;
pub use callback::tracing_callback;
pub use callback::MessageCallback;
pub use discovery::check_cli_version;
pub use discovery::find_cli;
pub use discovery::version_satisfies;
pub use discovery::MIN_CLI_VERSION;
pub use mcp::McpServerConfig;
pub use mcp::McpServers;
pub use permissions::CanUseToolCallback;
pub use permissions::PermissionContext;
pub use permissions::PermissionDecision;
pub use permissions::PermissionOptionInfo;
pub use permissions::ToolLocationInfo;
pub use transport::GeminiTransport;
pub use transport::Transport;
pub use types::messages::AssistantMessage;
pub use types::messages::AssistantMessageInner;
pub use types::messages::McpServerStatus;
pub use types::messages::Message;
pub use types::messages::PlanEntry;
pub use types::messages::ResultMessage;
pub use types::messages::SessionInfo;
pub use types::messages::StreamEvent;
pub use types::messages::SystemMessage;
pub use types::messages::Usage;
pub use types::messages::UserMessage;
pub use types::messages::UserMessageInner;
pub use types::content::Base64ImageSource;
pub use types::content::ContentBlock;
pub use types::content::ImageBlock;
pub use types::content::ImageSource;
pub use types::content::TextBlock;
pub use types::content::ThinkingBlock;
pub use types::content::ToolResultBlock;
pub use types::content::ToolResultContent;
pub use types::content::ToolUseBlock;
pub use types::content::UrlImageSource;
pub use types::content::UserContent;

Modules§

callback
Message callback type for real-time message notifications.
config
Client configuration.
discovery
CLI binary discovery and version checking.
errors
Error types for gemini-cli-sdk.
mcp
MCP server configuration types.
permissions
Permission system for tool approval.
transport
Transport trait and GeminiTransport production implementation.
types

Structs§

Client
Stateful client for multi-turn Gemini CLI sessions.
HookContext
Context for hook execution.
HookInput
Input provided to a hook callback.
HookMatcher
A registered hook — matches events by type and optional tool name pattern.
HookOutput
Output from a hook callback — can modify the execution flow.

Enums§

HookDecision
Hook decision — continue, modify, or block.
HookEvent
Hook events that can be intercepted.

Functions§

client_prompt
Extract the prompt string from a Client and return it.
query
Run a one-shot query with a plain-text prompt, collecting all messages.
query_stream
Run a one-shot query, yielding messages via a static boxed stream.
query_stream_with_content
Run a one-shot query with structured content, yielding messages as a stream as they arrive.
query_with_content
Run a one-shot query with structured content, collecting all messages.

Type Aliases§

HookCallback
Callback type for hooks.