Skip to content

Lightweight (and therefore powerful) Rust agent framework inspired by Browser Use's Agent SDK

License

Notifications You must be signed in to change notification settings

Milind220/agent-sdk-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

agent-sdk-rs

agent-sdk-rs is a lightweight Rust agent framework inspired by browser-use's SDK design.

It is intentionally minimal:

  • small surface area
  • explicit control flow
  • simple tool integration
  • easy embedding into Rust binaries

This project is expected to stay lightweight by default. New features should preserve that core philosophy.

What It Is

A Rust SDK for tool-using agents with:

  • an Agent loop
  • query + query_stream
  • provider adapter boundary
  • tool execution + dependency injection
  • explicit completion semantics via done

Coverage (v0.1.0 alpha)

Implemented:

  • Anthropic provider adapter (anthropic-ai-sdk)
  • Agent + builder API
  • query and query_stream
  • event stream model (MessageStart, StepStart, ToolCall, ToolResult, FinalResponse, etc.)
  • tool registration with JSON schema
  • dependency map + dependency overrides
  • translated Claude-code-style tool set:
    • bash, read, write, edit
    • glob_search, grep
    • todo_read, todo_write
    • done
  • optional claude_code binary target

Out of scope right now:

  • non-Anthropic providers
  • Laminar integration

Roadmap

Near-term:

  1. Add xAI Grok provider adapter (next)
  2. Keep adapter trait stable across providers
  3. Improve docs/examples while keeping core small

Non-goal:

  • turning this into a heavy orchestration framework

Install

[dependencies]
agent-sdk-rs = "0.1.0"

Quick Usage

1. Basic agent query

use agent_sdk_rs::{Agent, AnthropicModel};

let model = AnthropicModel::from_env("claude-sonnet-4-5")?;
let mut agent = Agent::builder().model(model).build()?;

let answer = agent.query("Hello").await?;
println!("{answer}");
# Ok::<(), Box<dyn std::error::Error>>(())

2. Streaming events

use agent_sdk_rs::{Agent, AgentEvent, AnthropicModel};
use futures_util::StreamExt;

let model = AnthropicModel::from_env("claude-sonnet-4-5")?;
let mut agent = Agent::builder().model(model).build()?;

let stream = agent.query_stream("Solve this step by step");
futures_util::pin_mut!(stream);
while let Some(event) = stream.next().await {
    match event? {
        AgentEvent::ToolCall { tool, .. } => println!("tool: {tool}"),
        AgentEvent::FinalResponse { content } => println!("final: {content}"),
        _ => {}
    }
}
# Ok::<(), Box<dyn std::error::Error>>(())

3. Claude-code tool pack

use agent_sdk_rs::tools::claude_code::{SandboxContext, all_tools};
use agent_sdk_rs::{Agent, AnthropicModel};

let model = AnthropicModel::from_env("claude-sonnet-4-5")?;
let sandbox = SandboxContext::create::<std::path::PathBuf>(None)?;

let mut agent = Agent::builder()
    .model(model)
    .tools(all_tools())
    .dependency(sandbox)
    .require_done_tool(true)
    .build()?;
# Ok::<(), Box<dyn std::error::Error>>(())

Optional Binary

Run the fun Claude-code-like binary:

cargo run --features claude-code --bin claude_code -- "list Rust files and summarize"

Environment:

  • ANTHROPIC_API_KEY required
  • ANTHROPIC_MODEL optional (default set in binary)
  • CLAUDE_CODE_SANDBOX optional

Examples

cargo run --example local_loop
cargo run --example di_override

License

MIT. See LICENSE.

About

Lightweight (and therefore powerful) Rust agent framework inspired by Browser Use's Agent SDK

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages