Skip to Content
ReferenceRust SDK API

Rust SDK API

The Rust SDK is published to crates.io as gestalt-sdk, while Rust code imports it as gestalt.

Its canonical API reference is hosted on docs.rs:

use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::sync::Arc; #[derive(Default)] struct EchoProvider; #[gestalt::async_trait] impl gestalt::Provider for EchoProvider {} #[derive(Deserialize, JsonSchema)] struct EchoInput { message: String, } #[derive(Serialize, JsonSchema)] struct EchoOutput { echoed: String, } fn router() -> gestalt::Result<gestalt::Router<EchoProvider>> { gestalt::Router::new().register( gestalt::Operation::<EchoInput, EchoOutput>::new("echo"), |_: Arc<EchoProvider>, input, _request| async move { Ok::<_, gestalt::Error>(gestalt::ok(EchoOutput { echoed: input.message, })) }, ) } gestalt::export_provider!(constructor = EchoProvider::default, router = router);

docs.rs renders the crate docs, module docs, and symbol docs from the source and checked-in generated bindings.

Agent host and provider utilities are also part of the crate:

use gestalt::generated::v1 as pb; async fn execute_bound_tool() -> Result<(), Box<dyn std::error::Error>> { let mut host = gestalt::AgentHost::connect().await?; let response = host .execute_tool(pb::ExecuteAgentToolRequest { run_id: "run-123".into(), tool_call_id: "call-1".into(), tool_id: "roadmap/sync".into(), arguments: None, }) .await?; println!("{}", response.status); Ok(()) }