Multi-agent coding platform that dispatches Claude CLI agents to work on missions (coding tasks). Each agent runs in an isolated git worktree, streams live output via SSE, and produces structured reports. Built on Claude Code's full feature set.
Python
20
51 commits
updated Sep 27, 2026
Multi-agent coding platform that dispatches Claude Code agents to work on missions (coding tasks). Agents run in isolated git worktrees with MCP-powered tools, create sub-missions for other agents, and coordinate autonomously through a dependency-aware dispatch system.
Built on the Claude Code SDK and MCP (Model Context Protocol) ecosystem.
frontend/ React 19 + Vite UI (port 3101 via nginx)
backend/ FastAPI + SQLite (port 18801, uvicorn --reload)
Runs in Docker via docker-compose.yml or locally with a Python venv.
graph TD
subgraph UI["Claude DevFleet UI :3101"]
Web["React 19 + Vite"]
end
subgraph API["Claude DevFleet API :18801"]
FastAPI["FastAPI + SQLite"]
end
subgraph Services["Background Services"]
SDK["SDK Engine"]
Watcher["Mission Watcher"]
Sched["Scheduler"]
AutoLoop["Auto-Loop"]
Remote["Remote Control"]
end
subgraph Agents["Agent Pool (max 3)"]
A1["Agent"] --> MCP1["MCP Servers"]
A2["Agent"] --> MCP2["MCP Servers"]
A3["Agent"] --> MCP3["MCP Servers"]
end
Web -->|"HTTP"| FastAPI
FastAPI --> SDK
FastAPI --> Watcher
FastAPI --> Sched
FastAPI --> AutoLoop
FastAPI --> Remote
SDK -->|"dispatch"| A1 & A2 & A3
Watcher -->|"auto-dispatch on dependency satisfaction"| SDK
Sched -->|"cron clone → dispatch"| Watcher
AutoLoop -->|"plan → parallel dispatch"| SDK
MCP1 -->|"create_sub_mission"| Watcher
See the full architecture evolution diagram showing the platform's progression from CLI subprocess spawning (Phase 0) through SDK migration (Phase 1), MCP ecosystem (Phase 2), to autonomous multi-agent orchestration (Phase 3).
Claude DevFleet supports two dispatch engines, selectable via DEVFLEET_ENGINE:
| Engine | Mode | How it works |
|---|---|---|
sdk (default) | Claude Code SDK | Uses claude-code-sdk Python API with native async streaming, MCP server attachment, structured message types |
cli | CLI subprocess | Spawns claude CLI with --output-format stream-json, parses stdout events |
git clone https://github.com/LEC-AI/claude-devfleet.git
cd claude-devfleet
./start.sh
# UI: http://localhost:3100
# API: http://localhost:18801
git clone https://github.com/LEC-AI/claude-devfleet.git
cd claude-devfleet
# Backend
python3 -m venv venv
source venv/bin/activate
pip install -r backend/requirements.txt
# Start API server
cd backend
uvicorn app:app --host 0.0.0.0 --port 18801 --reload
# Frontend (separate terminal)
cd frontend
npm install && npm run dev
# UI: http://localhost:3100
# API: http://localhost:18801/docs
git clone https://github.com/LEC-AI/claude-devfleet.git
cd devfleet
Add your project repos to docker-compose.yml:
volumes:
- /path/to/your/project:/workspace/your-project
environment:
- DEVFLEET_PATH_MAP_1=/path/to/your/project:/workspace/your-project
docker compose up -d
# UI: http://localhost:3101
# API: http://localhost:18801/docs
auto_dispatch missions, checks dependency satisfaction, dispatches to available slotsPOST /api/projects/{id}/swarms)GET /api/swarms/{id}/tree, Swarms tab in the UI)/api/projects/{id}/goals)/api/capacity)/api/projects/{id}/window)/api/projects/{id}/nightly-runs)All six have a working data model and API today. Capacity limits and the night-window gate don't affect real dispatch yet — that wiring into the mission watcher and auto-loop is still open; see CLAUDE.md.
Every dispatched agent automatically gets two stdio MCP servers attached:
Context Server (devfleet-context) — Contextual intelligence:
get_mission_context — Current mission requirements, acceptance criteria, statusget_project_context — Project info and recent mission historyget_session_history — Reports from previous sessions for continuityget_team_context — What other agents are currently working onread_past_reports — Detailed reports from any mission in the projectTools Server (devfleet-tools) — Agent self-service:
submit_report — Submit structured end-of-mission reportcreate_sub_mission — Decompose work into sub-tasks with auto-dispatch (supports wait_for_me for dependency control)request_review — Create a review mission that auto-dispatches after your work completesget_sub_mission_status — Check progress of sub-missions you createdlist_project_missions — See all missions in the project for broader contextPer-Project MCP Servers — Configure additional MCP servers per project via the API. These are merged with the built-in servers at dispatch time.
Claude DevFleet itself is an MCP server. Any MCP-compatible client (Claude Code, Cursor, Windsurf, Cline, OpenClaw, custom agents) can connect and orchestrate multi-agent work:
{
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
Both Streamable HTTP (
/mcp) and SSE (/mcp/sse) transports are supported. Streamable HTTP is recommended as SSE is deprecated in the MCP spec.
sequenceDiagram
participant U as User
participant C as Claude Code / OpenClaw / Cursor
participant D as DevFleet MCP Server
participant A1 as Agent 1 (Worktree)
participant A2 as Agent 2 (Worktree)
U->>C: "Build a REST API with auth and tests"
C->>D: plan_project(prompt)
D-->>C: project_id + mission list (with depends_on DAG)
C->>U: Confirm plan (missions + dependencies)
U->>C: Approved
C->>D: dispatch_mission(mission_id=M1)
D->>A1: Spawn agent in isolated git worktree
A1-->>D: Mission M1 complete → auto-merge
D->>A2: Auto-dispatch M2 (depends_on M1 resolved)
A2-->>D: Mission M2 complete → auto-merge
C->>D: get_mission_status(mission_id=M2)
D-->>C: status: completed
C->>D: get_report(mission_id=M2)
D-->>C: files_changed, what_done, errors, next_steps
C-->>U: Summary of completed work
| Tool | Description |
|---|---|
plan_project | One-prompt project creation — AI breaks your description into chained missions |
create_project | Create a project manually |
create_mission | Add a mission with dependencies, auto-dispatch, priority |
dispatch_mission | Send an agent to work on a mission |
get_mission_status | Check progress of any mission |
get_report | Read the structured report (what's done, tested, errors, next steps) |
cancel_mission | Cancel a running mission and stop its agent |
wait_for_mission | Block until a mission completes, then return status + report |
get_dashboard | High-level overview: running agents, project stats, recent activity |
list_projects | Browse all projects |
list_missions | List missions in a project, filter by status |
| Client | Setup | Docs |
|---|---|---|
| Claude Code | claude mcp add devfleet --transport http http://localhost:18801/mcp | integrations/ecc/ |
| OpenClaw / NanoClaw | Load skill: /load claude-devfleet | integrations/openclaw/ |
| Cursor | Add to .cursor/mcp.json | integrations/cursor/ |
| Windsurf / Cline | Add to MCP settings | Same pattern as Cursor |
Example — Claude Code:
claude mcp add devfleet --transport http http://localhost:18801/mcp
# Then say:
# "Use devfleet to plan a project: build a REST API with auth and tests"
# "Check the status of my devfleet missions"
Example — OpenClaw / NanoClaw:
# In NanoClaw REPL:
/load claude-devfleet
> Use DevFleet to build a Python CLI that converts CSV to JSON
# Claude plans the project, dispatches agents, reports back
Example — Cursor / Windsurf / Cline:
Add to .cursor/mcp.json or IDE MCP settings:
{
"mcpServers": {
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
}
Extend Claude DevFleet with custom tools, hooks, and integrations. Drop a Python file into plugins/ and it loads automatically at startup.
# plugins/slack_notify.py
def register(registry):
@registry.hook("post_complete")
async def notify_slack(mission, report):
import httpx
await httpx.AsyncClient().post(WEBHOOK, json={
"text": f"✅ {mission['title']} done! Files: {report['files_changed']}"
})
@registry.tool("search_jira", description="Search Jira tickets", input_schema={
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
})
async def search_jira(args):
# Your Jira integration here
return {"tickets": [...]}
Hook events: pre_dispatch, post_complete, post_fail, pre_plan, post_plan
Plugin tools automatically appear as MCP tools — any connected MCP client can use them. See plugins/_example_plugin.py for a full example.
GET /api/plugins — List loaded plugins and their toolsOptional context-mode integration for long-running missions. When enabled at dispatch time, agents get context-mode's MCP server attached, providing:
ctx_execute (run code in 11 languages), ctx_batch_execute (batch commands), ctx_execute_file (process files), ctx_index (chunk into FTS5), ctx_search (BM25-ranked retrieval), ctx_fetch_and_index (fetch + auto-index URLs)Enable via the "Context Mode" toggle in the Dispatch Panel, or pass context_mode: true in dispatch options.
Prerequisites: Install context-mode globally (npm install -g context-mode) or set DEVFLEET_CONTEXT_MODE_CMD to the binary path.
| Preset | Tools |
|---|---|
full | Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch |
implement | Read, Write, Edit, Bash, Grep, Glob |
review | Read, Grep, Glob, Bash(git diff/log only) |
test | Read, Edit, Bash(test runners only), Grep, Glob |
explore | Read, Grep, Glob, Bash(git/ls/find only) |
fix | Read, Write, Edit, Bash, Grep, Glob |
Take over any agent session from your phone or browser:
claude.ai/code/... URL| File | Purpose |
|---|---|
backend/app.py | FastAPI routes: projects, missions, dispatch, resume, sessions, reports, scheduling, system status, MCP configs |
backend/sdk_engine.py | SDK engine: claude-code-sdk streaming, MCP server attachment, report pickup, cost tracking |
backend/mission_watcher.py | Auto-dispatch engine: polls for eligible missions, checks dependencies, dispatches to available slots |
backend/scheduler.py | Cron scheduler: evaluates schedules, clones template missions, sets auto_dispatch |
backend/mcp_context.py | Stdio MCP server: contextual intelligence (mission, project, session, team context) |
backend/mcp_devfleet.py | Stdio MCP server: agent self-service (submit report, create sub-missions, request review, check sub-mission status) |
backend/mcp_external.py | MCP server: external integration (plan, dispatch, cancel, wait, dashboard — Streamable HTTP at /mcp, SSE legacy at /mcp/sse) |
backend/planner.py | AI project planner: natural language → project + chained missions via Claude |
backend/autoloop.py | Auto-loop: parallel-aware plan-dispatch cycle (single or multi-task per iteration) |
backend/dispatcher.py | CLI engine (fallback): spawns claude CLI, parses stream-json, broadcasts SSE |
backend/remote_control.py | Remote control manager: spawns claude remote-control, parses URL, monitors sessions |
backend/db.py | SQLite schema + auto-migrations (aiosqlite) |
backend/models.py | Pydantic models: DispatchOptions, MissionCreate/Update, tool presets |
backend/prompt_template.py | Builds full prompt from mission + last report |
backend/worktree.py | Git worktree isolation for agents |
| File | Purpose |
|---|---|
frontend/src/pages/MissionDetail.jsx | Mission view: dispatch with config, resume, remote control, edit, next mission |
frontend/src/pages/LiveAgent.jsx | Live agent output with SSE, take-over button, cost display |
frontend/src/components/DispatchPanel.jsx | Dispatch config: model selector, tool presets, budget/turn limits |
frontend/src/components/RemoteControlModal.jsx | QR code + URL for phone access |
frontend/src/components/LiveOutput.jsx | Terminal-style output renderer |
frontend/src/pages/Integrations.jsx | Integrations info page: setup guides for Claude Code, OpenClaw, Cursor, Windsurf, and custom MCP clients |
frontend/src/api/client.js | API client + SSE streaming |
Connect any MCP-compatible client to Claude DevFleet. Add to your MCP config:
{
"mcpServers": {
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
}
Available tools: plan_project, create_project, create_mission, dispatch_mission, cancel_mission, wait_for_mission, get_mission_status, get_report, get_dashboard, list_projects, list_missions
Works with: Claude Code, Cursor, Windsurf, Cline, and any MCP-compatible agent.
GET|POST|DELETE /mcp/ — Streamable HTTP endpoint (recommended)GET /mcp/sse — SSE stream endpoint (legacy)POST /mcp/messages/ — JSON-RPC message handlerPOST /api/plan — AI project planner: takes a natural language prompt, returns a project with chained missionsGET /api/projects — List projectsPOST /api/projects — Create projectGET /api/projects/{id} — Get project with missionsPUT /api/projects/{id} — Update projectDELETE /api/projects/{id} — Delete projectGET /api/missions — List missions (filter: project_id, status, tag, parent_mission_id)POST /api/missions — Create mission (supports parent_mission_id, depends_on, auto_dispatch, schedule_cron)GET /api/missions/{id} — Get mission with sessions, latest report, and childrenPUT /api/missions/{id} — Update missionDELETE /api/missions/{id} — Delete missionPOST /api/missions/{id}/dispatch — Dispatch agentPOST /api/missions/{id}/resume — Resume failed sessionPOST /api/missions/{id}/generate-next — Generate follow-up mission from reportPOST /api/missions/{id}/remote-control — Start interactive remote-control sessionGET /api/missions/{id}/children — List child/sub-missionsGET /api/missions/{id}/events — Mission event log (auto_dispatched, etc.)POST /api/missions/{id}/schedule — Set cron schedule on a missionDELETE /api/missions/{id}/schedule — Disable scheduleGET /api/schedules — List all scheduled missionsGET /api/sessions — List sessionsGET /api/sessions/{id} — Get session detailsGET /api/sessions/{id}/stream — SSE stream of live agent outputPOST /api/sessions/{id}/cancel — Cancel running sessionGET /api/reports — List reportsGET /api/reports/{id} — Get reportGET /api/system/status — System status: running agents, watcher, schedulerGET /api/config/engine — Current dispatch engineGET /api/config/models — Available Claude modelsGET /api/config/tool-presets — Tool presets by mission typePOST /api/autoloop/start — Start auto-loop for project (supports parallel dispatch)POST /api/autoloop/stop/{project_id} — Stop auto-loopGET /api/autoloop/status/{project_id} — Get auto-loop statusGET /api/projects/{id}/mcp-servers — List MCP servers for projectPOST /api/projects/{id}/mcp-servers — Add MCP server to projectDELETE /api/mcp-servers/{id} — Remove MCP serverprojects (id, name, path, description)
missions (id, project_id, title, detailed_prompt, acceptance_criteria,
status, priority, tags, model, max_turns, max_budget_usd,
allowed_tools, mission_type, parent_mission_id, depends_on,
auto_dispatch, schedule_cron, schedule_enabled, last_scheduled_at)
agent_sessions (id, mission_id, status, started_at, ended_at, exit_code,
output_log, error_log, model, claude_session_id,
total_cost_usd, total_tokens)
reports (id, session_id, mission_id, files_changed, what_done,
what_open, what_tested, what_untested, next_steps,
errors_encountered, preview_url)
mission_events (id, mission_id, event_type, source_mission_id, data)
conversations (session_id, messages_json, updated_at)
mcp_configs (id, project_id, server_name, server_type, config_json, enabled)
# Backend (venv)
source venv/bin/activate
cd backend && uvicorn app:app --host 0.0.0.0 --port 18801 --reload
# Frontend (local dev)
cd frontend && npm run dev
# Docker (if using containers)
docker compose build devfleet-ui && docker compose up -d devfleet-ui
docker top devfleet-api | grep claude # check before restarting
| Service | Port |
|---|---|
| Claude DevFleet UI (Docker) | 3101 |
| Claude DevFleet UI (local dev) | 3100 |
| Claude DevFleet API | 18801 |
| Agent Preview | 4321 |
| Variable | Default | Purpose |
|---|---|---|
DEVFLEET_DB | data/devfleet.db | SQLite database path |
DEVFLEET_MAX_AGENTS | 3 | Max concurrent agents |
DEVFLEET_ENGINE | sdk | Dispatch engine: sdk or cli |
DEVFLEET_WATCHER_INTERVAL | 5 | Mission watcher poll interval (seconds) |
DEVFLEET_SCHEDULER_INTERVAL | 60 | Scheduler check interval (seconds) |
DEVFLEET_CONTEXT_MODE_CMD | context-mode | Path to context-mode binary |
DEVFLEET_PROJECTS_DIR | projects/ | Base directory for planner-created projects |
DEVFLEET_PATH_MAP_* | — | Host:container path translation |
Contributions are welcome! Please open an issue or submit a pull request.
Apache 2.0 — see LICENSE for details.
Python
65.8%
JavaScript
27.7%
CSS
3.4%
HTML
1.8%
Shell
1.2%
Multi-agent coding platform that dispatches Claude CLI agents to work on missions (coding tasks). Each agent runs in an isolated git worktree, streams live output via SSE, and produces structured reports. Built on Claude Code's full feature set.
Python
20
51 commits
updated Sep 27, 2026
Multi-agent coding platform that dispatches Claude Code agents to work on missions (coding tasks). Agents run in isolated git worktrees with MCP-powered tools, create sub-missions for other agents, and coordinate autonomously through a dependency-aware dispatch system.
Built on the Claude Code SDK and MCP (Model Context Protocol) ecosystem.
frontend/ React 19 + Vite UI (port 3101 via nginx)
backend/ FastAPI + SQLite (port 18801, uvicorn --reload)
Runs in Docker via docker-compose.yml or locally with a Python venv.
graph TD
subgraph UI["Claude DevFleet UI :3101"]
Web["React 19 + Vite"]
end
subgraph API["Claude DevFleet API :18801"]
FastAPI["FastAPI + SQLite"]
end
subgraph Services["Background Services"]
SDK["SDK Engine"]
Watcher["Mission Watcher"]
Sched["Scheduler"]
AutoLoop["Auto-Loop"]
Remote["Remote Control"]
end
subgraph Agents["Agent Pool (max 3)"]
A1["Agent"] --> MCP1["MCP Servers"]
A2["Agent"] --> MCP2["MCP Servers"]
A3["Agent"] --> MCP3["MCP Servers"]
end
Web -->|"HTTP"| FastAPI
FastAPI --> SDK
FastAPI --> Watcher
FastAPI --> Sched
FastAPI --> AutoLoop
FastAPI --> Remote
SDK -->|"dispatch"| A1 & A2 & A3
Watcher -->|"auto-dispatch on dependency satisfaction"| SDK
Sched -->|"cron clone → dispatch"| Watcher
AutoLoop -->|"plan → parallel dispatch"| SDK
MCP1 -->|"create_sub_mission"| Watcher
See the full architecture evolution diagram showing the platform's progression from CLI subprocess spawning (Phase 0) through SDK migration (Phase 1), MCP ecosystem (Phase 2), to autonomous multi-agent orchestration (Phase 3).
Claude DevFleet supports two dispatch engines, selectable via DEVFLEET_ENGINE:
| Engine | Mode | How it works |
|---|---|---|
sdk (default) | Claude Code SDK | Uses claude-code-sdk Python API with native async streaming, MCP server attachment, structured message types |
cli | CLI subprocess | Spawns claude CLI with --output-format stream-json, parses stdout events |
git clone https://github.com/LEC-AI/claude-devfleet.git
cd claude-devfleet
./start.sh
# UI: http://localhost:3100
# API: http://localhost:18801
git clone https://github.com/LEC-AI/claude-devfleet.git
cd claude-devfleet
# Backend
python3 -m venv venv
source venv/bin/activate
pip install -r backend/requirements.txt
# Start API server
cd backend
uvicorn app:app --host 0.0.0.0 --port 18801 --reload
# Frontend (separate terminal)
cd frontend
npm install && npm run dev
# UI: http://localhost:3100
# API: http://localhost:18801/docs
git clone https://github.com/LEC-AI/claude-devfleet.git
cd devfleet
Add your project repos to docker-compose.yml:
volumes:
- /path/to/your/project:/workspace/your-project
environment:
- DEVFLEET_PATH_MAP_1=/path/to/your/project:/workspace/your-project
docker compose up -d
# UI: http://localhost:3101
# API: http://localhost:18801/docs
auto_dispatch missions, checks dependency satisfaction, dispatches to available slotsPOST /api/projects/{id}/swarms)GET /api/swarms/{id}/tree, Swarms tab in the UI)/api/projects/{id}/goals)/api/capacity)/api/projects/{id}/window)/api/projects/{id}/nightly-runs)All six have a working data model and API today. Capacity limits and the night-window gate don't affect real dispatch yet — that wiring into the mission watcher and auto-loop is still open; see CLAUDE.md.
Every dispatched agent automatically gets two stdio MCP servers attached:
Context Server (devfleet-context) — Contextual intelligence:
get_mission_context — Current mission requirements, acceptance criteria, statusget_project_context — Project info and recent mission historyget_session_history — Reports from previous sessions for continuityget_team_context — What other agents are currently working onread_past_reports — Detailed reports from any mission in the projectTools Server (devfleet-tools) — Agent self-service:
submit_report — Submit structured end-of-mission reportcreate_sub_mission — Decompose work into sub-tasks with auto-dispatch (supports wait_for_me for dependency control)request_review — Create a review mission that auto-dispatches after your work completesget_sub_mission_status — Check progress of sub-missions you createdlist_project_missions — See all missions in the project for broader contextPer-Project MCP Servers — Configure additional MCP servers per project via the API. These are merged with the built-in servers at dispatch time.
Claude DevFleet itself is an MCP server. Any MCP-compatible client (Claude Code, Cursor, Windsurf, Cline, OpenClaw, custom agents) can connect and orchestrate multi-agent work:
{
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
Both Streamable HTTP (
/mcp) and SSE (/mcp/sse) transports are supported. Streamable HTTP is recommended as SSE is deprecated in the MCP spec.
sequenceDiagram
participant U as User
participant C as Claude Code / OpenClaw / Cursor
participant D as DevFleet MCP Server
participant A1 as Agent 1 (Worktree)
participant A2 as Agent 2 (Worktree)
U->>C: "Build a REST API with auth and tests"
C->>D: plan_project(prompt)
D-->>C: project_id + mission list (with depends_on DAG)
C->>U: Confirm plan (missions + dependencies)
U->>C: Approved
C->>D: dispatch_mission(mission_id=M1)
D->>A1: Spawn agent in isolated git worktree
A1-->>D: Mission M1 complete → auto-merge
D->>A2: Auto-dispatch M2 (depends_on M1 resolved)
A2-->>D: Mission M2 complete → auto-merge
C->>D: get_mission_status(mission_id=M2)
D-->>C: status: completed
C->>D: get_report(mission_id=M2)
D-->>C: files_changed, what_done, errors, next_steps
C-->>U: Summary of completed work
| Tool | Description |
|---|---|
plan_project | One-prompt project creation — AI breaks your description into chained missions |
create_project | Create a project manually |
create_mission | Add a mission with dependencies, auto-dispatch, priority |
dispatch_mission | Send an agent to work on a mission |
get_mission_status | Check progress of any mission |
get_report | Read the structured report (what's done, tested, errors, next steps) |
cancel_mission | Cancel a running mission and stop its agent |
wait_for_mission | Block until a mission completes, then return status + report |
get_dashboard | High-level overview: running agents, project stats, recent activity |
list_projects | Browse all projects |
list_missions | List missions in a project, filter by status |
| Client | Setup | Docs |
|---|---|---|
| Claude Code | claude mcp add devfleet --transport http http://localhost:18801/mcp | integrations/ecc/ |
| OpenClaw / NanoClaw | Load skill: /load claude-devfleet | integrations/openclaw/ |
| Cursor | Add to .cursor/mcp.json | integrations/cursor/ |
| Windsurf / Cline | Add to MCP settings | Same pattern as Cursor |
Example — Claude Code:
claude mcp add devfleet --transport http http://localhost:18801/mcp
# Then say:
# "Use devfleet to plan a project: build a REST API with auth and tests"
# "Check the status of my devfleet missions"
Example — OpenClaw / NanoClaw:
# In NanoClaw REPL:
/load claude-devfleet
> Use DevFleet to build a Python CLI that converts CSV to JSON
# Claude plans the project, dispatches agents, reports back
Example — Cursor / Windsurf / Cline:
Add to .cursor/mcp.json or IDE MCP settings:
{
"mcpServers": {
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
}
Extend Claude DevFleet with custom tools, hooks, and integrations. Drop a Python file into plugins/ and it loads automatically at startup.
# plugins/slack_notify.py
def register(registry):
@registry.hook("post_complete")
async def notify_slack(mission, report):
import httpx
await httpx.AsyncClient().post(WEBHOOK, json={
"text": f"✅ {mission['title']} done! Files: {report['files_changed']}"
})
@registry.tool("search_jira", description="Search Jira tickets", input_schema={
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
})
async def search_jira(args):
# Your Jira integration here
return {"tickets": [...]}
Hook events: pre_dispatch, post_complete, post_fail, pre_plan, post_plan
Plugin tools automatically appear as MCP tools — any connected MCP client can use them. See plugins/_example_plugin.py for a full example.
GET /api/plugins — List loaded plugins and their toolsOptional context-mode integration for long-running missions. When enabled at dispatch time, agents get context-mode's MCP server attached, providing:
ctx_execute (run code in 11 languages), ctx_batch_execute (batch commands), ctx_execute_file (process files), ctx_index (chunk into FTS5), ctx_search (BM25-ranked retrieval), ctx_fetch_and_index (fetch + auto-index URLs)Enable via the "Context Mode" toggle in the Dispatch Panel, or pass context_mode: true in dispatch options.
Prerequisites: Install context-mode globally (npm install -g context-mode) or set DEVFLEET_CONTEXT_MODE_CMD to the binary path.
| Preset | Tools |
|---|---|
full | Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch |
implement | Read, Write, Edit, Bash, Grep, Glob |
review | Read, Grep, Glob, Bash(git diff/log only) |
test | Read, Edit, Bash(test runners only), Grep, Glob |
explore | Read, Grep, Glob, Bash(git/ls/find only) |
fix | Read, Write, Edit, Bash, Grep, Glob |
Take over any agent session from your phone or browser:
claude.ai/code/... URL| File | Purpose |
|---|---|
backend/app.py | FastAPI routes: projects, missions, dispatch, resume, sessions, reports, scheduling, system status, MCP configs |
backend/sdk_engine.py | SDK engine: claude-code-sdk streaming, MCP server attachment, report pickup, cost tracking |
backend/mission_watcher.py | Auto-dispatch engine: polls for eligible missions, checks dependencies, dispatches to available slots |
backend/scheduler.py | Cron scheduler: evaluates schedules, clones template missions, sets auto_dispatch |
backend/mcp_context.py | Stdio MCP server: contextual intelligence (mission, project, session, team context) |
backend/mcp_devfleet.py | Stdio MCP server: agent self-service (submit report, create sub-missions, request review, check sub-mission status) |
backend/mcp_external.py | MCP server: external integration (plan, dispatch, cancel, wait, dashboard — Streamable HTTP at /mcp, SSE legacy at /mcp/sse) |
backend/planner.py | AI project planner: natural language → project + chained missions via Claude |
backend/autoloop.py | Auto-loop: parallel-aware plan-dispatch cycle (single or multi-task per iteration) |
backend/dispatcher.py | CLI engine (fallback): spawns claude CLI, parses stream-json, broadcasts SSE |
backend/remote_control.py | Remote control manager: spawns claude remote-control, parses URL, monitors sessions |
backend/db.py | SQLite schema + auto-migrations (aiosqlite) |
backend/models.py | Pydantic models: DispatchOptions, MissionCreate/Update, tool presets |
backend/prompt_template.py | Builds full prompt from mission + last report |
backend/worktree.py | Git worktree isolation for agents |
| File | Purpose |
|---|---|
frontend/src/pages/MissionDetail.jsx | Mission view: dispatch with config, resume, remote control, edit, next mission |
frontend/src/pages/LiveAgent.jsx | Live agent output with SSE, take-over button, cost display |
frontend/src/components/DispatchPanel.jsx | Dispatch config: model selector, tool presets, budget/turn limits |
frontend/src/components/RemoteControlModal.jsx | QR code + URL for phone access |
frontend/src/components/LiveOutput.jsx | Terminal-style output renderer |
frontend/src/pages/Integrations.jsx | Integrations info page: setup guides for Claude Code, OpenClaw, Cursor, Windsurf, and custom MCP clients |
frontend/src/api/client.js | API client + SSE streaming |
Connect any MCP-compatible client to Claude DevFleet. Add to your MCP config:
{
"mcpServers": {
"devfleet": {
"type": "http",
"url": "http://localhost:18801/mcp"
}
}
}
Available tools: plan_project, create_project, create_mission, dispatch_mission, cancel_mission, wait_for_mission, get_mission_status, get_report, get_dashboard, list_projects, list_missions
Works with: Claude Code, Cursor, Windsurf, Cline, and any MCP-compatible agent.
GET|POST|DELETE /mcp/ — Streamable HTTP endpoint (recommended)GET /mcp/sse — SSE stream endpoint (legacy)POST /mcp/messages/ — JSON-RPC message handlerPOST /api/plan — AI project planner: takes a natural language prompt, returns a project with chained missionsGET /api/projects — List projectsPOST /api/projects — Create projectGET /api/projects/{id} — Get project with missionsPUT /api/projects/{id} — Update projectDELETE /api/projects/{id} — Delete projectGET /api/missions — List missions (filter: project_id, status, tag, parent_mission_id)POST /api/missions — Create mission (supports parent_mission_id, depends_on, auto_dispatch, schedule_cron)GET /api/missions/{id} — Get mission with sessions, latest report, and childrenPUT /api/missions/{id} — Update missionDELETE /api/missions/{id} — Delete missionPOST /api/missions/{id}/dispatch — Dispatch agentPOST /api/missions/{id}/resume — Resume failed sessionPOST /api/missions/{id}/generate-next — Generate follow-up mission from reportPOST /api/missions/{id}/remote-control — Start interactive remote-control sessionGET /api/missions/{id}/children — List child/sub-missionsGET /api/missions/{id}/events — Mission event log (auto_dispatched, etc.)POST /api/missions/{id}/schedule — Set cron schedule on a missionDELETE /api/missions/{id}/schedule — Disable scheduleGET /api/schedules — List all scheduled missionsGET /api/sessions — List sessionsGET /api/sessions/{id} — Get session detailsGET /api/sessions/{id}/stream — SSE stream of live agent outputPOST /api/sessions/{id}/cancel — Cancel running sessionGET /api/reports — List reportsGET /api/reports/{id} — Get reportGET /api/system/status — System status: running agents, watcher, schedulerGET /api/config/engine — Current dispatch engineGET /api/config/models — Available Claude modelsGET /api/config/tool-presets — Tool presets by mission typePOST /api/autoloop/start — Start auto-loop for project (supports parallel dispatch)POST /api/autoloop/stop/{project_id} — Stop auto-loopGET /api/autoloop/status/{project_id} — Get auto-loop statusGET /api/projects/{id}/mcp-servers — List MCP servers for projectPOST /api/projects/{id}/mcp-servers — Add MCP server to projectDELETE /api/mcp-servers/{id} — Remove MCP serverprojects (id, name, path, description)
missions (id, project_id, title, detailed_prompt, acceptance_criteria,
status, priority, tags, model, max_turns, max_budget_usd,
allowed_tools, mission_type, parent_mission_id, depends_on,
auto_dispatch, schedule_cron, schedule_enabled, last_scheduled_at)
agent_sessions (id, mission_id, status, started_at, ended_at, exit_code,
output_log, error_log, model, claude_session_id,
total_cost_usd, total_tokens)
reports (id, session_id, mission_id, files_changed, what_done,
what_open, what_tested, what_untested, next_steps,
errors_encountered, preview_url)
mission_events (id, mission_id, event_type, source_mission_id, data)
conversations (session_id, messages_json, updated_at)
mcp_configs (id, project_id, server_name, server_type, config_json, enabled)
# Backend (venv)
source venv/bin/activate
cd backend && uvicorn app:app --host 0.0.0.0 --port 18801 --reload
# Frontend (local dev)
cd frontend && npm run dev
# Docker (if using containers)
docker compose build devfleet-ui && docker compose up -d devfleet-ui
docker top devfleet-api | grep claude # check before restarting
| Service | Port |
|---|---|
| Claude DevFleet UI (Docker) | 3101 |
| Claude DevFleet UI (local dev) | 3100 |
| Claude DevFleet API | 18801 |
| Agent Preview | 4321 |
| Variable | Default | Purpose |
|---|---|---|
DEVFLEET_DB | data/devfleet.db | SQLite database path |
DEVFLEET_MAX_AGENTS | 3 | Max concurrent agents |
DEVFLEET_ENGINE | sdk | Dispatch engine: sdk or cli |
DEVFLEET_WATCHER_INTERVAL | 5 | Mission watcher poll interval (seconds) |
DEVFLEET_SCHEDULER_INTERVAL | 60 | Scheduler check interval (seconds) |
DEVFLEET_CONTEXT_MODE_CMD | context-mode | Path to context-mode binary |
DEVFLEET_PROJECTS_DIR | projects/ | Base directory for planner-created projects |
DEVFLEET_PATH_MAP_* | — | Host:container path translation |
Contributions are welcome! Please open an issue or submit a pull request.
Apache 2.0 — see LICENSE for details.
Python
65.8%
JavaScript
27.7%
CSS
3.4%
HTML
1.8%
Shell
1.2%