第 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/
2. 较低
~/.agents/skills/
3. 较高
.deepagents/skills/
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 的行为配置、安全地管理运行时数据、合理地组织可复用的技能。