cavi-ai/
GitHub ↗

Rust SDK

Two ways to use Rust with bobby-browser:

  1. Remote HTTP`bobby-browser-client`

(Supported tier), mirroring @cavi-ai/bobby-browser

  1. Embed — workspace crates such as interface-core / sdk-core / broker

(Embed tier) — see the Rust crate book

The installable CLI package is bobby-browser (cargo install bobby-browserbobby) once published; until then build from source.

rust,no_run
use bobby_browser_client::BrowserRuntimeClient;

# async fn example() -> Result<(), Box<dyn std::error::Error>> {
let client = BrowserRuntimeClient::new(
    "http://127.0.0.1:7777",
    std::env::var("AUTOMATION_RUNTIME_TOKEN")?,
)?;
let info = client.runtime_info(None).await?;
let _ = info;
# Ok(()) }

Crate map (summary)

CrateTierRole
bobby-browser-clientSupportedHTTP /v1 client and wire types (crates.io SDK)
bobby-browserSupported (CLI)bobby binary; lib name cli
interface-core / sdk-core / brokerEmbedIn-process runtime
engines / stores / typesInternalWorkspace only (types is publish = false)

Full tiered list: Rust crate book.

Build the CLI: cargo build -p bobby-browser. Workspace tests: cargo test --workspace.

Embed sketch

rust,no_run
use chrono::{Duration, Utc};
use interface_core::AuthorityStore;
use types::{Capability, PrincipalId};

# async fn example() -> Result<(), Box<dyn std::error::Error>> {
let authority = AuthorityStore::in_memory();
let issued = authority.issue(
    PrincipalId::from_uuid(uuid::Uuid::new_v4()),
    [Capability::SessionRead, Capability::SessionWrite],
    Utc::now() + Duration::minutes(5),
).await?;
let handle = authority.verify(&issued.expose_once()).await?;
let context = handle.context(Utc::now() + Duration::seconds(30), None);
# let _ = context;
# Ok(()) }

Beyond quickstart: issue least-privilege capability sets, re-check at dispatch, prefer durable token records for multi-principal servers, and never log plaintext bearers. HTTP issuance for remote principals is POST /v1/principals with authority:admin — see Multi-principal.

Next