New Works with every coding agent →

Dispatch work to any agent.

A per-repo queue of tasks with clear acceptance and deps. Claude, Codex, OpenCode, Cursor — whoever is free runs docket ready, picks the next one, and ships it on the group's branch.

· single static Rust binary · macOS & Linux
any agent that runs a shellClaude CodeCodexOpenCodepiCursorAntigravityGemini CLI

Ready

status=open · deps all done
$ docket ready --json | agent pick

A task tracker that refuses to be a workflow engine.
Structure where agents need it, git for everything else.

Fig 0.1

Acceptance-first

Every task carries acceptance criteria and explicit deps. An agent picking it up knows what done means before it starts — no back-and-forth.

Fig 0.2

A queue, not a board

docket ready returns the next task whose deps are all done. Blocked is computed, never stored. Your agent pulls; nothing pushes.

Fig 0.3

One group, one PR

Tasks batch into a group that maps to one branch and one PR. Commits carry [T-N], so git history is the audit log.

Dispatch is one command.

There's no orchestrator. Any agent — in any terminal, on any machine with the repo — asks for the next ready task, does it, marks it done. Deps unblock the next one. That's the whole protocol.

Because it's a CLI with --json everywhere, it works from a slash command, a hook, a cron, or a bash loop. Docket never talks to a model.

01
$docket ready --json

Returns T-7 — open, all deps done, highest priority first.

codex
02
$docket start T-7

Marks in_progress and records who picked it. Others see it leave the queue.

codex
03
$git commit -m "[T-7] retry failed parts"

Commits carry the task id. Git stays the history.

codex
04
$docket done T-7

T-8 and T-9 become ready. The next free agent takes them.

codex
05
$docket group close uploader-fixes

One branch, one PR, four tasks. Summary aggregated from acceptance.

claude
1
file · .docket/db.sqlite
2
tables · tasks, groups
0
servers, accounts, model calls
--json
on every read command

Works inside your agent.

The Claude Code plugin exposes the CLI verbs as slash commands. It shells out to the docket binary on your $PATH — no model turn, no server.

In a session
/docket:create-task — one-line ask → task with acceptance
/docket:start T-N — pick it up, mark in_progress
Install once
/plugin marketplace add parzival1l/docket
/plugin install docket@docket

Give your agents a queue.

Install docketor in Claude Code: /plugin marketplace add parzival1l/docket