One queue for all your coding agents
Running Claude Code and Codex on several subscriptions, across a laptop and a Mac mini or two? shipcue is the coordination layer between them: people report from your app, every agent and terminal takes its next job from one queue, and no two take the same one.
Try it: file a few reports, then claim one the way an agent would. The most urgent goes first.
How it works
Someone reports it
The button opens a small form: bug or feature, what happened, how bad it is, where in the app. People can paste a screenshot. The page address, browser and a snapshot of app state you choose come along automatically.
It joins the queue
Reports go into one table in your own Postgres, ordered by priority and then by age. Nothing goes to a third-party dashboard.
An agent fixes it
The MCP server hands an agent the top report as a ready-to-run task. Claims are atomic, so several agents can work the queue at once and never take the same report.
Cloud: one place for every account and machine
A token per agent
Every Claude Code account, Codex seat and terminal gets its own token, so you can see which one is on which report.
A listener per Mac mini
Each machine picks up the next report on its own and starts an agent for it. A crashed or rate-limited terminal hands its report back.
From $10 a month
Plans from $10 to $50 a month by projects, agents and people. Free while the beta lasts, and self-hosting stays free.
Who uses shipcue
Founders with a fleet
Several Claude Code and Codex subscriptions on a laptop and a Mac mini or two. One queue keeps every terminal on its own report.
Hackathon teams
Four people each running a couple of agents on one repo. One queue means no two agents fix the same bug, and nobody's fix quietly undoes someone else's.
Founders with early users
Users report from inside the app with the page, browser and state attached. Your agent works the queue and you review the PRs.
Add it in three steps
Create the table, mount one handler, drop in the button.
import { ReportButton } from 'shipcue/react';
<ReportButton
areas={[{ value: 'editor', label: 'Editor' }]}
diagnostics={() => ({ route: location.pathname })}
/>