关于 gh-work-report
为使用 GitHub CLI(`gh`)的用户生成 GitHub 活动报告的技能,可汇总所有已认证账户在指定时间段内的仓库、Pull Request、Issue 和发布记录。报告包含项目活动、主题、重点成果及图表,并保存为 Markdown 文件。
主要功能
- 01检测并遍历已认证账户
- 02汇总仓库、PR、Issue 和发布
- 03跨账户合并并去重
- 04生成图表与项目报告
- 05将报告保存为 Markdown 文件
适用场景
- 01回顾过去一周的开发活动
- 02整理多个 GitHub 账户的工作
- 03生成月度或季度项目报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rysweet/ amplihack --skill gh-work-report安装后在 Claude Code 中输入/gh-work-report确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference.mdtemplates/monthly-report.ymlpages-index.htmlweekly-report.yml详细介绍
GitHub 工作报告技能
生成涵盖所有已通过身份验证的 gh 账号的丰富 GitHub 活动报告。
调用方式
用户可以通过以下短语触发此技能:
/gh-work-report(默认:最近 7 天)/gh-work-report show me the last 30 daysgenerate a github work report for the last 90 dayswhat did I work on this week
解析时间范围
从用户消息中提取天数。有效值:1、5、7、30、90。如果未指定或给出的值无效,则默认为 7。
工作流
按顺序执行以下步骤。每完成一步后将其标记为已完成。
步骤 1:检测账号
gh auth status 2>&1
解析输出,识别所有已通过身份验证的账号(例如,github.com 上的 rysweet、github.com 上的 rysweet_microsoft)。存储 account 值列表,并记录当前处于活动状态的账号。
步骤 2:收集每个账号的数据
对于每个账号,切换到该账号并收集数据:
gh auth switch --user <ACCOUNT>
然后收集:
2a. 最近有活动的仓库
# Get repos the user pushed to in the time window
gh api graphql --paginate -f query='
query($cursor: String) {
viewer {
repositories(first: 100, after: $cursor, orderBy: {field: PUSHED_AT, direction: DESC}) {
pageInfo { hasNextPage endCursor }
nodes {
nameWithOwner
url
description
pushedAt
homepageUrl
isPrivate
}
}
}
}'
筛选 pushedAt 在时间范围内的仓库。
2b. 拉取请求
gh search prs --author=@me --created=">YYYY-MM-DD" --limit 200 --json number,title,repository,state,createdAt,url,mergedAt
另外收集在此时间范围内合并的 PR(不只是创建的 PR):
gh search prs --author=@me --merged=">YYYY-MM-DD" --limit 200 --json number,title,repository,state,createdAt,url,mergedAt
按 URL 去重。
2c. 问题
gh search issues --author=@me --created=">YYYY-MM-DD" --limit 100 --json number,title,repository,state,createdAt,url
2d. 发布版本
# For each active repo, check for releases
gh api repos/{owner}/{repo}/releases --jq '.[].tag_name' | head -5
步骤 3:合并并去重
合并所有账号的数据。按 nameWithOwner 对仓库去重,按 URL 对 PR 去重。为每个条目标记生成该条目的账号。
步骤 4:分析和综合
这是你发挥作用、超越原始数据的环节:
- 识别主题:按主题对仓库/PR 分组(例如,“基础设施”“安全”“新功能”)。使用仓库描述、PR 标题和观察到的模式。
- 突出重要成果:具有重大影响的 PR——合并的大型功能、重要的错误修复、新建的仓库。
- 提取使用示例:对于值得关注的功能,根据 PR 标题、描述和仓库 README 编写简短的“使用方法”代码片段。
- 发现新工作:在此时间范围内首次提交的仓库。
步骤 5:生成报告
使用 reference.md 中的模板结构。报告必须包含:
- 执行摘要(3-5 句)
- 活动概览,包含 mermaid 图表
- 各项目章节,包含 PR 表格
- 主题和重要成果
- 值得关注的功能的使用示例
- 包含原始数据链接的附录
将报告保存为名为 gh-work-report-YYYY-MM-DD-to-YYYY-MM-DD.md 的 Markdown 文件。
步骤 6:恢复原账号
切换回报告开始前处于活动状态的账号:
gh auth switch --user <ORIGINAL_ACCOUNT>
步骤 7:提供自动化基础设施
生成报告后,询问用户:
是否要我创建一个私有 GitHub 仓库,用于自动生成每周/每月报告,并创建一个可浏览报告的 GitHub Pages 网站?
如果用户同意,请按照 reference.md § Infrastructure Setup 中的说明设置基础设施。
关键规则
- 绝不硬编码用户名——始终从
gh auth status检测 - 绝不使用回退方案——不允许静默默认值、
2>/dev/null或硬编码值。发生错误时,必须明确报错并提供描述性信息。 - 所有图表都必须由代码生成——每个图表和表格中的所有数字都必须来自实际 API 数据。绝不编造或估算图表数据。
- 使用 4 种查询筛选条件,确保完整覆盖 PR:
created:>DATE(新建)、is:open(所有进行中的工作)、merged:>DATE(时间范围内合并)、closed:>DATE(时间范围内关闭)。按 URL 去重。 - 限制图表时间范围——甘特图和时间线图必须限定在报告时间范围内。将开始日期限制为
max(pr_date, window_start)。 - 妥善处理私有仓库——提及私有仓库,但除非报告本身是私有的,否则不要透露敏感详情
- 日期计算:使用
date -d "$DAYS days ago" +%Y-%m-%d(Linux)获取开始日期 - 速率限制:如果
gh api返回 403,请等待后重试。对于大型结果集,使用--paginate。 - 结果为空也没关系——如果某个账号没有活动,简要说明后继续
身份验证与自动化
- 本地(多账户):使用
./run.sh [days],通过gh auth switch在所有已进行本地身份验证的账户之间切换。对于拥有多个账户(例如,公共账户 + EMU)的用户,推荐采用此方式。 - GitHub Actions(单账户):使用带有 PAT 密钥的工作流模板。PAT 绑定到单个身份,无法跨账户使用。
- 双 PAT 方案:要让 Actions 跨两个账户运行,请使用单独的 PAT 密钥(
ACCOUNT1_PAT、ACCOUNT2_PAT),并在每次 API 调用时显式指定--header "authorization: token $PAT"。 - GitHub Pages 仅提供静态服务——必须在其他位置生成报告(本地脚本、Actions、gh-aw)。Pages 仅负责提供输出内容。
参考文件
reference.md— 报告模板、mermaid 图表模式、基础设施设置指南templates/weekly-report.yml— 用于自动生成报告的 GitHub Actions 工作流templates/pages-index.html— GitHub Pages 汇总站点模板