The execution forge. Tasks, milestones, documents, Definition of Done.
Named for a court's docket: the queue of cases ready for resolution. Planning happens elsewhere; the docket is where work gets scheduled, dispatched, and closed. (Previously codenamed ike, after Eisenhower — same discipline, different metaphor.)
docket.md is the third leg of a three-tool system for AI-driven work:
| Tool | Role | When to use |
|---|---|---|
| research.md | Decide with evidence | Before making architectural choices |
| visionlog | Record vision, goals, guardrails, ADRs | Contracts all execution must honor |
| docket.md | Execute within those contracts | Daily work: tasks, milestones, docs |
The trilogy is one loop with three stages:
research.md → visionlog → docket.md
DECIDE CONTRACT EXECUTE
↑ │
└───────────────────────────┘
execution reveals gaps
When docket.md reveals that a strategy is wrong — a task fails, a pattern repeats, a direction proves misguided — the feedback loop doesn't short-circuit back to visionlog directly. It goes all the way back to research.md:
- docket.md — execution surfaces a gap or contradiction
- research.md — earn the new answer with evidence before acting on it
- visionlog — record the decision as an ADR
- docket.md — execute the new direction
Skipping research.md means ADRs written under pressure, strategy updated on instinct, decisions that contradict each other three sessions later. The loop must complete fully to be trustworthy.
Session protocol: Read visionlog first (it tells you where the ladder points and what you must not cross). Then open docket.md and work. If execution reveals a gap in strategy, go back to research.md before updating visionlog.
uv tool install docket-md
# or: pip install docket-mdAdd to your .mcp.json:
{
"mcpServers": {
"docket": {
"type": "stdio",
"command": "docket-md"
}
}
}docket.md uses a stable GUID registry — not fragile CWD scanning.
- New project:
project_init→ writes.docket/docket.jsonwith a stable GUID - Existing project:
project_set→ registers path→GUID in session memory - Every other call: pass
project_id(the GUID)
If you forget the GUID, the error message tells you exactly what to call to recover.
your-project/
└── .docket/
├── docket.json ← project config + stable GUID
├── tasks/ ← active tasks (TASK-0001 - slug.md)
├── completed/ ← Done tasks
├── archive/ ← Cancelled / superseded tasks
├── milestones/ ← MS-0001 - slug.md
└── documents/ ← DOC-0001 - slug.md
All files are plain markdown with YAML frontmatter — readable without docket.md.
| Tool | What |
|---|---|
project_init |
Initialize new project, get GUID |
project_set |
Register existing project for session |
project_list |
List registered projects |
project_info |
Stats: task counts, milestones, docs |
| Tool | What |
|---|---|
task_create |
Create task with optional priority, milestone, DoD |
task_list |
List with status/milestone/assignee/tag filters |
task_view |
Full detail for one task |
task_edit |
Update any field; append notes |
task_complete |
Mark Done, move to completed/ |
task_archive |
Cancel/supersede, move to archive/ |
task_search |
Keyword search across title + notes |
| Tool | What |
|---|---|
milestone_create |
New milestone with optional due date |
milestone_list |
All milestones (open + closed) |
milestone_view |
Full detail |
milestone_close |
Mark complete |
| Tool | What |
|---|---|
document_create |
New doc with content + tags |
document_list |
All documents |
document_view |
View by DOC-XXXX |
document_update |
Replace or append content |
---
id: TASK-0001
title: Build the thing
status: To Do # To Do | In Progress | Done | Draft
priority: high # high | medium | low
milestone: MS-0001
assignees: [daniel]
tags: [infra, core]
dependencies: [TASK-0000]
acceptance-criteria:
- Users can log in
definition-of-done:
- Tests passing
- Deployed to staging
created: 2026-03-20
updated: 2026-03-20
---
Notes go here as markdown body.Tasks without contracts drift. Contracts without tasks are wishes.
docket.md is where the two meet. Before you create a task, the visionlog guardrail has already told you what you cannot do. The Definition of Done field is the contract written before the work begins — machine-checkable, not vibes.
19 tools across project, task, milestone, and document management. Inspired by backlog.md. Zero forked code. Full credit for the concept.
MIT License © 2025 Daniel Shanklin