用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/dwoolworth/devteam --skill planning-board命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | planning-board |
| description | Full CRUD access to the Planning Board for creating, reading, updating, and deleting tickets. |
PO has full, unrestricted access to the Planning Board. This skill covers every operation available: creating tickets, reading and querying tickets, updating any field, deleting tickets, assigning work, managing statuses, and reading comment and status histories.
${PLANNING_BOARD_URL} (set via environment variable)Authorization: Bearer ${PLANNING_BOARD_TOKEN}application/jsonAll examples below use these variables. Replace with actual values at runtime.
There are exactly three ticket types:
There are no other types. Do not use bug, task, subtask, or feature — they will be rejected by the API.
Ticket numbers use the format MNS-{N} for all types (e.g., MNS-1, MNS-42). There are no per-type prefixes.
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"story\", \"title\": \"Implement user login form\", \"description\": \"Create a login form with email and password fields.\\n\\n## Acceptance Criteria\\n- [ ] Form has email field with validation\\n- [ ] Form has password field (min 8 chars)\\n- [ ] Submit button disabled until valid\\n- [ ] Server errors display inline\", \"priority\": 4, \"assignee\": \"${EXAMPLE_DEV_EMAIL}\", \"labels\": [\"frontend\", \"auth\"]}"
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"epic\", \"title\": \"User Authentication System\", \"description\": \"Complete authentication system including login, registration, password reset, and session management.\", \"priority\": 4, \"labels\": [\"auth\", \"mvp\"]}"
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"initiative\", \"title\": \"Build user onboarding flow\", \"description\": \"Users need a guided onboarding experience after registration.\", \"priority\": 3}"
Notes:
type defaults to story if omitted.priority is a number: 1 (lowest) to 5 (critical).assignee is an email like ${EXAMPLE_DEV_EMAIL}, not a role name.description field. There is no separate acceptance_criteria field.boardId is optional — the API auto-selects the default board if omitted.curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?status=in-review" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?type=initiative" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?type=epic" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?assignee=${EXAMPLE_DEV_EMAIL}" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?assignee=none&status=todo" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?status=in-progress&type=story&priority=4" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?search=login%20form" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?label=auth" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?updated_after=2025-01-15T00:00:00Z&updated_before=2025-01-16T00:00:00Z" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"status\": \"in-progress\"}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"assignee\": \"${EXAMPLE_DEV_EMAIL}\"}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"priority\": 5}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"epic\"}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"status\": \"in-progress\", \"assignee\": \"${EXAMPLE_DEV_EMAIL}\", \"priority\": 4}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-22" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"title\": \"Implement user login form with validation\", \"description\": \"Updated scope: include rate limiting feedback.\"}"
Use sparingly. Only for duplicates or tickets created in error.
curl -s -X DELETE "${PLANNING_BOARD_URL}/api/tickets/MNS-99" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X PUT "${PLANNING_BOARD_URL}/api/tickets/MNS-22/assignee" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"assignee\": \"${EXAMPLE_DEV_EMAIL}\"}"
curl -s -X PUT "${PLANNING_BOARD_URL}/api/tickets/MNS-22/assignee" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"assignee\": null}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets/MNS-22/comments" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets/MNS-22/comments" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"body\": \"Reviewing this ticket. Acceptance criteria look good.\"}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets/MNS-22/history" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/board/summary" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/board/workload" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
The board separates two concepts:
Key rules:
rank field cannot be set via PATCH /api/tickets/:id — it is only changeable through the reorder endpoint.curl -s -X POST "${PLANNING_BOARD_URL}/api/tasks/reorder" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"order\": [{\"id\": \"TASK_OBJECT_ID_1\", \"order\": 0}, {\"id\": \"TASK_OBJECT_ID_2\", \"order\": 1}]}"
Each item in the order array maps a task ObjectId to its new position. The API sets rank = index + 1 for each item.
curl -s -X GET "${PLANNING_BOARD_URL}/api/ticket-types" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
Returns: ["initiative", "epic", "story"]
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?type=initiative&status=todo" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets/MNS-5" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"
Create epics with a label linking back to the initiative ticket number.
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"epic\", \"title\": \"User Authentication System\", \"description\": \"Complete auth system. Spawned from MNS-5.\", \"priority\": 4, \"labels\": [\"auth\", \"initiative:MNS-5\"]}"
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"type\": \"story\", \"title\": \"Implement login form\", \"description\": \"Login form with validation.\\n\\n## Acceptance Criteria\\n- [ ] Email field with format validation\\n- [ ] Password field (min 8 chars)\\n- [ ] Disabled submit until valid\", \"priority\": 4, \"assignee\": \"${EXAMPLE_DEV_EMAIL}\", \"labels\": [\"auth\", \"initiative:MNS-5\"]}"
curl -s -X PATCH "${PLANNING_BOARD_URL}/api/tickets/MNS-5" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"status\": \"completed\"}"
Add a summary comment listing all created tickets:
curl -s -X POST "${PLANNING_BOARD_URL}/api/tickets/MNS-5/comments" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"body\": \"Initiative decomposed. Created: MNS-10 (epic), MNS-11 through MNS-14 (stories). All tagged with initiative:MNS-5.\"}"
curl -s -X GET "${PLANNING_BOARD_URL}/api/tickets?label=initiative:MNS-5" \
-H "Authorization: Bearer ${PLANNING_BOARD_TOKEN}"