| name | archive-chat |
|---|---|
| description | 扫描当前 chat 中所有 user messages,并把整段对话按时间归档到当前 repo 的 main checkout 下的 ./_local_docs/archived-chats/YYYY-MM-DD-title/ 目录。图片使用 cp 复制到归档目录,命名为 message-<n>-<m>.<ext>;readme 一级标题使用目录名,每条消息正文使用 ```md 包裹,附件展示在正文上方。归档时只忠实记录用户真正的 message 内容,不要抄入 skill、AGENTS.md、Files mentioned by the user 等包装性结构。 |
把当前 chat 中的所有 user messages 一次性归档到当前 repo 的 main checkout,形成可追溯的会话档案。
核心要求:
- 只有在用户明确调用这个 skill 时才执行,不再自动触发。
- 执行时应扫描当前 chat 中所有 user messages,并按消息真实发送时间整理。
- 每次归档使用独立目录:
<repo-main-checkout>/_local_docs/archived-chats/YYYY-MM-DD-title/ - 文本记录到:
<repo-main-checkout>/_local_docs/archived-chats/YYYY-MM-DD-title/readme.md - 图片保存到同一目录,文件名格式:
message-<n>-<m>.<ext> - 图片不是只记录文件名,而是要真的复制到 repo main checkout 的归档目录
- 目录名中的
title使用当前 chat 标题或一个稳定、可读、ASCII 的 slug readme.md的一级标题应为目录名,格式# YYYY-MM-DD-title- 每一条消息正文都必须使用 fenced code block,语言标记为
md - 如果消息包含附件,附件应展示在该条
md代码块上方 readme.md中应使用 Markdown 图片语法展示图片- 归档时只保留用户 message 本身,不要把提示框架、上下文包装块、文件枚举块一并写入归档
默认规则:
- 只有当用户明确调用
archive-chat,或明确要求“归档当前 chat / 保存整段会话”时才执行。 - 不要在普通 user message 上自动执行。
- 执行时要扫描当前 chat 中所有 user messages,而不是只记录本轮消息。
如果用户要求改写到别的路径/格式,按用户要求偏离默认行为。
- 先定位当前 repo 的 main checkout path,不要把归档写到当前 worktree 或临时 checkout。
- 优先使用 git 元数据解析 main checkout:
- 普通 checkout:
git rev-parse --show-toplevel - worktree:先读取
git rev-parse --git-common-dir,再结合git worktree list --porcelain找到标记为bare之外的主工作树路径
- 普通 checkout:
- 如果已经能明确当前目录就是 main checkout,可以直接使用它。
- 根据本次归档覆盖的 chat 标题,生成一个简洁、稳定的
titleslug。 - 使用
YYYY-MM-DD-title作为目录名。 - 目标目录固定为:
<repo-main-checkout>/_local_docs/archived-chats/YYYY-MM-DD-title/ - 如果目录不存在,立即创建。
- 扫描当前 chat 中的所有 user turns。
- 按真实发送顺序,为每条 user message 分配
message-<n>。 - 归档当前 chat 时,通常从
message-1开始连续编号。 - 若用户要求往一个已有 archive 目录追加,再读取已有最大编号并续写。
在抽取消息正文时:
- 只保留用户真正输入的请求、说明、问题、补充文本。
- 去掉系统或客户端附加的包装结构。
- 不要把下面这些内容写入消息正文,除非用户明确说这些字面内容本身就是要归档的对象:
Files mentioned by the user- 文件路径枚举块
<skill> ... </skill>包裹块AGENTS.md、environment context、tool context 等注入性说明
如果某条 user message 包含图片:
- 每张图片使用同一个消息编号
n。 - 图片序号
m从1开始递增。 - 文件名格式必须是:
message-<n>-<m>.<ext> - 扩展名
ext使用图片原始格式;若无法判断,再根据可用信息选择最合理的扩展名。 - 必须把原始图片文件真实复制到当天目录,不要只在文档里写文件名或原路径。
- 复制图片时优先使用
cp。 - 图片保存路径示例:
<repo-main-checkout>/_local_docs/archived-chats/2026-06-02-voice-radar/message-3-1.png
推荐方式:
cp "<source-image-path>" "<repo-main-checkout>/_local_docs/archived-chats/2026-06-02-voice-radar/message-3-1.png"- 如果
readme.md不存在,创建它。 - 一次归档当前 chat 时,默认直接生成完整的
readme.md。 readme.md的第一行必须是目录名标题:# YYYY-MM-DD-title- 每条消息使用二级标题:
## message-<n> - 如果本条消息含图片,先在该条记录中使用 Markdown 图片语法引用对应文件。
- 然后使用
```md代码块记录消息正文。 - 图片引用应使用相对
readme.md的相对路径,优先写成。
推荐格式:
# 2026-06-02-voice-radar
## message-1
```md
<用户消息原文><用户消息原文>
### 5. 完成归档后再继续处理用户请求
完成 archive 后,再继续执行用户当前真正的任务。不要把归档拖到任务结束后再做。
## Recording Rules
- 记录内容以用户原始消息为准,不要改写语义。
- 可以做最小必要的格式整理,但不要删减关键信息。
- 这里的“用户原始消息”指用户真正表达的正文,不包含聊天系统自动拼接的元数据或包装模板。
- 若消息是多段文本,按原有段落写入 ` ```md ` 代码块。
- 若消息只有图片没有文字,也要创建 `## message-<n>`,先展示图片,再用 ` ```md ` 写明该消息包含图片。
- 若消息同时包含文本和图片,文本与图片都记录在同一条 `message-<n>` 下。
- 不要记录 `Files mentioned by the user` 这种结构。
- 不要记录文件路径清单,除非这些路径本身是用户消息语义的一部分。
- 不要记录 `<skill> ... </skill>`、`AGENTS.md`、环境信息、图片挂载描述等系统包装内容。
- 图片展示应只引用复制后的本地文件,不需要把源路径抄进消息正文。
- 若某张图片由于权限或源路径缺失无法复制,应在对应 `md` 代码块中明确记录原因。
- 不要把 assistant 的回复写入这个日志,除非用户明确要求。
## Minimal Checklist
每次触发后自检:
- 是否确认这是一次用户显式调用,而不是自动触发
- 是否已扫描当前 chat 中所有 user messages
- 是否已先解析出 repo 的 main checkout path
- 是否已定位到 `<repo-main-checkout>/_local_docs/archived-chats/YYYY-MM-DD-title/`
- 是否已在目录不存在时创建目录
- 是否正确计算 `message-<n>`
- 是否已用 `cp` 把每条消息里的图片复制到归档目录
- 是否更新了 `readme.md`
- 是否将标题写为 `# YYYY-MM-DD-title`
- 是否图片命名符合 `message-<n>-<m>.<ext>`
- 是否将附件放在 `md` 代码块上方
- 是否每条消息正文都使用了 ` ```md ` 包裹
- 是否在 `readme.md` 中使用了 Markdown 图片语法
- 是否在归档完成后才继续处理其他任务
## Output Constraints
- skill 描述和操作说明使用中文。
- 除非用户另有要求,目录与文件名保持英文和数字格式。
- 不额外引入数据库、服务端或复杂索引;保持为简单文件归档。