关于 learning-aggregator-ci
用于 CI 的技能,可扫描 `.learnings/` 历史记录,去重并归类重复模式,再发布排序后的差距报告供异步审查。它面向定时或手动触发的 GitHub Actions 运行,不依赖会话上下文。
主要功能
- 01扫描全部 `.learnings/` 条目
- 02去重跨来源的出现记录
- 03按精确 `Pattern-Key` 分组
- 04排列待晋升模式
- 05输出 YAML 和议题报告
适用场景
- 01审查跨会话重复的学习模式
- 02识别适合晋升的模式
- 03发布发现供团队分流处理
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pskoett/ pskoett-ai-skills --skill learning-aggregator-ci安装后在 Claude Code 中输入/learning-aggregator-ci确认已加载。
附带文件references/workflow-example.md
详细介绍
学习聚合器 CI
安装
gh skill install pskoett/pskoett-skills learning-aggregator-ci
交互式会话请使用:
gh skill install pskoett/pskoett-skills learning-aggregator
使用 Agent Skills CLI 的备用方案:
npx skills add pskoett/pskoett-skills/skills/learning-aggregator-ci
npx skills add pskoett/pskoett-skills/skills/learning-aggregator
用途
在 CI 中运行外层循环的 检查 步骤。读取累积的 .learnings/ 文件,按 pattern_key 对条目分组,计算跨会话重复出现的情况,并生成按优先级排序的差距报告——无需人工交互。
交互式 learning-aggregator 技能专为会话内使用而设计,用户可以立即审查并处理发现的问题。此 CI 变体按计划运行(每周、每个冲刺或按需),并将发现结果作为 GitHub issue 评论发布,以供异步审查。
上下文限制(重要)
CI Agent 没有会话上下文。它们无法看到用户当前正在处理的内容,也无法判断哪些任务领域相关。CI 变体会扫描所有 .learnings/ 条目,不进行相关性筛选。差距报告是全面的,而非针对特定内容。
前提条件
- 仓库已启用 GitHub Actions
ghCLI 已通过身份验证并获得仓库访问权限- 已安装
gh-aw扩展(gh extension install github/gh-aw,v0.40.1+) .learnings/目录中包含来自self-improvement的结构化条目
CI 约定
无头执行的硬性规则:
- 只读——不得修改
.learnings/文件、项目指令文件(CLAUDE.md、AGENTS.md、.github/copilot-instructions.md)或任何仓库文件 - 无头——不出现交互式提示,不设置审批关卡
- 结构化输出——在
learning_aggregator_ci键下以 YAML 格式输出发现结果 - 单条评论——每次运行发布一条合并后的评论,而非每条发现分别发布
- 确定性——相同的
.learnings/状态会生成相同的差距报告
编写工作流(gh-aw)
- 将
references/workflow-example.md复制到.github/workflows/learning-aggregator-ci.md - 根据运行频率自定义计划(支持
weekly on mondays之类的模糊计划) - 验证:
gh aw compile(可选添加--actionlint --zizmor以执行完整的安全扫描) - 推送以启用
持久化与串联
cache-memory:用于在多次运行间保存聚合状态(模式分组、重复计数)。在 Actions 缓存中最多保留 90 天。避免每次运行都重新扫描未更改的条目。call-workflow:在聚合完成后触发eval-creator-ci,根据新晋升的模式创建评估。编译时展开并行任务,并正确配置依赖关系。upload-artifact:持久保存差距报告 YAML,供下游工作流或人工审查使用。
缓存状态必须声明聚合架构 provenance-v1,并保留规范化的出现记录指纹、稳定的任务谱系以及终止事件边界。忽略并重建任何省略此版本或使用较旧聚合架构的缓存;去重前约定下的聚合计数不能作为有效基线。
工作流规则
CI Agent 按以下顺序执行规则:
- 读取
.learnings/中的所有文件:LEARNINGS.md、ERRORS.md、FEATURE_REQUESTS.md、HEALS.md - 解析每条记录的元数据:
Pattern-Key、Recurrence-Count、First-Seen、Last-Seen、Priority、Status、Area、Related Files、Tags,以及可选的来源字段Task-ID、Session-ID、Occurrence-ID、Source-Ref、Copied-From。对于 HEAL 记录,还要解析Trigger、Active-Context和任何Handoff块 - 分组前,折叠仓库位置、镜像、分支、转发内容以及云端/本地来源中具有相同记录 ID/内容或发生 ID 的副本。如果缺少明确的发生 ID,则使用任务/会话/来源谱系和规范化证据。路径不同不代表证据独立
- 按
Pattern-Key对规范发生记录分组(仅精确匹配——CI 中不进行模糊分组) - 对每个组:统计去重后的复发次数,根据稳定来源信息统计不同任务数,计算时间范围并收集证据。缺少稳定任务/会话谱系的旧记录,其声明的复发次数计入一次,但所有谱系未知的证据最多只计为一个不同任务
- 将缺少
Pattern-Key的记录标记为未分组 - 对于记录的发生,
promoted、promoted_to_skill、resolved和wont_fix均视为终止状态。仅包含终止状态的组保留为历史记录,不作为晋升候选项。只有在最近一次终止事件之后出现较新的有效证据时才重新开放;仅有先前的 Handoff 不足以重新晋升该模式 - 为每个可操作组分类差距类型:知识差距、工具差距、技能差距、歧义或推理失败
- 按以下顺序排列各组:先显示已达到晋升条件的组,再显示接近阈值的组,然后按优先级排列(critical > high > medium > low)
- 在
learning_aggregator_ci键下输出结构化 YAML - 将差距报告作为评论发布到触发该流程的 issue 中;如果按计划运行,则创建新 issue
- 不修改仓库文件
晋升阈值(与 learning-aggregator 和 self-improvement 使用相同规则):当某个组在 30 天内有 >= 3 次去重后的复发,且有稳定来源信息证明涉及 >= 2 个不同任务时,即达到晋升条件。
输出架构
learning_aggregator_ci:
version: "0.1.0"
source:
run_id: "<workflow run ID>"
trigger: "schedule | workflow_dispatch | issue_comment"
scan_date: "YYYY-MM-DD"
scan:
entries_total: 42
entries_with_pattern_key: 35
entries_ungrouped: 7
patterns_found: 18
promotion_ready: 3
approaching_threshold: 5
promotion_ready:
- pattern_key: "harden.input_validation"
recurrence_count: 5
distinct_tasks: 3
window_days: 21
priority: "high"
gap_type: "knowledge_gap"
area: "backend"
evidence:
- "LRN-20260301-001: Missing bounds check on pagination params"
- "ERR-20260308-002: Unconstrained string length caused OOM"
- "LRN-20260315-003: API params not validated before DB query"
recommended_action: "Add to project instruction files: Always validate and bound-check external inputs before use"
eval_candidate: true
approaching:
- pattern_key: "simplify.dead_code"
recurrence_count: 2
distinct_tasks: 1
priority: "low"
needs: "1 more distinct task"
ungrouped:
- id: "LRN-20260320-005"
summary: "Discovered undocumented rate limit on external API"
recommendation: "Assign pattern_key for future tracking"
stale:
- pattern_key: "harden.error_handling"
last_seen: "2025-12-01"
recommendation: "Dismiss — not seen in 90+ days"
summary:
promotion_ready_total: 3
approaching_total: 5
ungrouped_total: 7
stale_total: 1
followup_required: true
建议的输出
| 输出 | 目标位置 | 内容 |
|---|---|---|
| 差距报告 | Issue 评论或新建 issue | 包含晋升候选项及证据的易读摘要 |
| YAML 构件 | 工作流构件 | 机器可读的 learning_aggregator_ci 载荷 |
| 检查注释 | 检查运行摘要 | 达到晋升条件和接近阈值的模式数量 |
触发配置
建议:每周定时运行 + 手动触发
on:
schedule:
- cron: '0 9 * * 1' # Monday 9am UTC
workflow_dispatch:
issue_comment:
types: [created]
定时任务可确保外层循环定期运行。发生故障或冲刺结束后,可手动触发运行。Issue 评论触发器支持 /aggregate-learnings 命令。
与其他技能的集成
上游(提供输入)
self-improvement(交互式)——生成.learnings/LEARNINGS.md、ERRORS.md、FEATURE_REQUESTS.md记录self-healing/self-healing-ci——生成.learnings/HEALS.md记录,其中包括Handoff块self-improvement-ci——以机器可读的输出(构件/评论)发送学习候选项;它是只读的,不会自行写入.learnings/文件simplify-and-harden-ci——生成由 self-improvement-ci 使用的learning_loop.candidates
下游(接收输入)
- self-improvement(交互式)——从差距报告中获取已达到晋升条件的模式,并应用经人工批准的晋升
- eval-creator-ci ——获取评估候选项并创建永久测试用例
- 人工审核 ——将差距报告作为 issue 评论发布,供团队分类处理
数据流
self-improvement → .learnings/*.md ← self-healing(-ci) → HEALS.md
↓
learning-aggregator-ci (scheduled)
↓
gap report (issue comment + artifact)
↓
self-improvement (interactive, human-gated promotion)
↓
eval-creator-ci (creates evals from promoted patterns)
与交互式版本的区别
| 方面 | 交互式(learning-aggregator) | CI(learning-aggregator-ci) |
|---|---|---|
| 触发方式 | 手动或会话开始时 | 定时 cron 或 workflow_dispatch |
| 相关性筛选 | 根据当前任务领域筛选 | 扫描所有条目(无任务上下文) |
| 分组方式 | 保守分组 + 领域/标签匹配 | 仅按模式键精确匹配 |
| 输出 | 会话内差距报告 | Issue 评论 + YAML 工件 |
| 人工交互 | 用户内联审阅 | 通过 GitHub 异步审阅 |
| 范围 | 当前会话上下文 | 完整的 .learnings/ 历史记录 |