A prompt that says "write the requirements before you start" is advice; here it is a failed tool call that names the missing note. That difference matters most across sessions and across sub-agents, where nobody is reading the transcript — a new agent calls `get_context` once, gets the blocked items and the stalled ones with their gaps, and the record of who wrote what survives the conversation that produced it.
An MCP server holding a persistent, hierarchical work-item graph in SQLite, with 14 tools for building it, querying it, and moving items through phases. What separates it from a prompt-based framework is where the rules live: if a required note is empty or an upstream dependency is unfinished, the transition call fails at the server rather than relying on the model to comply.
- A work breakdown created in one atomic call, with typed dependency edges between the children — when an item reaches terminal its dependents unblock automatically, and a parent cascades once its children are done — `create_work_tree`, `manage_dependencies`, `complete_tree`
- Phase gates defined in YAML: each note carries `required`, a `description`, a `guidance` string surfaced at the moment the agent fills it, and an optional `skill` the agent must invoke first — `advance_item` returns exactly which notes are missing
- Traits that attach cross-cutting note requirements to a schema or to a single item, so a task touching authentication picks up a security review that a CSS cleanup does not
- Actor attribution on every transition and note, with an auditing mode that rejects writes from an agent that will not identify itself; query responses carry the full delegation chain
- One-call session recovery returning active items, recent transitions, blocked items, stalled items with their missing notes, and ancestor chains — `get_context`
- Relevance-ranked full-text search across items and notes, scopable to a subtree or filtered by status or tag — `query_items`, `query_notes`
- Metadata-only note queries (`includeBody=false`) so an agent can check what documentation exists without paying to read it
- Atomic find-and-claim for fleets of agents working the same queue — `get_next_item`, `claim_item`, `get_blocked_items`
Docker, running. The image is `ghcr.io/jpicklyk/task-orchestrator:latest`; `server.json` publishes version 3.2.0 over stdio. The simplest path is a per-session container over stdio; the multi-project path runs one persistent container with `MCP_TRANSPORT=http` and `API_ENABLED=true` on port 3001, which the README insists you publish loopback-only (`-p 127.0.0.1:3001:3001`) because `API_AUTH_MODE=none` gives anyone who reaches the port full read/write/delete. `DATABASE_PATH`, `AGENT_CONFIG_DIR`, `USE_FLYWAY` and `LOG_LEVEL` are all optional. Without a schema file all 14 tools still work — schema-free, no gates.
One command — docker pull ghcr.io/jpicklyk/task-orchestrator:latest
