The coding agent that proves it's done.
Coding agents love to declare victory. Stella has to earn it: a witness test that fails on your old code and passes on the new, checked by a judge with its own tools. It runs in your terminal, it is written in Rust, and it works with your key, any of nine providers, or a local model. No account. No phone-home.
A green suite is not proof.
A test suite can pass because the feature works, or because the tests never touched it. Stella works test-first and holds itself to a harder gate: the verify_done tool replays the witness test against your previous code in a shadow worktree.
- Fails on the old code. The witness test runs against git HEAD with only the new test files layered in. If it passes there, it never witnessed the change.
- Passes on the new code. The same test then runs against the working tree. Red-to-green across the boundary is the only accepted evidence.
- Judged, not self-graded. In goal mode an LLM judge re-checks the claim with its own read-only tools before Stella is allowed to stop.
verify_done
Green suites can hide unwired features and vacuous tests. The witness cannot.
Any model. Your key. No account.
Export a key and Stella detects the provider. Pin one with --model provider/model, or point --base-url at any OpenAI-compatible server and skip the key entirely. The only network traffic is to the provider you chose.
Anthropic
ANTHROPIC_API_KEY
claude-fable-5
OpenAI
OPENAI_API_KEY
gpt-5.5
Google Gemini
GEMINI_API_KEY
gemini-3-pro
Google Vertex AI
VERTEX_ACCESS_TOKEN
gemini-3-pro
Amazon Bedrock
AWS_ACCESS_KEY_ID
claude on Converse
xAI
XAI_API_KEY
grok-4
DeepSeek
DEEPSEEK_API_KEY
deepseek-chat
Z.ai
ZAI_API_KEY
glm-5.2
OpenRouter
OPENROUTER_API_KEY
auto
Local
--base-url, no key
Ollama, vLLM, LM Studio
Vertex AI and Bedrock use your existing cloud credentials. Gateways like Vercel AI Gateway, Azure OpenAI, and Together work through --base-url the same way local servers do.
Built for long runs you don't babysit.
Judged goal mode
stella goal works in rounds. After each round an LLM judge checks the goal with its own read-only tools (read_file, grep, ci_status), and its feedback drives the next round. It stops when the evidence says done, bounded by a round cap and your budget.
A hard dollar budget
--budget 5 is a promise, not a suggestion. Stella meters every call against the model card's pricing and aborts cleanly (never mid-tool) once total spend crosses the line. Omit it and spend is still metered for the cost summary.
Parallel tools
Independent tool calls run concurrently. Reads, searches, and builds overlap instead of queuing, so a step that fans out across the codebase finishes in one round trip.
Local-first telemetry
Every execution is recorded in .stella/stella.duckdb on your disk: the full event stream, per-call tokens and cost, and the files-touched ledger. Query it with any DuckDB client. It is your data.
Self-improving memories
Lessons saved with save_memory, or written by you as markdown in .stella/memories/, load once at session start into a byte-stable system prompt. Every call reads them at prompt-cache-hit prices.
CI to green
stella monitor main watches CI for a branch or PR through gh, reads the failure logs, and fixes until the run is fully green, judged like any other goal. Issue tools for Linear and GitHub load only when configured.
MIT or Apache-2.0. Built in the open.
Stella is developed in public at oxageninc/stella-cli by the team behind Oxagen, the governed control plane for AI agents. Stella stands alone: no Oxagen account, no platform dependency, one Rust workspace of seven crates driven through traits, not concretions.
The workspace
- stella-clithe stella binary: agent loop, REPL, TUI
- stella-corestep-driver engine: parallel tools, goal loop, budget, retry, compaction
- stella-toolsthe built-in tools: file CRUD, exec, verify_done, issues, CI
- stella-modelprovider adapters: SSE streaming, tool-call dialects, pricing
- stella-storeDuckDB persistence: executions, events, telemetry, locks
- stella-protocolversioned serde types shared across every boundary
- ocp-typesOpen Context Protocol wire types
Point it at a bug tonight.
One cargo command, one exported key, and Stella is working in your repo. The getting-started guide covers install, providers, and your first judged goal.