templates/skills/po/human-comms/SKILL.md
Communicate with human stakeholders via Meeting Board, Discord, or Slack webhooks.
npx skillsauth add dwoolworth/devteam human-commsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
PO is the sole interface between the AI team and human stakeholders. This skill covers how to communicate with humans through the Meeting Board #humans channel, Discord webhooks, and Slack webhooks.
| Environment Variable | Required | Description |
|---|---|---|
| HUMAN_COMMS_TYPE | No (default: meeting-board) | Communication channel: meeting-board, discord, or slack |
| HUMAN_COMMS_WEBHOOK_URL | Only for discord/slack | The webhook URL for the external service |
| MEETING_BOARD_URL | Yes | Meeting Board base URL (always needed for fallback) |
| MEETING_BOARD_TOKEN | Yes | PO's auth token for the Meeting Board |
completed. Notify the human.#humans (Default / Fallback)This is the default channel and the fallback for all external webhook failures. Messages posted here are visible on the Meeting Board dashboard.
curl -s -X POST "${MEETING_BOARD_URL}/api/channels/humans/messages" \
-H "Authorization: Bearer ${MEETING_BOARD_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"body": "Your message here",
"mentions": ["human"]
}'
curl -s -X GET "${MEETING_BOARD_URL}/api/channels/humans/messages?limit=20" \
-H "Authorization: Bearer ${MEETING_BOARD_TOKEN}"
When HUMAN_COMMS_TYPE=discord, send messages to a Discord channel via webhook.
curl -s -X POST "${HUMAN_COMMS_WEBHOOK_URL}" \
-H "Content-Type: application/json" \
-d '{
"username": "DevTeam PO",
"content": "Your message here"
}'
curl -s -X POST "${HUMAN_COMMS_WEBHOOK_URL}" \
-H "Content-Type: application/json" \
-d '{
"username": "DevTeam PO",
"embeds": [{
"title": "Initiative Update: INIT-001",
"description": "Your initiative has been decomposed into actionable work.",
"color": 5814783,
"fields": [
{"name": "Epics Created", "value": "EPIC-010, EPIC-011", "inline": true},
{"name": "Stories Created", "value": "STORY-050 through STORY-058", "inline": true},
{"name": "Status", "value": "Work is queued and will begin shortly."}
]
}]
}'
A successful Discord webhook returns HTTP 204 (No Content). Any other status code is a failure — fall back to Meeting Board.
When HUMAN_COMMS_TYPE=slack, send messages to a Slack channel via incoming webhook.
curl -s -X POST "${HUMAN_COMMS_WEBHOOK_URL}" \
-H "Content-Type: application/json" \
-d '{
"text": "Your message here"
}'
curl -s -X POST "${HUMAN_COMMS_WEBHOOK_URL}" \
-H "Content-Type: application/json" \
-d '{
"blocks": [
{
"type": "header",
"text": {"type": "plain_text", "text": "Initiative Update: INIT-001"}
},
{
"type": "section",
"text": {"type": "mrkdwn", "text": "Your initiative has been decomposed into actionable work.\n\n*Epics Created:* EPIC-010, EPIC-011\n*Stories Created:* STORY-050 through STORY-058\n*Status:* Work is queued and will begin shortly."}
}
]
}'
A successful Slack webhook returns HTTP 200 with body ok. Any other response is a failure — fall back to Meeting Board.
[INIT-XXX] Initiative: "Title"
I have reviewed this initiative and need clarification before I can break it down into actionable work:
1. [Specific question about scope, priority, constraint, or expected outcome]
2. [Specific question]
3. [Specific question]
Please reply with answers so I can create the appropriate Epics and Stories. Without this clarity, I cannot guarantee the team builds what you actually need.
[INIT-XXX] Initiative Received: "Title"
I have picked up your initiative. I am reviewing the details and will follow up with clarifying questions if needed, or a breakdown summary once decomposition is complete.
Expected turnaround: Next heartbeat cycle (within 15 minutes).
[INIT-XXX] Initiative Decomposed: "Title"
Your initiative has been broken down into the following work items:
Epic(s):
- EPIC-XXX: "Epic title"
Stories:
- STORY-XXX: "Story title" (assigned to ${MENTION_DEV}, priority: high)
- STORY-XXX: "Story title" (assigned to ${MENTION_DEV}, priority: medium)
- STORY-XXX: "Story title" (assigned to ${MENTION_DEV}, priority: medium)
All stories have acceptance criteria. The team will begin work in priority order. I will update you as items are completed.
Initiative ticket INIT-XXX is now closed.
[INIT-XXX] Reminder: Awaiting Your Response
I asked clarifying questions on this initiative 24 hours ago and have not received a response. The initiative cannot be decomposed until these questions are answered:
1. [Original question 1]
2. [Original question 2]
Please respond when you can. The initiative remains in TODO until we have clarity.
#humans immediately. Include a note in the fallback message: [Webhook delivery failed — posting here as fallback].HUMAN_COMMS_WEBHOOK_URL is empty but type is discord/slack: Log a warning. Use Meeting Board as fallback. Do not crash.#ad-hoc with @human and PO relays.development
Run Playwright browser tests and curl API tests to validate tickets against acceptance criteria.
testing
Read tickets, post test result comments, and change ticket status as part of the QA gate on the Planning Board.
testing
Post test results, ask clarifying questions, and communicate QA status on the Meeting Board.
tools
Full CRUD access to the Planning Board for creating, reading, updating, and deleting tickets.