Albatross routes every task across multiple models at the execution layer. A selector picks the right orchestrator, coder, and reviewer tier per task, and every decision lands in an auditable ledger you can replay. Local or cloud, your models, your keys, one TUI.
Albatross v2.0.3 · a small, terminal-first coding harness backend ollama · model qwen2.5-coder:7b · approval dangerous-only › add a function in src/util.rs that lowercases a string and trims it Read src/util.rs Edited src/util.rs --- src/util.rs +++ src/util.rs +pub fn normalize(input: &str) -> String { + input.trim().to_lowercase() +} Apply? [y/n/a]: y ✓ checkpoint saved (1 file), /undo to revert 3.4k in · 412 out · $0.001 this turn · $0.0013 session
Describe a model stack that blends local and frontier models. A selector routes each task to the right tier. Unlike a black box, every decision lands in a durable, auditable ledger: which model, why, what it cost.
› /route select add OAuth login with token refresh and tests selector openrouter/fusion "multi-file auth change, high blast radius" ├─ orchestrator high → anthropic/claude-sonnet-4.5 ├─ coder high → anthropic/claude-sonnet-4.5 effort: high ├─ review production → openrouter/fusion └─ security openrouter/fusion receipt → .albatross/routes.jsonl · explain with /route explain · totals with /route spend
Read, edit, grep, shell, run tests. Then the parts other harnesses don't have.
Switch providers mid-session. Ollama, LM Studio, MLX, llama.cpp, OpenRouter, OpenAI, Grok: the tools, commands, and session log don't change.
A selector model picks low/medium/high orchestrator and coder tiers per task, plus review and security models, then switches the active coding model for you.
Revert the last agent turn's file mutations, including files the agent created or files that weren't tracked when the turn started.
Branch the conversation and workspace to try two fixes, diff them, and /path pick the winner. No worktree required.
A generate→evaluate loop where a separate critic agent scores each pass against a rubric until it clears the bar. The generator never grades itself.
Every cloud turn prints its own cost plus the running session total on the status line. Local turns just show tokens. No surprises at the end of the month.
Unattended generate→evaluate rounds with auto-reset when context fills, bounded by budget and deadline. Wake up to a morning report.
Switch to multi-model deliberation for hard reviews, architecture tradeoffs, and high-stakes debugging, then switch back.
Drop servers into mcpServers in your config; their tools show up to the model on next launch. Trust is explicit, per-config-hash.
Paste API keys once into a 0600 file, or OAuth into a ChatGPT/Codex or SuperGrok subscription with /login. Env vars still win when set.
Every mutating call shows you the diff first, with allow-once / allow-session / always-allow caching.
Writes a structured handoff artifact and starts a clean session seeded with it, with better coherence on long tasks than summarizing in place.
Albatross talks to one backend at a time. Pick the path that fits, and switch whenever you like.
Private, free, offline. Runs entirely on your machine.
Frontier-model quality with your own key, or your subscription.
Switch mid-session with /backend <name>. Same tools, same session log either way.
No account. No sign-up. Just a binary and whatever model you already have.
Homebrew on macOS, or build from source with Rust 1.86+.
brew install morganlinton/tap/albatross
Local and free with Ollama, or cloud with your own API key. Albatross works the same either way.
# Path A: local, private, free brew install ollama && brew services start ollama ollama pull qwen2.5-coder:7b # Path B: cloud, frontier quality export OPENROUTER_API_KEY=sk-or-...
A short first-run wizard sets backend, model, and approval policy. Every launch after that opens straight into a session.
albatross
Runs a real agent loop on a tiny crate with a failing test, in an isolated sandbox, without touching your repo.
/play fix-failing-test

Open source under MIT. Star it, fork it, or file an issue.