# megacode-agent-sdk
Drive a MEGA harness agent session from a Rust program: start a session, give the model tools your program
runs, answer its approval requests, and read what it does. One session is one `harness` process. Use it to
build an agent that is not a coding agent.
```sh
cargo add megacode-agent-sdk
```
The example below also uses `tokio` (with `macros` and `rt`), `serde` (with `derive`) and `serde_json`.
The crate needs a `harness` binary of the same major and minor version. It uses the `binary` option, then the
`MEGACODE_AGENT_SDK_BINARY` environment variable, then a verified copy in its cache, and otherwise downloads
the matching release and checks it against digests compiled into the crate.
```rust
use megacode_agent_sdk::{Client, Options, Tool, ToolContext, ToolOutput};
use serde::Deserialize;
use serde_json::json;
#[derive(Deserialize)]
struct Search { to: String }
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), megacode_agent_sdk::Error> {
let search = Tool::new(
"search_trains",
"Find trains to a destination.",
json!({"type": "object", "properties": {"to": {"type": "string"}}, "required": ["to"]}),
|args: Search, _ctx: ToolContext| async move {
Ok::<_, String>(ToolOutput::text(format!("to {}: 9:10 for 42 pounds", args.to)))
},
);
let options = Options::plain("You are Pip, a personal assistant. Be brief.").tool(search);
let client = Client::start(options).await?;
let mut turn = client.send("find me a train to Leeds").await?;
while let Some(event) = turn.next().await {
println!("{:?}", event?);
}
client.close().await;
Ok(())
}
```
In a source checkout, a complete errand with an approval and a scripted model, which needs no API key, is `examples/pip.rs`:
```sh
cargo run -p megacode-agent-sdk --example pip -- examples/pip.mock.toml /path/to/harness
```
The second argument names the `harness` binary; without it the example reads `MEGACODE_AGENT_SDK_BINARY`,
and only then downloads.
The options, tools, approvals, testing with a mock file, versions, the download and its trust rules are in the
[agent SDK guide](https://megacode-harness.vercel.app/docs/sdk.html) (`docs/sdk.md` in the source).
Licensed under either of MIT or Apache-2.0, at your option.