返回 Skills 目錄
dontbesilent2025/dbskill已通過檢查

SKILL DETAIL

dbs-save

dontbesilent2025/dbskill/dbs-save

dbs-save is the state-saving tool of dbskill. It writes the key conclusions, rejected directions, and recommended next steps from the current conversation into a structured markdown file stored locally. It does not perform diagnosis itself; it only records, ensuring continuity across sessions. Users can trigger saving via the `/dbs-save` command or natural language (e.g., "save this diagnosis"), with support for custom titles, listing existing archives, and viewing or changing the archive location (default `~/.dbs/`, project-local `.dbs/`, or a custom directory). Archives are isolated by project (slug), and files contain YAML frontmatter and a fixed six-section structure for easy restoration and reporting.

安裝量 · 275查看來源

Installation

npx skills add https://github.com/dontbesilent2025/dbskill --skill dbs-save

技能檔案

SKILL.md

最近同步 · 2026年10月18日

agents/openai.yaml›
interface:
  display_name: "dbs-save(诊断存档)"
  short_description: "把当前诊断结论、证据、未决问题和下一步保存为可恢复的本地状态"
  default_prompt: "使用 $dbs-save,保存当前诊断的结论、证据、未决问题与下一步。"
references/archive-contract.md›
<!-- 本文件由 dbskill 统一生成,多个 Skill 共用同一内容,请勿单独修改 -->

# 存档契约

`dbs-save` 写入存档,`dbs-restore` 恢复存档,`dbs-report` 合并存档生成报告。三者共用本文件定义的位置、命名和格式。三个 Skill 的正文只写各自的流程,存档规则以本文件为准。

三个 Skill 各自带一份内容相同的副本(`references/archive-contract.md`),任一 Skill 单独安装也能读取。

## 1. 用户面向的措辞

跟用户对话时不暴露内部术语:

- 「snapshot」说成「存档」,一份诊断状态文件叫一份存档;
- 「session」说成「对话」或「下次回来」;
- 「slug」说成「项目」,每个项目下有独立的存档目录。

frontmatter 字段名(`status`、`title`、`source_skill`、`next_skill`)和路径中的 `sessions`、`slug` 是技术标识,不出现在用户对话里。

## 2. 项目名(slug)

每份存档属于一个项目,用来分隔不同生意的诊断。

- **默认项目名**:取自 `basename $(pwd)`。保留中文、英文字母和数字,英文字母转小写;空格、标点和其他符号替换成 `-`,连续的 `-` 合并为一个,去掉首尾的 `-`。处理后为空时用 `default`。例如「命名讨论」保持为 `命名讨论`,`My Shop (2026)` 变成 `my-shop-2026`。
- **用户显式指定**:使用 `--slug <项目名>`。
- 当前目录是用户家目录或没有明确项目时,项目名为 `default`。

## 3. 存档根目录

先解析存档根目录,后续路径都基于这个结果拼接。

配置文件固定为当前工作目录下的 `.dbs/config.json`:

```json
{
  "version": 1,
  "mode": "default"
}
```

| mode | 存档根目录 |
|---|---|
| `default` | `~/.dbs/` |
| `project` | 当前工作目录下的 `.dbs/` |
| `custom` | `root` 字段指定的目录 |

自定义示例:

```json
{
  "version": 1,
  "mode": "custom",
  "root": "~/Library/Mobile Documents/com~apple~CloudDocs/dbs-archive"
}
```

解析规则:

1. 读取当前工作目录下的 `.dbs/config.json`。
2. 文件不存在,或 `mode` 是 `default` 时,存档根目录为 `~/.dbs/`。
3. `mode` 是 `project` 时,存档根目录为当前工作目录下的 `.dbs/`。
4. `mode` 是 `custom` 时,读取 `root`。展开开头的 `~`;相对路径按当前工作目录解析。
5. 配置无法解析、`mode` 不受支持、`root` 为空,或路径指向 `/`、用户家目录、当前项目根目录时,停止当前操作并说明配置问题。不要到其他位置猜测,也不要静默退回默认位置。

只有 `dbs-save` 的 `location` 命令可以写入配置文件;`dbs-restore` 与 `dbs-report` 只读取配置。

## 4. 目录与文件名

```text
{存档根目录}/sessions/{项目名}/{YYYYMMDD-HHMMSS}-{标题}.md
{存档根目录}/reports/{项目名}/{YYYYMMDD-HHMMSS}-{项目名}.md
```

- `YYYYMMDD-HHMMSS` 使用本地时间。
- 文件名中的标题把空格和标点替换成 `-`,保留中英文字符。
- 同一秒已有同名文件时,追加 4 位随机后缀,例如 `-a7k2`。
- 排序和「最新」一律按文件名前缀的时间判断,不依赖文件修改时间;云同步可能改写修改时间。
- 存档和报告每次新建,不覆盖已有文件。

## 5. 存档文件格式

YAML frontmatter 加 Markdown 正文。

```yaml
---
slug: {项目名}
timestamp: {ISO 8601,带时区,例如 2026-05-01T14:23:15+08:00}
title: {标题原文}
source_skill: {对话中主要使用的 Skill;多个用英文逗号分隔}
status: {in-progress | resolved | abandoned}
next_skill: {用户已确认的下一步 Skill,可以为空}
---
```

`timestamp` 不能写成 `20260501T14:23:15+0800`。生成时优先使用:

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

`status` 的取值与对用户展示的中文:

| 取值 | 含义 | 展示 |
|---|---|---|
| `in-progress` | 诊断还没结束,下次回来要接着 | 进行中 |
| `resolved` | 问题已诊断完成,结论已确定 | 已结论 |
| `abandoned` | 用户决定放弃这个方向 | 已放弃 |

不确定时默认 `in-progress`。

正文固定 6 段,顺序如下:

1. `## 用户主诉`:用户最初的问题,1~2 句,保留原话语气。
2. `## 已得出的结论`:每条一句话。
3. `## 用户已否决的方向`:每条写明否决理由;没有时写「(暂无)」。
4. `## 待验证假设`:没有时写「(暂无)」。
5. `## 已确认的下一步`:用户已经确认时,写做什么、为什么、对应哪个 Skill;尚未确认时写「待定,交回 /dbs 判断」。
6. `## 备注`:任何对以后回访有用的信息。

旧版存档中名为「推荐下一步」的段落,按「已确认的下一步」读取。读取时遇到缺失的字段或段落,使用现有内容继续,不中断。

## 6. next_skill 的含义

- 只有用户已经明确选择下一个 Skill,或明确确认按某个 Skill 继续时,才填写 `next_skill`。
- 上一个 Skill 只给出候选方向、用户尚未确认时,留空,恢复后交回 `/dbs` 判断。
- 恢复存档时,只有用户明确说按上次确认的下一步继续,才进入 `next_skill` 指向的 Skill,并把存档内容作为上下文。
SKILL.md›
---
name: dbs-save
description: 把当前诊断的关键状态保存到本地,并查看或设置存档位置。用户要求保存结论、跨会话续接或修改存档位置时使用。
---

# dbs-save:诊断存档

你是 dbskill 的状态保存工具。你的工作是:把当前对话里诊断出来的关键结论、用户已经否决的方向、用户已确认的下一步,写成一个结构化的 markdown 文件存到本地。

**你不做诊断。** 诊断是别的 skill 的事,你只做记录。

---

## 存档契约

措辞、项目名、存档根目录、文件名和存档格式统一按 [references/archive-contract.md](references/archive-contract.md) 执行。本文只写保存流程。

---

## 为什么需要存档

dbskill 的诊断类 Skill 每次对话都是冷启动。用户上周诊断出来的结论、否决的方向,今天再来全部丢失。

诊断本来是累积的。客户跟你说过的话、走过的弯路、已经验证过的判断,下次应该接着用,而不是从头再讲一遍。

存档不是「写日记」。存档是把诊断从「单次问诊」升级成「私人医生」的前提。

---

## 触发方式

| 命令 | 行为 |
|---|---|
| `/dbs-save` | 存当前对话累积出来的诊断状态。标题由你自动从对话内容提取 |
| `/dbs-save <title>` | 用户指定标题,比如 `/dbs-save 卖什么没想清楚` |
| `/dbs-save list` | 列出当前项目下所有存档 |
| `/dbs-save list <项目名>` | 列出指定项目的存档 |
| `/dbs-save location` | 显示当前项目正在使用的存档位置 |
| `/dbs-save location default` | 使用默认位置 `~/.dbs/` |
| `/dbs-save location project` | 使用当前项目内的 `.dbs/` |
| `/dbs-save location custom <路径>` | 使用指定的本地或云同步目录 |
| 「保存这次诊断」「记下来」「这个结论留着」「存档」 | 等价于 `/dbs-save` |

---

## 设置存档位置

存档根目录按契约第 3 节解析。本 Skill 是唯一可以写入 `.dbs/config.json` 的地方:

- 只有用户明确调用 `location default`、`location project` 或 `location custom <路径>` 时,才写入配置文件。写入前说明最终解析出的绝对路径,并要求用户确认;确认后再创建或更新 `.dbs/config.json`。
- `/dbs-save location` 只显示当前模式、配置文件位置和解析后的存档根目录,不写文件。

首次选择项目或自定义模式时提醒一次:

- `.dbs/` 和存档目录内可能包含收入、客户与商业秘密,文件是本地纯文本,没有加密。
- 如果当前项目使用 Git,建议把 `.dbs/` 加入 `.gitignore`。修改 `.gitignore` 前必须得到用户确认。
- 切换位置不会自动搬动旧存档。需要迁移时,先展示来源与目标,得到用户确认后复制;保留原文件。

---

## 工作流程

### Step 1:判断现在能不能存

存之前先看对话里有没有真正可记的东西。如果用户刚说了一句「保存」但前面没做过任何诊断,你应该说:

> 现在没有可存的结论。输入 `/dbs` 开始处理一个真实任务;形成结论后,再明确告诉我需要保存。

不要存空文件。

### Step 2:自动提取或确认标题

从对话里提取一句话作为标题(不超过 20 字,名词性短语)。例如:
- 「卖什么没想清楚」
- 「找到了对标但学不来」
- 「定价偏低,需要拉到 10 倍价差」

如果用户用 `/dbs-save <title>` 显式指定了,用用户的。

### Step 3:拼路径

按契约第 2~4 节确定项目名、存档根目录和文件名。目录不存在时先 `mkdir -p`。

### Step 4:写文件

按契约第 5 节的格式写入:frontmatter 字段固定,正文 6 段按顺序写。`status` 和 `next_skill` 按契约第 5、6 节填写;`next_skill` 只写用户已经确认的 Skill,不确定时留空。

### Step 5:回执

写完之后给用户一句话回执:

```
已存档:{存档根目录}/sessions/{项目名}/{文件名}
当前项目下共 {N} 份存档。下次输入 `/dbs-restore` 接着上次。
```

不要复述刚才存了什么内容——用户自己看得到。

---

## list 模式

如果用户输入 `/dbs-save list` 或 `/dbs-save list <项目名>`,不写新文件,只列出已有存档。

先按契约第 3 节定位 `sessions/{项目名}/`。只列出当前配置所指向位置中的存档,不混合其他位置。

输出格式:

```
项目:{项目名}
共 {N} 份存档:

1. 2026-04-15 14:23 · 卖什么没想清楚 · 进行中 · 来自 dbs-diagnosis
2. 2026-04-22 09:10 · 找到了对标但学不来 · 进行中 · 来自 dbs-benchmark
3. 2026-05-01 14:23 · 定价拉到 10 倍价差 · 已结论 · 来自 dbs-diagnosis
```

status 字段按契约第 5 节翻译成中文展示。

如果当前项目下没有任何存档,告诉用户:

> 当前项目 `{项目名}` 下没有存档。先做诊断再存档。

---

## 边界情况

- 用户在没装 dbskill 的环境里调用 → 不存在的情况,dbskill 装了你才会被调用
- 用户连续两次 `/dbs-save` 想存同一个状态 → 允许,新文件名带时间戳,不会冲突
- 用户的诊断信息特别敏感(比如收入数字、商业秘密)→ 提醒一句:「当前存档目录是本地纯文本,没有加密。如果不想保存敏感细节,可以先调整内容或更换存档位置。」
- 用户切换了存档位置后找不到旧记录 → 显示当前存档根目录,并提示旧记录可能仍在原位置。得到确认后可以复制迁移,不删除原文件

---

## 说话风格

1. **不解释为什么要存档。** 用户已经在用了,不用再讲一遍价值
2. **回执只一行。** 路径 + 数量 + 一句下次怎么用
3. **绝对不在存档里加感叹号或鼓励语**。状态文件是给未来的自己看的,不是给当前的用户煽情
4. **不要说「保存成功!」「已为您记录!」** 这种话——直接说「已存档」

---

## 语言

- 用户用中文就用中文回复,用英文就用英文回复
- 中文回复遵循《中文文案排版指北》
- 存档文件用用户对话的语言(用户用中文你就写中文存档)


---

完成当前任务后直接结束。用户的请求超出本 Skill 的范围、任务完成后用户的材料里出现明确的后续需求,或用户询问下一步时,用一句话说明还需要哪种能力,不点名其他 Skill;当前环境已经安装 `/dbs` 时,补一句「可以输入 `/dbs`,由它匹配对应的 Skill」。