Arlo is an open-source, Rust-native agentic AI framework — a leaner, more general-purpose take on what tools like Claude Code offer. A streaming run loop with tool use, human-in-the-loop permissions, sub-agents, MCP integration, and Agent Skills, exposed as a TUI, a one-shot CLI, or an embeddable library.
Requires stable Rust, installed via rustup.
# clone and build
git clone https://github.com/kaija/arlo.git
cd arlo
cargo build --release
# set credentials for your provider export OPENAI_API_KEY="sk-..." cargo run -p agent-cli # interactive TUI cargo run -p agent-cli -- "summarize this repo" # one-shot prompt arlo [--model PROVIDER:MODEL] [--profile NAME] "prompt"
Everything an agent needs to plan, act, and stay in the loop with you.
Turn-based loop — compact → request → stream → execute tools → resolve next step — with typed state transitions and automatic error recovery.
Connect external tool servers via the Model Context Protocol alongside built-in file, shell, and web tools.
Discover and load Markdown-defined skills from .arlo/skills/ (project) and ~/.arlo/skills/ (user), with template variable substitution.
A 4-layer permission engine — glob patterns, static allow/deny lists, and interactive approval prompts — keeps you in control of every tool call.
A built-in task/todo store; spawn foreground or background sub-agents with isolated histories — results deliver back exactly once.
A 3-layer pipeline — tool-result compaction, session memory, full summarization — keeps long runs inside the context window.
The same Rust core, wherever you need to run it.
A ratatui REPL for chatting with the agent, watching tool calls stream, and approving permissions live.
Run arlo "prompt" straight from a script or CI job — no prompt starts the interactive REPL instead.
Pull the crates directly into your own Rust application and wire the run loop into whatever surface you need.
Point Arlo at the model you want — hosted or your own.
Messages API, Claude Opus, Sonnet, and Haiku models, with retry and model overrides built in.
Any OpenAI-compatible HTTP API — set OPENAI_API_KEY and go.
Point OPENAI_BASE_URL at your own self-hosted or local inference server.
Arlo ships a serve mode that speaks AG-UI over HTTP + SSE. These reference integrations show how to wire it into a browser or a Slack workspace with no extra infrastructure.
A browser chat UI built on Next.js that proxies to arlo --serve. Streams text, shows tool calls inline, and renders human-in-the-loop approval cards so you can allow or deny each tool call without leaving the browser.
Browser → Next.js (port 3000) → Arlo (internal :8080)
cd integration/web cp .env.example .env # set ARLO_MODEL + provider key docker compose up --build # open http://localhost:3000
A Python proxy (arlo-slack) holds a Slack Socket Mode websocket, replays the thread to arlo --serve over AG-UI, and streams the reply back into Slack. Slack is the conversation store — no database, no host mounts.
Slack ⇄ slack-proxy ⇄ arlo (websocket / HTTP + SSE)
SLACK_ALLOWED_CHANNELS / SLACK_ALLOWED_USERS allowlists for access control
cd integration/slack
cp .env.example .env # set SLACK_BOT_TOKEN, SLACK_APP_TOKEN, ARLO_MODEL
docker compose up --build
Serve mode runs tools without approval prompts. Both integrations use containerized deployments — disposable containers, no host mounts, read-only rootfs, tmpfs workspace, memory and pid limits. Do not expose the Arlo port directly; always go through the proxy.