Docket
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
**One list every AI tool you use can write to — Claude Code, Codex, Cursor,
Warp — across every project, before the work is worth a ticket. Local-first,
self-hostable, no SaaS account.**
Watch the one-minute demo · download the mp4
Quick start
**You need:** Node.js 18+ and at least one MCP host — Claude Code, Codex,
Cursor, Windsurf, Claude Desktop, Zed or Warp.
That configures every host it finds on this machine and ends by telling you
which ones. Then restart your agent and ask it *"add a todo: buy milk"* — it
shows up at **http://localhost:8787**, a dashboard that started by itself the
moment the agent connected.
Only want Claude Code, and nothing written anywhere else?
claude mcp add docket -- npx -y @pasichdev/docket does just that part.
Other hosts: Supported hosts.
Optional: see what's open in a project when a session starts
hook install works without the global install too — it pins the command to
this exact copy of docket and tells you it did — but the short form survives
moving or reinstalling, and npx leaves nothing on PATH.
Why
A thought that shows up mid-session is worth capturing but not worth the
ceremony: a Notion template, a GitLab issue format, a ticket id you have to
invent. So today it evaporates. Docket is the layer underneath all of that —
work lands here at the speed an agent can type, from any tool, in any
project, and **graduates** to Notion/GitLab/Obsidian when it's earned it.
Nobody else occupies this space, and it isn't an accident: Anthropic will not
integrate Claude Code with Cursor, and Cursor will not integrate with Codex.
Every vendor optimises its own closed loop. The space *between* the tools is
structurally nobody's.
One list, many projects
Docket files every item under the project it was captured in, automatically —
resolved from the git remote of wherever the agent is running. You never type
it, and no agent has to remember to.
- todo_list in ~/work/backend shows **that project's** open items, not all
three projects' — compact, one line each.
- The web dashboard has a workspace switcher with per-project open counts.
- Items with no project context land under **Unfiled** and stay visible, never
guessed at.
Using the git *remote* rather than the path means the same repo cloned to
~/src/backend on a laptop and /work/backend on a desktop is **one**
workspace — which matters precisely because sync exists. Full resolution
order and the .docket.json override: **docs/workspaces.md**.
Regenerate these with node docs/assets/demo-seed.mjs — it builds the workspace they show, so they stay a picture of the real dashboard rather than a staged one.
Upgrading from 2.x
**Read this before you upgrade if you have existing items.**
3.0 migrates your store from data format v7 to v8 on first run, automatically.
The migration itself is safe and is not the risk. **Downgrading afterwards
is.**
docket 2.3.1 writes the store from its own v7 shape: it has never heard of the
fields v8 adds, so its very first write after a reinstall **silently strips
them from every item**. Nothing errors, and a later re-upgrade hands out fresh
sequence numbers that no longer mean what your paired devices think they mean.
2.3.1 is published and cannot be patched, so 3.0 defends the only way it can —
by keeping a copy of your pre-migration store:
It is written once, before the first v8 write, and never overwritten. The
upgrade prints its path on the run that creates it.
**To go back to 2.x, restore it first:**
In that order. restore --from-v7 deletes nothing — your v8 store is renamed
aside, so you can come forward again later.
If you would rather have a portable copy as well, docket backup ./pre-v3.backup
before upgrading gives you one that includes your identity and paired peers.
Bridges, not replaces
Docket is deliberately not where work lives forever. It's where work lands
*first*, before anyone knows whether it deserves a ticket. Most of it doesn't
and gets closed by hand; the rest graduates.
sourceUrl is the bridge in both directions. Set it whenever an item maps to