# Siyu Save

> 把当前私域咨询的关键结论写入本地客户档案，供下次接续或汇总报告。 触发方式：/siyu-save、/存档、「保存」「记下来」「这个结论留着」；支持 list 和 --client。

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

---


# siyu-save：客户档案存档

把当前对话里已经形成的客户主诉、结论、否决方向、待验证假设和下一步，写成结构化 markdown 文件。默认只保存结构化结论，不复制完整对话；只记录，不重新诊断。

## 两种状态不要混用

- `.siyu-team/runs/{run_id}/`：一次总协调安排的运行中状态，用来隔离续跑，完成后原样保留。
- `~/.siyu/clients/`：跨对话长期累积的客户档案。

编排完成后可把结论沉到客户档案；两者不互相替代，也不要把客户档案写进仓库。

## 用户措辞

对用户只说「客户档案」「存档」「对话」，不说 slug、snapshot、session。路径和 frontmatter 字段仅作技术标识。

## 触发方式

| 命令 | 行为 |
|---|---|
| `/siyu-save` | 从当前对话提取结构化结论，自动提取标题 |
| `/siyu-save <标题>` | 使用指定标题 |
| `/siyu-save --client <客户> [标题]` | 保存到指定客户档案 |
| `/siyu-save list [客户]` | 只列档，不写文件 |

## 工作流程

### 1. 判断是否值得存

先检查对话里是否已有诊断结论、执行产物、否决方向或待验证假设。只有一句「保存」且前面没有有效内容时，拒绝写空文件：

> 现在没有可存的结论。先完成一次具体任务或诊断，再来存档。

### 2. 确定客户和标题

- 客户目录默认取当前目录名，归一化为小写字母、数字和连字符；没有明确客户或位于家目录时用 `default`。
- 用户传了 `--client` 时优先使用，并把不安全字符替换为 `-`，禁止 `..`、路径分隔符和越出 `~/.siyu/clients/`。
- 标题优先用用户指定值，否则从对话提取不超过 20 字的名词短语。

跟用户说「客户」，不要说内部目录标识。此时只在内存中准备标题和内容，还不创建目录或文件。

### 3. 生成结构化草稿与敏感信息预览（写盘前）

先在内存中生成本页第 6 步的结构化草稿。只提取支撑后续接续的最少信息：主诉摘要、经营画像、已确认结论、否决方向、待验证假设、下一步和必要备注。

默认不进入草稿的内容：

- 完整对话、逐字稿和整段原始用户输入；
- 系统或开发者指令、Trace、官员原始输出和调试信息；
- 外部文档全文、无关联系人信息和不影响结论的经营明细。

对草稿扫描下列类别：姓名与客户标识、手机号、身份证号、邮箱、微信号、详细地址、门店或组织内部标识、精确经营数字，以及 token、API key、密码、cookie 等认证凭据。

在任何写盘之前，先向用户显示：

```text
即将存档：结构化结论（不含完整对话）
检测到 {N} 处可能的敏感信息：
| 类别 | 出现位置 | 脱敏预览 |
| ... | ... | ... |
```

预览只显示支撑判断的最少片段。手机号、证件号、邮箱和内部标识要掩码；认证凭据只显示「[凭据，已隐藏]」，不得在预览中重复完整值。如未命中，明确说「未发现常见敏感信息，不代表绝对安全」。

### 4. 等待用户选择

预览后必须停下，让用户选择：

```text
1. 脱敏后保存（推荐）
2. 原文保存
3. 取消
```

- 未收到明确选择时，不得写入、创建目录或视为默认同意。
- 选「脱敏后保存」：对预览中的敏感值做掩码、区间化或删除，再写入；不得编造替代数字。
- 选「原文保存」：仅在结构化草稿中保留预览已提示的原值，并在写入前提醒该文件是未加密本地纯文本。「原文」不代表改为保存完整对话。
- 选「取消」：立即结束，不创建任何文件或目录，只回复「已取消存档」。
- 用户修改草稿后，必须重新扫描、重新预览并重新选择。

### 5. 生成路径

```text
~/.siyu/clients/{客户目录}/{YYYYMMDD-HHMMSS}-{标题目录}.md
```

时间戳使用本地时间；ISO 时间用：

```bash
python3 -c "from datetime import datetime; print(datetime.now().astimezone().isoformat(timespec='seconds'))"
```

只有在第 4 步收到「脱敏后保存」或「原文保存」的明确选择后，才能创建目录。同一秒同名时追加 4 位随机后缀，永不覆盖已有文件。

### 6. 写入固定格式

```markdown
---
client: {客户目录}
timestamp: {ISO 8601 带时区}
title: {标题原文}
source_skill: {本次主要走过的 skill，多个用逗号分隔}
status: {in-progress | resolved | abandoned}
next_skill: {推荐下一步，不确定就留空}
industry: {catering | retail | edu | ...，可为空}
stage: {cold | growth | mature，可为空}
business_model: {direct | franchise | mixed，可为空}
stores: {门店数，可为空}
org_layers: {none | regional，可为空}
private_channel: {企微 | 个微导购 | 小程序会员 | 社群，可为空}
content_scope: structured_conclusions
privacy_mode: {redacted | original}
sensitive_categories: [{只写类别，不写原始值}]
compliance_flags: []
---

## 客户主诉
{按 privacy_mode 处理后的 1—2 句结构化摘要}

## 经营画像
- 行业及子类：{...}
- 经营模式：{直营 / 加盟 / 混合}
- 门店数：{数字或档}
- 分公司或区域层：{有 / 无}
- 私域主载体：{企微 / 个微导购 / 小程序会员 / 社群}
未知项写「未记录」，不要猜。

## 已得出的结论
- {一句话一个结论}

## 已否决的方向
- {方向} —— {否决理由}

## 待验证假设
- {假设}

## 推荐下一步
{做什么、为什么、对应哪个 skill，一段话}

## 备注
{只记影响判断的关键转折和怀疑，不粘贴完整对话}
```

没有否决方向或假设时写「（暂无）」。`status` 不确定时用 `in-progress`；`next_skill` 不确定时留空，不能猜。`privacy_mode` 必须与用户选择一致；`sensitive_categories` 只记扫描类别，不重复敏感值。

### 7. 一行回执

> 已存档：{路径}。当前客户下共 {N} 份；下次输入 `/siyu-restore` 接着上次。

不复述内容，不说「保存成功」，不加感叹号。选「原文保存」且档案含敏感信息时补一句：`~/.siyu/` 是本地纯文本且未加密，请管理好本地访问权限。

## list 模式

按文件名前缀排序，输出日期、标题、中文状态和来源：`in-progress → 进行中`、`resolved → 已结论`、`abandoned → 已放弃`。没有档案时说明先完成一次任务再存档。

## 边界

- 客户档案是本地长期记录，不是 Trace、完整对话备份、公开知识库或同行贡献稿；不自动上传、分享或写入仓库。
- `~/.siyu/` 是未加密纯文本。本 skill 不主动同步；操作系统备份、云盘或其他同步工具不在本 skill 的安全边界内。
- 敏感扫描是尽力而为的辅助，不是绝对保证；写盘前必须让用户看到预览和选择。
- 「原文保存」只改变结构化草稿的脱敏方式，永不扩展为记录完整对话。
- 连续保存允许生成新文件，不能覆盖。
- 写入前解析并确认最终路径仍在 `~/.siyu/clients/` 下。
- `list` 模式只读，不进行存档、不创建文件。
- 面向用户一律中文，遵循《中文文案排版指北》。

---

## 不知道下一步用哪个 skill？

输入 `/siyu`。

这是私域工具箱的导航入口。它会读取刚才的具体结论，选择当前最值得处理的一个方向，
并直接路由到对应 skill。迷路了就回 `/siyu`。

