For when you want AI to do the work, not make the calls.
Defer decomposes your task into decisions, lets you set how much you care about each domain, then implements everything while you watch and challenge in real-time. Every decision recorded. Every AI choice visible. Nothing hidden.
Decisions on the left, chat on the right. You give it a task, it decomposes it into decisions, and you resolve them with full context.
Works with Claude Code, OpenAI, Groq, Mistral, Together, Ollama, and any OpenAI-compatible provider.
# Install (pick one)
$ brew tap defer-ai/tap && brew install defer
$ go install github.com/defer-ai/cli@latest
# Start a project
$ defer "build a REST API for a todo app"
# Or start conversational mode
$ defer
Describe your project. The agent decomposes it into decisions with concrete options, grouped by domain. Mark each domain as auto or review, inspect tradeoffs, and override anything. Reference decisions with @STA-0001 or features with #auth.
For each domain, choose: auto (agent decides, you challenge after) or review (you confirm each decision before execution). Same decisions either way -- you just choose which ones you see upfront.
Every choice is recorded, whether you made it or the AI did. Decisions on the left as cards with @ID, domain, and feature tags. Chat on the right with real-time execution output. Press tab to switch focus between panels.
Change a decision mid-execution and the agent re-implements. High-impact changes cascade: switch from Go to Python and every Go-specific decision gets invalidated and re-evaluated. Press w on any option to see tradeoffs before choosing.
Press s to sort decisions by domain, impact, status, or alphabetically. Press / to filter. Press f to find and jump to any decision or feature.
Don't need the CLI? Run defer init cursor to drop the defer philosophy into your tool's config file. Works with Claude Code, Cursor, Copilot, Codex, Windsurf, Zed, Cline, Gemini, Aider, and Continue.
Every choice that shaped your project. Who decided, what they decided, and what the AI assumed on its own.
DECISIONS.md
| ID | Category | Question | Answer | Source |
|---|---|---|---|---|
| @STA-0001 | Stack | Backend language | Node.js (TypeScript) | user |
| @DAT-0001 | Data | Database | PostgreSQL | auto |
| @NAM-0001 | Naming | Route naming convention | camelCase | agent |
| @ERR-0001 | Error | Validation status code | 422 | agent |
# Decisions (left)
↑↓ Navigate enter Inspect / Filter s Sort
# Chat (right)
enter Send message ↑↓ Scroll ←→ Cycle pending
@ID Reference a decision #TAG Reference a feature
# Global
tab Cycle focus (decisions → chat → resolver) shift+tab Reverse
ctrl+q Quit esc Stop agent
# Decision detail
enter Confirm c Custom answer s Shuffle options w Why?