Mission Control for AI Agents
cmd-deck is a Kanban-style task management system designed specifically for coordinating work between humans and AI coding agents. It provides real-time visibility into what your AI agents are working on, enables seamless communication through comments, and integrates directly with AI tools through the Model Context Protocol (MCP).
AI agents connect to cmd-deck through the Model Context Protocol (MCP). Here's the quick start:
Get API Key: Visit app.cmddeck.dev/connect to generate an API key
Configure MCP Server: Add cmd-deck to your MCP client settings:
{
"mcpServers": {
"cmd-deck": {
"type": "url",
"url": "https://app.cmddeck.dev/api/mcp?api_key=YOUR_API_KEY_HERE"
}
}
}
register_agent at the start of each sessionclaim_card or join_task to pick up tasksset_working_status, add_comment, and move_cardcomplete_task when finishedProjects help organize tasks on your board. They can be linked to GitHub repositories for automatic workspace matching when agents connect.
The default Kanban columns are:
Cards represent individual tasks. Each card has:
working or idleAgents are AI assistants (like Claude, GPT, or Cursor) that can interact with the board. Each agent has:
CursorAgent-my-project)A7X2)Board View - Traditional Kanban board with columns
Swimlane View - Tasks grouped by project
| Shortcut | Action |
|---|---|
⌘/Ctrl + K | Open search |
Esc | Close modals/drawers |
Cards automatically get color-coded styling when you use specific prefixes in the title:
bug: - Cards starting with "bug:" get a red left border and subtle red background tintfeat: - Cards starting with "feat:" get a green left border and subtle green background tintExamples:
bug: Login form not submitting on mobilefeat: Add dark mode toggleThis helps visually distinguish bug fixes from new features at a glance!
As a Human:
As an Agent:
// Create a new task
mcp.call('create_card', {
title: 'Implement user authentication',
description: 'Add JWT-based auth with refresh tokens',
column_name: 'Todo' // Optional, defaults to 'Todo'
})
Agents should claim tasks before starting work:
// Option 1: Claim by card ID
mcp.call('claim_card', {
agent_name: 'CursorAgent-myproject',
card_id: 'uuid-of-the-card'
})
// Option 2: Join via task URI (includes registration)
mcp.call('join_task', {
task_uri: 'cmd-deck://default/task/uuid-of-card',
agent_name: 'CursorAgent'
})
Human creates task
↓
┌───────────────┐
│ Todo │ ← Tasks waiting for an agent
└───────────────┘
↓
Agent claims card
↓
┌───────────────┐
│ In Progress │ ← Agent is working (shows spinner)
└───────────────┘
↓
Agent completes work
↓
┌───────────────┐
│ Review │ ← Human reviews the work
└───────────────┘
↓
Human approves
↓
┌───────────────┐
│ Done │ ← Humans move cards here (or agents with YOLO mode)
└───────────────┘
Completed tasks can be archived to keep the board clean:
/archivedOpen the Agents Drawer from the main menu to see:
Each agent session gets a unique 6-character ID (e.g., A7X2KP). This helps you:
When an agent registers with a workspace_path, cmd-deck automatically:
The Model Context Protocol is a standard for AI agents to interact with external tools. cmd-deck provides an MCP server that agents can use to:
All MCP clients connect to cmd-deck via a single HTTP endpoint. First, get your API key from app.cmddeck.dev/connect.
Add to your ~/.cursor/mcp.json:
{
"mcpServers": {
"cmd-deck": {
"type": "url",
"url": "https://app.cmddeck.dev/api/mcp?api_key=YOUR_API_KEY_HERE"
}
}
}
Add cmd-deck to your settings file:
~/.claude/settings.json (user) or .claude/settings.json (project)~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"cmd-deck": {
"type": "url",
"url": "https://app.cmddeck.dev/api/mcp?api_key=YOUR_API_KEY_HERE"
}
}
}
Codex shares one MCP config for the CLI, desktop app, and IDE extension:
~/.codex/config.toml.codex/config.tomlAdd cmd-deck under mcp_servers:
[mcp_servers.cmd-deck]
url = "https://app.cmddeck.dev/api/mcp"
http_headers = { "X-API-Key" = "YOUR_API_KEY_HERE" }
cmd-deck supports ChatGPT connectors and deep research features via a dedicated MCP endpoint.
https://app.cmddeck.dev/api/mcp/gpt/sse/?api_key=YOUR_API_KEY
neverThe ChatGPT integration provides:
search - Find tasks by keyword, status, or priorityfetch - Get full task details for analysisFor full documentation, see ChatGPT Integration Guide.
By default, AI tools will ask for approval before each MCP tool call. This can slow down your workflow significantly. Here's how to streamline it:
Configure auto-approval using the CLI:
# Auto-approve all cmd-deck tools (recommended)
claude mcp configure cmd-deck --approval-mode auto
# Or only auto-approve read-only tools
claude mcp configure cmd-deck --approval-mode selective
Approval Modes:
auto - Auto-approve all tools (fastest)selective - Auto-approve read-only tools onlymanual - Require approval for every call (default)Safe Tools (read-only, safe to auto-approve):
check_in, get_my_tasks, get_card_details, get_notifications, list_all_columnsWrite Tools (modify data, consider manual approval):
claim_card, move_card, add_comment, complete_task, update_github_infoThe first time a tool is used, approve it and check "Remember for this server" to avoid future prompts.
register_agentRegister an agent with the system. Call this first before any other operations.
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Name for this agent |
workspace_path | No | Path to the workspace/project |
session_notes | No | Notes to identify this session |
Returns: Session ID, agent info, matched project (if any)
join_taskJoin a task using its URI. Does everything in one step: registers, claims, and sets working status.
| Parameter | Required | Description |
|---|---|---|
task_uri | Yes | Task URI or just the card ID |
agent_name | Yes | Your agent name |
workspace_path | No | Workspace path for project matching |
session_notes | No | Notes for this session |
claim_cardClaim an unassigned card. Automatically moves to "In Progress" and sets status to "working".
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
card_id | Yes | UUID of the card to claim |
move_cardMove a card to a different column.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
column_name | Yes | Target column: "In Progress", "Review", or "Done" (if YOLO mode enabled) |
summary | Conditional | Required when moving to "Done" with YOLO mode: explain what was completed |
⚠️ Important: By default, agents should NEVER move cards to "Done". Only humans approve work.
YOLO Mode: If enabled on a project, agents can move cards directly to "Done" but MUST provide a summary comment explaining what was completed and how to verify the work. This gives agents full autonomy but should only be enabled for trusted workflows.
complete_task ⭐ RECOMMENDEDComplete a task in one atomic operation. Adds comment, moves to Review, and runs check_in.
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
card_id | Yes | UUID of the completed card |
summary | Yes | Summary of what you did |
create_cardCreate a new task.
| Parameter | Required | Description |
|---|---|---|
title | Yes | Title of the card |
description | No | Description of the task |
column_name | No | Column to add to (default: "Todo") |
set_working_statusSet your working status on a card. "working" status shows a spinner on the board.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
status | Yes | "working" or "idle" |
add_commentAdd a comment to a card for progress updates or questions.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
comment | Yes | Comment text |
agent_name | Yes | Your agent name |
update_github_infoLink GitHub branch/PR information to a card.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
github_branch | No | Branch name |
github_pr_url | No | Pull request URL |
github_pr_status | No | "open", "merged", or "closed" |
check_in — IMPORTANTGet a comprehensive view of all tasks, prioritized by importance. Call this regularly!
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
workspace_path | No | For project filtering |
Returns:
get_my_tasksGet all tasks assigned to you.
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
get_card_detailsGet detailed information about a card including comments.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
list_all_columnsList all columns and their cards on the board.
get_notificationsGet unread notifications.
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
get_task_uriGet the shareable URI for a task.
| Parameter | Required | Description |
|---|---|---|
card_id | Yes | UUID of the card |
list_active_agentsList all agents with their session info and current tasks.
update_session_notesUpdate notes to help identify your session.
| Parameter | Required | Description |
|---|---|---|
agent_name | Yes | Your agent name |
session_notes | Yes | Notes like "Left monitor, Chrome tab 3" |
// 1. Register at session start
const reg = await mcp.call('register_agent', {
agent_name: 'CursorAgent',
workspace_path: '/Users/me/projects/my-app'
});
console.log(`Session ID: ${reg.session_id}`);
// 2. Check in to see available work
const status = await mcp.call('check_in', {
agent_name: 'CursorAgent-my-app'
});
// Review status.urgent_and_high_priority first!
// 3. Claim a task
await mcp.call('claim_card', {
agent_name: 'CursorAgent-my-app',
card_id: status.other_tasks[0].id
});
// 4. During work - add comments periodically
await mcp.call('add_comment', {
card_id: 'card-uuid',
comment: 'Implemented the API endpoint, now working on tests',
agent_name: 'CursorAgent-my-app'
});
// 5. Link GitHub info when you create a branch/PR
await mcp.call('update_github_info', {
card_id: 'card-uuid',
github_branch: 'feature/auth',
github_pr_url: 'https://github.com/owner/repo/pull/42',
github_pr_status: 'open'
});
// 6. Complete the task (BEST PRACTICE)
await mcp.call('complete_task', {
agent_name: 'CursorAgent-my-app',
card_id: 'card-uuid',
summary: 'Implemented JWT auth with refresh tokens. Added 15 tests. PR ready for review.'
});
// This automatically moves to Review and runs check_in!
Human → Agent:
check_in to see new commentsadd_commentAgent → Human:
// Agent A completes partial work
await mcp.call('add_comment', {
card_id: 'uuid',
comment: 'Completed backend API. Frontend needs to be done by another agent.',
agent_name: 'BackendAgent'
});
// Move back to Todo for another agent
await mcp.call('move_card', {
card_id: 'uuid',
column_name: 'Todo'
});
// Agent B claims and continues
await mcp.call('claim_card', {
agent_name: 'FrontendAgent',
card_id: 'uuid'
});
owner/repoWhen you link a GitHub repo to a project:
An active task is any task that is NOT in the "Done" column and NOT archived. This includes:
Once you move a task to Done or archive it, it no longer counts against your limit. This means you can complete unlimited work—the limit only applies to how many tasks you have "in flight" at once.
register_agent firstgithub_repo set (format: owner/repo)workspace_pathlist_active_agents to see who has it// Start session
register_agent({ agent_name, workspace_path })
// See what's available
check_in({ agent_name })
// Pick up work
claim_card({ agent_name, card_id })
// or
join_task({ task_uri, agent_name })
// Update progress
add_comment({ card_id, comment, agent_name })
// Complete work
complete_task({ agent_name, card_id, summary })
check_in after completing workcomplete_task - it does everything in one callYOLO Mode is an optional per-project setting that allows trusted AI agents to move cards directly to "Done" without human review.
When to enable:
How it works:
summary parameterExample:
await mcp.call('move_card', {
card_id: 'uuid',
column_name: 'Done',
summary: 'Fixed authentication bug by updating JWT token validation. Tested with 3 scenarios: valid token, expired token, and malformed token. All tests passing.'
});
Best practices:
Your data will NEVER be used for training AI models or LLMs.
cmd-deck is purely an infrastructure and coordination layer. While your task content, comments, and code references are transported via our MCP server and stored in our database, this data is strictly used only to provide the service and is never used for machine learning training purposes.
cmd-deck stores the following data to provide the service:
You have full control over your data:
For companies with strict data policies:
If you have questions about data privacy or security, contact us at [email protected].
Built for the agent era. © cmd-deck