# Inbox Triage

> TRIGGER: inbox-triage, 查收inbox, inbox分拣, inbox triage, 处理inbox. 扫描 inbox/ 目录，AI 分类每个文件，展示分拣计划，询问是否创建新项目目录， 执行文件移动并验证结果。适用于定期清理 inbox 的完整分拣流程。

- Skill: `charpup/inbox-triage` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add charpup/inbox-triage`
- Raw SKILL.md: https://api.skillmd.com/api/skills/charpup/inbox-triage/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: charpup (https://skillmd.com/u/charpup)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/charpup/inbox-triage

---


# Inbox Triage

当此 skill 被触发时，依次执行以下四个阶段。每个阶段完成后方可进入下一阶段。

---

## Phase 1 — Scan（扫描）

1. 列出 `inbox/` 目录下的所有文件（使用 Glob 工具）。
2. 排除 `README.md`。
3. 若列表为空：输出 "✅ Inbox 已清空，无需分拣。" 并终止流程。
4. 将文件列表记录在内存中，进入 Phase 2。

---

## Phase 2 — Classify（AI 分类）

对 Phase 1 中每个文件，按以下逻辑判断分类：

### 分类规则

| 文件类型 | 判断依据 | 目标路径 |
|----------|----------|----------|
| `.md` idea 文件 | 读取文件内容，判断意图 | 见下方意图矩阵 |
| 资产文件（图片/代码/文档等） | 按优先级路由（见下方资产路由规则） | 见资产路由规则 |

### 资产路由规则（优先级顺序）

| 优先级 | 判断条件 | 目标路径 |
|--------|----------|----------|
| P1 | 文件名/内容匹配现有 `sandbox/{subdir}` 子目录关键词 | `sandbox/{subdir}/` |
| P2 | 文件属于 KB 领域（可视化 `.html`、规格 `.yaml` 等） | `knowledge-base/{domain}/` |
| P3 | 文件名匹配现有 `projects/{name}` | `projects/{name}/data/` |
| P4 | `.skill` 文件且对应 skill 已安装在 `~/.claude/skills/` | `sandbox/{name}-examine/`（若存在）或 `archive/{name}/` |
| P5 | 无明确匹配 | `archive/{filename-no-ext}/` |

### `.md` 文件意图矩阵

| 内容特征 | 目标目录 | 状态标签 |
|----------|----------|----------|
| 明确目标 + 可立项（有背景、目标、产出） | `projects/{idea名称}/` | `立项` |
| 学习 / 教程 / 研究 / 阅读笔记 | `learning/{idea名称}/` | `学习` |
| 快速实验 / 原型 / 脚本验证 | `sandbox/{idea名称}/` | `实验` |
| 想法模糊 / 仅一行描述 / 搁置 | `archive/{idea名称}/` | `搁置` |
| 已蒸馏至 KB / 已安装 / 明确的原始来源材料 | `archive/{idea名称}/` | `已归档` |

> 对于 `.md` 文件，"idea名称"取文件名去除日期前缀和扩展名，例如 `2026-03-17-build-cli-tool.md` → `build-cli-tool`。

### 输出

以 Markdown 表格展示分拣计划：

```
| 文件名 | 分类依据（一句话） | 目标路径 | 状态标签 |
|--------|-------------------|----------|----------|
| ...    | ...               | ...      | ...      |
```

---

## Phase 3 — Confirm & Scaffold（确认 + 建目录）

1. **展示 Phase 2 的分拣计划表**，询问用户：
   - "以上分拣计划是否正确？如需修改，请指出文件名和期望目标路径。"
   - 等待用户确认或修正后，更新计划，再进入 Phase 4。

2. **对目标为 `projects/` 的条目**，检查目录是否已存在：
   - **不存在** → 询问用户："是否为 `projects/{name}/` 使用 `templates/project-scaffold/` 创建项目骨架？"
     - 用户同意 → Phase 4 中复制模板并创建 `data/` 子目录。
     - 用户拒绝 → 改为归档：目标改为 `archive/{name}/`，状态标签改为 `搁置`。
   - **已存在** → 直接移入，无需建骨架。

3. **对目标为 `projects/{project}/data/` 的资产文件**，检查父项目目录是否存在：
   - 不存在 → 告知用户，询问是否建骨架（同上）或跳过该文件。

4. **对目标为 `sandbox/` 或 `knowledge-base/` 的资产文件**：仅 `mkdir -p {目标路径}` 确保目录存在，无需模板骨架，Phase 4 直接移动。

---

## Phase 4 — Execute & Verify（执行 + 验证）

### 4.1 执行顺序

按以下顺序处理每个文件：

**对 `.md` idea 文件：**
1. 若需建项目骨架：使用 Bash 将 `templates/project-scaffold/` 复制到目标目录，再创建 `data/` 子目录。
   ```bash
   cp -r "D:/Dev_Env/Claude_Code_Workspace/templates/project-scaffold/." "D:/Dev_Env/Claude_Code_Workspace/projects/{name}/"
   mkdir -p "D:/Dev_Env/Claude_Code_Workspace/projects/{name}/data"
   ```
2. 在文件头部（第一行之前）追加元数据块：
   ```
   ---
   Status: {状态标签}
   Triaged: {今日日期 YYYY-MM-DD}
   Destination: {目标路径}
   ---

   ```
3. 将修改后的文件移动到目标路径：`{目标路径}/{文件名}`。

**对资产文件：**

`mkdir -p {目标路径}` 确保目录存在（幂等安全），然后直接移动文件到目标路径。
适用于所有目标类型：`projects/{name}/data/`、`sandbox/{subdir}/`、`knowledge-base/{domain}/`、`archive/{name}/`。

### 4.2 验证

1. 列出 `inbox/` — 应仅剩 `README.md`（或空）。
2. 逐一确认每个目标文件已存在。
3. 输出摘要报告：

```
## 分拣完成 ✅

| 文件名 | 目标路径 | 状态 |
|--------|----------|------|
| ...    | ...      | ✅ 已移动 / ❌ 失败 |

Inbox 剩余文件数：0（仅 README.md）
```

若有失败项，列出原因并提示用户手动处理。

---

## 注意事项

- 所有路径均基于 workspace 根目录：`D:\Dev_Env\Claude_Code_Workspace\`
- 使用 Unix 风格路径调用 Bash（正斜杠）
- 若 inbox/ 有子目录，当作资产文件夹处理（整体移动）
- 不修改 `inbox/README.md`，永远保留在 inbox/

