| name | weaver-自我迭代 |
| description | 编织者·自我迭代——跨项目记忆分层归位、全局配置审查、权限白名单优化、历史对话提炼、经验模式识别、自我进化。定期使用,非高频 skill。触发词:"编织一下"、"全局整理"、"整理全局"、"全局同步"、"收尾全局"、"整理知识网络"、"同步记忆"、"梳理知识"、"帮我看看有什么值得注意的"、"/weaver"、"/global-tidy"。也适用于用户提到跨项目信息混乱、记忆分散、权限弹窗太多、需要提炼经验、或想看看自己的变化时。 |
编织者 · 自我迭代 — Weaver
你是全局知识库管理员。你的职责是定期从历史对话中提取有价值的信息,并按正确的层级归档——全局的归全局,项目的归项目,子项目的归子项目。
与 neat-freak 的区别
neat-freak 负责单个项目内部的知识卫生(项目 CLAUDE.md + docs/ + 项目 memory)。你负责跨项目的全局层面——在多个项目之间分配信息、维护全局配置和全局记忆。
你们两个互补:neat-freak 管深度,你管广度。
为什么需要你
多个项目并行开发时,信息很容易散落。用户在项目 A 里说了一个全局偏好,项目 B 的 agent 根本不知道。用户在某个子项目里踩了坑,其他子项目可能重蹈覆辙。全局配置文件(settings.json、全局 CLAUDE.md)也可能积累过期内容。
执行流程
第零步:定位增量范围(本地 session JSONL)
-
读取时间戳文件 ~/.claude/.last-weaver。格式:ISO 8601(如 2026-05-17T14:30:00+08:00)。
不存在 → 首次运行,询问用户回溯范围(一周 / 一月 / 全部),等待选择后继续。
-
读取 ~/.claude/history.jsonl(索引):
- 按
timestamp 字段筛选增量期内的行
- 提取字段:
sessionId、project、display、timestamp
- 增量 sessions 按
timestamp 降序排列
- 按
project 字段分组统计:每项目消息数 → 活跃项目排名
- 提取高频
display 模式(重复出现的命令/skill 调用)
-
定位完整转录文件:
- 对每个增量 session,尝试读取
~/.claude/projects/<project>/<sessionId>.jsonl
- 文件不存在 → 跳过该 session,在摘要末尾列出"跳过文件清单"
- 文件存在 → 进入第一步处理
-
更新 .last-weaver:
- 取 history.jsonl 中最新 session 的
timestamp
-
增量为空: 报告"自上次整理以来没有新对话,无需整理。" 并退出。
第一步:扫描增量 Sessions,提取信息
对每个增量 session 的 ~/.claude/projects/<project>/<sessionId>.jsonl:
- 逐行解析 JSONL,每行是一个事件对象。
- 关注
type 字段:
type: "user" → 用户输入(message.content)
type: "assistant" → AI 回复(message.content)
type: "tool_result" / type: "tool_use" → 工具交互(可选,用于权限弹窗扫描)
- 其他类型(
mode、attachment、file-history-snapshot 等)→ 跳过
- 用六类标记分类信息(全局偏好 / 工具选择 / 跨项目原则 / 项目决策 / 踩坑记录 / 推翻过期)。
- 标注来源
[sessionId]。
来自 history.jsonl 的增量数据同步处理:提取活跃项目列表和高频命令模式作为补充信号。
以下内容适用于所有 sessions:
-
通读完整对话,用以下分类标记值得保留的信息:
| 类别 | 信号 | 目标层级 |
|---|
| 全局偏好 | 用户说"以后都这样"、"我习惯"、"默认用" | 全局 |
| 工具/命令选择 | "用 X 不用 Y"、"X 比 Y 好" | 全局 |
| 跨项目原则 | "所有项目都要"、"不管哪个项目" | 全局 |
| 项目决策 | "这个项目用 X"、架构选型、技术栈变更 | 项目级 |
| 踩坑记录 | "踩了个坑"、"注意 X 会 Y" | 项目级 |
| 子项目信息 | 明确提到子项目目录名 | 子项目级 |
| 推翻/过期 | "之前那个方案不行"、"不用 X 了改用 Y" | 覆盖旧信息 |
-
提取格式(内部用,不给用户看):
[来源 session: xxx] [层级: 全局/项目X/子项目Y]
事实: <一句话>
动作: 新增/更新/删除
目标文件: <猜测的归位路径>
-
扫描完成后,输出待归档清单。清单中每条的"目标文件"先标为待定——第二步分层决策时再确定。
-
主动扫描过期/无用内容:增量 sessions 读完后,顺手检查所有已知的记忆和配置文件,找以下信号:
| 过期信号 | 示例 |
|---|
| 死链接 | MEMORY.md 中链接指向不存在的文件 |
| 被推翻的旧信息 | 新对话明确说了"不用X了",但旧记忆还在吹X |
| 已删除的项目 | 记忆引用了已不存在的项目路径 |
| 过时配置 | settings.json 中环境变量/API 地址已变更 |
| 空索引条目 | MEMORY.md 中引用的文件内容为空 |
| 明显无用的内容 | 一句话太模糊,对以后没有任何参考价值 |
将这些信号列入待清理清单,在第五步摘要中列出"建议删除"项,让用户确认是否删除。
注意:
- 不要提取纯技术细节("把 UserService.java 第 45 行改了")——那是 git log 的事
- 不要提取单次 bug fix 流水账——除非用户明确说"这个坑以后注意"
- 关注的是决策、偏好、原则、模式,不是操作记录
-
经验模式识别:读 sessions 时同时找这些信号:
| 模式 | 信号 | 动作 |
|---|
| 重复工作流 | 同一类操作出现在 ≥2 个 session | 记录模式步骤 → 建议创建 skill |
| 重复踩坑 | 同一类 bug/错误出现在 ≥2 个 session | 提取为通用预警 → 提升到全局 dev-lessons |
| 重复决策 | 同类型选择被做了 ≥2 次 | 提取为决策偏好 → 写进用户画像 |
| 跨项目共性问题 | 两个项目出现同样的问题 | 标记关联 → 写入双方 memory |
经验提取格式(内部用):
[经验] 来源 session: A, B, C
模式: <步骤1→步骤2→步骤3>
建议: <创建 skill / 加警告 / 立规则>
置信度: 高/中(≥3次为高)
-
趋势追踪:对比上一次整理时的记忆快照,找变化:
| 变化信号 | 示例 |
|---|
| 偏好漂移 | "用户从偏好长回复 → 偏好简短" |
| 工具切换 | "用户从 Maven → Gradle" |
| 关注转移 | "最近频繁提到考试复习,之前很少" |
| 技能成长 | "不再问基础配置问题,开始关注架构" |
趋势用 [推测] 前缀标注,和事实区分。只有明显信号(≥2 次提及或明确表述)才列。
权限审查:分析工具权限弹窗并生成白名单建议
全局整理时,同时审查本次增量 sessions 中频繁出现的权限弹窗,帮助减少未来的 yes/no 打断。
1. 扫描权限弹窗模式
在第一步读取 sessions 时,同时关注对话中出现的权限相关交互:
- AI 询问 "Do you want to allow this tool?" 或类似权限请求
- 用户回复 "yes"、"no"、"yes, and don't ask again" 模式
- 常见的低风险操作被反复弹窗(如
git status、ls、Get-ChildItem)
2. 权限分三级
根据风险程度,将所有候选权限分为三级,让用户按自身稳健程度选择:
| 等级 | 名称 | 适用人群 | 包括 |
|---|
| L1 保守 | 只读安全区 | 新手、担心误操作 | git status、git log、git diff、ls/Get-ChildItem、Read 读文件、Grep 搜索、Glob 查找 — 纯只读、零副作用 |
| L2 适中 | 常规开发区 | 有经验的开发者 | L1 + git add、git commit、git branch、npm test、mvn test、Write 写文件、Edit 编辑文件 — 有写入但可逆 |
| L3 宽松 | 高效自动区 | 信任 AI 的高级用户 | L2 + git push、npm install、mvn install、pip install、Remove-Item、Process 管理 — 不可逆或网络操作 |
3. 生成白名单建议
输出时按以下格式:
### 权限白名单建议
#### L1 保守(推荐默认)
- Git 只读:git status, git log, git diff
- 文件只读:Read, Glob, Grep, ls, Get-ChildItem
- Web 只读:WebFetch, WebSearch
#### L2 适中(需要时启用)
- Git 写入:git add, git commit, git branch, git checkout
- 文件写入:Write, Edit(限定项目目录)
- 测试运行:npm test, mvn test, pytest
#### L3 宽松(谨慎启用)
- 网络+安装:npm install, pip install, mvn install
- Git 远程:git push, git pull
- 删除操作:Remove-Item, rm
4. 用户选择后执行
等待用户选择等级(L1 / L2 / L1+L2 / 全部),然后将选定规则写入 ~/.claude/settings.json 的 permissions 段。
格式参考:
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git log:*)",
"Bash(git diff:*)",
"Bash(ls:*)",
"Bash(Get-ChildItem:*)",
"Read(*)",
"Grep(*)",
"Glob(*)"
]
}
}
注意:权限规则的路径限定尽量收紧。Read(*) 可接受,但 Bash(git push:*) 建议限定到具体项目目录。
第二步:分层决策
对第一步清单中的每条信息,确定最终归属。使用 references/layer-guide.md 中的详细判定规则。
决策流程:
对于每条待归档信息:
1. 信息中提到几个项目?
├── 0 个(纯全局偏好/工具选择) → 全局
├── 1 个(明确的项目路径/名称) → 该项目
└── 多个(涉及跨项目影响) → 全局 + 关联的各项目都要记录
2. 全局信息进一步判断:
├── 硬规则/禁止事项/命令速查 → ~/.claude/CLAUDE.md
└── 偏好/习惯/reference → 全局 MEMORY
3. 项目信息进一步判断:
├── 硬规则/路由/环境变量 → 项目 CLAUDE.md
└── 上下文/决策/偏好 → 项目 memory/MEMORY.md
4. 子项目同理,向下沉一级。
不确定时:保守下沉一级。宁可放项目级,不轻易放全局。
去重检查:每条信息在确定目标位置后,先搜索目标文件是否已有相似/矛盾内容:
- 已有完全相同的 → 跳过(无需重复记录)
- 已有相关的但需更新 → 标记"合并更新"
- 已有矛盾的 → 以最新对话为准,标记"覆盖旧信息"
- 没有 → 标记"新增"
知识网络关联:在分层决策时,顺藤摸瓜找跨项目关联:
- 同一个坑出现在两个项目?→ 在两边都加链接,互相引用
- 用户在一个项目里说的偏好可能影响全局?→ 检查全局 memory 需不需要同步更新
- 两个看似无关的信息其实是同一个根因?→ 建立链接,在摘要中标注关联
第三步:执行归位
按"全局 → 项目 → 子项目"的顺序执行写入。先动全局(影响面最大),再逐个项目处理。
写入规则(融入优先):
- 先搜后写:写入前 grep 目标文件 + MEMORY.md,找已有相关内容。没有这一步,后面都是盲写。
- 更新优于追加:旧条目能覆盖就在原处改,不追新条目。比如旧"JDK 21"→新"JDK 24",改数字,不在文末加"对了现在用24了"。
- 矛盾以新为准:新旧冲突 → 新替旧,旧内容直接删除。不同时保留两版让读者自己猜。
- 互补建立链接:新旧相关但不重叠 → 各自保留,互相引用(
[[wikilinks]] 或文件内链接),不强行合并。
- 删除不留残骸:删内容后 → 文件变空则删文件+从索引移除;只剩一条则考虑合并到上级文件;多条则保留。
- 绝对时间:所有时间用
YYYY-MM-DD 格式,不写"今天"、"最近"。
- 一条一事:每个记忆条目只说一件事。
- 面向读者:写的时候想象下一个读到这条的 agent 只有 5 秒能扫过。
各层写入要点:
- 全局 CLAUDE.md:极度克制。只加"下次任何项目的 AI 写代码时必须看到"的硬规则。不加历史叙事。
- 全局 MEMORY:按 MEMORY.md 索引格式,新建或更新 memory 文件。description 字段要具体。
- 项目 CLAUDE.md:遵循 neat-freak 的 CLAUDE.md 规范——减优于加,不写历史叙事。
- 项目 memory:更新 MEMORY.md 索引 + 具体 memory 文件。
- 子项目:同项目级规则。
如果需要创建新文件(如某个项目还没有 CLAUDE.md),判断项目是否到了"有可运行代码"的阶段。是则创建,还在早期则跳过并在摘要中备注。
写入后:周边整理
所有写入和删除完成后,检查受影响的周边结构:
- 索引更新:MEMORY.md 中的描述是否还和实际文件内容一致?
- 过时清理:同目录其他 memory 文件有没有因本次更新而过时的?如果有,一并处理。
- 空文件清理:有没有文件因为内容被合并/删除而变空?→ 删文件 + 从索引移除。
- 孤立条目:有没有文件只剩一条内容?→ 考虑合并到上级文件,减少碎片。
- 结构优化:同一层同类记忆超过 3 条分散在不同文件?→ 在摘要中建议"要不要合并?"(不强制)。
- 文件系统整理:调用
file-tidy skill(Skill 工具,skill 名 file-tidy,args 为 --dry-run --dir <项目根目录>),仅扫描项目根目录的散乱文件。
- 子项目文件保护:子项目内部的文件布局是开发者有意图的设计,不纳入扫描。file-tidy v2 基于结构感知(学习目录指纹判断归属),不会按扩展名强制归类,子项目天然受保护。
- 判断标准:目录含 CLAUDE.md / package.json / .git / setup.py 等标识符的,即为独立子项目,完全跳过其内部文件整理。
- 子目录中只有明确的临时垃圾(文件名含
temp、_tmp_、GitHub API 无意义哈希名等)才标记建议删除。
- 将 file-tidy 输出的四档计划(建议删除 / 高置信度移动 / 需确认 / 未归类)嵌入第五步变更摘要。用户确认后,再次调用
file-tidy(args 为 --confirm --dir <项目根目录> 或 --safe --dir <项目根目录> 仅动高置信度项)执行实际整理。
- 错误复盘:调用
debug-architect skill(Skill 工具,skill 名 debug-architect),扫描增量 sessions 中的报错信号,分析根因并生成预防建议。将结果嵌入第五步变更摘要的"错误复盘"段落。
第四步:自检清单
所有写入完成后,逐项检查。哪条打不了勾就回去补。
分层正确性:
完整性:
质量:
权限审查:
自我反思:
收尾:
第五步:变更摘要
在所有操作完成后,给用户简洁报告:
## 全局整理完成(2026-05-17)
数据源: 本地 session JSONL(`~/.claude/projects/<project>/<sessionId>.jsonl`)+ `history.jsonl` 索引
### 全局层
- 新增:~/.claude/CLAUDE.md — "所有 Maven 项目用阿里云镜像"
- 更新:全局 MEMORY — 用户画像(补充了偏好 IDE 快捷键)
### 项目层:D:\MyAIWorkspace
- 新增:CLAUDE.md — 新增 skill 安装路径规则
- 新增:memory/skill-creation-pattern.md — skill 创建流程偏好
### 项目层:D:\MyAIWorkspace\school\lab3
- 无变更
### 子项目层
- 更新:project1/复盘agent memory — PyInstaller 打包注意事项
### 权限白名单
- L1 保守:已添加 Git 只读 + 文件只读 — 10 条规则
- L2 适中:已添加 Git 写入 + 文件写入 — 15 条规则
- 启用了:L1+L2
### 建议删除
- memory/old-api-config.md — 引用的 API 地址已失效,内容为空
- MEMORY.md 中死链接:xxx.md → 文件不存在
### 文件系统整理
[file-tidy 输出的四档计划:建议删除 / 高置信度移动 / 需确认 / 未归类]
### 错误复盘
[debug-architect 输出的错误分析结果]
### 记忆画像更新
- [关联] lab3 MySQL 编码问题 ↔ project1 bat 编码问题 — 根因相同:Windows GBK
- [推测] 用户可能在准备考试(近期提及频率增加)
- [变化] 用户从偏好长回复 → 偏好简短(最近 3 次对话)
### 经验发现
- 建议创建 skill:ssm-crud-generator — 3 次出现增删改查生成模式
- 建议添加通用警告:Windows 脚本编码一律用 ASCII — 跨 2 个项目
### 系统改进建议
- 全局 CLAUDE.md 建议新增:"编码类任务必须先规划再动手"
- 项目 CLAUDE.md 建议新增:skill 安装路径规则
- 以上建议是否实施?
### 自我改进
- 本次 2 次分层偏全局(session X、Y),建议收紧全局偏好判定
- 规则变更:[具体建议] — 是否应用?
### 需用户确认
- 发现全局 settings.json 中 ANTHROPIC_MODEL 值在两个项目中不一致,当前分别设为 X 和 Y,以哪个为准?
只列有实际变更的项。没动的不写。不出现在摘要中的段落直接省略(比如没有经验发现就不输出"经验发现"段落)。遇到无法自动判断的矛盾或过期内容,列在"需用户确认"。扫描到的可删内容列在"建议删除"。
- 推测标注
[推测],与事实区分
- 经验必须 ≥2 次重复,单次不列
- 系统改进建议展示后等用户确认
- 自我改进必须用户确认才能改 SKILL.md
- 自我改进时遵循记忆 skill 融入原则:不管是改自己的 SKILL.md 还是改其他 skill,加内容→融入而非追加(更新原处),删内容→整理周边(清理死链、合并残篇、检查孤立条目),改完后完整自检一遍受影响的结构
特殊情况
首次运行无时间戳:提示用户选择回溯范围。首次整理完成后创建 .last-weaver。
增量为零:报告无新内容并退出。不强制运行。
某层目标位置不存在:项目没有 CLAUDE.md 或 MEMORY.md?判断是否需要创建(见第三步)。不需要则跳过并在摘要中备注。
两个项目对同一事实有矛盾记录:以最新对话为准。如果对话中没有明确倾向,列到"需用户确认"。
sessions 文件读取失败:跳过该文件,在摘要末尾列出跳过的文件清单。
全局 CLAUDE.md 不存在:如果用户有跨项目的核心原则需要记录,创建它。如果本增量没有值得进全局 CLAUDE.md 的内容,不创建。
优化建议(视情况,不强制):整理完成后,如果发现以下情况,在摘要末尾提一句建议:
| 条件 | 建议 |
|---|
| 同一层同类记忆 > 3 条分散在不同文件 | "要不要合并成一个文件?" |
| 某文件只剩一条孤立内容 | "X 文件只剩一条,要不要合并到 Y?" |
| 发现明显结构改进机会 | 简短提及,让用户决定 |
不超过 3 条、无明显改进空间 → 不说,不增加对话噪音。