<!-- title: CI红灯自愈：工作流四件横评 -->

# CI红灯自愈：工作流四件横评

## 概述

这是 Skills 生态定期观察的第 5 轮，主题是工作流自动化：部署、CI、监控、多 Agent 协作。本期样本来自本机实际安装的技能目录，四个 SKILL.md 全文精读：`gh-fix-ci`（修 CI 红灯）、`gh-address-comments`（处理 PR 评审意见）、`long-running-agent`（跨会话长任务框架）、`github-actions-skill`（问答式部署向导）。需要说明：本期网络检索通道受限，各技能的上游仓库归属、Star 数、作者信息均**未核实**，评分只基于技能文本本身的工程质量；社区活跃度一栏只能标「未核实」，不编数字。

核心发现一句话：工作流件正在分化成四个工种——**装机工、抢修工、传话工、夜班工**。修 CI 的那件工程化程度最高，值得单独拆到逐段。

## 评测对比表

| 维度（权重） | gh-fix-ci | gh-address-comments | long-running-agent | github-actions-skill |
|---|---|---|---|---|
| 功能完整度 25% | 4.5 | 3.0 | 4.0 | 3.5 |
| 设计质量 25% | 5.0 | 3.5 | 4.5 | 4.0 |
| 实战效果 20% | 4.0 | 3.5 | 3.5 | 4.0 |
| 上手难度 15%（分高=易上手） | 4.0 | 4.5 | 3.5 | 5.0 |
| 社区活跃度 15% | 未核实 | 未核实 | 未核实 | 未核实 |
| **加权总分（按 85% 折算）** | **4.4** | **3.5** | **3.9** | **4.0** |

## 四件在流水线上的位置

```mermaid
flowchart TD
    A["写好代码"] --> B["装部署线<br/>github-actions-skill"]
    B --> C["push 触发 CI"]
    C -->|红灯| D["gh-fix-ci<br/>取日志定病灶"]
    D --> E["出修复计划<br/>人批准才动手"]
    E --> C
    C -->|绿灯| F["gh-address-comments<br/>编号拉全评审意见"]
    F --> G["人挑哪几条要改"]
    G --> C
    G -->|评审干净| H["long-running-agent<br/>夜间长跑"]
    H --> I["feature_list.json<br/>只许勾不许改题"]
```

这条线读下来你会发现：四件没有一件重叠，也没有一件说自己是「自动化平台」。工作流自动化的 Skills 生态目前是**游击队打法**——每件只占一个哨位，靠 Claude 在中间当传令兵。

## 深度拆解：gh-fix-ci，修 CI 修出的工程感

文件：`~/.claude/skills/gh-fix-ci/SKILL.md`。总分第一，原因不在功能多，而在**每一段都在防一个真实的坑**。逐段看：

**Overview 段**：一句话定义行为闭环——「locate failing checks → fetch logs → summarize snippet → propose plan → implement after explicit approval」。注意最后三个词：先出计划、明确批准后才实施。这一句把整个技能的安全边界提前钉死了，后面所有步骤都是它的展开。

**握手段**：开头有一条容易被忽略的小字——如果环境里有 `create-plan` 这类计划型技能，就借用它；没有就内联起草。这是技能之间的**互操作协议**：件不假设自己独占运行环境，也不硬依赖邻居，降级路径写死。这种「有则借力、无则自保」的写法，是可组合技能的标准姿势。

**Quick start 与 Inputs 段**：三个输入全部有默认值——`repo` 默认当前目录，`pr` 缺省自动找当前分支的 PR。零参数可跑，这是对「装机即用」的尊重。`--json` 输出则暴露了作者的野心：让结果可以被上游程序消费，而不只是给人看。

**Workflow 第 3 步是全文最见功力的地方**。首选跑捆绑脚本 `inspect_pr_checks.py`，脚本挂了给手动兜底命令；兜底命令里甚至写了「如果 `gh pr checks --json` 的字段被拒绝，就用 gh 报告的可用字段重跑」——这是在防 **gh CLI 版本漂移**。依赖外部 CLI 的技能迟早死于上游改字段，作者把棺材钉提前拧了。同一步里还有一层兜底：run 还在跑、拉不到日志时，直接改打 `/actions/jobs/<job_id>/logs` 接口。一个步骤三层退路。

**第 4 步是边界声明**：「detailsUrl 不是 GitHub Actions 的检查，一律标 external 只贴链接，Buildkite 等其他提供商不要碰」。技能最常见死法是幻觉式扩张——明明只懂 Actions，偏要去猜 CircleCI 的日志格式。这句禁止令把能力圈画成了硬边界。

**第 5 步要求「缺日志要明说」**，第 8 步以「重跑测试加 `gh pr checks` 复检」收口，形成确认闭环。首尾一扣，行为闭环完整。

**Bundled Resources 段**藏了个彩蛋：`inspect_pr_checks.py` 在**仍有失败时以非零码退出**。这意味着这个脚本可以脱离 Claude 单独跑在 cron 里——技能的脚本层天然是「CI 的 CI」，可编程接口白送。

短板也有：8 步流程对新手偏重；plan 批准环节依赖使用场景里有「人」在，纯无人值守场景会卡在门口——虽然从设计意图看，这个门口本来就是故意的。

## 同门对比：gh-address-comments，三步裸奔的最小件

同一目录下还有 `~/.claude/skills/gh-address-comments/SKILL.md`，和 gh-fix-ci 明显同门：同样以 `gh auth` 前置，同样捆绑一个 Python 脚本（`fetch_comments.py`），同样走「脚本取数 → 人拍板 → 再动手」的路线。但正文只有三步加两行备注，全文比 gh-fix-ci 短一个量级。

亮点恰恰是「把选票还给人」：第二步要求把所有评审线程**编号 + 给出每条的修复成本摘要**，然后问用户修哪几条。评审意见不是圣旨，有的对有的错，这个技能把「听哪条」的决定权结构性地留在了流程里，而不是靠模型自觉。

短板是工程化断崖：没有字段漂移兜底，没有边界声明（非 GitHub 的评论系统怎么办？没说），错误处理只有一句「遇到限流就让用户重新 `gh auth login`」。它是一份合格的**最小可行件教学样本**——同一个需求，三步能跑，八步才稳，中间差的不是功能，是对失败的想象力。

## 深度拆解：long-running-agent，用文件给 Agent 装记忆

文件：`~/.claude/skills/long-running-agent/SKILL.md`。这个件不碰任何外部系统，纯粹是提示词工程，却是四件里**最有思想**的。

开篇的诊断很准：长任务的敌人不是难，是**失忆**。每个新会话从零开始，于是 Agent 有三种死法——一口气梭哈撑爆上下文（one-shot）、看到局部进展就宣布完工（premature completion）、留一地烂摊子给下个会话（undocumented states）。

药方是双 Agent 制加三个文件。**Initializer Agent** 只在首个会话出场：写 `init.sh`（环境怎么起）、`feature_list.json`（验收清单）、`claude-progress.txt`（交接日志），然后首次 commit。**Coding Agent** 在之后每个会话执行七步启动序列：pwd → 读进度 → 读清单 → 看 git log → 跑 init.sh → 跑基础测试确认没烂 → 挑一个失败项开工。

最妙的一处设计：feature list 坚持用 **JSON 格式，「防止不当编辑」**。Markdown 清单 Agent 会顺手改写验收标准给自己放水，JSON 加上一条硬规则——「只许改 `passes` 字段，永远不许动测试描述」——用数据格式约束了模型行为。配合「端到端验证通过后才许把 passes 翻成 true」和一张「常见失败模式对照表」，这个件实际上是在给 LLM 立规矩。

短板：全靠自觉。`passes` 翻转没有强制证据链，progress 文件写多写少全凭模型心情；跨窗口跑一整夜，漂移风险真实存在。它是给 Claude 的「纪律手册」，不是「镣铐」。

```mermaid
flowchart TD
    S1["会话1<br/>Initializer"] --> J1["写 init.sh"]
    S1 --> J2["生成 feature_list.json"]
    S1 --> J3["建 claude-progress.txt"]
    S1 --> J4["首次 commit"]
    S1 --> S2["后续会话<br/>Coding Agent"]
    S2 --> Q1["读进度与清单"]
    Q1 --> Q2["跑基础测试确认没烂"]
    Q2 --> Q3["只做一个 feature"]
    Q3 --> Q4["端到端验证才许勾"]
    Q4 --> Q5["commit 加更新进度"]
    Q5 -->|窗口用尽| S2
```

## 横评：github-actions-skill，中文保姆向导与它的名字问题

文件：`~/.claude/skills/github-actions-skill/SKILL.md`。四件里唯一的中文件，上手难度得分最高：四阶段问答向导，把「GitHub Actions 连 VPS 部署」这条配置流水线全包了。

交互纪律是亮点：**每次只问一个问题**，必填四项问完才碰可选项，可选项全给默认值（端口默认 22、分支默认 main）；收集完用表格让用户确认，然后一口气产出四件套——ed25519 密钥生成命令、`ssh-copy-id` 上服命令、GitHub Secrets 清单表、按用户选择生成的 `deploy.yml`（命令部署用 `appleboy/ssh-action@v1.0.3`，rsync 同步走原生 step）。第三方 action 的版本号钉死了，这是好习惯。

两个短板。一是安全浅：生成的方案把**整颗部署私钥**塞进仓库 Secrets，没有提 deploy key 细粒度授权、环境保护规则或人工审批门；host key 校验只靠 `ssh-keyscan`（信任首次使用模式），安全向的读者会皱眉。二是名不副实：它叫 `github-actions-skill`，领地却只有「SSH 部署向导」——名字宽、身体窄。Skills 靠名字和描述做触发，名字起太宽会抢走本不属于它的活，这是起名课的一个反面教材。

## 安装与使用

四个件都是标准目录结构（SKILL.md + 可选 scripts/assets），放进用户级技能目录即可全局生效：

```bash
# 以 gh-fix-ci 为例，其余同理
mkdir -p ~/.claude/skills/gh-fix-ci/scripts
# 将该技能的 SKILL.md 放入 ~/.claude/skills/gh-fix-ci/
# 将 inspect_pr_checks.py 放入 ~/.claude/skills/gh-fix-ci/scripts/

# gh 系两件需要一次性登录授权
gh auth login   # 勾选 repo 与 workflow scopes
gh auth status  # 验证
```

触发方式即自然语言，无需记忆命令：

```text
「这个 PR 为什么红？帮我修一下」          → gh-fix-ci
「把 PR 上的评审意见过一遍」              → gh-address-comments
「这个重构要跨好几个会话，按长任务框架来」 → long-running-agent
「帮我把 GitHub Actions 连到我的 VPS」    → github-actions-skill
```

## 推荐排行榜

- **总分榜**：gh-fix-ci 4.4 ＞ github-actions-skill 4.0 ＞ long-running-agent 3.9 ＞ gh-address-comments 3.5
- **最工程化**：gh-fix-ci —— 字段漂移兜底、三层退路、边界禁令，当之无愧
- **最有思想**：long-running-agent —— 用 JSON 格式管住模型的手，是提示词工程的教科书段落
- **最容易上手**：github-actions-skill —— 每次只问一句的保姆级向导
- **最适合当写件第一课**：gh-address-comments —— 三步成件，但也让人看清三步和八步差在哪

## 观察与提醒

本期方向里的「监控」位缺席：本机样本中没有独立监控件（sentry 此前已单独拆过，不重复），红灯之后的抢修有人管，红灯之前的盯梢没人装——这是工作流赛道目前最明显的空位。另外提醒两点：其一，gh-fix-ci 里那段字段漂移兜底反向证明了一件事——依赖外部 CLI 的技能，寿命被上游版本牵着走，选型时优先挑有脚本兜底层的；其二，github-actions-skill 产出的流程含整颗部署私钥，公开仓库使用前务必补环境保护规则，此技能原文未做此提醒。

## 参考来源

1. `~/.claude/skills/gh-fix-ci/SKILL.md`（含 scripts/inspect_pr_checks.py 说明段）— 本期深拆对象，全文精读
2. `~/.claude/skills/gh-address-comments/SKILL.md` — 同门最小件对照样本
3. `~/.claude/skills/long-running-agent/SKILL.md` — 双 Agent 长任务框架原文
4. `~/.claude/skills/github-actions-skill/SKILL.md` — 中文部署向导原文
5. [anthropics/skills](https://github.com/anthropics/skills) — 官方技能仓库，生态对照坐标（本期未重新核查）
6. [skillsmp.com](https://skillsmp.com) / [skills.sh](https://skills.sh) — 技能聚合目录，生态规模背景（本期未重新核查）

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
