awesome-copilot 的 Agentic Workflows 实战指南:用 Markdown 编排 GitHub 仓库自动化
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
导读
本文以 awesome-copilot 仓库的 docs/README.workflows.md 为骨架,系统讲解 Agentic Workflows 的定义、安装激活流程与安全模型,并逐一对仓库workflows/目录下的 8 个真实工作流(日报、OSPO 系列报告、相关性评估、注释同步等)进行源码级拆解。读完本文,你将掌握如何编写、编译、运行和贡献这类"用自然语言定义、由 Copilot 驱动的 GitHub Actions 自动化",并能直接复用本仓库现成的工作流模板。
一、什么是 Agentic Workflows
Agentic Workflows 是AI 驱动的仓库自动化(AI-powered repository automations):它们以 Markdown 格式定义,用自然语言编写指令,在 GitHub Actions 中运行编码代理(coding agents),实现**事件触发(event-triggered)与定时调度(scheduled)**的自动化任务,并且内置护栏(guardrails)与安全优先(security-first)的设计。
这一概念在仓库的两处文档中被反复强调:
- docs/README.workflows.md 的引言:定义、以 Markdown 自然语言编写、内置护栏与安全优先设计;
- CONTRIBUTING.md 的 "Adding Agentic Workflows" 章节:将其定位为 "run coding agents in GitHub Actions",同样强调 "scheduled and event-triggered automation with built-in guardrails"。
与传统的 YAML GitHub Actions 不同,Agentic Workflows 的可执行逻辑是自然语言指令——代理读取指令后自主决定调用哪些 GitHub API、执行哪些 bash 命令,而frontmatter只负责声明触发条件、权限边界与输出约束。
二、仓库内置的 8 个工作流一览
本仓库的 workflows/ 目录下共收录 8 个可立即使用的工作流,覆盖日常维护、OSPO(开源项目办公室)治理、Issue 管理与文档同步四大场景:
| 名称 | 文件 | 功能 | 触发器 |
|---|---|---|---|
| Daily Issues Report | workflows/daily-issues-report.md | 生成每日未解决问题与近期活动摘要为 GitHub Issue | schedule |
| OSPO Contributors Report | workflows/ospo-contributors-report.md | 组织范围内仓库的月度贡献者活动指标 | schedule, workflow_dispatch |
| OSPO Organization Health Report | workflows/ospo-org-health.md | 组织每周健康报告:过期 Issue/PR、合并耗时、贡献者排行榜与待人工处理项 | schedule, workflow_dispatch |
| OSPO Stale Repository Report | workflows/ospo-stale-repos.md | 识别组织内不活跃仓库并生成归档建议报告 | schedule, workflow_dispatch |
| OSS Release Compliance Checker | workflows/ospo-release-compliance-checker.md | 对照开源发布要求分析目标仓库,并以 Issue 评论形式输出合规报告 | issues, workflow_dispatch |
| Relevance Check | workflows/relevance-check.md | 斜杠命令/relevance-check,评估 Issue/PR 是否仍与项目相关 | slash_command, roles |
| Relevance Summary | workflows/relevance-summary.md | 手动触发,将带/relevance-check评估结果的开放 Issue/PR 汇总为一个 Issue | workflow_dispatch |
| Weekly Comment Sync | workflows/weekly-comment-sync.md | 每周查找过期代码注释或 README 片段,做纯文本同步更新并在必要时开草稿 PR | schedule, workflow_dispatch |
使用场景提示:这些工作流可覆盖 Issue 分诊与打标、每日状态报告、文档自动维护、定时代码质量检查、对 Issue/PR 中的斜杠命令做出响应,以及编排多步骤的仓库自动化。
三、安装与激活:gh aw命令行全流程
3.1 安装 CLI 扩展
Agentic Workflows 的编译与运行依赖 GitHub 官方的gh aw命令行扩展,安装命令为:
gh extension install github/gh-aw3.2 安装工作流到目标仓库
- 复制文件:将工作流
.md文件复制到目标仓库的.github/workflows/目录下; - 编译:运行
gh aw compile生成对应的.lock.yml文件(这是真正被 GitHub Actions 执行的编译产物); - 提交:将
.md与.lock.yml两个文件一并提交(git commit)。
3.3 激活与运行
- 工作流会根据 frontmatter 中声明的触发器自动运行(定时任务、仓库事件、斜杠命令);
- 手动触发:
gh aw run <workflow>; - 监控运行:
gh aw status查看运行状态,gh aw logs查看运行日志。
3.4 本地校验
在贡献工作流时,可用gh aw compile --validate --no-emit daily-issues-report.md验证文件是否合法(见 CONTRIBUTING.md)。注意:仓库只接受.md源文件,拒绝提交编译产物(CI 会阻止.lock.yml/.yml文件入库)。
四、工作流文件结构:Frontmatter 声明式配置
每个工作流是一个单文件.md:顶部是 YAML frontmatter(声明式配置),正文是自然语言指令(代理的执行逻辑)。以下结合仓库实际文件拆解关键字段。
4.1 基础元信息:name/description/labels
--- name: 'OSPO Contributors Report' description: 'Monthly contributor activity metrics across an organization''s repositories.' labels: ['ospo', 'reporting', 'contributors'] ---name:工作流名称;description:一句话说明,会出现在列表与市场中;labels:可选,标记该工作流的主题分类(OSPO、reporting、maintenance 等)。
4.2 触发器:on
触发器决定工作流何时运行,仓库中出现的类型包括:
schedule:cron 或自然语言调度。例如 workflows/ospo-contributors-report.md 使用schedule: cron "3 2 1 * *"(每月 1 日 02:03),workflows/ospo-org-health.md 使用cron "0 10 * * 1"(每周一 10:00),而 workflows/daily-issues-report.md 则直接写自然语言schedule: daily on weekdays;workflow_dispatch:手动触发,并可声明inputs(见 4.4);slash_command:斜杠命令触发,例如 workflows/relevance-check.md 的slash_command: name: relevance-check,配合roles: [admin, maintainer, write]限定可调用角色;issues:事件触发,例如 workflows/ospo-release-compliance-checker.md 的issues: types: [opened, labeled]。
4.3 权限与引擎:permissions/engine/tools
permissions: contents: read issues: read pull-requests: read engine: copilot tools: github: toolsets: - repos - issues - pull_requests - orgs - users bash: truepermissions:遵循最小权限原则(least-privilege),仓库内所有工作流几乎都是read级别的内容/Issue/PR 读取权限,写入动作全部交给safe-outputs统一管控;engine: copilot:指定运行引擎;workflows/ospo-org-health.md 还声明了network: allowed: [defaults, python]限定网络访问范围;tools:声明代理可用的工具集,github.toolsets可精确到 repos / issues / pull_requests / orgs / users,bash: true允许执行 shell 命令(报告类工作流用它做日期计算与数据聚合)。
4.4 手动触发参数:workflow_dispatch.inputs
以 workflows/ospo-contributors-report.md 为例,它声明了 6 个可选输入,覆盖了组织/仓库范围、报告周期、赞助信息三个维度:
| 输入 | 类型 | 说明 | 默认值 |
|---|---|---|---|
organization | string | 要分析的 GitHub 组织(如github) | 无(可选) |
repositories | string | 逗号分隔的仓库列表(如owner/repo1,owner/repo2) | 无(可选) |
start_date/end_date | string | 报告周期起止日期(YYYY-MM-DD) | 无(可选) |
sponsor_info | boolean | 是否包含贡献者的 GitHub Sponsors 信息 | false |
workflows/ospo-stale-repos.md 的参数则更强调"扫描策略",全部带有默认值:
| 输入 | 类型 | 默认值 | 说明 |
|---|---|---|---|
organization | string | my-org | 要扫描的组织 |
inactive_days | number | 365 | 判定仓库"失活"的天数阈值 |
exempt_repos | string | 空 | 豁免仓库列表(逗号分隔,大小写不敏感) |
exempt_topics | string | 空 | 带这些 topic 的仓库豁免 |
activity_method | choice | pushed | 活跃度判定方式:pushed(用pushed_at)或default_branch_updated(用默认分支最新提交时间) |
4.5 安全输出护栏:safe-outputs
safe-outputs是 Agentic Workflows 安全模型的核心——代理不直接获得写入权限,而是声明"允许产生什么副作用",且副作用受数量与格式约束。仓库中出现的模式:
create-issue:创建 Issue,常配title-prefix(统一标题前缀,如[daily-report]、[Contributors Report]、[Org Health]、[Stale Repos]、[Relevance Summary])、labels、max: 1(最多创建 1 个)、close-older-issues: true(关闭旧 Issue,见 workflows/relevance-summary.md);add-comment:添加评论,如max: 1(见 workflows/relevance-check.md 与 workflows/ospo-release-compliance-checker.md);create-pull-request:创建 PR,workflows/weekly-comment-sync.md 中配置了draft: true(草稿 PR)、title-prefix: "[ai] "、labels: [automation]、if-no-changes: warn(无变更时降级为警告)、fallback-as-issue: false(不降级为 Issue)。
此外,frontmatter 中还常见timeout-minutes运行超时(如 Contributors/Org Health 为 60 分钟,Compliance Checker 与 Weekly Comment Sync 为 20 分钟,Stale Repos 为 30 分钟)。
五、工作流深度解析(一):OSPO 治理报告族
5.1 OSPO Contributors Report:月度贡献者报告
workflows/ospo-contributors-report.md 是仓库中步骤最完整的工作流之一,共 8 步:
- 校验配置:
organization与repositories至少提供一个;定时运行且两者为空时,默认分析当前仓库所属组织的全部公开仓库(从GITHUB_REPOSITORY环境变量取组织名);手动触发且两者为空则报错;两者都有时优先repositories; - 确定日期范围:未提供
start_date/end_date时,默认取上一个自然月(例如今天是 2025-03-15,则范围为 2025-02-01 至 2025-02-28),用 bash 计算并存入START_DATE/END_DATE; - 枚举仓库:来自输入时按逗号拆分(
owner/repo格式);来自组织时调用 GitHub API 列出公开、未归档、非 fork的仓库; - 收集提交:对每个仓库用 commits 端点的
since/until参数拉取区间内提交,提取author.login,排除[bot]后缀或type == "Bot"的机器人账号,用 bash 跨仓库聚合去重,统计每个贡献者的提交总数与涉及的仓库集合; - 区分新老贡献者:若某贡献者在
START_DATE之前没有任何区间内仓库的提交,则标记为New Contributor,否则为 Returning Contributor; - 赞助信息(可选):
sponsor_info: true时查询每个贡献者的 GitHub Sponsors 档案,启用则记录https://github.com/sponsors/<username>; - 生成报告:Markdown 结构含摘要表(Total/New/Returning Contributors、Total Commits、% New Contributors)与按提交数降序的明细表(#、Username、Contribution Count、New Contributor、Sponsor URL、Commits 链接);
- 创建 Issue:在当前仓库创建标题为
[Contributors Report] <范围> — START_DATE to END_DATE的 Issue,若存在contributors-report标签则打上,标签不存在也不报错。
5.2 OSPO Organization Health Report:组织每周健康报告
workflows/ospo-org-health.md 是仓库中体量最大、指标最丰富的工作流,核心方法论是"先搜索 API 拿组织级聚合,再抽样做纵深分析":
- Step 1 参数:
ORG取自输入,PERIOD_DAYS=30,STALE_ISSUE_DAYS=60,STALE_PR_DAYS=30; - Step 2 搜索查询矩阵:用
org:<ORG> is:issue is:open等 9 条搜索查询一次性拿到开放 Issue/PR 总数、近 30 天新增/关闭/合并等指标。文档明确提示在搜索 API 调用之间加 1~2 秒延迟以避免限流(rate limit); - Step 3 热力排序(Heat Score):对过期 Issue/PR 各取最多 50 条,按评论数(comment count)降序取前 10——"评论多却长期无人跟进"的条目最值得维护者优先处理;
- Step 4 合并耗时分析:取近 30 天合并的 PR(最多 100 条),计算
merge_time = merged_at - created_at(小时),用内嵌 Python 脚本计算p50 / p75 / p95分位数。工作流正文直接给出了可复用的 bash+Python 分位数计算片段(n<20 时 p95 退化为最大值):python3 -c " import json, sys times = json.loads(sys.stdin.read()) times.sort() n = len(times) if n == 0: print('No data') else: p50 = times[int(n * 0.50)] p75 = times[int(n * 0.75)] p95 = times[int(n * 0.95)] if n >= 20 else times[-1] print(f'p50={p50:.1f}h, p75={p75:.1f}h, p95={p95:.1f}h') " - Step 5 首次响应时间:抽样近 30 天开放的 Issue/PR 各 50 条,找除作者外的首个评论,计算
first_response_time = first_comment.created_at - item.created_at(小时),分别报告 Issue 与 PR 的中位数; - Step 6 仓库活跃度与贡献者榜:列出所有未归档仓库近 30 天的 push/commit/Issue+PR 活动,取 Top 10 活跃仓库,聚合其提交者取 Top 10,前三名授予 🥇🥈🥉;同时列出 30 天零活动的"不活跃仓库"(含最后 push 日期)供组织决定是否归档;
- Step 7 健康告警红黄绿灯:用阈值表给每个指标定级——Issue 关闭率、PR 合并率、合并耗时中位数、首次响应中位数、过期 Issue/PR 数量,分别映射 🟢/🟡/🔴;
- Step 8 亮点与致谢:识别快速合并(<4 小时)的 PR、快速关闭(<24 小时)的 Issue、Top 贡献者、零过期项的仓库;
- Step 9 汇总:在组织的
.github仓库(或最合适的中心仓库)创建[Org Health] Weekly Report — <DATE>Issue,正文按 Header → 告警 → 亮点 → 过期 Issue/PR → 合并耗时 → 首次响应 → Top 活跃仓库 → 贡献者榜 → 不活跃仓库 的固定顺序组织,全部数据用 Markdown 表格呈现。
重要约束:报告正文需控制在65,000 字符(GitHub Issue 正文上限)以内;时间一律用小时,仅当超过 72 小时才换算成天;单个 API 失败不应阻断整个报告,而是记录在报告中继续。
5.3 OSPO Stale Repository Report:失活仓库扫描
workflows/ospo-stale-repos.md 专注于"找不活跃仓库并给归档建议",流程四步:
- 枚举仓库:列出组织全部仓库,跳过已归档仓库、
exempt_repos中列出的仓库(名称大小写不敏感比较)、带exempt_topics任一 topic 的仓库; - 确定最后活动日期:
activity_method=pushed时用pushed_at(默认、最高效);default_branch_updated时取默认分支最新提交的committer.date; - 判定失活:距今天数超过
inactive_days即标记为 stale; - 生成报告:Markdown 摘要 + 表格(Repository / Days Inactive / Last Push Date / Visibility),按失活天数降序排列;即使没有失活仓库也要创建 Issue 并说明"所有仓库均活跃"。
其输出策略值得一提:先搜索组织.github仓库(或本工作流所在仓库)中带stale-repos标签、标题以[Stale Repos]开头的开放 Issue,存在则更新正文,不存在才新建——避免报告 Issue 无限堆积。
5.4 OSS Release Compliance Checker:开源发布合规检查
workflows/ospo-release-compliance-checker.md 面向"准备开源但需要先体检"的仓库,是仓库中唯一带**触发守卫(Trigger Guard)**的工作流:
- 触发守卫:
workflow_dispatch或 Issueopened直接放行;Issuelabeled仅在新增标签恰为ospo-release-check时放行,否则直接停止; - 提取目标仓库:从触发 Issue 正文解析
https://github.com/org/repo-name或org/repo-name;解析不到则评论请作者补充后停止; - 文件合规检查:对目标仓库根目录(或约定俗成的
.github/)逐一检查 7 个文件的存在性与内容质量——LICENSE(内容须与仓库元数据声明的许可证一致)、README.md(建议 >100 行,含 usage/install/contributing 章节)、CODEOWNERS(至少一名维护者或团队)、CONTRIBUTING.md、SUPPORT.md、CODE_OF_CONDUCT.md(采用公认的行为准则)、SECURITY.md(描述漏洞披露流程); - 安全配置检查:用 GitHub API 检查 Secret scanning、Dependabot(告警与安全更新)、Code scanning(CodeQL 分析是否存在)、Branch protection(默认分支是否受保护、是否要求评审/状态检查/签名提交);对
404/403响应优雅降级处理; - 许可证与法务分析:比对
LICENSE内容与license.spdx_id元数据是否一致;扫描package.json、requirements.txt、go.mod、Cargo.toml、pom.xml、Gemfile、*.csproj等依赖清单,重点标记 GPL/AGPL/LGPL 等强 Copyleft 许可证(开源发布前需法务评审); - 风险评估:对商业风险、法律风险、开源成熟度风险三方面分别给出 🟢 Low / 🟡 Medium / 🔴 High 评级;
- 输出:在触发 Issue 上仅发一条评论,包含 Header(含 PASS ✅ / NEEDS WORK ⚠️ / BLOCKED 🚫 总状态)、文件合规表、安全配置表、许可证分析、风险评估表、按 Must Fix / Should Address / Nice to Have 分级建议,并强调语气要建设性、解释缺失项的原因、肯定团队已做好的部分。
六、工作流深度解析(二):Issue 相关性管理组合
6.1 Relevance Check:/relevance-check斜杠命令
workflows/relevance-check.md 是一个"评估器"型工作流:维护者在 Issue/PR 中敲下/relevance-check,Copilot 代理便执行三步分析并输出结构化结论。
frontmatter 关键点:slash_command: name: relevance-check、roles: [admin, maintainer, write](限定可调用角色)、permissions为三项只读、safe-outputs.add-comment.max: 1(整个运行只允许发一条评论)。正文通过${{ steps.sanitized.outputs.text }}注入被评估的内容。
评估方法论:
- 信息收集:读取 Issue/PR 的标题、正文、全部评论与关联项;检查代码库现状(涉及的文件/类/包是否仍存在、问题是否已被解决);查看最近提交与 PR;查找重复或相关的 Issue;
- 相关性评估:从五个维度判断——Still applicable?(问题对当前代码库是否仍适用)、Already resolved?(是否在后续提交/PR 中已隐式修复)、Superseded?(是否被更新的 Issue/PR 取代)、Stale context?(引用的 API/依赖/架构模式是否已被淘汰)、Actionability?(信息是否足够可执行);
- 输出分析:只发一条评论,固定结构为
**Relevance Assessment: [Still Relevant | Likely Outdated | Needs Discussion]**,附 Summary(1-2 句结论)、Evidence(具体证据,如"Issue 中引用的XYZParser类已在 commit abc1234 中被移除"或"该功能已在 PR #42 实现")、Recommendation(✅ Keep open / 🗄️ Consider closing / 💬 Needs maintainer input 三选一)。
该工作流明确禁止修改仓库——唯一的动作就是发评论。
6.2 Relevance Summary:评估结果汇总
workflows/relevance-summary.md 与 Relevance Check 形成组合拳:/relevance-check逐条评估产生分散评论,本工作流则手动触发,将所有开放且收到过 "Relevance Assessment" 响应的 Issue/PR 汇总为一张表。
汇总标准基于特征标记匹配:评论中出现 "Relevance Assessment:" 及三种结论之一、且有Recommendation段落(✅ Keep open / 🗄️ Consider closing / 💬 Needs maintainer input)。
汇总 Issue 的正文结构:表头为### Relevance Check Summary,表格列为# | Type | Title | Assessment | Recommendation(标题过长时截断到约 60 字符),底部附统计(Total evaluated、Still Relevant、Likely Outdated、Needs Discussion 计数)。排序策略有讲究:"Likely Outdated" 排最前(最可操作),然后是 "Needs Discussion",最后 "Still Relevant";没有任何被评估项时也创建 Issue 并说明未找到。frontmatter 中safe-outputs.create-issue.close-older-issues: true保证重复生成时旧 Issue 会被关闭。
七、工作流深度解析(三):Weekly Comment Sync 文档同步
workflows/weekly-comment-sync.md 是仓库中唯一会修改仓库内容(通过 PR)的工作流,用于治理"注释与代码脱节"这一经典问题:
- 范围:只处理源文件注释(行内注释、块注释、文档注释)与 README 中直接描述当前行为的片段;优先处理最近改动过的文件和明显与代码矛盾的注释;绝不修改可执行逻辑,只更新注释与文档文本;
- 验证纪律:必须结合仓库历史与当前文件内容双重确认,不能因为周边代码被改过就假设注释过期;主观性、风格性、技术上仍然正确的注释一律跳过;
- 最小化文本编辑:只改必须同步的注释/README 文本,保留仓库原有语气、格式与文档风格;
- 仓库特定维护(可选):仅在目标仓库流程确实要求时,才在同一个 PR 中更新版本清单文件(如
package.json、pyproject.toml或仓库特定的版本清单;**不手动编辑 lockfile 来"凑"版本号)、CHANGELOG.md(只加描述本次注释/文档同步的条目,保持原有格式,不描述未发生的改动); - 输出:需要更新时只创建一个草稿 PR(
draft: true、title-prefix: "[ai] "),正文说明改动了哪些文件、每条注释为何过期、做了哪些仓库特定维护;无更新时调用noop并给出简短说明(正文中给出了 noop JSON 的调用示例),而不是强行开 PR。
safe-outputs.create-pull-request的if-no-changes: warn与fallback-as-issue: false进一步确保"没有实质变化就不产生任何副作用"。
八、如何贡献自己的工作流
依据 CONTRIBUTING.md 的贡献指南,新增一个 Agentic Workflows 的标准流程为:
- 创建文件:在
workflows/目录新建.md文件,文件名使用小写加连字符(如daily-issues-report.md); - 编写 frontmatter:必须包含
name与description,随后是代理工作流专属字段(on、permissions、safe-outputs)与自然语言指令正文; - 本地校验:运行
gh aw compile --validate --no-emit <file>.md验证合法性; - 更新 README:运行
npm run build刷新 README 中的工作流表格。
贡献时的硬性准则(CONTRIBUTING.md):
- 安全第一:使用最小权限(least-privilege)的
permissions与safe-outputs,而不是直接写权限; - 指令清晰:正文使用清晰的自然语言指令;
- 命名规范:小写文件名 + 连字符;
- 禁止提交编译产物:只提交
.md源文件,.lock.yml/.yml会被 CI 拦截。
九、从仓库实践提炼的最佳实践
综合 docs/README.workflows.md 与 8 个工作流的源码,可以提炼出编写高质量 Agentic Workflows 的五条通用经验:
- 把"写权限"全部收敛到 safe-outputs:无论扫描多少仓库、做多少分析,
permissions一律只读,副作用(创建 Issue/PR、发评论)全部通过safe-outputs声明并限制数量(max: 1)与格式(title-prefix、labels); - 用搜索 API 拿聚合、用抽样做纵深:Org Health 工作流先用 9 条搜索查询一次拿到组织级指标,再对过期项/合并 PR 做有限抽样与分位数计算,兼顾效率与限流安全;
- 为不确定性设计降级路径:Stale Repos 的"找不到旧 Issue 就新建,找到就更新"、Compliance Checker 对
404/403的优雅处理、Org Health 的"单次 API 失败不阻断报告",都体现了面向真实 API 不稳定性的工程韧性; - 参数默认值优先、输入校验兜底:Stale Repos 的全部输入都带默认值,Contributors Report 则对空输入做了"定时运行默认全组织 / 手动运行直接报错"的分支处理,保证工作流在任何触发方式下都有明确行为;
- 组合式自动化:Relevance Check(逐条评估)与 Relevance Summary(汇总成表)是"单点命令 + 周期汇总"组合的典型范例,值得在同类场景中复制。
要亲手体验,只需将 workflows/ 下的任一.md复制到目标仓库的.github/workflows/,gh aw compile后提交即可——全部工作流均已按 GitHub Agentic Workflows 规范编写,开箱即用。
【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考