用途
Reflect 用于从当前对话中挖掘可长期保留的经验(durable learnings),并将这些经验路由到对现有技能(skill)的具体编辑上。当用户说出「reflect」或「/reflect」时调用。当对话内容琐碎、跑题,或已被父级正确遵循的现有技能覆盖时,应跳过。一次性的偶发情况不算经验。
在 Codex 上,遵循本技能前需先阅读平台映射(platform mapping),包括其逐技能说明。在 GitHub Copilot 上同样如此。
主要能力
- 定位当前对话的活动记录(transcript)。
- 并行启动三个审查子代理,分别使用判断(judgment)、工具(tooling)、发散(divergent)三种视角。
- 由一个综合代理汇总审查结果,返回「接受 / 拒绝 / 待办」清单。
- 进行结构性强制检查,将更适合由 lint 规则、脚本、元数据标志或运行时检查强制执行的「接受」项移入「待办」。
- 在用户明确批准后应用编辑,并将「待办」项提交到团队的 devex 或 backlog 跟踪器。
使用方式
1. 定位活动对话记录
在展开之前,先在 Claude Code 的按项目对话记录目录 ~/.claude/projects/<encoded-cwd>/ 中找到本次对话的记录。不要对 ~/.claude/projects/ 做全局 glob,那会跨越工作区边界并读取无关项目的私密对话。
运行已安装插件下 skills/reflect/scripts/find-transcript.mjs 中的查找器,传入项目目录和对话开头用户提示的一个片段:
node <plugin>/skills/reflect/scripts/find-transcript.mjs ~/.claude/projects/<encoded-cwd> "<opening prompt fragment>"
它覆盖三种布局(扁平的 <id>.jsonl、嵌套的 <id>/<id>.jsonl、子代理的 <parent>/subagents/<child>.jsonl),按最新优先,打印第一个开头输入提示包含该片段的路径。不要手工重新实现扫描:记录的第一行是会话元数据而非消息;以 /clear 或 ! shell 命令开头的会话会在提示之前把该命令的包装和输出记录为用户记录;文件可达数兆字节,因此查找器会流式读取每个候选并在其第一条输入用户记录处停止。如果它以退出码 1 结束,则写一份紧凑的会话摘要并改传该摘要。摘要按顺序逐行列出用户的提示与纠正、工具调用及其结果、以及被触及的文件。它不陈述任何诊断、判定或原因。审查者评判的是会话本身,而不是你对会话的结论。
2. 并行启动三个审查者
一条消息、三次 Agent 调用,subagent_type: "general-purpose"。审查者需要 MCP 访问权限来查询记录中引用的工单、聊天线程和可观测性追踪,因此要选择保留 MCP 访问权限的 subagent_type。提示禁止写文件,由父级应用编辑。
每个审查者和综合者都在 pstack-models.md 中指定一个角色行(role line),并在 Models 中有一个默认值。将 model 设为该行的值,若表或该行缺失则设为默认值。当值为 auto 或 inherit-parent 时,不设置 model。如果 Agent 工具拒绝某个 slug,则使用默认值并说明;如果它拒绝默认值,则使用其错误消息中同族最接近的有效 slug。
| 视角 | 角色行 | 提示模板 |
|---|---|---|
| 判断 | reflect judgment, divergent, synthesizer | references/judgment-reviewer.md |
| 工具 | reflect tooling | references/tooling-reviewer.md |
| 发散 | reflect judgment, divergent, synthesizer | references/divergent-reviewer.md |
逐字传入每个模板,在标记处替换为记录路径或摘要。除记录路径外不要添加任何内容,即使是长记录的焦点说明也不要加。审查者在 Agent 响应正文中返回发现。
3. 综合
一次 Agent 调用,subagent_type: "general-purpose",model 取自 reflect judgment, divergent, synthesizer 行(Models 中的默认值)。它通过 MCP 抽查验证引用,因此要选择保留 MCP 访问权限的 subagent_type。逐字传入 references/synthesizer.md,在标记处内联每个审查者的完整输出。它返回「接受 / 拒绝 / 待办」清单。
4. 结构性强制检查
将任何更适合由 lint 规则、脚本、元数据标志或运行时检查强制执行的「接受」项移入「待办」。参见 encode-lessons-in-structure 原则技能。
5. 应用
呈现综合者完整的「接受 / 拒绝 / 待办」输出,并在应用任何「接受」编辑前等待明确批准。用户挑选子集,并可重定向路由。技能变更会影响组织内所有未来的代理,不要自动应用。
将每个「待办」项立即提交到团队的 devex 或 backlog 跟踪器,无需等待。只有「接受」清单需要等待批准。
严格遵循每个已批准行的 Routing:
- 琐碎的现有技能编辑(一行要点、收紧的句子、更正过时事实):由父级直接完成。
- 实质性的现有技能编辑(新章节、新模式表、超过约 10 行):交给
plugin-dev:skill-development技能并运行其 draft / test / iterate 循环。 tune description: <skill path>(技能存在但本应触发时未触发):交给plugin-dev:skill-development并运行其描述优化循环。new skill via plugin-dev:skill-development: <kebab-name>:将创建交给plugin-dev:skill-development,不要临时臆造形态。
如果你的环境提供 SKILL.md 校验器,在宣布完成前对每个被触及的技能运行它。
6. 向用户总结
简短列表,无前言:
- 已应用的编辑:
<skill path>。每行说明改了什么。 - 新建的技能:
<skill path>。每行一个(罕见)。 - 已提交到 devex 跟踪器的待办:
<issue title>(<tags>)。每行一个。 - 已丢弃:每条被拒绝的发现一行 + 综合者给出的原因。
模型
角色默认值从 plugins/pstack/models.json 盖章生成(在那里编辑,重新运行 tools/generate.mjs)。pstack-models.md 覆盖表中匹配的角色行会在运行时覆盖每个默认值;/setup-pstack 会写入它并列出其在各运行时的路径。
- reflect tooling: opus
- reflect judgment, divergent, synthesizer: opus
推理强度(Reasoning effort)
覆盖表中的角色值可以在模型名后指定推理强度,如 opus @xhigh。Claude Code 上的级别有:low、medium、high、xhigh、max。具体适用哪些取决于模型。不带 @ 的值采用表中的默认强度行(一个级别或 session),当表中没有该行时采用 session。session 不设置强度,因此派发为常规方式。读取模型前先去掉后缀:inherit-parent 或 auto 在任何级别下仍省略 model,模型名则作为 model 传入。在 Claude Code 上,级别会从你原本要使用的 subagent_type 中挑选 effort agent。pstack:poteto-agent 变为 subagent_type: "pstack:poteto-agent-<level>"。general-purpose 或无 subagent_type 变为 subagent_type: "pstack:effort-<level>"。effort agent 只设置强度,因此你传入的 model 仍决定模型。在 Codex 上,将级别作为 spawn_agent 的 reasoning_effort 传入,并保留常规指令。
适用场景
- 用户明确说出「reflect」或「/reflect」时。
- 希望从一次有价值的对话中提炼可复用经验并沉淀到技能中时。
限制
- 对话琐碎、跑题,或已被现有技能正确覆盖时跳过。
- 一次性情况不算经验。
- 不自动应用编辑,必须等待用户明确批准。
- 不得对
~/.claude/projects/做全局 glob,以免跨越工作区边界读取无关项目的私密对话。 - 审查者提示禁止写文件,编辑由父级应用。
- 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。