# Distill：工作流打包

你回顾最近的工作，识别值得打包的重复手动工作流，只将高置信度的工作流转化为可复用的资产：
技能、自定义子代理、命令或可重复执行的行动手册。

默认窗口：回顾最近 30 天的会话，如果历史记录更短则回顾全部可用历史。

此命令是手动的。用户有意启动它并在观察。
你拥有用于检查和 SQLite 查询的 bash 访问权限，但请谨慎使用。

## 数据源

按以下顺序使用可用证据：

1. 来自原始轨迹数据库的最近 mimocode+ 会话及其助手工作。这是实际发生情况的真相来源。
2. 记忆文件（项目 `MEMORY.md`、会话 `checkpoint.md`、`notes.md`、`tasks/*/progress.md`）以发现跨会话重复的模式。
3. 现有的技能、自定义代理、自定义命令和插件，以便复用或扩展现有内容而不是重复创建。

轨迹数据库：`<DATA>/mimocode.db`（SQLite，只读）
记忆文件根目录：`<DATA>/memory/`

## 基本规则

- 原始轨迹是权威来源；记忆文件是结构化的索引/缓存。
- 优先使用只读 bash 命令进行发现和 SQLite 查询。
- 不要修改 SQLite 数据库或原始轨迹。
- 广泛寻找重复的、耗时的、容易出错的、上下文繁重的或受益于一致性流程的工作。包括编码、研究、写作、规划、沟通、运维、分析和个人管理等方面的工作流。
- 默认输出紧凑的候选清单和建议。只有当证据非常充分且最小有用形式显而易见时，才创建资产。
- 不要创建推测性的、重叠的或过于宽泛的资产。
- 如果没有实际重复发生过的内容，则不要创建任何东西。零打包是有效且预期的结果；只需在摘要中说明，而不是为了证明运行合理性而制造资产。

## 阶段 0 - 定位数据

1. 使用广泛查询进行记忆搜索，例如"工作流"、"重复"、"每次"、"规则"和"决策"。
2. 使用 Glob/Read 检查系统记忆指令中的记忆路径。
3. 使用 bash 定位数据库：
   - 从解析后的记忆根目录推断 `<DATA>/mimocode.db`。
   - 如果 `MIMOCODE_DB` 在 shell 环境中可见，考虑其覆盖行为。
   - 将解析后的数据库路径视为只读。
4. 如果没有最近的项目活动且记忆为空，报告"没有需要提取的内容——未发现最近的工作流"并停止。

## 阶段 1 - 盘点现有资产

在提出任何建议之前，了解已存在的内容，以便复用或扩展现有内容而不是重复创建。

- 技能：在项目的 `.mimocode/` 目录、任何配置目录以及主目录外部目录（`.claude`、`.agents`、`.codex`、`.opencode`）下使用 Glob 查找 `{skill,skills}/**/SKILL.md`。读取每个技能的名称和描述。
- 自定义命令：在配置目录下使用 Glob 查找 `{command,commands}/**/*.md`。
- 自定义代理：在配置目录下使用 Glob 查找 `{agent,agents}/**/*.md` 和 `{mode,modes}/*.md`。
- 插件：使用 Glob 查找 `.mimocode/plugin*/**` 以发现现有的自动化钩子。

记录每个资产已经覆盖的内容。已被现有资产处理的候选者属于"扩展现有"或"跳过"，而不是新资产。

## 阶段 2 - 从记忆中发现重复工作流

扫描最近的记忆工件以发现重复的流程：

1. `checkpoint.md` 文件：重复出现的任务形态、重复的命令序列、重复的调试或设置步骤。
2. `tasks/*/progress.md`：跨任务重复出现的多步骤流程。
3. `notes.md` 和 `MEMORY.md` 的 `## Patterns` / `## Rules`：明确记录的重复问题和已声明的约定。

优先关注最近的和重复出现的信号，而不是详尽地读取。

## 阶段 3 - 对照原始轨迹确认

使用 bash 配合 SQLite 只读查询来确认候选内容与实际发生的情况是否一致。

- `session`：项目/会话/目录/标题/时间元数据。
- `message`：用户和助手的对话轮次。
- `part`：文本片段、工具调用、工具结果。
- `task` 和 `task_event`：任务状态和进度事件。
- `actor_registry`：子代理/后台参与者历史。

模式说明：

- `message(id, session_id, agent_id, time_created, data JSON with $.role)`
- `part(id, message_id, session_id, time_created, data JSON)`
- 片段类型包括 `{"type":"text","text":"..."}`、`{"type":"tool","tool":"...","state":{"input":...,"output":...}}` 以及步骤边界。
- 空的 `agent_id` 表示主代理；非空的 `agent_id` 表示子代理。

查找最近会话中重复工具/命令使用情况的查询模板：

```sql
SELECT json_extract(p.data, '$.tool') as tool,
       substr(json_extract(p.data, '$.state.input'), 1, 200) as input_preview,
       count(*) as n
FROM message m
JOIN part p ON p.message_id = m.id
WHERE json_extract(m.data, '$.role') = 'assistant'
  AND json_extract(p.data, '$.type') = 'tool'
  AND m.time_created > <CUTOFF_MS>
GROUP BY tool, input_preview
ORDER BY n DESC
LIMIT 50;
```

在用户轮次中有用的搜索包括关键词如"再次"、"每次"、"像上次一样"、"老样子"、"重复"、"和之前一样"。当轨迹显示用户使用其他语言工作时，也搜索该语言的等效关键词。同时寻找重复的命令序列、重复的文件路径以及重复的错误/修复循环。

一个候选只有当它至少发生过两次，或者明显可能再次发生且重复代价高昂时，才是真实的。

## 阶段 4 - 候选清单

生成一个紧凑的候选清单。对每个候选包括：

- 重复的工作流（一行）
- 支持性证据和日期（引用会话 ID `[ses_xxx]`）
- 频率/置信度
- 推荐形式：技能、子代理、命令、自动化、扩展现有或跳过
- 为什么值得或不值得创建

只有当候选满足以下条件时才保留以采取行动：

- 至少发生过两次，或者明显可能再次发生且重复代价高昂；
- 有稳定的输入、可重复的流程以及清晰的输出或停止条件；
- 能够显著提升速度、质量、一致性或可靠性；
- 尚未被现有资产充分覆盖。

## 阶段 5 - 选择最小形式

对每个高置信度的候选，选择最小的合适形式：

- 技能 - 可复用的工作流或行动手册。在项目 `.mimocode/skills/<name>/` 目录下编写带有 YAML 前置元数据（`name`、`description`）的 `SKILL.md`。使用聚焦的、命令式的描述以便被发现。
- 自定义子代理 - 适合委托的有边界的专家角色或调查任务。编写 `.mimocode/agent/<name>.md`，包含前置元数据（`description`、可选的 `mode`、`model`、`tools`/权限）以及作为正文的系统提示。
- 命令 - 针对重复性任务的参数化提示。编写 `.mimocode/command/<name>.md`，包含前置元数据（`description`、可选的 `agent`）以及使用 `$ARGUMENTS` / `$1` 占位符的模板正文。
- 自动化 - mimocode+ 没有内置调度器。将重复性工作打包为用户可重新运行的命令，或者仅在明确合理的情况下，作为 `.mimocode/plugins/` 下的插件生命周期钩子。不要发明调度器。如果确实需要定时调度，推荐并解释改为手动触发。
- 扩展现有 - 编辑现有的技能/代理/命令，而不是添加近乎重复的内容。
- 跳过 - 过于一次性、模糊、敏感或证据不足而无法打包的工作。

## 阶段 6 - 创建和验证

只创建高置信度且缺失的项。保持它们专注、实用、知晓来源且易于验证。

- 写入项目的 `.mimocode/` 目录，除非用户要求全局范围。
- 复用项目现有的约定和语气；与已有同类资产的结构匹配。
- 保持每个资产专注于一个工作流，并有清晰的停止条件。
- 编写后，使用 Glob 验证引用的文件路径，使用 Grep 验证引用的函数/类名。
- 不要创建账户、发送消息、更改权限或采取任何不可逆的外部操作；资产仅描述流程。

## 输出格式

返回一个简要摘要：

- 候选清单：考虑的候选，附带证据、频率/置信度和推荐形式。
- 已创建或已扩展：编写的资产，包含路径和一行目的说明。如果没有符合条件的，说"未创建任何内容——没有值得打包的重复工作流"，这是一个完整且成功的结果。
- 已跳过：你特意没有打包的内容及其原因。
- 需要更多证据：看起来有希望但缺乏重复证据、稳定输入或清晰停止条件的候选。