Rust library
The agent runs inside your own Rust process, with no server and nothing else to keep alive. When that process dies mid-run, recover() reads the log back and carries on from the step it stopped on.
cargo add salvor
use salvor::prelude::*; use std::sync::Arc; let store = Arc::new(SqliteStore::open("runs.db")?); let agent = Agent::builder() .model(Config::from_env(), "claude-opus-4-8") .system_prompt("Answer in one or two sentences.") .build()?; // start drives the loop; recover() continues a crashed run from the log match Runtime::new(store).start(&agent, json!({"question": "..."})).await? { RunOutcome::Completed { output, .. } => println!("completed: {output}"), RunOutcome::Parked { reason, .. } => println!("parked: {reason:?}"), }