作者注:这篇文章是我在深度分析 MattPocock Skills 项目后的个人思考。我不是 Matt Pocock,也没有参与这个项目的开发。我的分析基于对源码的阅读、对技能文档的理解,以及我个人在软件工程和AI辅助开发方面的实战经验。文章中的观点和判断都是我的个人看法,可能会有偏差,但我会尽量保持客观和深入。

在这里插入图片描述

一、TL;DR:这不是工具,是操作系统

如果你问我,MattPocock Skills 是什么?我的回答是:这不是一个工具集合,而是一个AI时代的软件工程操作系统。

让我说得更直白一点:在AI辅助开发成为标配的今天,大多数开发者(包括我自己)都陷入了"氛围编程"的陷阱——我们让AI生成代码,但代码质量在下降,架构在退化,团队沟通成本在增加。MattPocock Skills 试图解决的就是这个核心问题。

关键判断

  • 核心理念:软件工程基础在AI时代更重要,不是更不重要
  • 技术架构:基于领域驱动设计和深度模块理论的AI适配
  • 核心价值:解决AI代理开发的四个核心痛点:沟通对齐、冗长表达、代码质量、架构退化
  • 适用场景:从个人开发到团队协作的全流程AI辅助工程
  • 独特优势:基于数十年实战经验的系统化工程实践

二、背景:为什么需要这样的技能?

2.1 AI辅助开发的现状与痛点

个人感觉:我使用AI辅助开发已经有一段时间了,最深的感受是"氛围编程"问题越来越严重。什么是氛围编程?就是AI生成了一大堆看起来不错的代码,但当你真正深入理解时,发现它缺乏系统性思考,只是"感觉上"正确。

实际体验:代码质量在肉眼可见地下降。AI擅长生成单点解决方案,但不擅长理解整体架构。结果就是:

  1. 架构退化加速:每个功能都独立实现,耦合度越来越高
  2. 代码重复严重:相似的逻辑在不同地方以不同方式实现
  3. 测试覆盖率低:AI生成的代码往往缺乏配套测试

沟通成本:与AI代理的沟通就像和一个理解力有限但记忆力超强的实习生对话。你需要不断解释、纠正、对齐,这个过程消耗了大量token和时间。

2.2 Matt Pocock的背景与动机

Matt Pocock 不是新手。从项目结构和文档质量可以看出,这是一个有数十年软件工程实战经验的人的作品。他看到了AI辅助开发的潜力,也看到了问题。

问题意识:从真实项目中提炼的AI使用痛点。这不是理论推导,而是实战总结。

解决方案:将软件工程原则转化为AI可执行的实践。这是关键创新点——不是教AI写代码,而是教AI如何思考软件工程。

三、技术架构深度剖析

3.1 整体架构设计

项目采用分层架构,这是我个人很欣赏的设计:

/
├── skills/                    # 技能实现层
│   ├── engineering/          # 工程技能(核心)
│   ├── productivity/         # 生产力技能
│   ├── misc/                 # 杂项技能
│   └── personal/             # 个人技能
├── docs/                     # 文档层
└── scripts/                  # 工具层

分层架构的智慧

  • 配置层CONTEXT.mdADR-FORMAT.md等定义项目语言和决策
  • 实现层:具体的技能实现
  • 工具层:辅助脚本和工具
  • 文档层:使用说明和最佳实践

渐进式披露:技能文档的组织哲学。从简单描述到详细指南,用户可以根据需要深入。

3.2 核心技能实现逻辑深度解读

3.2.1 grill-with-docs:领域驱动的深度拷问

让我直接看代码片段:

---
name: grill-with-docs
description: Grilling session that challenges your plan against the existing domain model...
---

<what-to-do>
Interview me relentlessly about every aspect of this plan...
</what-to-do>

深度解读

这个技能的核心理念是将领域驱动设计(DDD)原则转化为AI可执行的对话流程。在我个人的实战中,领域术语不一致是团队协作的最大障碍之一。

实现机制

  1. 实时术语对齐:当用户使用与CONTEXT.md冲突的术语时立即指出

    When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
    

    这解决了AI开发中的一个关键问题:AI不理解项目特定的术语体系。

  2. 模糊语言锐化:将"账户"等模糊概念精确化为"客户"或"用户"

    When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
    
  3. 场景压力测试:通过具体场景探测概念边界

    When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases...
    
  4. 代码一致性检查:验证用户陈述与代码实现的一致性

    When the user states how something works, check whether the code agrees. If you find a contradiction, surface it...
    

创新点:将文档更新内嵌到对话中,实现"对话即文档"的实时同步。这是我在其他AI工具中很少见到的设计。

3.2.2 diagnose:结构化调试的六步循环

这是我认为最值得学习的技能之一。让我先看核心结构:

---
name: diagnose
description: Disciplined diagnosis loop for hard bugs and performance regressions...
---

# Diagnose
A discipline for hard bugs. Skip phases only when explicitly justified.

六步循环设计

  1. Phase 1 — Build a feedback loop(核心)

    文档中有一句话让我印象深刻:

    **This is the skill.** Everything else is mechanical. If you have a fast, deterministic, agent-runnable pass/fail signal for the bug, you will find the cause...
    

    10种构建反馈循环的方法

    • 失败测试(单元、集成、端到端)
    • Curl/HTTP脚本
    • CLI调用
    • 无头浏览器脚本
    • 重放捕获的跟踪
    • 临时测试工具
    • 属性/模糊循环
    • 二分法测试工具
    • 差异循环
    • HITL bash脚本(最后手段)

    工程智慧:将调试循环本身视为需要优化的产品。文档中明确要求:

    Treat the loop as a product. Once you have _a_ loop, ask:
    - Can I make it faster?
    - Can I make the signal sharper?
    - Can I make it more deterministic?
    
  2. Phase 2 — Reproduce(复现)

    关键检查点:

    • 复现的是用户描述的确切问题,不是附近的其他问题
    • 问题可复现(或对非确定性bug,复现率足够高)
    • 捕获确切症状,以便后续验证修复
  3. Phase 3 — Hypothesise(假设生成)

    要求生成3-5个可证伪的假设,按优先级排序。每个假设必须有明确的预测:

    > Format: "If <X> is the cause, then <changing Y> will make the bug disappear / <changing Z> will make it worse."
    

    这是科学方法在调试中的应用:提出假设,设计实验验证。

  4. Phase 4 — Instrument(仪器化)

    工具偏好:

    1. 调试器/REPL检查(如果环境支持)
    2. 针对性日志
    3. 永远不要"记录一切然后grep"

    标签化调试日志:

    **Tag every debug log** with a unique prefix, e.g. `[DEBUG-a4f2]`. Cleanup at the end becomes a single grep. Untagged logs survive; tagged logs die.
    
  5. Phase 5 — Fix + regression test(修复+回归测试)

    关键洞察:在修复前编写回归测试,但前提是有正确的接缝

    Write the regression test **before the fix** — but only if there is a **correct seam** for it.
    

    什么是正确的接缝?文档中的定义很精妙:

    A correct seam is one where the test exercises the **real bug pattern** as it occurs at the call site.
    

    更深刻的是这个判断:

    **If no correct seam exists, that itself is the finding.** Note it. The codebase architecture is preventing the bug from being locked down.
    
  6. Phase 6 — Cleanup + post-mortem(清理+事后分析)

    清理清单:

    • 原始复现不再复现
    • 回归测试通过(或记录接缝缺失)
    • 移除所有[DEBUG-...]仪器
    • 删除临时原型
    • 在提交信息中说明正确的假设

    最后的问题很有价值:

    **Then ask: what would have prevented this bug?**
    
3.2.3 tdd:AI友好的测试驱动开发适配

这个技能重新定义了TDD在AI时代的实践方式。先看核心哲学:

---
name: tdd
description: Test-driven development with red-green-refactor loop...
---

# Test-Driven Development
## Philosophy
**Core principle**: Tests should verify behavior through public interfaces, not implementation details.

反模式识别:明确反对"水平切片"

文档中有一个清晰的对比:

WRONG (horizontal):
  RED:   test1, test2, test3, test4, test5
  GREEN: impl1, impl2, impl3, impl4, impl5

RIGHT (vertical):
  RED→GREEN: test1→impl1
  RED→GREEN: test2→impl2
  RED→GREEN: test3→impl3
  ...

为什么水平切片不好? 文档中的解释很到位:

This produces **crap tests**:
- Tests written in bulk test _imagined_ behavior, not _actual_ behavior
- You end up testing the _shape_ of things (data structures, function signatures) rather than user-facing behavior
- Tests become insensitive to real changes - they pass when behavior breaks, fail when behavior is fine
- You outrun your headlights, committing to test structure before understanding the implementation

垂直切片哲学:一个测试→一个实现→重复,形成"追踪子弹"

这是将John Ousterhout的深度模块理论与TDD结合的实践。每个循环都是一个完整的"红-绿"迭代,确保测试始终反映实际行为。

测试质量标准

  1. 通过公共接口验证行为,而非实现细节
  2. 测试应像规范一样阅读
  3. 好的测试在重构后仍能通过

文档中有一个很好的比喻:

**Good tests** are integration-style: they exercise real code paths through public APIs. They describe _what_ the system does, not _how_ it does it. A good test reads like a specification - "user can checkout with valid cart" tells you exactly what capability exists.
3.2.4 caveman:token压缩的极简沟通艺术

在AI时代,token就是金钱。caveman技能解决了这个问题:

---
name: caveman
description: Ultra-compressed communication mode. Cuts token usage ~75%...
---

Respond terse like smart caveman. All technical substance stay. Only fluff die.

压缩策略

  • 删除:冠词(a/an/the)、填充词(just/really/basically)、客套话
  • 简化:使用短同义词(big而非extensive)、缩写常见术语
  • 结构化[thing] [action] [reason]. [next step].模式

技术保留:技术术语、代码块、错误信息保持原样

实际效果示例

  • 原句:“Sure! I’d be happy to help you with that. The issue you’re experiencing is likely caused by…”
  • 压缩后:“Bug in auth middleware. Token expiry check use < not <=. Fix:”

自动清晰例外:安全警告、不可逆操作确认时暂时恢复完整表达

## Auto-Clarity Exception
Drop caveman temporarily for: security warnings, irreversible action confirmations...

3.3 领域驱动设计的AI适配

这是MattPocock Skills的另一个创新点:将DDD原则转化为AI可理解的工作流。

共享语言机制:通过CONTEXT.mdgrill-with-docs技能,确保团队(包括AI)使用一致的语言。

架构决策记录:ADRs在AI项目中的价值被重新定义。不是为文档而文档,而是为AI理解而文档。

领域边界:在AI时代,概念清晰化比以往任何时候都重要。模糊的边界会导致AI生成错误的代码。

四、软件工程原则的AI时代实践

4.1 深度模块理论的应用

John Ousterhout在《A Philosophy of Software Design》中提出的深度模块理论在这里得到了很好的应用。

接口复杂度 vs 实现复杂度平衡:通过grill-with-docs确保接口简洁,通过diagnose确保实现可靠。

删除测试实践:在tdd技能中强调"如果测试在重构后失败,说明它测试的是实现而非行为"。这是检验测试质量的实用方法。

4.2 反馈循环的优化设计

diagnose技能的核心就是反馈循环的优化。文档中强调:

Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give up.**

10种反馈循环构建方法:从单元测试到HITL脚本的完整梯度,确保无论什么情况都能构建有效的调试循环。

循环即产品理念:将调试循环本身视为需要持续优化的产品。这是系统工程思维的体现。

4.3 配置即代码的项目管理

通过CONTEXT.mdADR-FORMAT.md等配置文件,将项目管理决策转化为机器可读的格式。这为AI参与项目管理提供了基础。

五、实战排障与避坑指南

5.1 Skills实战应用示例

让我通过一个具体场景展示Skills的组合使用。

场景:调试一个间歇性出现的认证中间件bug,用户在高峰时段报告"偶尔认证失败"。

使用diagnose技能

  1. 构建反馈循环

    # 编写压力测试脚本
    for i in {1..100}; do
      curl -H "Authorization: Bearer $TOKEN" https://api.example.com/user
      sleep 0.1
    done
    
  2. 复现:确认bug在特定负载条件下以30%概率出现

  3. 假设生成

    • H1:令牌过期检查使用<而非<=(如果时间在边界)
    • H2:并发请求导致状态竞争
    • H3:缓存失效逻辑错误
  4. 仪器化

    // 添加调试日志
    console.log('[DEBUG-a4f2] Token expiry check:', {
      now: Date.now(),
      expiresAt: token.expiresAt,
      isValid: now < expiresAt  // 注意这里用的是 <
    });
    
  5. 修复:确认是H1,将<改为<=

  6. 清理:移除所有调试日志,添加回归测试

使用grill-with-docs技能

  • 在修复过程中,发现"令牌"在CONTEXT.md中定义为"访问令牌",但代码中混用了"会话令牌"
  • 实时更新术语表,确保团队语言一致

5.2 Skills组合使用模式

开发新功能工作流

  1. grill-with-docs:澄清需求,定义术语
  2. tdd:测试驱动开发
  3. diagnose:调试遇到的问题
  4. caveman:压缩沟通,节省token

团队协作流程

  1. 共享CONTEXT.md确保术语一致
  2. 使用grill-with-docs对齐需求理解
  3. 通过diagnose标准化调试流程
  4. caveman提高沟通效率

六、技能文档写作质量深度分析

6.1 文档结构分析

SKILL.md标准结构的智慧:

---
name: skill-name
description: 简洁描述,包含触发词
---

# 标题
## 核心理念(哲学)
## 工作流程(分步指南)
## 示例(具体场景)
## 检查清单(质量保证)

渐进式披露:从简单描述到详细指南的层次化结构,用户可以根据需要深入。

触发词明确:每个技能都明确定义何时使用,减少AI的误触发。

示例丰富:提供具体场景下的应用示例,降低学习成本。

6.2 防AI幻觉机制

这是MattPocock Skills最值得学习的设计之一。

术语强制对齐

When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately.

这解决了AI开发中的一个核心问题:AI不理解项目特定的术语体系,容易产生"幻觉"(生成看似合理但实际错误的代码)。

模糊语言锐化

When the user uses vague or overloaded terms, propose a precise canonical term.

将模糊概念转化为精确术语,减少歧义。

代码一致性验证

When the user states how something works, check whether the code agrees.

要求AI验证用户陈述与代码实现是否一致,这是质量保证的重要机制。

6.3 与同类Skill的对比分析

对比Nuwa.skill

  • Nuwa.skill:专注于"认知蒸馏",将复杂知识转化为简单指令
  • MattPocock Skills:专注于"工程实践",将软件工程原则转化为AI工作流
  • 定位差异:Nuwa是"知识蒸馏器",MattPocock是"工程操作系统"

对比Colleague.skill

  • Colleague.skill:模拟同事协作,注重对话和协作
  • MattPocock Skills:提供结构化工作流,注重工程质量和效率
  • 适用场景:Colleague适合探索性任务,MattPocock适合工程性任务

定位判断:基于我的分析,MattPocock Skills属于S级技能。它的特征包括:

  1. 基于深厚的工程经验
  2. 系统化的设计哲学
  3. 实用的工作流程
  4. 高质量的实现
  5. 良好的文档

参考文献

  1. MattPocock Skills GitHub仓库:https://github.com/mattpocock/skills
  2. John Ousterhout. A Philosophy of Software Design. 2018.
  3. Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software. 2003.
  4. Kent Beck. Test-Driven Development: By Example. 2002.
  5. Martin Fowler. Refactoring: Improving the Design of Existing Code. 2018.

后记:这篇文章是我个人对MattPocock Skills项目的深度分析。写作过程也是我学习的过程。我希望通过这篇文章,不仅能帮助读者理解这个项目,更能激发对AI时代软件工程实践的思考。软件工程在变化,但基本原则不变。如何在AI时代坚持和发扬这些原则,是我们每个人都需要思考的问题。

作者:基于对MattPocock Skills项目的深度分析
时间:2026年5月
许可:本文基于分析目的编写,所有引用内容遵循原项目许可

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐