用 claude-mem Pathfinder 技能做重构前的代码库架构审计:从重复代码挖掘到统一架构提案
导读
pathfinder 是 claude-mem 插件技能体系中的架构审计型 Orchestrator 技能:它不写任何实现代码,而是把整个代码库映射成一组"按功能分组的 Mermaid 流程图",跨功能对比找出被重复实现的关注点,产出一份"最简单可行"的统一架构提案,最后把每个待统一系统的实现工作以可复制的 /make-plan 提示词形式移交出去。本文将以 pathfinder 的完整工作流为主线,讲解其四阶段流程、标准产物结构、子代理汇报契约与内置反模式护栏,并结合 claude-mem 仓库自身的技能编排设计(/make-plan、/do)说明该技能如何在大型重构前定位"理想的路径",让你读完即可在本仓库或其他代码库上复现这套审计方法。
1. 技能定位:这是"审计者",不是"实现者"
Pathfinder 的技能元信息(frontmatter)写得很明确:当用户提出"找到理想路径 / 统一重复系统 / 重构前审计架构"时触发它,产物是"一份提案 + 每个待统一系统的 /make-plan 提示词",绝不写实现代码。它把自身定位为 ORCHESTRATOR(编排者),承担三个固定职责:
- 把代码库映射为按功能分组的流程图(feature-grouped flowcharts);
- 识别跨功能出现的重复关注点(duplicated concerns);
- 提出最简单的统一架构,并把每个系统的落地计划移交给
/make-plan。
这条边界与 claude-mem 的技能工程哲学一脉相承:据 CHANGELOG.md 记载,仓库在 10.4.1 版本把 /make-plan 与 /do 命令转换为 plugin/skills/ 下的一等技能,形成"make-plan(计划)→ do(执行)"的编排链。Pathfinder 恰好填补链条的最前端——它不直接调 /do,而是停在"计划提示词"这一步,让 make-plan 和 do 按自身节奏接手。正如 SKILL.md 中的 Key Principles 所强调:Handoff, don't implement(移交而非实现)。
从仓库结构看,plugin/skills/ 下已汇集 babysit、make-plan、do、mem-search、learn-codebase、pathfinder 等十余个技能(CHANGELOG 13.2.0 的 skills inventory 中明确列出 12 个技能),pathfinder 在其中属于少数"面向大型重构"的元技能,其余技能多聚焦单次会话内记忆检索或单任务执行。
2. 编排模型:发现与综合的职责分离
Pathfinder 强制一种严格的职责分工:
- 发现与提取(discovery & extraction)交给子代理:文件读取、流程追踪、grep、绘图等海量阅读工作全部下放;
- 综合(synthesis)留给主编排者:判断功能边界、选择统一策略、绘制最终统一流程图这些需要全局判断的决策,不允许委托;
- 拒绝无出处的子代理报告:如果子代理的产出缺少源码引用,主编排者必须拒绝并重新部署。
子代理汇报契约(强制项)
每份子代理响应必须包含四要素,缺一即视为不合格并重派:
- 查阅的源(Sources consulted)——精确到文件路径与行区间;
- 具体发现(Concrete findings)——确切的函数名、调用点、数据流;
- 带
file:line节点标注的 Mermaid 图——流程图节点必须能回溯到源码位置; - 置信度说明 + 已知缺口——诚实标注不确定区域。
这套契约与 /make-plan 的 Subagent Reporting Contract 高度同构:make-plan 同样要求子代理报告"查阅的源、具体的 API 名称/签名、可复制的片段位置、置信度与缺口",其设计意图一致——用证据约束多 Agent 协作中常见的幻觉与断言式结论。可以推断:pathfinder 之所以把"证据"提到契约高度,是因为流程图与重复报告一旦脱离 file:line 锚点,就成了无法核验的"记忆里的架构图",这正是它 Failure Modes 中首先要防的问题。
3. 输出产物:一份自带清单的审计目录
所有产物必须写入仓库根目录下的 PATHFINDER-<YYYY-MM-DD>/ 目录,形成一份可评审、可追溯的审计档案:
| 文件 | 内容 | 生产者 |
|---|---|---|
00-features.md |
功能清单及其边界 | Orchestrator(子代理提案,orchestrator 审定) |
01-flowcharts/<feature>.md |
每个功能一张 Mermaid 流程图 | Flowchart 子代理(orchestrator 落盘) |
02-duplication-report.md |
跨功能重复关注点 + 证据 | Orchestrator 综合两个子代理报告 |
03-unified-proposal.md |
统一架构提案 + 一张合并 Mermaid 图 | 仅 Orchestrator 亲自撰写 |
04-handoff-prompts.md |
每个待统一系统的可复制 /make-plan 提示词 |
Orchestrator |
产物按阶段编号 00→04 本身就是工作流的时序映射:先描述现状(00/01/02),再设计目标态(03),最后输出执行交接物(04)。
4. 四阶段流程详解
Phase 0:功能发现(永远最先做)
部署一个 "Feature Discovery" 子代理,任务是:
- 遍历源码树(排除构建产物),阅读顶层 README / CLAUDE.md;
- 依据目录结构、import 图和命名习惯提出功能边界划分建议;
- 返回扁平的功能清单,每项含:名称、入口点(
file:line)、核心文件、简要用途。
关键纪律:Orchestrator 必须先评审并批准边界,写入 00-features.md,然后才能进入扇出(fan out)阶段。SKILL.md 明确警告:Do NOT fan out until feature boundaries are approved——跳过边界评审直接扇出,边界一错,Phase 1 的所有流程图全部作废。
这一点与仓库自身的领域复杂度直接相关:claude-mem 的 src/ 下有 services/worker(59 个文件)、services/context、services/transcripts、services/sync、worker 相关代码等多个纵深子系统,一个"按目录粗略分块"的错误边界会立刻导致 Phase 1 子代理拿到互相重叠的阅读范围,重复劳动与遗漏并存。
Phase 1:逐功能流程图(扇出阶段)
每个功能部署一个 "Flowchart" 子代理,并行执行。每个子代理只拿到自己功能的边界范围,必须完成:
- 追踪该功能从入口到终态的主成功路径(happy path);
- 识别副作用(side effect):数据库写入、HTTP 调用、文件 I/O、进程派生;
- 记录错误与回退分支,但不允许其占据图面主体;
- 产出 Mermaid
flowchart TD图,每个节点标注Name<br/>file:line; - 在底部列出外部依赖(该功能调用的其他功能)。
Orchestrator 负责把图写入 01-flowcharts/<feature>.md。凡缺失 file:line 节点标注的图,一律打回。Mermaid flowchart TD 的节点格式类似:
flowchart TD
A[Capture Hook<br/>src/services/transcripts/watcher.ts:120]
B[Write Observation<br/>src/services/sqlite/observations.ts:45]
A --> B
(以上为 skill 所要求的节点标注风格示意,实际节点以你仓库内真实调用的 file:line 为准。)
Phase 2:重复性挖掘(双路并行)
并行部署两个子代理,分别从"内部"与"跨功能"两个维度挖掘:
"功能内重复(Within-Feature Duplication)"子代理:在每个功能内部寻找重复的代码/逻辑模式,只报告值得合并的重复,忽略琐碎复制。
"跨功能重复(Cross-Feature Duplication)"子代理:横向比对各功能的流程图,寻找出现在多个位置的关注点。SKILL.md 给出了极具启发性的例子清单(这些与 claude-mem 这类多 Agent 记忆系统高度相关):
- 多条 capture 路径(multiple capture paths);
- 并行的 queue 实现(parallel queue implementations);
- 重复的存储/迁移代码(duplicated storage/migration code);
- 重复的 agent 脚手架(repeated agent scaffolding);
- 并行的解析层(parallel parsing layers)。
对每处重复,报告四件事:(a) 关注点是什么;(b) 每个出现位置(file:line);(c) 它们为什么发生了分化(divergence 的成因);(d) 这种分化是合理的特化(legitimate specialization)还是偶然漂移(accidental)。
Orchestrator 综合两份报告写入 02-duplication-report.md。铁律:每条重复主张必须引用 ≥2 处 file:line 位置。
Phase 3:统一提案(仅 Orchestrator)
这是全流程中**唯一明确"不得委托综合"**的阶段。针对 Phase 2 中所有"非合理特化"的重复,逐一回答:
- 提出最简单的统一设计——"一个路径、一个存储、一个处理器"(one path, one store, one handler——看适用情况取舍);
- 命名被合并后的组件及其单一入口点;
- 说明每个旧调用点会变成什么;
- 明确列出会损失的能力,并判断这种损失是否可以接受。
文档末尾必须以一张合并的 Mermaid 流程图收尾,展示统一后的目标系统;凡能确定(新或既有)的节点仍须标注目标 file:line。
提案内部必须拒绝的反模式
SKILL.md 列举了四条,这是整个 skill 中最锋利的部分:
- 为了"灵活性"添加新的抽象层(Adding a new abstraction layer "for flexibility")——对应 Key Principles 中的 prefer deletion over abstraction(删除优于抽象);
- 用 feature flag 同时保留新旧两条路径(Keeping both old paths behind a feature flag);
- 在 switch 语句就够用时引入 registry/factory(Introducing a registry/factory when a switch statement suffices);
- "以防万一"保留分化行为(Preserving divergent behavior "just in case")。
Phase 4:逐系统交接提示词
为提案中每个待统一系统写一段可直接运行的 /make-plan 提示词,写入 04-handoff-prompts.md。每段提示词必须:
- 指明目标统一组件及其单一入口点;
- 列出需要重写的确切调用点(来自 Phase 2 证据);
- 引用
01-flowcharts/中的相关流程图文件; - 附上针对该系统的反模式护栏。
格式上要求每段一个 fenced code block,方便用户直接从审计目录复制进 /make-plan。这一点衔接了 make-plan 的输入契约——它要求任务被框架为"从文档/示例复制而非迁移现有代码",因此 pathfinder 提供精确调用点 + 流程图引用 + 反模式护栏,恰好让 /make-plan 的开局就有据可依,而不是从模糊目标重新考古。
5. 关键原则:把"证据"当作唯一通行证
Pathfinder 的五条 Key Principles 直接构成它的价值观体系:
| 原则 | 含义 |
|---|---|
| Evidence over intuition | 每个图节点与每条重复主张都引用 file:line,杜绝"凭印象画架构" |
| Current state before ideal state | Phase 0–2 描述"现状是什么"(IS);Phase 3 才描述"应该是什么"(SHOULD BE)——现状审计与目标设计严格分阶段 |
| Simplest unification wins | 删除 > 抽象;一条路径 > 可配置的多路径 |
| Specialization is not duplication | 服务于不同信任模型(trust model)或不同数据源(data source)的两个组件,即使代码长得像,也是合法特化而非重复 |
| Handoff, don't implement | Pathfinder 止步于计划提示词;/make-plan 与 /do 负责后续 |
其中"Specialization is not duplication"与"Simplest unification wins"互为张力:前者防止过度合并,后者防止过度设计,两者的裁决标准都落到信任模型与数据源是否真的不同,而非代码表面相似度。这解释了为什么仓库大量并行的 worker/sync/transcript 代码不能靠视觉相似度一刀切——是否合并取决于它们在信任边界与数据流上是否真正重合。
6. 失败模式清单:把这个 skill 当作"带护栏的流程"
SKILL.md 在结尾给出四个必须主动预防的失败模式,它们同时也是评审人检查 pathfinder 输出的四个审查点:
- 凭记忆而非源码画流程图——处置:以"必须带 grep 证据"重新部署子代理;
- 提议统一本属合理特化的组件——处置:重新审视信任/数据源层面的分歧;
- 交接提示词缺少具体调用点——处置:用 Phase 2 证据重写;
- 跳过 Phase 0 边界评审——处置:边界没批准就扇出,会浪费整个 Phase 1。
这四条失败模式与本仓库的工程实践是呼应的:claude-mem 的测试目录(如 tests/worker/、tests/services/sync/)中大量针对 worker 生命周期、同步矩阵的用例,说明该项目本身长期在管理多进程、多同步路径的复杂度;一份 pathfinder 审计若产出了不锚定 file:line 的流程图或把合法特化误判为重复,其危害会直接传导到后续 /make-plan 与 /do 的实现阶段。
7. 把它跑起来:在本仓库上复现一次审计
如果你希望在本仓库(或任何基于 claude-mem 技能体系的代码库)实际运行该技能,可以直接向 Agent 提出此类需求:"在重构前对代码库做架构审计,找出重复实现的系统并给出统一方案"——它会自动触发 pathfinder 并依下述轨迹工作:
- Phase 0:通读仓库根目录 README.md、CLAUDE.md 与
src/树,产出功能边界清单00-features.md; - Phase 1:为
services/worker、services/sync、services/context、services/transcripts等功能分别并行产出带file:line标注的 Mermaid 流程图; - Phase 2:两份报告(功能内 / 跨功能)并行挖掘,汇总成带 ≥2 处
file:line证据的重复报告; - Phase 3:orchestrator 亲自撰写统一架构提案与合并流程图,并用"单一入口 + 删除优于抽象"约束自身;
- Phase 4:把每段可复制的
/make-plan提示词写入04-handoff-prompts.md,由用户取出后粘贴进plugin/skills/make-plan/SKILL.md描述的make-plan技能生成分阶段实现计划,最终交给plugin/skills/do/SKILL.md的do技能去执行。
整个过程产出的 PATHFINDER-<YYYY-MM-DD>/ 目录即是完整审计档案,也是 make-plan/do 的输入依据——这正是 claude-mem 技能链在"发现 → 规划 → 执行"上的完整闭环设计。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0627
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00