ワンクリックで
mission
// Manage tasks on a Mission Board kanban — list, create, claim, update, complete, release, and review tasks via the Mission Board API. Use when the user says /mission or asks about missions/tasks on the board.
// Manage tasks on a Mission Board kanban — list, create, claim, update, complete, release, and review tasks via the Mission Board API. Use when the user says /mission or asks about missions/tasks on the board.
Implements Hono API endpoints, database operations, and business logic with Bun/SQLite
Implements CLI tool with command handlers, API client, and Bun compilation to standalone binary
Implements React dashboard components, state management, and UI features
| name | mission |
| description | Manage tasks on a Mission Board kanban — list, create, claim, update, complete, release, and review tasks via the Mission Board API. Use when the user says /mission or asks about missions/tasks on the board. |
Unified skill for interacting with the Mission Board API — a central kanban board for coordinating work across agents and humans.
Mission Board is a central kanban board that coordinates work across multiple projects and agents. It runs as a standalone API server, and any project can connect to it.
Copy this skill into your project so agents working in it can access the board:
# Option A: project-level (agents in this repo only)
mkdir -p .claude/skills/mission
cp /path/to/SKILL.md .claude/skills/mission/SKILL.md
# Option B: global (all projects on this machine)
mkdir -p ~/.claude/skills/mission
cp /path/to/SKILL.md ~/.claude/skills/mission/SKILL.md
Then add guidance in your project's CLAUDE.md so agents know how to use it:
## Mission Board
This project uses a central Mission Board for task coordination.
- API URL: http://your-server:3200
- Project name on the board: "<your-project-name>"
### Workflow
1. Run `/mission list --status ready` to see available tasks for this project
2. Claim a task with `/mission claim <id>` before starting work
3. Update status as you progress: `/mission update <id>`
4. When done: `/mission complete <id>`
Always check the board before starting new work.
You are an agent working inside a project. The Mission Board tracks what needs to be done across all projects. Your workflow:
/mission — shows your current tasks and available projects/mission list --status ready — see tasks waiting to be picked up/mission claim <task-id> — assigns the task to you/mission update <task-id> — move to review when ready/mission complete <task-id> — mark as done when finished/mission update <task-id> with status blocked — flag it and move on/mission release <task-id> — put it back for someone elseIf CLAUDE.md specifies a project name or ID, use --project filters to scope your view to the relevant project.
Before executing ANY subcommand, read the config file:
cat ~/.mission-board/config.json 2>/dev/null
api_url, agents, and default_agent: proceed. Extract api_url and resolve the default agent's UUID from the agents map.Ask the user two questions, one at a time:
http://localhost:3200)alice, claude-dev)Then run:
mkdir -p ~/.mission-board && cat > ~/.mission-board/config.json << 'ENDCONFIG'
{
"api_url": "<API_URL>",
"agents": {
"<AGENT_NAME>": "<GENERATED_UUID>"
},
"default_agent": "<AGENT_NAME>"
}
ENDCONFIG
Generate the UUID with: cat /proc/sys/kernel/random/uuid (Linux) or uuidgen (macOS).
After writing config, register the agent with the API (best-effort, don't fail if this errors):
curl -s -X POST "<API_URL>/api/agents" \
-H "Content-Type: application/json" \
-d '{"id":"<UUID>","name":"<AGENT_NAME>"}'
Then proceed with the original command.
Every state-changing action MUST include reasoning. This creates an audit trail visible in the Mission Board dashboard.
Include two fields in the request body:
| Field | Type | Constraint | What to write |
|---|---|---|---|
reason | string | max 280 chars | One sentence: why you are taking this action |
transcript | array of {step, thought} | max 50 steps, thought max 2000 chars | Your decision-making steps (typically 2-5) |
reason — answer "why am I doing this?":
"Task matches my expertise in React; no blockers in description""Implementation complete, all 3 acceptance criteria met, tests passing""Blocked on upstream API — releasing so another agent can pick up a different approach""Claiming this task" (restates the action, no insight)"Done" (no context)transcript — show your decision process, not a narrative:
Example (claiming):
{
"reason": "Task requires React component work — matches my current project context",
"transcript": [
{"step": 1, "thought": "Task requires implementing a React component with Tailwind — matches my current project context"},
{"step": 2, "thought": "Checked dependencies: no blockers, design spec is linked in description"},
{"step": 3, "thought": "No other agent has claimed this; ready status confirmed"}
]
}
Example (completing):
{
"reason": "All acceptance criteria met, 4 unit tests passing, manually verified",
"transcript": [
{"step": 1, "thought": "Implemented the UserProfile component as specified in the design doc"},
{"step": 2, "thought": "Added unit tests — 4 tests covering render, props, error state, loading state"},
{"step": 3, "thought": "Manual verification: component renders correctly in the dashboard"},
{"step": 4, "thought": "All acceptance criteria from task description are met"}
]
}
Applies to: claim, update, complete, release, and approval requests.
Parse the arguments passed after /mission. If no arguments, run Dashboard.
Show the user's current task assignments and available projects.
Read config to get api_url and the default agent's UUID (AGENT_ID).
Fetch the agent's tasks:
curl -s "<API_URL>/api/tasks?agent_id=<AGENT_ID>"
Fetch all projects:
curl -s "<API_URL>/api/projects"
Display:
| ID (first 8 chars) | Title | Status | Type |. If none, say "No tasks assigned."| ID (first 8 chars) | Name |list [--status <status>] [--project <project-id>]List tasks with optional filters.
curl -s "<API_URL>/api/tasks?status=<STATUS>&project_id=<PROJECT_ID>"
Omit query params that weren't provided. Valid statuses: backlog, ready, in_progress, review, done, blocked.
Display as markdown table: | ID (first 8 chars) | Title | Status | Type | Assignee |
If empty: "No tasks found matching filters."
show <task-id>Show full details of a task.
curl -s "<API_URL>/api/tasks/<TASK_ID>"
Display all fields in a readable format:
createCreate a new task. Gather required fields interactively.
Fetch and show available projects:
curl -s "<API_URL>/api/projects"
Ask user to pick a project or provide a project ID.
Ask for title (required).
Ask for type — offer choices: implementation, bugfix, feature, deployment, documentation, testing, research, other.
Ask for description (optional but encouraged).
Create the task:
curl -s -X POST "<API_URL>/api/tasks" \
-H "Content-Type: application/json" \
-d '{"projectId":"<PROJECT_ID>","title":"<TITLE>","taskType":"<TYPE>","description":"<DESC>"}'
Confirm with the created task's ID and title.
claim <task-id>Claim a task for the configured agent.
Read config to get the default agent's UUID.
Formulate your reasoning:
reason: Why are you picking this task? (e.g., relevant expertise, priority, no blockers)transcript: Your decision steps for choosing this taskClaim:
curl -s -X POST "<API_URL>/api/tasks/<TASK_ID>/claim" \
-H "Content-Type: application/json" \
-d '{"agentId":"<AGENT_ID>","reason":"<REASON>","transcript":[{"step":1,"thought":"<THOUGHT>"}]}'
If successful: confirm "Claimed task: ".
If 409 response: "Task is already claimed by another agent."
If the task response shows requiresApproval: true: inform the user that approval may be needed for certain actions on this task.
update <task-id>Update a task's status, title, or description.
Ask the user what to change. At least one field is required. Formulate your reasoning:
reason: Why is this change being made?transcript: Your decision steps for this updateBuild a JSON patch:
curl -s -X PATCH "<API_URL>/api/tasks/<TASK_ID>" \
-H "Content-Type: application/json" \
-d '{"status":"<STATUS>","reason":"<REASON>","transcript":[{"step":1,"thought":"<THOUGHT>"}]}'
Only include fields that are being changed (plus reason and transcript). Valid status transitions:
backlog <-> ready <-> in_progress <-> review <-> doneblockedIf the server returns a transition error, display it to the user.
complete <task-id>Mark a task as done, respecting approval requirements.
Fetch task details:
curl -s "<API_URL>/api/tasks/<TASK_ID>"
Formulate your reasoning:
reason: Summarize what was accomplished and how it was verifiedtranscript: Detail the work done and verification stepsIf requiresApproval is true:
curl -s -X POST "<API_URL>/api/approvals" \
-H "Content-Type: application/json" \
-d '{"taskId":"<TASK_ID>","agentId":"<AGENT_ID>","actionRequested":"complete","reason":"<REASON>","transcript":[{"step":1,"thought":"<THOUGHT>"}]}'
curl -s "<API_URL>/api/approvals?task_id=<TASK_ID>"
Check the latest entry's status field: approved, denied, or pending.If requiresApproval is false (or after approval is confirmed):
curl -s -X PATCH "<API_URL>/api/tasks/<TASK_ID>" \
-H "Content-Type: application/json" \
-d '{"status":"done","reason":"<REASON>","transcript":[{"step":1,"thought":"<THOUGHT>"}]}'
Confirm: "Task marked as done."
release <task-id>Release a claimed task back to the pool.
Fetch task title first:
curl -s "<API_URL>/api/tasks/<TASK_ID>"
Formulate your reasoning:
reason: Why are you releasing this task? (e.g., blocked, wrong expertise, reprioritized)transcript: Your decision steps — this helps the next agent understand the contextRelease:
curl -s -X POST "<API_URL>/api/tasks/<TASK_ID>/release" \
-H "Content-Type: application/json" \
-d '{"reason":"<REASON>","transcript":[{"step":1,"thought":"<THOUGHT>"}]}'
Confirm: "Released task: "
review <task-id>View review comments and feedback on a task.
curl -s "<API_URL>/api/tasks/<TASK_ID>/comments"
Display each comment with:
If comments contain actionable feedback (requested changes, bugs, suggestions), summarize what needs to be done as a bullet list.