AgentOven

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),
    }
}