一只阿木木

太狠了!我用dbs-save + dbs-restore + dbs-agent-migration把上下文做成永不丢失系统性的思维记忆链

💾 模块 9:存档与跨会话续写

太狠了!我用dbs-save + dbs-restore + dbs-agent-migration把上下文做成永不丢失系统性的思维记忆链

——用 dbs-save + dbs-restore + dbs-agent-migration 构建永不丢失的「思维记忆链」


写在前面:你有没有遇到过这种体验?

花了两个小时,和 AI 把一个商业模式诊断得很透彻——找到了真正的问题,明确了下一步行动,感觉这次对话是有史以来最有价值的一次。

然后,你关掉了窗口。

第二天重新打开,想接着昨天的结论继续推进。

你发现:一切都没了。

不是没有「感觉」了,是真的没有了。AI 不记得你们昨天说了什么。你要重新介绍你的生意、重新描述你的问题、重新建立诊断的前提——就像从来没有诊断过一样。

状态管理(跨会话的 save、restore、report)修复了大多数 Claude Code 工作流中最大的缺口。

这就是 AI 工具「失忆」问题的本质——不是 AI 不够聪明,是没有状态持久化机制。

模块 9 要解决的,就是这个问题。

三个工具,一套完整的「记忆链」架构:

  • dbs-save:把当前诊断状态写入本地文件,永久保存
  • dbs-restore:在新会话中恢复上次的精确状态,无需重新描述背景
  • dbs-agent-migration:当你在 Claude Code / Codex / Grok 之间切换时,统一三端配置,状态随人走

一、理解「状态管理」的根本价值

1.1 为什么 AI 工具的「失忆」是系统性问题

每次打开一个新的 AI 对话,你面对的是一张空白的画布。这不是 bug,这是设计——AI 的每次会话都是独立的,没有跨会话的记忆机制。

这在处理简单问题时没有影响,但在处理「长周期、高复杂度的商业判断」时,这个设计缺陷会造成巨大的时间损耗:

text

典型的「失忆」损耗计算:

一次完整的商业诊断 = 2-3 小时的深度对话
重新描述背景 = 20-30 分钟
重新建立诊断框架 = 15-20 分钟
重新到达上次的结论深度 = 30-40 分钟

每次重开会话的「热身成本」= 1-1.5 小时
如果你每周重开一次 = 每月 4-6 小时白白消耗

存档:/dbs-save 写到本地的一份诊断状态文件。每次 save 都新增一份,不会覆盖。一个项目下可以攒很多份存档,记录诊断从开始到收尾的全过程。项目:用来分隔不同生意的诊断。默认按你当前的目录名隔离——给小红书做的诊断和给线下课做的诊断不会混在一起。接着上次:你今天关掉 Claude Code,明天重开。只要还在同一个项目目录里 /dbs-restore,就会自动把上次的存档拉回来。诊断的存档默认放在 ~/.dbs/sessions/{项目名}/,报告放在 ~/.dbs/reports/{项目名}/。

1.2 三工具的精确分工

Skill
核心动作
触发时机
输出物
dbs-save
把当前会话状态写入本地文件
诊断到达有结论的节点时
~/.dbs/sessions/{项目名}/
 下的 jsonl 文件
dbs-restore
从本地存档恢复上次状态
重开会话,想接续上次时
恢复的完整上下文 + 状态摘要
dbs-agent-migration
统一 Claude Code / Codex / Grok 的配置
工具切换或工作台混乱时
统一的 CLAUDE.md + AGENTS.md

用户明确提到 Claude Code、Codex、Grok、AGENTS.md、CLAUDE.md、skill bridge、工作台迁移、三端统一,或说"我的 Agent 工作台很乱""帮我统一 Claude 和 Codex 和 Grok" → 推荐 dbs-agent-migration。

1.3 系统路由逻辑:什么时候自动触发

diagnosis / benchmark / content / action / deconstruct / goal 走到有结论的节点 → 推荐 dbs-save;用户说「上次」「之前的」「接着」「续上」→ 推荐 dbs-restore;save 累积 ≥3 份存档或用户说「打包」「整理一份」「给合伙人看的」→ 推荐 dbs-report。

这三个触发条件,建立了一套完整的「存档触发体系」:

text

任何 skill 走完 → 有结论 → dbs-save(存档)
重开会话 → 接续上次 → dbs-restore(恢复)
存档 ≥3 份 → 打包输出 → dbs-report(报告)
工具混乱 → 多工具并用 → dbs-agent-migration(统一)

二、dbs-save 深度解析:把当下的清醒存进文件

2.1 为什么「存档」比「笔记」更重要

很多人在 AI 对话结束后,会把输出复制粘贴到 Obsidian 或者 Notion。

这是对的,但不够——因为粘贴的是输出,不是状态。

输出告诉你「结论是什么」。 状态告诉你「这个结论是怎么来的,当时的前提是什么,下一步应该做什么」。

当你第二天重开会话,你需要的不是结论的 PDF,而是能让 AI 「瞬间回到昨天对话状态」的完整上下文。这就是 dbs-save 存的东西。

存档文件的完整内容结构:

jsonl

{
  "session_id": "2026-06-13T14:32:00",
  "project": "my-knowledge-community",
  "skill_chain": ["dbs-diagnosis", "dbs-benchmark"],
  "current_node": "benchmark-completed",

  "context": {
    "business_description": "面向独立创作者的年费知识付费社群,47人,1980元/年",
    "core_problem": "新客获取路径依赖创始人个人时间,没有自动化转化路径",
    "diagnosis_results": {
      "印钞机检验": "部分通过",
      "道德检验": "通过",
      "定价检验": "需重建锚点",
      "需求检验": "需澄清",
      "流量变现检验": "需调整",
      "规模化检验": "第2层,时机未到"
    },
    "benchmark_results": {
      "核心发现": "缺的不是内容,是清晰的转化路径",
      "可借鉴维度": ["邮件列表培育机制", "文章结尾转化动作", "直播内容资产化"]
    }
  },

  "open_questions": [
    "用户买的是内容还是陪伴感?",
    "直播内容如何资产化?"
  ],

  "next_actions": [
    "本周:访谈5个流失会员",
    "本月:把3个月直播整理成3篇长文",
    "本月:设计公众号→邮件→付费的转化路径"
  ],

  "next_recommended_skill": "dbs-action",
  "save_count": 2
}

注意 save_count 字段——每次 save 都新增一份,不覆盖,一个项目下可以攒很多份存档,记录诊断从开始到收尾的全过程。

2.2 触发方式与使用时机

Bash

# 基础触发
/dbs-save
# 或
/存档

# 带项目名触发(推荐,明确隔离)
/dbs-save project="my-knowledge-community"

# 带备注触发(记录本次存档的特殊意义)
/dbs-save project="my-knowledge-community" note="benchmark完成,发现转化路径缺失"

最佳触发时机:

text

✅ 完成任何一个 skill 的完整流程后
✅ 对话中出现「重要转折」时——某个之前没看到的判断浮现了
✅ 即将关闭会话前(不管有没有结论,先存一份)
✅ 两个不同方向产生分歧,需要分别探索时(存档 A 方向,再存档 B 方向)
✅ 让合伙人/同事「看一下进度」前

不需要触发的时候:

text

❌ 刚开始一个新项目(还没有值得存的状态)
❌ 只是在做「概念澄清」,没有具体的业务背景
❌ 在测试工具,不是处理真实项目

2.3 存档目录管理:多项目、多时间线

诊断的存档默认放在 ~/.dbs/sessions/{项目名}/,报告放在 ~/.dbs/reports/{项目名}/。

Bash

# 查看所有项目的存档
ls ~/.dbs/sessions/

# 查看某个项目的所有存档
ls ~/.dbs/sessions/my-knowledge-community/

# 典型输出:
# 2026-06-01T10:15:00_diagnosis-started.jsonl
# 2026-06-07T14:30:00_benchmark-completed.jsonl
# 2026-06-13T16:45:00_chatroom-涨价决策.jsonl

多时间线存档的价值:

text

存档 1(06-01):诊断刚开始,问题还模糊
存档 2(06-07):benchmark 完成,发现转化路径缺失
存档 3(06-13):chatroom 后,涨价决策推迟

三份存档连起来,就是一部「商业判断进化史」——
你能清楚看到,你的认知是怎么一步步被更新的。
这本身就是极有价值的学习记录。

2.4 存档 + Git:让判断历史可回溯

把存档目录纳入 git 版本控制,是把「AI 帮你做的诊断」变成「可追溯的决策资产」的关键步骤:

Bash

# 初始化存档目录的 git 追踪
cd ~/.dbs
git init
git add .
git commit -m "init: dbs 存档目录初始化"

# 每次 dbs-save 后,追加 git commit
/dbs-save project="my-knowledge-community"
cd ~/.dbs
git add sessions/my-knowledge-community/
git commit -m "save: my-knowledge-community benchmark完成 $(date +%Y%m%d)"

# 或者把这个写成一个 alias
echo 'alias dbsave="cd ~/.dbs && git add . && git commit -m \"save: $(date +%Y%m%d-%H%M)\""' >> ~/.zshrc
source ~/.zshrc

3 个月后,你会有一个完整的「决策 git 历史」:

Bash

git log --oneline ~/.dbs/sessions/my-knowledge-community/

# 输出示例:
# a3f9d2c save: 20260613 chatroom 涨价决策推迟
# b7e1c4a save: 20260607 benchmark 发现转化路径缺失
# c2d8f1b save: 20260601 诊断启动 问题定义完成

三、dbs-restore 深度解析:让 AI 瞬间「记起」昨天

3.1 restore 的核心机制

dbs-restore 做的事,不是把昨天的对话记录「播放」给 AI 听,而是把存档文件里的结构化状态直接注入当前会话的上下文——让 AI 瞬间知道:

  • 这个项目的背景是什么
  • 已经完成了哪些诊断
  • 上次的核心结论是什么
  • 下一步应该做什么
  • 还有哪些问题悬而未决

整个「恢复」过程,通常不超过 30 秒。

3.2 触发方式与恢复流程

Bash

# 方式 1:在项目目录下触发(自动识别项目名)
cd ~/projects/my-knowledge-community
/dbs-restore

# 方式 2:指定项目名(不在项目目录下时)
/dbs-restore project="my-knowledge-community"

# 方式 3:恢复特定时间点的存档(不是最新的)
/dbs-restore project="my-knowledge-community" \
             session="2026-06-07T14:30:00"

# 方式 4:口语触发
「接着上次」
「上次做到哪里了?」
「继续之前的诊断」

恢复后的标准输出结构:

text

════════════════════════════════════════
dbs-restore · 状态恢复完成
项目:my-knowledge-community
恢复时间点:2026-06-07T14:30:00
════════════════════════════════════════

【业务背景】
面向独立创作者的年费知识付费社群
47 人 · 1980 元/年 · 月收入 5000-8000 元

【已完成的诊断】
✅ dbs-diagnosis(体检模式)- 2026-06-01
   核心问题:新客获取路径依赖创始人个人时间
   层级:第 2 层(稳定交付)

✅ dbs-benchmark - 2026-06-07
   核心发现:缺的不是内容,是清晰的转化路径
   可借鉴:邮件列表培育 + 文章结尾转化 + 直播资产化

【上次结论】
在做价格或频率决策之前,先做 5 个用户访谈

【悬而未决的问题】
- 用户买的是内容还是陪伴感?(需要访谈验证)
- 直播内容如何资产化?(技术路径待确定)

【推荐下一步】
/dbs-action → 启动「5 个访谈」执行

你想从哪里接续?
════════════════════════════════════════

3.3 「接着上次」的三种场景

场景 A:继续未完成的诊断

Bash

cd ~/projects/my-knowledge-community
/dbs-restore

# 恢复后,继续上次的诊断
「上次 benchmark 发现缺转化路径,
  这周我做了 3 个用户访谈,发现用户买的确实是「陪伴感」。
  基于这个新信息,重新评估我们的诊断结论——
  原来的「一句话处方」需要调整吗?」

场景 B:带着新数据更新判断

Bash

/dbs-restore project="my-knowledge-community"

# 带入新数据
「上次诊断后,我采取了以下行动:
  1. 做了 5 个用户访谈(结果:3/5 表示「陪伴感」是主要价值)
  2. 把 2 期直播整理成了长文(数据:阅读量比普通文章高 40%)

  基于这些新数据,帮我更新诊断结论和下一步行动。」

场景 C:在分叉点选择方向

Bash

/dbs-restore project="my-knowledge-community"

「上次在「涨价」决策上有两个方向:
  方向 A:保持频率,提高价格(维护陪伴感)
  方向 B:降低频率,提高质量(做内容资产)

  上次存档时还没决定。
  现在我倾向于方向 A,帮我用 dbs-chatroom 验证一下这个判断。」

3.4 restore + 其他 skill 的接续逻辑

restore 完成后,整个 dbskill 工具链都处于「已激活上下文」的状态,可以无缝接续任何 skill:

Bash

# restore 后直接接续 dbs-action
/dbs-restore
→ 恢复状态
→ 「好,上次说要做 5 个访谈,我还没做,帮我诊断为什么没做」
→ /dbs-action 自动触发(有上下文的执行力诊断)

# restore 后接续 dbs-chatroom
/dbs-restore
→ 「基于当前的诊断结论,
    我想听一个 SaaS 创始人和一个典型用户
    对「涨价 vs 降频」这个决策的看法」
→ /dbs-chatroom 自动触发(有上下文的多视角讨论)

# restore 后直接生成报告
/dbs-restore
→ 「现在存档有 3 份了,帮我打包成一份完整的诊断报告」
→ /dbs-report 自动触发

四、dbs-report 深度解析:把存档变成可分享的资产

4.1 report 的触发时机

save 累积 ≥3 份存档或用户说「打包」「整理一份」「给合伙人看的」→ 推荐 dbs-report。

三种核心使用场景:

text

场景 1:项目阶段性总结
「诊断进行了一个月,攒了 5 份存档,
  现在要和合伙人开会讨论,帮我整理一份完整报告」

场景 2:决策前最终梳理
「明天要做一个重大决策(是否续约某个合作方),
  把过去两周所有相关的诊断存档,整理成一页纸」

场景 3:阶段复盘
「季度末了,把这个季度所有项目的诊断报告,
  整合成一份「季度商业判断复盘」」

4.2 完整的报告生成流程

Bash

cd ~/projects/my-knowledge-community
/dbs-restore  # 先恢复状态

# 触发报告生成
/dbs-report

# 或者带参数
/dbs-report format="one-page"     # 一页纸版本
/dbs-report format="full"         # 完整版本
/dbs-report audience="合伙人"     # 指定读者,调整措辞
/dbs-report period="2026-06"      # 只包含某个时间段的存档

完整报告的结构:

Markdown

════════════════════════════════════════
商业判断报告
项目:my-knowledge-community
报告生成:2026-06-13
存档跨度:2026-06-01 → 2026-06-13
包含存档:3 份
════════════════════════════════════════

## 执行摘要(一句话)
这是一个有真实需求支撑的好生意,
被困在创始人个人时间里;
核心任务是建立独立于创始人的转化路径。

## 业务基本信息
(从存档中提取的最新版本)

## 诊断历程

### 第 1 阶段(06-01):问题定义
启动诊断,识别核心问题:
新客获取依赖创始人个人时间 → 第 2 层成长阶段

### 第 2 阶段(06-07):对标分析
三个对标过滤后,核心发现:
缺的不是内容,是清晰的转化路径

### 第 3 阶段(06-13):多视角验证
chatroom 发现:用户买的是「陪伴感」而非内容
奥派分析:推荐奖励机制有破坏社群质量的风险

## 判断演进轨迹
06-01:「感觉新增慢,可能是内容问题」
06-07:「不是内容问题,是没有转化路径」← 重要更新
06-13:「用户买的是陪伴感,涨价+降频方案需要重新设计」← 重要更新

## 当前最重要的 3 个问题
1. 用户的「陪伴感」如何在不依赖实时直播的情况下维持?
2. 邮件列表→付费的转化路径如何设计?
3. 直播内容资产化的技术路径是什么?

## 已确定的行动项
✅ 已完成:5 个用户访谈
⬜ 进行中:把 3 个月直播整理成长文(2/3)
⬜ 待启动:设计邮件→付费转化路径

## 下一个关键节点
涨价决策的前提:建立清晰的转化路径,
且转化率稳定连续 2 个月

════════════════════════════════════════

4.3 把报告写入 Obsidian

Bash

# 生成报告后,直接写入 Obsidian
/dbs-report format="full"

# 生成后
/obsidian-markdown

obsidian create \
  name="03-Projects/my-knowledge-community/诊断总报告-$(date +%Y%m)" \
  content="---
type: diagnosis-full-report
project: my-knowledge-community
period: 2026-06
sessions-count: 3
generated: $(date +%Y-%m-%d)
tags: [report, diagnosis, knowledge-community]
---

(粘贴 dbs-report 生成的完整内容)
"

git add . && git commit -m "report: my-knowledge-community 月度诊断报告 $(date +%Y%m)"

五、dbs-agent-migration 深度解析:统一三端,让状态随人走

5.1 为什么需要 Agent 工作台迁移

2026 年的 AI 工具生态,没有人只用一个工具。

1 Agent 工作台迁移:支持 Grok Build,统一三端迁移语境。

典型的多工具使用场景:

text

Claude Code:主力诊断工具(dbskill 最完整的支持)
Codex CLI:自动化任务(Vault 维护、headless 运行)
Grok Build:特定场景的快速验证
Cursor:代码相关的内容(如果你是开发者)

问题是:

text

Claude Code 有它的 CLAUDE.md 配置
Codex 有它的 AGENTS.md 配置
Grok Build 有它的配置文件
三套配置文件,内容重复,经常不同步——
你在 Claude Code 里更新了某个规则,
Codex 和 Grok 不知道。

这就是 dbs-agent-migration 要解决的问题。

5.2 三层配置文件的架构理解

第一层:AGENTS.md(永远载入、跨工具)专案架构、程式码惯例、硬性限制、build 指令。100 行以下。每个 AI 工具都读的通用专案 context。第二层:CLAUDE.md(永远载入、Claude Code 专属)最小化。共享 context 引用 AGENTS.md。只加 Claude Code 专属指令——compaction 行为、subagent 偏好、权限提示。20 行以下。第三层:Skill(按需载入、任务专属)专业 workflow,相关时才载入。每个 skill 可以很详细(最多 500 行),因为只在需要时才进 context。

在 dbskill 语境中,三层的内容是:

text

AGENTS.md(所有工具共享):
  - 项目基本信息(名称、描述、当前阶段)
  - 硬性规则(不做的事、必须问我的决策)
  - dbs 存档路径(~/.dbs/sessions/)
  - 工作目录约定

CLAUDE.md(仅 Claude Code):
  - claude --continue / --resume 的使用习惯
  - 哪些 skill 常用(dbs-diagnosis, obsidian-skills 等)
  - compaction 触发条件

config.toml(仅 Codex):
  - headless 模式配置
  - 自动化任务的权限设定

5.3 触发 dbs-agent-migration

Bash

# 触发方式
/dbs-agent-migration
# 或
/工作台迁移
# 或描述问题
「我同时用 Claude Code 和 Codex,配置很乱,帮我统一」
「我的 Agent 工作台很乱」
「帮我统一 Claude 和 Codex 和 Grok」

5.4 迁移流程的五个步骤

Step 1:现状审计

Agent 会先读取你当前的所有配置文件:

Bash

# Agent 自动执行
cat ~/.claude/CLAUDE.md 2>/dev/null || echo "CLAUDE.md 不存在"
cat ~/projects/AGENTS.md 2>/dev/null || echo "AGENTS.md 不存在"
cat ~/.codex/config.toml 2>/dev/null || echo "config.toml 不存在"

ls ~/.claude/skills/dbs* 2>/dev/null
ls ~/.codex/skills/ 2>/dev/null

审计输出示例:

text

════════════════════════════════════════
工作台现状审计
════════════════════════════════════════

Claude Code 配置:
  CLAUDE.md:存在(348行,过长)
  Skills:dbs 全套 + obsidian-skills

Codex 配置:
  config.toml:不存在
  AGENTS.md:不存在
  Skills:只有 dbs-diagnosis(不完整)

Grok Build 配置:
  未检测到配置文件

问题清单:
1. CLAUDE.md 超过 20 行上限(建议精简 + 迁移到 AGENTS.md)
2. Codex 没有配置文件,无法承接 Claude Code 的项目上下文
3. dbs skills 在 Codex 端安装不完整
4. 三端没有共享的项目记忆锚点

════════════════════════════════════════

Step 2:生成统一的 AGENTS.md

Bash

# Agent 生成 AGENTS.md 草稿,等你确认
「基于审计结果,为你生成 AGENTS.md(跨工具共享版):」

生成的 AGENTS.md 标准模板:

Markdown

# Project Context
# 适用于:Claude Code / Codex / Grok Build / Cursor

## 当前活跃项目
- my-knowledge-community(年费知识付费社群)
  - 状态:诊断进行中(第2层)
  - 存档:~/.dbs/sessions/my-knowledge-community/
  - 关键前提:用户买的是「陪伴感」,不是内容

## DBS 工作规则
- 存档路径:~/.dbs/sessions/
- 存档命名:{项目名}/{时间戳}_{事件描述}.jsonl
- 报告路径:~/.dbs/reports/
- 每次 dbs 诊断完成后,强制 dbs-save

## 硬性规则
- 不在没有 dbs-restore 的情况下,对已有项目做新诊断
- 不在没有用户确认的情况下,修改 ~/.dbs/ 目录下的文件
- 涉及定价/合作/重大决策,必须先经过 dbs-chatroom

## Obsidian Vault
- 路径:~/Documents/My-Vault
- 存档同步:每次 dbs-save 后,obsidian create 写入 03-Projects/

## 工作目录约定
- 每个项目独立目录:~/projects/{项目名}/
- 进入项目目录后,dbs-restore 自动识别

Step 3:精简 CLAUDE.md,只留 Claude Code 专属内容

Markdown

# CLAUDE.md(仅 Claude Code 使用)

## 共享配置
参考 AGENTS.md(通用规则已在那里)

## Claude Code 专属
- 优先使用 /dbs 工具链做商业诊断
- 默认激活 /obsidian-markdown + /obsidian-cli
- 对话超过 30 轮时,主动建议 dbs-save
- compact 时保留:项目状态摘要 + 未解决的问题列表

Step 4:为 Codex 生成 config.toml

toml

# ~/.codex/config.toml

[agent]
model = "gpt-5"
context_window = 200000

[skills]
# 指向已安装的 dbs skills
path = ["~/.codex/skills", "~/.claude/skills"]

[projects]
# 自动识别 ~/projects/ 下的子目录为独立项目
auto_detect = "~/projects/"
context_file = "AGENTS.md"

[headless]
# headless 模式权限(Codex 自动化任务用)
allowed_operations = [
  "read_file",
  "write_file",
  "git_commit",
  "obsidian_cli"
]
# 需要用户确认的操作
require_confirm = [
  "delete_file",
  "modify_dbs_sessions"
]

[logging]
path = "~/.codex/logs/"
level = "info"

Step 5:同步 Skills 到所有工具

Bash

# 确保 dbs skills 在所有工具下都完整安装
npx -y skills add dontbesilent2025/dbskill -g --all

# 验证 Claude Code
ls ~/.claude/skills/dbs* | wc -l
# → 应该看到所有 skill 目录

# 验证 Codex
ls ~/.codex/skills/dbs* | wc -l
# → 应该与 Claude Code 相同

# 如果 Codex skills 路径不同,创建软链接
ln -s ~/.claude/skills/dbs* ~/.codex/skills/ 2>/dev/null || true

5.5 迁移完成后:验证三端统一

Bash

# 测试 1:Claude Code 能读到 AGENTS.md
claude --print "读取 AGENTS.md,告诉我当前活跃的项目是什么"

# 测试 2:Codex 能读到同一份 AGENTS.md
codex --print "读取 AGENTS.md,告诉我当前活跃的项目是什么"

# 测试 3:跨工具的 dbs-restore
# 在 Claude Code 里 dbs-save
/dbs-save project="test-migration"

# 关闭 Claude Code,打开 Codex
cd ~/projects/test-migration
codex
/dbs-restore
# → 应该能恢复 Claude Code 保存的状态

如果 dbs-restore 能在 Codex 里恢复 Claude Code 保存的状态——迁移成功。

这就是三端统一的核心验证:存档是工具无关的,状态可以在任意工具间流转。

六、完整的「记忆链」系统架构

把三个 skill 组合起来,构成一套完整的「跨时间、跨工具的思维记忆系统」:

text

═══════════════════════════════════════════════════════
              记忆链系统 · 完整架构
═══════════════════════════════════════════════════════

日常工作流:

Claude Code 会话 1(周一上午)
  → dbs-diagnosis 诊断
  → 重要节点出现
  → /dbs-save(存档 1)
  → git commit
  ↓

Claude Code 会话 2(周三下午)
  → /dbs-restore(恢复到存档 1 的状态)
  → dbs-benchmark 对标
  → 发现新结论
  → /dbs-save(存档 2,不覆盖存档 1)
  → git commit
  ↓

Codex(周五晚上,自动化任务)
  → /dbs-restore(跨工具恢复)
  → 无头模式更新 Obsidian 知识库
  → 把存档 2 的结论写入 03-Projects/
  ↓

Claude Code 会话 3(下周一)
  → /dbs-restore
  → 「上次存档 ≥3 份,帮我生成报告」
  → /dbs-report(完整诊断报告)
  → obsidian create 写入 Vault
  → /dbs-save(存档 3,标记「已报告」)
  → git commit

═══════════════════════════════════════════════════════

存档层级:
~/.dbs/sessions/my-knowledge-community/
  ├── 20260601_diagnosis-started.jsonl
  ├── 20260607_benchmark-completed.jsonl
  └── 20260613_report-generated.jsonl

git 版本控制:
  → 每次 save 都有对应 commit
  → 可以回溯任意时间点的判断状态

Obsidian 沉淀:
  → 每次重要存档,写入 03-Projects/
  → dbs-report 生成后,写入诊断总报告

═══════════════════════════════════════════════════════

七、进阶用法:把存档变成「决策数据库」

7.1 用 jq 查询你的存档历史

Bash

# 查看所有项目的最新存档摘要
for project in ~/.dbs/sessions/*/; do
    name=$(basename "$project")
    latest=$(ls "$project"*.jsonl 2>/dev/null | tail -1)
    if [ -n "$latest" ]; then
        echo "项目:$name"
        cat "$latest" | jq -r '.next_actions[0] // "无待办"'
        echo "---"
    fi
done

# 查找所有「第2层」成长阶段的项目
cat ~/.dbs/sessions/*/latest.jsonl 2>/dev/null | \
  jq 'select(.context.diagnosis_results | 
    to_entries | 
    any(.value | contains("第2层"))
  )' | \
  jq '{project, next_actions}'

# 统计:每个项目存档了几次
for project in ~/.dbs/sessions/*/; do
    count=$(ls "$project"*.jsonl 2>/dev/null | wc -l)
    echo "$(basename $project): $count 份存档"
done

7.2 把存档导入 RAG 系统(与模块 7 联动)

Python

# import_sessions_to_rag.py
import json
import os
import glob

DBS_SESSIONS_DIR = os.path.expanduser("~/.dbs/sessions/")
OUTPUT_FILE = os.path.expanduser("~/.atom-rag/my_decisions.jsonl")

def extract_atoms_from_session(session_file: str) -> list:
    """从 dbs-save 存档中提取可检索的决策原子"""
    with open(session_file, 'r', encoding='utf-8') as f:
        session = json.load(f)

    atoms = []

    # 把每个「重要结论」提炼成原子
    if 'open_questions' in session:
        for q in session['open_questions']:
            atoms.append({
                "id": f"decision_{session['session_id'][:10]}_{hash(q) % 10000}",
                "knowledge": q,
                "source": f"dbs-session: {session['project']}",
                "type": "case",
                "confidence": "high",
                "is_personal": True,
                "topics": ["决策记录", "个人案例"]
            })

    # 把「判断演进」里的重要更新提炼成原子
    # ...

    return atoms

# 批量处理所有存档
all_atoms = []
for session_file in glob.glob(f"{DBS_SESSIONS_DIR}**/*.jsonl", recursive=True):
    atoms = extract_atoms_from_session(session_file)
    all_atoms.extend(atoms)

print(f"从 {len(glob.glob(DBS_SESSIONS_DIR + '**/*.jsonl', recursive=True))} 个存档中提取了 {len(all_atoms)} 个决策原子")

# 写入 RAG 系统
with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
    for atom in all_atoms:
        f.write(json.dumps(atom, ensure_ascii=False) + '\n')

这样做的价值: 你过去每一次诊断的结论,都变成了 RAG 知识库里的一个原子。下次遇到类似场景,RAG 系统会自动召回你自己的历史判断——这才是真正意义上的「AI 帮你记住你的决策历史」。

7.3 定期的「存档健康检查」

Bash

# 每月运行一次,检查存档的健康状态
cat > ~/scripts/check-sessions-health.sh << 'EOF'
#!/bin/bash
echo "═══════════════════════════════════════"
echo "📊 DBS 存档健康检查 - $(date +%Y-%m-%d)"
echo "═══════════════════════════════════════"

SESSIONS_DIR="$HOME/.dbs/sessions"

# 统计总存档数
total=$(find "$SESSIONS_DIR" -name "*.jsonl" | wc -l)
echo "总存档数:$total"

# 统计活跃项目数
projects=$(ls "$SESSIONS_DIR" 2>/dev/null | wc -l)
echo "活跃项目数:$projects"

# 找出超过 30 天没有更新的项目(可能已放弃)
echo ""
echo "⚠️ 超过30天未更新的项目:"
for project in "$SESSIONS_DIR"/*/; do
    latest=$(ls "$project"*.jsonl 2>/dev/null | tail -1)
    if [ -n "$latest" ]; then
        age=$(( ($(date +%s) - $(stat -f %m "$latest" 2>/dev/null || stat -c %Y "$latest")) / 86400 ))
        if [ "$age" -gt 30 ]; then
            echo "  - $(basename $project)(${age}天前)"
        fi
    fi
done

# 找出有 open_questions 但超过 7 天没回答的
echo ""
echo "❓ 有待解决问题但超过7天未更新的项目:"
for session_file in "$SESSIONS_DIR"/**/*.jsonl; do
    if [ -f "$session_file" ]; then
        has_questions=$(cat "$session_file" 2>/dev/null | python3 -c "
import json, sys
data = json.load(sys.stdin)
print('yes' if data.get('open_questions') else 'no')
" 2>/dev/null)
        if [ "$has_questions" = "yes" ]; then
            project=$(basename $(dirname "$session_file"))
            echo "  - $project"
        fi
    fi
done

echo ""
echo "✅ 健康检查完成"
EOF

chmod +x ~/scripts/check-sessions-health.sh

八、常见问题深度解析

Q1:dbs-restore 恢复的状态,和原来的对话有什么不同?

text

原来的对话:AI 记得你们说过的每一句话
dbs-restore:AI 得到了结构化的状态摘要,不是逐字记录

区别在于:
原来的对话 = 完整的对话记录(会占用大量 context)
dbs-restore = 压缩后的结构化状态(高效、精准)

实际使用中,dbs-restore 的效果往往比「重复整个对话」更好,
因为它过滤掉了对话中的废话,只保留了真正有用的信息。

Q2:存档文件会不会越来越大,占用太多磁盘空间?

Bash

# 估算存档大小
ls -lh ~/.dbs/sessions/my-knowledge-community/
# 每个存档文件约 2-10KB
# 100 个存档 = 约 1MB
# 完全不用担心磁盘问题

# 如果想归档老存档(超过6个月)
mkdir ~/.dbs/archive/
mv ~/.dbs/sessions/old-project-2025/ ~/.dbs/archive/

Q3:dbs-agent-migration 会不会覆盖我的现有配置?

text

不会。dbs-agent-migration 在执行任何修改之前,
会先显示「即将做什么修改」,等你确认后才执行。

具体流程:
1. 审计现有配置(只读,不修改)
2. 生成建议的新配置(只显示,不写入)
3. 等待你确认(你可以拒绝或修改任何部分)
4. 执行前备份原有配置
5. 写入新配置

原有配置会备份到 ~/.claude/CLAUDE.md.backup-YYYYMMDD

Q4:如果我同时用 Claude Code 和 Codex,在哪个工具里做 dbs-save 更好?

text

建议:在「主力工具」里做 dbs-save
原则:dbs-save 是工具无关的,存档在文件系统里,任何工具都能读

实际上:
- 深度诊断(dbs-diagnosis / dbs-chatroom)→ 在 Claude Code 里做,用 dbs-save
- 自动化任务(Vault 维护)→ 在 Codex 里做,做完后 dbs-save
- 两边都做了 save,存档会在同一个目录下,按时间戳区分

Q5:如果某次 dbs-restore 恢复的状态「不对」,怎么回退?

Bash

# 查看该项目的所有存档
ls -lt ~/.dbs/sessions/my-project/

# 选择一个更早的存档恢复
/dbs-restore project="my-project" \
             session="2026-06-01T10:15:00"

# 或者直接读取存档文件内容,手动确认
cat ~/.dbs/sessions/my-project/20260601_diagnosis-started.jsonl | \
  python3 -m json.tool

九、存档系统的完整 Obsidian 联动

Bash

# 创建存档系统的 Bases 视图
/obsidian-bases

obsidian create name="System/Bases/诊断存档追踪.base" \
  content='{
    "filters": {
      "and": [
        {"field": "type", "operator": "=", "value": "session-record"}
      ]
    },
    "columns": [
      {"field": "title", "width": 250},
      {"field": "project", "width": 150},
      {"field": "save-count", "width": 80},
      {"field": "current-node", "width": 150},
      {"field": "next-action", "width": 200},
      {"field": "date", "width": 110}
    ],
    "sort": [{"field": "date", "direction": "desc"}]
  }'

# 创建存档同步脚本——每次 dbs-save 后自动写入 Obsidian
cat > ~/scripts/sync-sessions-to-obsidian.sh << 'EOF'
#!/bin/bash
PROJECT=$1
if [ -z "$PROJECT" ]; then
  echo "用法:$0 <项目名>"
  exit 1
fi

LATEST=$(ls ~/.dbs/sessions/$PROJECT/*.jsonl | tail -1)
if [ -z "$LATEST" ]; then
  echo "找不到项目 $PROJECT 的存档"
  exit 1
fi

# 提取关键信息
SAVE_COUNT=$(cat "$LATEST" | python3 -c "
import json, sys; d=json.load(sys.stdin); print(d.get('save_count', 1))")
NEXT_ACTION=$(cat "$LATEST" | python3 -c "
import json, sys; d=json.load(sys.stdin)
actions=d.get('next_actions', []); print(actions[0] if actions else '无')")

# 写入 Obsidian
obsidian create \
  name="03-Projects/$PROJECT/存档记录-$(date +%Y%m%d)" \
  content="---
type: session-record
project: $PROJECT
save-count: $SAVE_COUNT
next-action: $NEXT_ACTION
date: $(date +%Y-%m-%d)
session-file: $LATEST
tags: [session, dbs-save]
---

# 存档记录

存档文件:\`$(basename $LATEST)\`

## 下一步行动
$NEXT_ACTION

## 完整内容
(运行 /dbs-restore 恢复完整状态)
" 2>/dev/null && echo "✅ 已写入 Obsidian"
EOF

chmod +x ~/scripts/sync-sessions-to-obsidian.sh

十、模块 9 作业:提交标准与验收

Markdown

═══════════════════════════════════════════
📋 模块 9 作业清单
═══════════════════════════════════════════

【必交作业】

□ 1. 完成一次完整的 dbs-save 操作
     要求:在一个真实项目诊断的「有结论节点」后触发
     提交:
     - 存档文件路径截图(~/.dbs/sessions/项目名/)
     - 存档文件内容的关键字段截图
       (session_id, context, next_actions)

□ 2. 完成一次 dbs-restore 操作
     要求:关闭会话,重开后恢复状态
     提交:
     - restore 输出截图(包含业务背景、已完成诊断、
       上次结论、下一步推荐)
     - 恢复后的第一条「接续上次」消息截图

□ 3. 完成「多时间线存档」实践
     要求:同一个项目存档至少 2 次
           每次存档后,git commit 记录
     提交:
     - 存档目录截图(显示 2 个以上时间戳文件)
     - git log 截图(显示对应的 commit 记录)

□ 4. 触发 dbs-report 生成完整报告
     要求:累积 ≥2 份存档后,运行 dbs-report
     提交:报告截图(包含判断演进轨迹)

□ 5. 完成 dbs-agent-migration 配置统一
     要求:至少统一 Claude Code 和 Codex 两个工具
     提交:
     - 迁移前的配置问题截图(审计输出)
     - 生成的 AGENTS.md 截图
     - 跨工具 dbs-restore 测试截图

□ 6. 把报告写入 Obsidian + git commit
     格式:「session: [项目名] dbs-save+restore+report完整闭环」

【选交作业(加分)】

○ 7. 建立「存档健康检查」定期机制
     设置每月运行 check-sessions-health.sh
     提交:第一次运行的输出截图

○ 8. 把存档导入 RAG 系统(与模块 7 联动)
     运行 import_sessions_to_rag.py
     测试:用 RAG 查询「我过去对定价问题的判断」
     提交:查询结果截图

○ 9. 写一段「存档复盘」:
     找到你某次诊断中「判断发生重要转变」的时刻
     对比两份存档的内容,分析:
     「我的判断从 X 变成了 Y,触发这个转变的是什么?
      这个转变是因为新信息,还是因为视角改变了?」
     存入 Obsidian,标签:[meta-learning]

═══════════════════════════════════════════
【作业提交格式】
1. dbs-restore 恢复截图(最重要,展示跨会话续写能力)
2. git log 截图(展示存档版本控制)
3. AGENTS.md 截图(展示三端统一配置)
4. 一段文字:
   「在搭建存档系统之前,我最大的痛点是___,
    现在 dbs-save + dbs-restore 帮我解决了___,
    跨工具迁移中最麻烦的一步是___,
    解决后的感受是___」
文件命名:模块9-作业-[你的名字]-session-system.pdf
═══════════════════════════════════════════

十一、模块 9 结语:记忆是判断力的基础设施

前面八个模块,我们建了很多东西:

读书 Skill、概念卡、诊断报告、内容生产线、执行系统、Vault 自动化、原子知识库、思辨工作流……

每一个都有价值。但如果没有存档系统,这些价值是分散的、一次性的、不可累积的。

17 个 Agent skills,从 12,000+ 条推文中提炼,覆盖商业诊断、内容、对标分析和目标审计。状态管理机制(跨会话的 save、restore、report)修复了大多数 Claude Code 工作流中最大的缺口。

这句话里「最大的缺口」四个字,值得认真对待。

AI 工具的「失忆」问题,不只是一个技术问题,是一个认知连续性的问题。每次重开会话,你的思维不是从上次停止的地方继续,而是从零重建。

长周期的复杂问题——比如「如何让一个知识付费社群从 47 人增长到 500 人」——需要持续三到六个月的思考迭代。在这个时间尺度上,「失忆」意味着你永远在原地重建,永远无法真正深入。

dbs-save + dbs-restore + dbs-agent-migration 一起解决的,是这个问题——让你的判断可以「跨越会话、跨越工具、跨越时间」地持续演进。

存档不是「备份」,是「认知的延伸」。

当你把三个月的诊断存档打开,看到你的判断从「感觉内容有问题」演进到「发现是转化路径缺失」再演进到「用户买的是陪伴感」——那个演进轨迹,比任何一次独立的诊断都有价值。

它告诉你的,是你的判断力是如何成长的。

而这,才是 Skill Stack 整个工作流最深层的目标:不只是让每次决策更好,而是让你的判断体系持续进化。

下一个模块,是整个课程的 Boss 关卡——模块 10:综合实战,把前九个模块的所有能力全栈串联,从一本书出发,走完「阅读→拆解→诊断→内容→执行→存档」的完整闭环,最终产出一份可发布的内容和一份完整的诊断报告。

💡 「没有记忆的判断,只能是一次性的;有记忆的判断,才能持续进化。」 dbs-save 存的不是文字,是你思考过的痕迹。那些痕迹,比任何一次聪明的回答都更值钱。


普通人如何用 AI 搭建自己的知识操作系统?

一个程序员出身的知识工作者,公开记录自己如何用 AI 工具搭建个人知识系统、把读过的书和做过的项目变成可复用资产的全过程。

我是【一只阿木木】——公开建造我的 AI 第二大脑。

我们的方向是——AI + Obsidian 的结合。但请记住:Obsidian 的灵魂不是效率,是自由。不是自动化,是代理力。不是工具帮你想,而是你借工具想得更好。
在一个许多工具承诺代替用户思考的市场中,Obsidian 赌的是我们仍然想要一个可以自己思考的地方。

欢迎加入行动营👇获取更多Obsidian + AI数字大脑实践

Image

我相信:在 AI 时代,每个普通人都该拥有一个自动生长的知识系统

欢迎关注【一只阿木木】🌊