๐ Overseer
Task orchestration for AI agents via MCP. SQLite-backed, native VCS (jj-lib + gix).
๐ Quick Start
Get started with Overseer by installing it using one of the following methods:
๐ฆ Installation
Via npm
npm install -g @dmmulroy/overseer
Via skills.sh (for agents)
npx skills add dmmulroy/overseer
๐ป Usage Examples
MCP Server
Add the following to your MCP client config:
{
"mcpServers": {
"overseer": {
"command": "npx",
"args": ["@dmmulroy/overseer", "mcp"]
}
}
}
CLI
os task create -d "Implement auth"
os task list --ready
os task start <task-id>
os task complete <task-id>
๐ง Technical Details
Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Overseer MCP (Node.js) โ
โ - Single "execute" tool (codemode) โ
โ - VM sandbox with tasks/learnings โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ os CLI (Rust) โ
โ - SQLite storage โ
โ - jj-lib (primary VCS) โ
โ - gix (git fallback) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Codemode Pattern
Single execute tool - agents write JS, server runs it:
const milestone = await tasks.create({
description: "User auth system",
context: "JWT + refresh tokens"
});
const login = await tasks.create({
description: "Login endpoint",
parentId: milestone.id
});
await tasks.start(login.id);
await tasks.complete(login.id, {
result: "Implemented with bcrypt",
learnings: ["bcrypt rounds should be 12+ for production"]
});
return { milestone, login };
Task Hierarchy
- Milestone (depth 0) - Root, no parent
- Task (depth 1) - Parent is milestone
- Subtask (depth 2) - Max depth, parent is task
APIs
tasks
tasks.create({ description, context?, parentId?, priority?, blockedBy? })
tasks.get(id)
tasks.list({ parentId?, ready?, completed?, depth?, type? })
tasks.update(id, { description?, context?, priority?, parentId? })
tasks.start(id)
tasks.complete(id, { result?, learnings? })
tasks.reopen(id)
tasks.delete(id)
tasks.block(taskId, blockerId)
tasks.unblock(taskId, blockerId)
tasks.nextReady(milestoneId?)
tasks.tree(rootId?)
tasks.search(query)
tasks.progress(rootId?)
learnings
learnings.list(taskId)
VCS (Required for Workflow)
VCS operations are integrated into task workflow - no direct API:
| Operation |
VCS Effect |
tasks.start(id) |
VCS required - creates bookmark task/<id>, records start commit |
tasks.complete(id) |
VCS required - commits changes, deletes bookmark (best-effort) |
tasks.complete(milestone) |
Also cleans ALL descendant bookmarks (depth-1 and depth-2) |
tasks.delete(id) |
Best-effort bookmark cleanup (works without VCS) |
VCS (jj or git) is required for start/complete. CRUD operations work without VCS.
Progressive Context
Tasks inherit context from ancestors. Learnings bubble to immediate parent on completion (preserving original sourceTaskId):
const subtask = await tasks.get(subtaskId);
๐ Documentation
CLI Reference
os task create -d "description" [--context "..."] [--parent ID] [--priority 1-5]
os task get <id>
os task list [--parent ID] [--ready] [--completed]
os task update <id> [-d "..."] [--context "..."] [--priority N] [--parent ID]
os task start <id>
os task complete <id> [--result "..."] [--learning "..."]...
os task reopen <id>
os task delete <id>
os task block <id> --by <blocker-id>
os task unblock <id> --by <blocker-id>
os task next-ready [--milestone ID]
os task tree [ID]
os task search "query"
os task progress [ID]
os learning list <task-id>
os vcs detect
os vcs status
os vcs log [--limit N]
os vcs diff [BASE_REV]
os vcs commit -m "message"
os vcs cleanup [--delete]
os data export [-o file.json]
Task Viewer
Web UI for viewing tasks:
os ui
cd ui && npm install && npm run dev
Three views:
- Graph - DAG visualization with blocking relationships
- List - Filterable task list
- Kanban - Board by completion status
Keyboard: g=graph, l=list, k=kanban, ?=help
Development
cd overseer && cargo build --release
cd overseer && cargo test
cd mcp && npm install
cd mcp && npm run build
cd mcp && npm test
cd ui && npm install && npm run dev
Storage
SQLite database location (in priority order):
OVERSEER_DB_PATH env var (if set)
VCS_ROOT/.overseer/tasks.db (if in jj/git repo)
$CWD/.overseer/tasks.db (fallback)
Auto-created on first command.
VCS Detection
- Walk up from cwd looking for
.jj/ โ use jj-lib
- If not found, look for
.git/ โ use gix
- Neither โ VcsType::None
jj-first: always prefer jj when available.
Docs
- Architecture - System design, invariants
- CLI Reference - Full command documentation
- MCP Guide - Agent usage patterns
๐ License
MIT