marshall — a coding agent that lives in your terminal
A coding agent that lives in your terminal. Describe the change — a planner/coder/reviewer loop reads, edits and runs your project, and nothing happens without your approval.
how it works
Three agents, one feedback loop
Not a single autocomplete on steroids — a planner breaks the task down, a coder executes with a safe tool belt, and a reviewer inspects the diff before you're asked to ship it.
planner
Turns "add rate limiting to the API" into an ordered, concrete plan. Runs on your deep tier.
coder
Reads, edits, runs tests — every write and shell command gated behind an approval you can audit.
reviewer
Second opinion on the actual diff. Loops with the coder until it holds up — never rubber-stamps.
why marshall
Batteries in, guardrails on
The boring parts — safety, memory, context management — are engineered in, not bolted on.
Approval for every mutation
write_file, edit_file and run_shell render their diff or command before they run. Approve once, always-allow for the session, or deny — esc denies everything pending.
Two model tiers
A frontier model reasons; a cheap or local model fetches and summarises. /model fast points the grunt work at llama.cpp or Ollama and your bill (and latency) drop.
Interrupt & steer
esc stops at the next safe boundary — no half-written files (atomic writes) — and your next message course-corrects instead of restarting.
Sandboxed tools
File tools are jailed to the workspace — .. traversal and escaping symlinks are rejected. Shell runs with a scrubbed env, timeouts, output caps and a command policy.
Memory that doesn't leak tokens
Rolling compression with pinned goals, tool-result masking, read dedup — plus AGENTS.md project memory loaded at session start.
Knows your repo's paperwork
Built-in gh_* tools read issues, pull requests and diffs, and open a PR when the work is done — so "fix #482" is a whole task, not a lookup.
providers
Your keys, your models, your call
Hosted frontier, a single OpenRouter key, or fully local — switch any time with /model. First run walks you through it, and marshall login signs in with a Claude account instead of a key.
llama.cpp isn't an afterthought — it's a first-class provider. Point it at any
OpenAI-compatible llama-server and marshall probes the router to see which
model is actually loaded, not just what's on disk, so you're never surprised by a
lazy cold start mid-task. Same treatment for Ollama — resident models listed first.
commands
Small surface, muscle memory
Eleven slash commands and three keys. /help prints the lot.
AGENTS.md, the project memory loaded at session startfine print
What it doesn't do
Worth knowing before you point it at something that matters.
get started
Your terminal is already open
Node 22+, one npm install, thirty seconds of setup wizard. No account required if you're running local models.