第 33 章

数据存储位置

Deep Agents Code 在哪里存储配置、会话和自定义文件

理解数据存放规则,是掌控 Agent 行为的第一步

为什么需要了解

你的 Agent 记住了什么、会话存在哪里、技能从哪加载——全都取决于数据存储位置

不清楚存储位置的困扰

  • Agent 的自定义指令写在哪?改了没生效,不知道为什么
  • 会话历史存在哪?想清理却找不到文件
  • 技能文件放在哪个目录?放错了位置,Agent 找不到
  • 项目级和用户级配置冲突?不知道谁的优先级更高
  • 想彻底重置?不知道该删哪些目录

了解之后的掌控力

  • 精确知道每个配置文件的存放路径和作用
  • 按需清理会话、历史、密钥等特定数据
  • 在正确位置放置技能文件,Agent 立即可用
  • 理解优先级规则,避免配置冲突
  • 区分工具无关与专用目录,实现跨工具共享
问题核心:Deep Agents Code 的数据分布在两个层级(用户级 + 项目级)和两个目录(.deepagents/ + .agents/)。搞清楚"什么数据存在哪、谁能读谁优先",你就能精准控制 Agent 的行为、安全地清理数据、合理地组织技能。

两级目录

Deep Agents Code 将数据存储在两个目录层级中

~/.deepagents/

Deep Agents 专用数据

  • Agent 记忆和自定义指令
  • 用户级技能
  • 会话检查点数据库
  • 命令输入历史
  • 自定义子 Agent 定义

Deep Agents Code 专属

~/.agents/

工具无关数据

  • 跨 AI CLI 工具共享的技能
  • 不依赖 Deep Agents 专属功能的配置
  • 任何兼容工具都可使用

跨 CLI 工具共享

层级概念:用户级目录(~/ 开头)对所有项目生效;项目级目录(在项目根目录下)只对当前项目生效。两者可以同时存在,优先级不同。

用户级结构

~/.deepagents/ 和 ~/.agents/ 的完整目录树

~/.deepagents/
├── .state/                  # 每台机器的状态(自动管理)
│   ├── sessions.db          #   会话检查点的 SQLite 数据库
│   ├── history.jsonl        #   命令输入历史
│   └── ...                  #   其他标记和凭证
└── {agent}/                 # 每个 Agent 的目录(默认:"agent")
    ├── AGENTS.md            # 用户对 Agent 指令的自定义
    ├── skills/              # 用户级技能
    │   └── {skill-name}/
    │       └── SKILL.md
    └── agents/              # 自定义子 Agent 定义
        └── {subagent-name}/
            └── AGENTS.md

~/.agents/                   # 工具无关别名(跨 AI CLI 共享)
└── skills/                  # 任何兼容工具都可使用的技能
    └── {skill-name}/
        └── SKILL.md

.state/ 自动管理

  • sessions.db — SQLite 数据库,存储会话检查点
  • history.jsonl — 命令输入历史,上/下方向键调用
  • auth.json — 存储的 API 密钥
  • mcp-tokens — MCP OAuth 令牌
  • onboarding_complete — 首次引导标记

{agent}/ 可自定义

  • AGENTS.md — 追加到基础指令之后的自定义指令
  • skills/ — Agent 专属技能,只有该 Agent 可用
  • agents/ — 自定义子 Agent,带 YAML frontmatter
  • 默认 agent 目录名是 "agent"

项目级结构

在 Git 仓库根目录下的配置目录——只对当前项目生效

{project}/                   # 项目级(位于 Git 仓库根目录)
├── AGENTS.md                # 项目指令(根目录级别)
└── .deepagents/
│   ├── AGENTS.md            # 项目指令(首选位置)
│   ├── skills/              # 项目专属技能
│   │   └── {skill-name}/
│   │       └── SKILL.md
│   └── agents/              # 项目专属子 Agent
│       └── {subagent-name}/
│           └── AGENTS.md
└── .agents/                 # 工具无关的项目技能
    └── skills/
        └── {skill-name}/
            └── SKILL.md

.deepagents/(专用)

  • 使用 Deep Agents Code 专属功能的技能和配置
  • 依赖 Deep Agents 特定的工具或约定
  • 包含 AGENTS.md(指令)+ skills/ + agents/

.agents/(通用)

  • 希望在不同 AI CLI 工具之间共享的技能
  • 不依赖任何特定工具的专属功能
  • 只包含 skills/ 目录
选择建议:适用于任何 AI 编码助手的技能,用 .agents/skills/;依赖 Deep Agents 专属工具或约定的技能,用 .deepagents/skills/。

数据一览

每种数据存储在哪里、读/写权限如何——一张表看全貌

数据位置权限备注
会话 ~/.deepagents/.state/sessions.db 读/写 SQLite 检查点数据库
输入历史 ~/.deepagents/.state/history.jsonl 读/写 JSON-lines,方向键调用
基础指令 包内 default_agent_prompt.md 只读 不可变,随版本升级更新
用户自定义 ~/.deepagents/{agent}/AGENTS.md 读/写 追加到基础指令之后
项目指令 .deepagents/AGENTS.md 或 AGENTS.md 只读 两者都存在则都会加载
用户技能 ~/.deepagents/{agent}/skills/ 读/写 Agent 专属技能
共享技能 ~/.agents/skills/ 只读 工具无关,跨 CLI 使用
项目技能 .deepagents/skills/ 或 .agents/skills/ 只读 项目范围内的技能
自定义子 Agent ~/.deepagents/{agent}/agents/ 读/写 用户定义的子 Agent
项目子 Agent .deepagents/agents/ 只读 项目定义的子 Agent

技能优先级

同名技能存在于多个位置时,优先级高的完全覆盖优先级低的(不合并)

1. 最低

~/.deepagents/{agent}/skills/

用户 Deep Agents Code

2. 较低

~/.agents/skills/

用户工具无关

3. 较高

.deepagents/skills/

项目 Deep Agents Code

4. 最高

.agents/skills/

项目工具无关

覆盖规则

  • 同名技能在多个位置存在时,优先级高的完全覆盖低的
  • 不会合并——高优先级版本完全替代低优先级版本
  • 项目级(3、4)总是优先于用户级(1、2)

安全限制

  • Deep Agents Code 会验证技能文件路径是否在允许的目录内
  • 符号链接解析后超出所有技能根目录会被拒绝
  • 可通过 [skills].extra_allowed_dirs 配置允许额外目录
注意:优先级是"完全覆盖"而非"合并"。如果你在用户级定义了技能 A,又在项目级定义了同名技能 A,最终生效的是项目级版本——用户级的指令和逻辑会被完全忽略。

子 Agent 与指令

子 Agent 覆盖规则 vs 指令叠加规则——两种完全不同的优先级机制

子 Agent(覆盖)

和技能一样,同名子 Agent 高优先级完全覆盖低优先级。

优先级位置
低~/.deepagents/{agent}/agents/(用户级)
高.deepagents/agents/(项目级)
  • 每个子 Agent 是一个带 YAML frontmatter 的 AGENTS.md
  • frontmatter 包含 name、description、可选的 model
  • Markdown 正文作为系统提示

指令(叠加)

所有指令来源组合叠加——不会被覆盖,全部追加。

顺序来源
1包基础提示 default_agent_prompt.md(始终加载)
2~/.deepagents/{agent}/AGENTS.md(追加)
3.deepagents/AGENTS.md(追加)
4项目根目录的 AGENTS.md(追加)
  • 四个来源的指令全部生效
  • 后面的指令追加到前面的之后
关键区别:技能和子 Agent 是"覆盖"机制(同名只保留最高优先级),而指令是"叠加"机制(所有来源都生效)。不要混淆这两种行为。
图:覆盖机制与叠加机制对比

目录区别

.deepagents/ 与 .agents/ 的定位和使用场景

.deepagents/

Deep Agents Code 专用

包含说明
AGENTS.md自定义指令
skills/专属技能
agents/子 Agent 定义
.state/运行时状态

适用场景:使用 Deep Agents Code 专属功能的技能和配置,如依赖特定的工具调用或内部约定。

.agents/

工具无关

包含说明
skills/通用技能

适用场景:希望在不同 AI CLI 工具(如 Claude Code、Cursor、Aider 等)之间共享的技能。不依赖任何特定工具的专属功能。

实践建议:如果你写了一个技能,既能在 Deep Agents Code 中使用,也能在其他 AI 编码助手中使用,就放在 .agents/skills/。如果技能使用了 Deep Agents 的特定功能(如特定的沙箱后端、特定的工具 API),就放在 .deepagents/skills/。

清理操作

按需清理特定数据——不同的需求对应不同的命令

需求操作
重置所有数据 rm -rf ~/.deepagents
仅清除会话 rm ~/.deepagents/.state/sessions.db*
清除输入历史 rm ~/.deepagents/.state/history.jsonl
清除 API 密钥 rm ~/.deepagents/.state/auth.json
清除 OAuth 令牌 rm -rf ~/.deepagents/.state/mcp-tokens
重跑首次引导 rm ~/.deepagents/.state/onboarding_complete
重置 Agent 指令 dcode agents reset --agent {name}
移除某个技能 rm -rf ~/.deepagents/{agent}/skills/{skill-name}
危险操作警告:删除 ~/.deepagents/.state/sessions.db 将移除所有对话历史和检查点。除非你已备份该文件,否则此操作无法撤销。执行前请务必确认。
# 安全清理示例——先备份会话数据库,再删除
$ cp ~/.deepagents/.state/sessions.db ~/sessions-backup.db
$ rm ~/.deepagents/.state/sessions.db

# 只想重新开始?删除引导标记即可,不影响其他数据
$ rm ~/.deepagents/.state/onboarding_complete
$ dcode  # 下次启动会自动重新进入首次引导流程

本章回顾

到这里,你已经掌握了 Deep Agents Code 数据存储的完整图景

你学到了什么

  • 两个核心目录:~/.deepagents/(专用)和 ~/.agents/(工具无关)
  • 用户级(全局生效)和项目级(仅当前项目)两个层级
  • 会话、历史、指令、技能、子 Agent 各自的存储位置和读写权限
  • 技能和子 Agent 的优先级是"覆盖",指令的优先级是"叠加"
  • 项目级总是优先于用户级;工具无关目录优先于专用目录
  • 针对不同需求的清理命令,以及操作前备份的重要性

关键要点速查

  • 改指令 → 编辑对应的 AGENTS.md
  • 加技能 → 放到 skills/{name}/SKILL.md
  • 加子 Agent → 放到 agents/{name}/AGENTS.md
  • 清会话 → 删除 sessions.db(先备份)
  • 跨工具共享 → 用 .agents/skills/
  • 彻底重置 → rm -rf ~/.deepagents
核心结论:Deep Agents Code 的数据存储设计遵循"专用与通用分离、用户级与项目级分层、覆盖与叠加分治"三个原则。理解这些规则,你就能精确控制 Agent 的行为配置、安全地管理运行时数据、合理地组织可复用的技能。