by jpicklyk
A light touch MCP task orchestration server for AI agents. Persistent work tracking and context storage across sessions and agents. Defines planning floors through composable notes with optional gating transitions. Coordinates multi-agent execution without prescribing how agents do their work.
# Add to your Claude Code skills
git clone https://github.com/jpicklyk/task-orchestratorSchema-driven workflow enforcement for AI agents.
An MCP server that gives AI coding assistants a persistent work item graph with server-enforced quality gates. Define workflow schemas in YAML to do two things: (1) set a planning floor that enforces your minimum specification requirements before work can start, and (2) guide agent workflows through each phase with structured instructions the server surfaces at exactly the right moment. Items flow through queue → work → review → terminal with dependency enforcement and gate-checked transitions — the server blocks progression until required work is done and tells agents precisely what's missing. The result: deterministic workflow progression that doesn't depend on prompt discipline, and persistent state that lets agents pick up where they left off across sessions.
AI agents have no built-in way to manage complex work. Without persistent state, every session starts from zero — no memory of what was planned, what's done, or what's blocked. Multi-step projects fall apart as the agent loses track of decisions, dependencies, and progress.
Task Orchestrator gives agents a structured backbone: a persistent work item graph where items flow through queue → work → review → terminal with dependency enforcement and note-based documentation at every phase. The server — not the AI — enforces what can happen next: gate-checked transitions, dependency ordering, and required documentation create regardless of which model, session, or sub-agent is driving. Agents read concise notes instead of replaying conversation history — implementing that keep the agent aligned across sessions and sub-agent boundaries.
No comments yet. Be the first to share your thoughts!
linear, milestone, exploratory) and composable traits for fine-grained schema reusequeue → work → review → terminal with named triggers and automatic dependency enforcementPrerequisite: Docker must be installed and running.
docker pull ghcr.io/jpicklyk/task-orchestrator:latest
This is a one-time step — Docker caches the image locally. Pulling first ensures your MCP client connects instantly rather than waiting silently on first launch.
Choose the option that matches your setup:
Register the server once from your terminal:
claude mcp add-json mcp-task-orchestrator '{
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "mcp-task-data:/app/data",
"ghcr.io/jpicklyk/task-orchestrator:latest"
]
}'
Restart Claude Code, then run /mcp to confirm mcp-task-orchestrator is connected.
.mcp.jsonAdd to .mcp.json in your project root (checked into source control so teammates get it automatically):
{
"mcpServers": {
"mcp-task-orchestrator": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "mcp-task-data:/app/data",
"ghcr.io/jpicklyk/task-orchestrator:latest"
]
}
}
}
The mcp-task-data Docker volume persists the SQLite database across container restarts. The server auto-initializes its schema on first run — no additional setup required.
Configure your client with the same JSON as Option A above. STDIO transport works with any MCP-compatible client.
By default the server runs in schema-free mode — all 13 tools work with no additional configuration. If you want to define custom note schemas that gate role transitions (e.g., require an acceptance-criteria note before a work item can advance), you can point the server at your project's .taskorchestrator/config.yaml.
Add the config mount to your Option B .mcp.json only (not the global Option A registration — a globally-registered server should not have its schema config vary per project):
{
"mcpServers": {
"mcp-task-orchestrator": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "mcp-task-data:/app/data",
"-v", "${workspaceFolder}/.taskorchestrator:/project/.taskorchestrator:ro",
"-e", "AGENT_CONFIG_DIR=/project",
"ghcr.io/jpicklyk/task-orchestrator:latest"
]
}
}
}
Security note: Only the
.taskorchestrator/folder is mounted — the server has no access to the rest of your project. The container's/projectpath contains nothing else.
See Workflow Guide for the .taskorchestrator/config.yaml schema format and examples.
By default, all projects share the mcp-task-data Docker volume — a single SQLite database for everything. To give a project its own isolated task store, change the volume name in the -v flag to something project-specific:
"-v", "my-project-data:/app/data",
Docker creates the volume automatically on first run. Each named volume is a completely separate database — work items, notes, and dependencies from one project never appear in another. Combine this with the per-project .mcp.json (Option B) so the scoped volume and config schema travel together with the project.
The plugin adds workflow skills, automation hooks, and an orchestrator output style to Claude Code. The MCP server (Step 2) must be connected first.
Install:
/plugin marketplace add https://github.com/jpicklyk/task-orchestrator
/plugin install task-orchestrator@task-orchestrator-marketplace
After installing, restart Claude Code and verify with /plugin list — you should see task-orchestrator enabled.
Skills — invoke as slash commands in any Claude Code session:
| Command | Description |
|---------|-------------|
| /task-orchestrator:work-summary | Insight-driven dashboard: active work, blockers, and next actions |
| /task-orchestrator:create-item | Create a tracked work item from the current conversation context |
| /task-orchestrator:quick-start | Interactive onboarding — teaches by doing, adapts to empty or populated workspaces |
| /task-orchestrator:manage-schemas | Create, view, edit, delete, and validate note schemas in config |
| /task-orchestrator:status-progression | Navigate role transitions; shows gate status and the correct trigger |
| /task-orchestrator:dependency-manager | Visualize, create, and diagnose dependencies between work items |
| /task-orchestrator:batch-complete | Complete or cancel multiple items at once — close out features or workstreams |
Hooks — automatic, no invocation needed:
Output style — The plugin includes a Workflow Orchestrator output style that turns Claude Code into a project management orchestrator: it plans, delegates to subagents, and tracks progress without writing code directly. Select it from the output style menu (/output-style) or enable it in your Claude Code settings. See Output Styles and Self-Improving Workflow for advanced patterns.
Contributing? See Contributing Guidelines for developer setup.
The Integration Guides show how to compose the MCP with your workflow at increasing levels of sophistication:
| Tier | Guide | What it adds |
|------|-------|-------------|
| 1 | Bare MCP | 13 tools with any MCP client — no config needed |
| 2 | CLAUDE.md-Driven | Embed workflow conventions in project instructions |
| 3 | Note Schemas | Phase gate enforcement via .taskorchestrator/config.yaml |
| 4 | Plugin: Skills & Hooks | Automated workflows, plan-mode pipeline, subagent protocols |
| 5 | [Output Styles](current/docs/integration-guides/outpu