dcoder-terminal · Windows · macOS · Linux

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.

dcoder-terminal 0.8.5 — four agents, one board, one repository
  • 14 agent CLIs on one board — Claude Code, Codex, Copilot and eleven more
  • 0 tokens resold: your key, your provider, your invoice, your rate limit
  • 72h of 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.

.ddesktop/
  prds/prd-7.md
  queue/spec-144.md
  doing/spec-142.md
03

The scheduler

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 work rides 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.

  1. 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"}
  2. 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.

    ❯ ddx new --title "POST /refunds" \
        --preset codex-sandbox \
        --depends-on spec-142
    {"ok":true,"id":"spec-143"}
  3. 03

    The fleet goes up on its own

    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
  4. 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 otherwise alt-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_token a random 256-bit value, stored here only as a hash
  • fingerprint a hash of the machine id, so a copied config folder can't run twice
  • device_name what you called this machine
  • app_version which build is asking
  • seat which 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.