用途
Learner 是一个用于从当前对话中提取“已学技能”的工具。它的核心理念是:可复用的技能不是用来复制粘贴的代码片段,而是教会 Codex 如何思考某一类问题的原则与决策启发式。
资料给出的对比:
- 差(模仿):“当你看到 ConnectionResetError 时,加上这段 try/except 代码块”
- 好(可复用技能):“在异步网络代码中,任何 I/O 操作都可能因客户端/服务端生命周期不匹配而独立失败。原则是:把每个 I/O 操作分别包裹起来,因为操作之间的失败是常见情况,而不是例外。”
一个好的技能改变的是 Codex 处理问题的方式,而不仅仅是它产出的代码。
何时使用
在提取技能之前,先问自己:
- “别人能在 5 分钟内搜到吗?”→ 能,就停止,不要提取。
- “这是否是当前代码库特有的?”→ 不是,就停止,不要提取。
- “这是否花了真实的调试努力才发现?”→ 不是,就停止,不要提取。
如果某个潜在技能在上述任一问题中不满足,就不值得保存。
识别模式:仅在以下情况之后使用 /learner:
- 解决了一个需要深入调查的棘手 bug
- 发现了当前代码库特有的、非显而易见的变通方案
- 找到了一个一旦忘记就会浪费时间的隐藏陷阱
- 发现了影响本项目的未文档化行为
提取流程
第一步:收集所需信息
- 问题陈述:发生的具体错误、症状或困惑。包含实际错误信息、文件路径、行号。示例:“重启后 sessionId 为 undefined 时,src/hooks/session.ts:45 出现 TypeError”
- 解决方案:确切的修复方式,而非泛泛建议。包含代码片段、文件路径、配置变更。示例:“在访问 session.user 前加空值检查,在 401 时重新生成 session”
- 触发词:再次遇到该问题时会出现的关键词。使用错误信息片段、文件名、症状描述。示例:["sessionId undefined", "session.ts TypeError", "401 session"]
- 范围:几乎总是项目级,除非是真正通用的洞察
第二步:质量校验
系统会拒绝以下技能:
- 过于泛泛(没有文件路径、行号或具体错误信息)
- 容易搜到(标准模式、库用法)
- 解决方案含糊(没有代码片段或精确指令)
- 触发词不佳(匹配一切的通用词)
第三步:保存位置
- 用户级:~/.codex/skills/omc-learned/ —— 少见,仅用于真正可移植的洞察。
- 项目级:.omx/skills/ —— 默认,随仓库进行版本控制。
什么算有用的技能
关键:并非每个解决方案都值得保存。好的技能应满足:
- 无法轻易搜到:
- 差:“如何在 TypeScript 中读取文件”
- 好:“本代码库在 ESM 中使用自定义路径解析,需要 fileURLToPath 加特定相对路径”
- 上下文特定:引用本代码库的实际文件、错误信息或模式
- 差:“用 try/catch 做错误处理”
- 好:“server.py:42 的 aiohttp 代理在 ClientDisconnectedError 时崩溃——把 StreamResponse 包进 try/except”
- 可精确执行:明确告诉你做什么、在哪里做
- 差:“处理边界情况”
- 好:“在 dist/ 中看到 'Cannot find module' 时,检查 tsconfig.json 的 moduleResolution 是否匹配 package.json 的 type 字段”
- 来之不易:花了大量调试努力才发现
- 差:通用编程模式
- 好:“worker.ts 中的竞态条件——第 89 行的 Promise.all 需要在 map 回调返回前 await”
反模式(不要提取):
- 通用编程模式(改用文档)
- 重构技巧(这些是通用的)
- 库用法示例(改用库文档)
- 类型定义或样板代码
- 任何初级开发者 5 分钟就能搜到的东西
技能格式
技能以 Markdown 保存,结构如下:
YAML Frontmatter:标准元数据字段:id、name、description、source、triggers、quality
正文结构(必需):
[技能名称]
The Insight
你发现的底层原则是什么?不是代码,而是心智模型。示例:“异步 I/O 操作可独立失败。客户端生命周期 != 服务端生命周期。”
Why This Matters
不知道这一点会出什么问题?是什么症状把你带到这里?示例:“代理服务器在客户端断开时崩溃,拖垮其他请求。”
Recognition Pattern
如何判断该技能适用?有哪些迹象?示例:“构建任何长连接处理器(代理、websocket、SSE)时”
The Approach
决策启发式,而不仅是代码。Codex 应如何思考?示例:“对每个 I/O 操作问:如果它此刻失败会怎样?在本地处理它。”
Example(可选)
如果代码有帮助就展示——但作为原则的说明,而非复制粘贴材料。
关键:如果 Codex 能把技能应用到新情境,而不仅是相同情境,它就是可复用的。
相关命令
- /note —— 保存能在压缩后存活的快速笔记(比技能更非正式)
- /ralph —— 启动带学习捕获的开发循环
限制
资料未提供该技能的安装命令、收费或价格信息、支持平台、具体效果数据,这些内容暂未提供。