关于 kill-the-standup
面向使用 Linear、GitHub 和 Slack 的团队的站会汇报技能。它汇总昨天的工作并整理成简报,发布到 Slack 前会先征求确认。
主要功能
- 01获取近期更新的 Linear 问题
- 02收集昨天的 GitHub 提交
- 03将工作归类为 Done 和 Doing
- 04发布到 Slack 前预览简报
适用场景
- 01准备每日工程站会
- 02在 Slack 分享问题与提交进展
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill kill-the-standup安装后在 Claude Code 中输入/kill-the-standup确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.exampleREADME.mdevals/evals.jsonreferences/standup-format.md详细介绍
结束站会
读取昨天的 Linear 事项和 GitHub 提交记录。整理站会更新,并发布到 Slack。
步骤 1:检查设置
确认必需的环境变量已设置:
echo "LINEAR_API_KEY: ${LINEAR_API_KEY:+set}"
echo "SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL:+set}"
echo "GITHUB_REPO: ${GITHUB_REPO:-not set}"
echo "GITHUB_USERNAME: ${GITHUB_USERNAME:-not set}"
如果缺少 LINEAR_API_KEY: 停止。告知用户:“LINEAR_API_KEY 是必需项。请前往 Linear → Settings → API → Personal API keys 获取,并将其添加到 .env 文件中。”
如果缺少 SLACK_WEBHOOK_URL: 停止。告知用户:“SLACK_WEBHOOK_URL 是必需项。请前往 api.slack.com/apps → Your App → Incoming Webhooks 创建 Incoming Webhook,并将其添加到 .env 文件中。”
如果缺少 GITHUB_REPO: 继续。将跳过 GitHub 提交记录。请向用户说明这一点。
步骤 2:获取 Linear 活动
计算昨天的日期,并使用 ISO 8601 格式(例如 2026-04-09T00:00:00.000Z)。
获取当前用户 ID:
curl -s -X POST https://api.linear.app/graphql \
-H "Authorization: Bearer $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "query { viewer { id name email } }"}'
从响应中提取 id 字段。保存为 LINEAR_USER_ID。
获取分配给我且自昨天以来有更新的事项:
curl -s -X POST https://api.linear.app/graphql \
-H "Authorization: Bearer $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "query($since: DateTime!, $userId: ID!) { issues(first: 50, filter: { assignee: { id: { eq: $userId } } updatedAt: { gte: $since } }) { edges { node { identifier title state { name } url completedAt updatedAt createdAt } } } }",
"variables": {"since": "YESTERDAY_ISO", "userId": "LINEAR_USER_ID"}
}'
对事项分类:
completedAt非 null → 已完成state.name为 "In Progress"、"Started" 或 "In Review" → 进行中state.name为 "Cancelled" → 跳过state.name为 "Todo" 或 "Backlog" → 跳过(未处理)
如果没有任何事项:注明“昨天没有找到 Linear 活动。”
步骤 3:获取 GitHub 提交记录
如果未设置 GITHUB_REPO,则静默跳过此步骤。
如果已设置 GITHUB_REPO:
gh api "repos/$GITHUB_REPO/commits?author=${GITHUB_USERNAME:-$(gh api user --jq .login)}&since=YESTERDAY_ISO&per_page=30" \
--jq '[.[] | {message: .commit.message, url: .html_url}]'
处理提交记录:
- 提取每条提交消息的第一行(即第一个换行符之前的所有内容)
- 跳过合并提交:删除所有以 "Merge" 开头的消息
- 按消息文本去重
如果已设置 GITHUB_REPO,但没有返回任何提交记录:注明“昨天没有找到提交记录。”
步骤 4:整理站会内容
写作前完整阅读 references/standup-format.md。
严格按照以下结构撰写站会内容:
**Done**
- [ENG-123] Title of completed issue
- fix: commit message here
**Doing**
- [ENG-124] Title of in-progress issue
**Blockers**
No blockers.
standup-format.md 中的规则:
- 不使用第一人称代词("I"、"we")
- 已完成事项使用过去时,进行中事项使用现在进行时
- 每个 Linear 事项使用
[IDENTIFIER] Title格式 - 每条 GitHub 提交记录使用提交消息的第一行
- 如果没有已完成事项:在 Done 下写“Nothing completed.”
- 如果没有进行中事项:在 Doing 下写“Nothing in progress.”
- 如果没有阻塞事项:写“No blockers.”
- 总字数少于 200 词
步骤 5:发布到 Slack 或输出
向用户展示整理好的站会内容。
询问:“发布到 Slack,还是仅输出?”
确认发布时:
curl -s -X POST "$SLACK_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Standup — DATE_HERE*\n\n*Done*\nITEMS\n\n*Doing*\nITEMS\n\n*Blockers*\nITEMS"
}
}
]
}'
通过临时文件或 heredoc 传递正文,以避免提交消息或事项标题中的特殊字符导致 shell 引号问题:
cat > /tmp/standup-payload.json << 'ENDJSON'
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "STANDUP_CONTENT_HERE"
}
}
]
}
ENDJSON
curl -s -X POST "$SLACK_WEBHOOK_URL" -H "Content-Type: application/json" -d @/tmp/standup-payload.json
发布后:“站会内容已发布。”
选择“仅输出”时: 将站会内容放入代码块中打印,便于复制粘贴。