Skip to content

The Prompt Queue

The queue is the spine of Orbit. Every change you want an agent to make becomes a prompt, and every prompt passes through the queue on its way to being shipped. It is backed by SQLite at ~/.orbit/queue.db, so it survives restarts cleanly and never re-runs work it already finished.

Each project has its own queue and its own independent prompt numbering, starting at #1. Prompts run one at a time per project. A prompt claims its unique per-project number at the moment it is inserted — not when you draft it — which is why the number you end up with can differ from the one you typed if other prompts were queued in parallel.

Every prompt carries a routing tag. Use complexity: (Low, Medium, High, and beyond) to send the prompt to a model tier configured in settings, or model: to name a model explicitly. The two are mutually exclusive: set both and complexity wins. Tag every prompt so it lands on the right agent.

A prompt can declare depends_on: #N, which holds it in a waiting state until prompt #N ships. Waiting cards can be pre-approved — a green “Pre-approved ✓” with an Undo — so the moment the dependency clears, the prompt runs automatically without another trip back to you. Use a bare prompt number in depends_on; annotations break the exact-number matching.

A running prompt can pause to ask you a question. The card turns amber with the question and a response box; answering starts a continuation run that carries your answer forward, and the original card is marked “Answered — continued as #N.” If you don’t want to answer, you can dismiss the parked question and Orbit tears the session down cleanly. Orbit also distinguishes a real agent question from a documentation example that merely looks like one, so you only respond when a response is actually needed.

Before a prompt is dequeued, Orbit guards against a dirty working tree. It scans git diff --check, runs a guarded pre-prompt pull and stash, and if it hits a conflict it pauses that project’s queue with a banner naming the project and the affected files until you re-scan. This keeps a half-finished local state from colliding with a fresh prompt.