Skip to content

Instantly share code, notes, and snippets.

@ThaddeusJiang
Created July 20, 2026 07:12
Show Gist options
  • Select an option

  • Save ThaddeusJiang/a2984f74560b21f7a25f632b32e93b0d to your computer and use it in GitHub Desktop.

Select an option

Save ThaddeusJiang/a2984f74560b21f7a25f632b32e93b0d to your computer and use it in GitHub Desktop.
skills/archive-chat/SKILL.md 扫描当前 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 等包装性结构。
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 等包装性结构。

Archive Chat

Overview

把当前 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 本身,不要把提示框架、上下文包装块、文件枚举块一并写入归档

When To Use

默认规则:

  • 只有当用户明确调用 archive-chat,或明确要求“归档当前 chat / 保存整段会话”时才执行。
  • 不要在普通 user message 上自动执行。
  • 执行时要扫描当前 chat 中所有 user messages,而不是只记录本轮消息。

如果用户要求改写到别的路径/格式,按用户要求偏离默认行为。

Workflow

1. 先确定当天目录

  • 先定位当前 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 之外的主工作树路径
  • 如果已经能明确当前目录就是 main checkout,可以直接使用它。
  • 根据本次归档覆盖的 chat 标题,生成一个简洁、稳定的 title slug。
  • 使用 YYYY-MM-DD-title 作为目录名。
  • 目标目录固定为:<repo-main-checkout>/_local_docs/archived-chats/YYYY-MM-DD-title/
  • 如果目录不存在,立即创建。

2. 计算消息编号 n

  • 扫描当前 chat 中的所有 user turns。
  • 按真实发送顺序,为每条 user message 分配 message-<n>
  • 归档当前 chat 时,通常从 message-1 开始连续编号。
  • 若用户要求往一个已有 archive 目录追加,再读取已有最大编号并续写。

在抽取消息正文时:

  • 只保留用户真正输入的请求、说明、问题、补充文本。
  • 去掉系统或客户端附加的包装结构。
  • 不要把下面这些内容写入消息正文,除非用户明确说这些字面内容本身就是要归档的对象:
    • Files mentioned by the user
    • 文件路径枚举块
    • <skill> ... </skill> 包裹块
    • AGENTS.md、environment context、tool context 等注入性说明

3. 先保存图片

如果某条 user message 包含图片:

  • 每张图片使用同一个消息编号 n
  • 图片序号 m1 开始递增。
  • 文件名格式必须是: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"

4. 更新 readme.md

  • 如果 readme.md 不存在,创建它。
  • 一次归档当前 chat 时,默认直接生成完整的 readme.md
  • readme.md 的第一行必须是目录名标题:# YYYY-MM-DD-title
  • 每条消息使用二级标题:## message-<n>
  • 如果本条消息含图片,先在该条记录中使用 Markdown 图片语法引用对应文件。
  • 然后使用 ```md 代码块记录消息正文。
  • 图片引用应使用相对 readme.md 的相对路径,优先写成 ![](./message-<n>-<m>.<ext>)

推荐格式:

# 2026-06-02-voice-radar

## message-1
```md
<用户消息原文>

message-2

<用户消息原文>

### 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 描述和操作说明使用中文。
- 除非用户另有要求,目录与文件名保持英文和数字格式。
- 不额外引入数据库、服务端或复杂索引;保持为简单文件归档。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment