Skip to main content

Install

brew install lukacf/meerkat/rkat
The Homebrew tap supports macOS and Linux. On Linux, install Homebrew first from the Homebrew on Linux instructions, then use the same tap command.
Before your first run, set up provider credentials. The fastest path is environment variables; for realm-scoped bindings and OAuth flows, see Auth and Providers.

Run an agent

use std::sync::Arc;
use meerkat::{AgentBuilder, AgentFactory, AnthropicClient, JsonlStore};
use meerkat_store::StoreAdapter;

let api_key = std::env::var("ANTHROPIC_API_KEY")?;
let store_dir = std::env::current_dir()?.join(".rkat").join("sessions");
std::fs::create_dir_all(&store_dir)?;

let factory = AgentFactory::new(store_dir.clone());
let client = Arc::new(AnthropicClient::new(api_key)?);
let llm = factory.build_llm_adapter(client, "claude-sonnet-4-6").await;
let store = Arc::new(JsonlStore::new(store_dir));
store.init().await?;
let store = Arc::new(StoreAdapter::new(store));
let tools = Arc::new(meerkat_tools::EmptyToolDispatcher);

let mut agent = AgentBuilder::new()
    .model("claude-sonnet-4-6")
    .system_prompt("You are a helpful assistant. Be concise in your responses.")
    .max_tokens_per_turn(1024)
    .build(Arc::new(llm), tools, store)
    .await?;

let result = agent
    .run("What is the capital of France? Answer in one sentence.".into())
    .await?;
println!("Response: {}", result.text);
To share state across processes/surfaces, pass the same explicit realm (--realm for CLI, realm_id/realmId for SDK clients). See realms.

Switch providers

Same code, different model. The provider is resolved from the model registry:
rkat run --model claude-sonnet-4-6 "Explain monads"
rkat run --model gpt-5.5 "Explain monads"
rkat run --model gemini-3.5-flash "Explain monads"

Add tools

Register an MCP server and its tools are available to the agent immediately:
rkat mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /tmp
rkat run "List the files in /tmp"
Remote streamable HTTP MCP servers can be added with a URL. OAuth-protected servers keep config simple and authenticate when you log in or run interactively:
rkat mcp add --transport http glean https://king-be.glean.com/mcp/default
rkat mcp login glean
rkat run "Use Glean to search for onboarding docs"

Enforce budgets

Cap token usage, wall-clock time, or tool calls:
rkat run --max-tokens 10000 --max-duration 30s --max-tool-calls 5 "Analyze this codebase"
The agent completes its current turn when a limit is hit, then stops.

What’s next

For a maintained repository starter, see the Rust example in the Meerkat repository under meerkat/examples/simple.rs.