Rust SDK
Native Rust client for AgentOven — built on tokio and reqwest with zero-copy serde.
The Rust SDK is the native client for AgentOven. Built on tokio and reqwest with zero-copy deserialization via serde. The same crate powers the CLI.
Requires Rust 1.86+ · Install with cargo add agentoven-core
Installation
terminal
$ cargo add agentoven-core # With streaming support $ cargo add agentoven-core --features streaming
Quick Start
rust
use agentoven_core::{AgentOven, AgentConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let oven = AgentOven::connect("http://localhost:8080").await?;
let cfg = AgentConfig::builder()
.name("research-bot")
.framework("langchain")
.skills(vec!["web-search", "summarization"])
.build();
oven.agents().register(cfg).await?;
oven.agents().bake("research-bot").await?;
let result = oven.a2a()
.send_task("research-bot", "Summarize AI safety papers")
.await?;
println!("{}", result.text());
Ok(())
}Streaming
rust
use agentoven_core::AgentOven;
use futures::StreamExt;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let oven = AgentOven::connect("http://localhost:8080").await?;
let mut stream = oven.a2a()
.send_task_stream("research-bot", "Detailed quantum computing analysis")
.await?;
while let Some(chunk) = stream.next().await {
let chunk = chunk?;
print!("{}", chunk.text());
}
println!("\nDone!");
Ok(())
}Agent Management
rust
use agentoven_core::AgentOven;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let oven = AgentOven::connect("http://localhost:8080").await?;
// List agents
let agents = oven.agents().list().await?;
for agent in &agents {
println!("{} — {} — {} tasks",
agent.name(), agent.status(), agent.tasks_completed());
}
// Status
let status = oven.agents().status("research-bot").await?;
println!("Uptime: {}", status.uptime());
println!("Health: {:?}", status.health());
// Lifecycle
oven.agents().cool("research-bot").await?;
oven.agents().bake("research-bot").await?;
Ok(())
}Error Handling
rust
use agentoven_core::{AgentOven, Error};
#[tokio::main]
async fn main() {
let oven = AgentOven::connect("http://localhost:8080")
.await
.expect("Failed to connect");
match oven.a2a()
.send_task("research-bot", "Analyze data")
.await
{
Ok(result) => println!("{}", result.text()),
Err(Error::AgentNotFound(name)) => {
eprintln!("Agent '{}' not found", name);
}
Err(Error::TaskTimeout { duration }) => {
eprintln!("Timed out after {:?}", duration);
}
Err(Error::RateLimit { retry_after }) => {
eprintln!("Rate limited, retry after {:?}", retry_after);
}
Err(e) => eprintln!("Unexpected error: {}", e),
}
}