Local install
Run arbiter on your own machine. You bring the provider keys; you control the binary. Free, open-source, fully featured. Ten minutes from curl to first agent reply.
If you'd rather call arbiter without operating it, see the hosted preview instead.
Prerequisites
- A provider key for whichever model family you want agents to use:
- Anthropic —
ANTHROPIC_API_KEY(or save to~/.arbiter/api_key). - OpenAI —
OPENAI_API_KEY(or save to~/.arbiter/openai_api_key). - Google Gemini —
GEMINI_API_KEY(or save to~/.arbiter/gemini_api_key). - Ollama — set
OLLAMA_HOSTif not athttp://localhost:11434.
- Anthropic —
- Only one is required. Multiple can coexist; different agents can target different providers.
- Optional: a Brave Search key (
ARBITER_SEARCH_API_KEY) if you want/searchto resolve. Without it, agents fall back to/fetchon URLs they already know.
Install the binary
macOS arm64
curl -L https://github.com/tylerreckart/arbiter/releases/latest/download/arbiter-macos-arm64.tar.gz \
| tar xz -C /usr/local/bin
Linux x86_64
curl -L https://github.com/tylerreckart/arbiter/releases/latest/download/arbiter-linux-x86_64.tar.gz \
| tar xz -C /usr/local/bin
From source (any platform with C++20)
git clone https://github.com/tylerreckart/arbiter.git
cd arbiter
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
sudo cmake --install build
Build deps: OpenSSL, libcurl, SQLite3, a C++20 compiler. libedit or GNU readline is optional but recommended for line editing in the terminal client. Distro-specific install commands are in CONTRIBUTING.md.
First run
export ANTHROPIC_API_KEY="sk-ant-..." # or OPENAI_API_KEY / GEMINI_API_KEY
arbiter --init # seed ~/.arbiter/ with starter agents
arbiter # launch the terminal client
--init writes nine starter agents into ~/.arbiter/agents/*.json (reviewer, research, writer, devops, planner, backend, frontend, marketer, social) and is safe to re-run — existing files are preserved unless you pass --force. See cli/init.md for the full layout.
arbiter opens the interactive TUI. Type a message and the master agent (index) decides whether to answer directly or delegate. Switch agents with /use <name>; send a one-off to a specific agent with /send <name> <message>. Full TUI reference: tui/.
Try one-shot mode
For scripts and CI hooks:
arbiter --send reviewer "review: if (arr.length = 0) return;"
The agent runs the full orchestration loop internally — tool calls, sub-agent delegation, advisor gating — and prints the final reply on stdout. See cli/send.md.
Run as an HTTP server
If you want other clients (web UIs, automations, mobile) to drive arbiter:
arbiter --add-tenant me # prints the bearer token — save it
arbiter --api --port 8080 # bind 127.0.0.1 by default
Authenticate with Authorization: Bearer <token>. The endpoint catalogue is at api/. Production deployments belong behind a reverse proxy for TLS and rate limiting — see concepts/operations.md.
Where things live
~/.arbiter/
├── agents/*.json agent constitutions (edit these)
├── api_key Anthropic key (alternative to env var)
├── openai_api_key OpenAI key
├── gemini_api_key Google Gemini key
├── tenants.db tenant identities for --api
├── sessions/ per-cwd TUI session snapshots
├── memory/ per-agent persistent scratchpads
├── mcp_servers.json optional MCP server registry
└── a2a_agents.json optional remote A2A agent registry
Full reference: cli/environment.md.
Next steps
- Author your own agent. Drop a JSON into
~/.arbiter/agents/<id>.json. Schema:api/agents/create.md. Concepts: Writ, Advisor. - Read the design philosophy.
philosophy.md. - Wire up integrations. MCP servers for external tools, A2A for remote agents.