Your agents already know how to code.Nobody's running the floor.
dcoder-terminal opens every coding agent in a real terminal, side by side, and a durable board decides who works, who waits and who depends on whom. You bring the subscriptions you already pay for — we never resell a token, and your repository never reaches us.
❯ claude --permission-mode plan
◇ reading migrations/0042_orders.sql+ALTER TABLE orders ADD COLUMN+refunded_cents BIGINT NOT NULL-DROP INDEX idx_orders_status◇ writing rollback plan
… 14.2k tokens · $0.31
spec-143 · endpointneeds you
❯ codex --sandbox workspace-write
✓ 7 files changed in src/api
handlers/refunds.rs +214 −18 domain/refund.rs +96 −4? apply the migration to staging
before the integration test?
›waiting for a decision
spec-141 · testsdone
❯ cargo test -q
✓ 38 tests · 0 failures · 6.4s
❯ ddx note --body-stdin
"v2 contract matches v1 on everything but currency"❯ ddx done
spec-144 · dead codequeued
blocked byspec-142preset ····· claude · plan
inherits ··· prd-7
the scheduler starts this card
by itself once 142 closes
backlog6queue3doing2review1done27failed0
dcoder-terminal 0.8.5 — four agents, one board, one repository
14agent CLIs on one board — Claude Code, Codex, Copilot and eleven more
0tokens resold: your key, your provider, your invoice, your rate limit
72hof work with no internet before the licence needs to check in again
It doesn't replace your agent. It runs the one you already use.
Claude Code
Codex
Copilot CLI
Cursor Agent
opencode
agy
Qwen
Kimi
Grok
MiniMax
mimo
deepclaude
dcoder-agent
any shell
Nine of these ship with a guided preset — model, effort and permission mode mapped flag by flag. The rest run through a command you write once.
The floor
Not a swarm.A queue that survives a reboot.
Swarms improvise: agents negotiate, spawn each other, and nobody can tell you afterwards why something ran. This does the opposite. Dependencies are declared, the order is deterministic, and the whole board is Markdown on your disk. Close the app mid-run, reboot the machine, come back — the card is exactly where you left it. That is what makes “leave it running overnight” a promise instead of a gamble.
01
The grid
Real PTYs in resizable columns — not a shell simulation. Drag a pane across the grid and the process doesn't die: panes are positioned by transform and never remounted. Mouse, colours and full TUIs work, because what's running is the actual CLI.
spec-142 · migration
working
spec-143 · endpoint
needs you
spec-141 · tests
done
02
The board
backlog → queue → doing → review → done or failed, as folders of Markdown with front-matter inside your project. A single process writes to it, so two agents never corrupt the same card. Version it for the team to see, or gitignore it — the app works the same either way.
A card whose dependencies are met, whose preset exists and whose turn has come becomes a worker: one terminal dedicated to that card and nothing else, with the briefing injected at start. Up to eight at once. Blocked waits; finished releases the next one.
◇ spec-142 → running
⏸ spec-144 blocked by 142
? spec-143 needs you
From conversation to card
The document that started the workrides along with it.
Spec-driven in the literal sense: the PRD is written first, the cards are cut from it, and every worker gets the origin document injected into its prompt — not a summary you remembered to paste.
01
Talk it through with the pilot
You argue the demand out in plain language with a pilot agent, inside the app. When the idea settles, it writes a PRD into the workspace — the origin document every card will inherit.
❯ ddx prd new --title "Refunds"
{"ok":true,"id":"prd-7"}
02
The PRD becomes linked cards
The pilot cuts the PRD into cards with preset, agent type and dependencies already filled in. Nothing fires: cards are born in the backlog, under your eye, until you promote them.
The scheduler dispatches. The worker reports back through a CLI that's already on its PATH — it says it's working, that it's done, or that it needs a decision only you can make. That's not a heuristic reading the screen: it's the worker talking to the board.
❯ ddx working
❯ ddx waiting "apply the migration first?"
❯ ddx done
04
A second agent checks before it closes
With the reviewer on, a finished card doesn't go straight to done: it stops in Review, where a different agent audits the result against the acceptance criteria and approves — or sends it back to the queue with the rejection written into the card, and the round counter going up.
◉ reviewer · round 2
✗ rejected
no test for a negative amount
→ back to the queue
The worker can't grade its own homework: whoever runs a card is refused promote, spawn and cancel at the protocol level, even if it asks nicely.
Hands free
Dictate into anything.Talk to the board.
Both are built into the app — not a plugin, not a browser tab. They run on OpenAI's voice API with your own key, and the cost shows on screen while you speak.
Global dictation
Speak, read it back, then insert
A global shortcut opens a HUD over any window: tap to toggle, hold to push-to-talk. The transcript lands in an editable field and you insert it yourself — into the focused terminal, the editor cursor, or any other Windows application. Line breaks become spaces, so a paste into a terminal never runs a command on its own. It never presses Enter for you.
“write a test for a partial refund above the amount paid”
REVIEW · 6.2s · $0.0004 · Enter inserts
Conversation mode
It reads the panes and acts on the app
A realtime speech-to-speech session with seventeen tools wired into the interface: it can read a pane, promote a card, retry a failed one, switch workspace, even read the UI and click. Anything destructive goes through a confirmation with a one-time token. It suspends itself after silence so it doesn't burn minutes idling.
you what's spec-143 waiting on?
dcoder it's asking whether it can apply the migration to staging. Want me to allow it?
you allow it, then promote 144
dcoder ✓ answered · ✓ spec-144 promoted to the queue
In the same window
The things you'd otherwisealt-tab away for.
Not reimplementations for the sake of it — each one exists because leaving the window mid-run is how you lose the thread of what four agents are doing.
Git, including the parts nobody builds
A full panel in its own window, per repository — and it finds every repository in the folder, so a monorepo with services comes up on its own.
Worktrees with real UI: create from a new or existing branch, prune orphan records, warned about uncommitted work
Three-column merge editor for conflicts, with delete-vs-modify and the other awkward cases named in plain language
Stage by hunk, and it refuses a stale hunk — “the file changed since this diff was loaded”, instead of half-applying it
Commit messages written by AI with secrets redacted: .env and private keys stay out of the prompt, sk-…, AKIA… and ghp_… become [redacted]
Force-push with lease that counts how many remote commits would be discarded before you confirm
Files, editor and skills
Detachable windows, each with its own project and its own memory of which tabs you had open there.
Monaco inside, with fuzzy quick-open and project-wide text search that respects .gitignore and skips binaries
Send the current selection straight to the focused agent
Drag a file onto a pane and its path lands in that agent's prompt
A skills shelf that doesn't steal keyboard focus — you drag a skill while the cursor keeps blinking in the terminal, and dropping it writes the instruction without submitting if you had a draft
Cards that run themselves
Continuous cadence or a real five-field cron expression, with a stop command that decides when to quit.
A memory file carried between iterations, so round nine knows what round one found
Exit 0 on the stop command ends the loop; a ceiling on iterations and a timeout end it anyway
“Hunt the flaky test until it stops flaking” is a card, not a shell script you babysit
The parts you only notice when they're missing
Multiple workspaces, each with its own grid, board, accent colour and project memory
Instance profiles: run the stable release and a dev build side by side, fully isolated
An agent that needs you raises a real OS notification — the app strips the escape sequence out of the stream and turns it into state
Cost per model, in dollars, with an editable rate table that re-prices your history when you change it
Three languages, 1,434 keys each, parity enforced by a linter — and the language you picked is passed on to the agents
The bill
We orchestrate.We never resell your tokens.
This is the part no competitor can copy, because their margin depends on the inference going through them. Ours doesn't go through us at all.
Tools that sell you credits
A monthly allowance that doesn't roll over
The provider's price plus a margin you can't see
Run out mid-week, buy a top-up
One vendor's agent loop, take it or leave it
When the model landscape shifts, you wait for them
dcoder-terminal
Your Claude Max, Codex or Copilot plan, used directly
List price from the provider, no intermediary
Your rate limits, which you already understand
Claude Code and Codex in the same repository, same board
New CLI worth using? Point a preset at it today
And you see the bill while it happens
Input, output and cache tokens accumulated per model per session — the token count is the primary record, dollars are derived from a rate table you can edit. Change a rate and it re-prices the history without reprocessing a single transcript.
sonnet-4.5
1.84M
$3.02
gpt-5.5
0.42M
$1.15
opus-5
0.19M
$2.44
What leaves your machine
Your code doesn't.Here is exactly what does.
The licence is the only thing that talks to us. It's a floating seat: the server lends your machine a seat, the app renews it while you're working, and closing the app returns it to the pool. So your licence follows you from the desktop to the laptop without you registering anything.
This is the entire request, every ten minutes. Nothing else is sent, ever:
device_tokena random 256-bit value, stored here only as a hash
fingerprinta hash of the machine id, so a copied config folder can't run twice
device_namewhat you called this machine
app_versionwhich build is asking
seatwhich seat of the pool you're holding
POST /v1/session/heartbeat
Your source code, diffs, prompts or agent output
Repository names, file paths or branch names
Which agents you run, or how often
Anything about what you're building
And when the internet is gone
The app keeps working for up to 72 hours on the last ticket. The rule underneath is that silence is tolerated and refusal is obeyed: if we're unreachable you keep going, but if we answer “no” — the pool is full, the subscription lapsed — the app tells you and stops, and it will not pretend it didn't hear.
Pricing
One plan. Everything in it.Priced against one seat, not your usage.
The app is the subscription; tokens never pass through us. It's the smallest line on your AI bill, and the only one that doesn't grow when you open another terminal.
Founding price
$290$149/ per year
two months on us, and the same lock
Locked for as long as you stay subscribed — it doesn't rise to $29 under you.
Billed in your local currency, tax included. Cancel any time — the licence runs to the end of the period you paid for.
Everything, from day one:
Real terminals in a grid, any interactive CLI
14 agent CLIs, nine with a guided preset
Durable board with declared dependencies
The scheduler dispatching up to eight workers
PRDs, specs and the pilot agent
AI review gate on finished cards
Loop cards, continuous or cron
Global dictation and conversation mode
Git panel, file manager, editor and skills shelf
Cost per model, live, in dollars
Every repository open at once, each with its own board
Windows, macOS and Linux
More than one person? A licence holds as many simultaneous seats as you buy — write to me and I'll set it up.
Questions
What people ask before subscribing
Does the subscription include model tokens?
No, and that's the point. You use your own keys — Anthropic, OpenAI, OpenRouter, whoever — and pay the provider's list price with nobody in between. We orchestrate and show you, in dollars, what each model consumed.
Does my code leave my machine?
Not to us. The board is a folder in your project, the panes are processes on your machine, and the only request we ever receive is the licence check — five fields, every ten minutes, listed in full further up this page. What does leave is exactly what the agent you already chose would send today, to the provider you configured.
Do I need to be online?
To start, yes: the app borrows a seat when it opens. After that it keeps working for up to 72 hours without reaching us. The distinction that matters: silence is tolerated, refusal is not. If we can't be reached you keep going; if we answer that the subscription lapsed or the pool is full, the app warns you and stops.
Won't two agents in the same repository trip over each other?
They can, if you tell them to. The app sequences what you declared: a card with --depends-on only leaves the queue when the previous one closes, and that's how two tasks touching the same file don't land in the same minute. What it doesn't do is touch git for you — no branches, no merges, no conflict resolution behind your back. If you want hard isolation, point each preset at a different git worktree; the board stays one.
How does the app know an agent finished or got stuck?
Because it says so. Every terminal gets a small CLI on its PATH, and the briefing injected at start teaches the agent to mark its own card: working, waiting with a question, done. It isn't a heuristic guessing from screen text — it's the worker talking to the board.
Does this clutter my repository?
State lives in a .ddesktop/ folder inside the project: readable Markdown and JSON, no database, no proprietary format. You decide whether to version it, so the team can see the board, or gitignore it. Works the same either way.
Does it install or replace my agents?
Neither. It runs the CLIs already on your machine, already authenticated. If you type claude in a terminal and it works, it works here. It does install its own board tool into each agent's config, in the narrowest scope, without overwriting what you had.
What happens if I cancel?
The licence runs to the end of the period you paid for, then the app stops opening. What's on disk stays yours — the board, the PRDs and the notes are Markdown, readable with or without the app.
Can I use it on more than one machine?
Yes. A seat is lent while the app is open and returned when you close it, so the desktop at home and the laptop at work share one licence — you just can't run both at the same moment on a single seat. Registering machines is free and unlimited; simultaneous use is what a seat counts.
Which service do dictation and conversation mode use?
OpenAI's, with your own key, kept in the operating system's credential vault rather than a text file. The app shows the estimated cost while you speak.
Your agents are ready.Give them a floor to work on.
Point it at a repository, describe the demand, and watch the first card run without you dispatching a terminal.