AtomCode 文件系统布局与 Datalog 系统分析
持续深度分析 — $ATOMCODE_HOME 完整目录结构 + Datalog 存储格式 2026-06-23
1. $ATOMCODE_HOME(~/.atomcode/)完整目录结构
~/.atomcode/ # ATOMCODE_HOME
├── config.toml # 主配置文件 (TOML)
├── mcp.json # MCP 服务器配置 (JSON)
├── hooks.json # 钩子配置 (JSON)
├── hooks.toml # 钩子配置 (TOML 替代格式)
├── referral_state.json # 推荐状态
├── pending_invite # 待处理邀请码
├── install_completed_at # 安装完成时间戳
│
├── ATOMCODE.md # 全局项目指令文件
├── memory.md # 内存存储
│
├── skills/ # 技能目录
│ ├── <name>/ # 每个 skill 一个子目录
│ │ ├── SKILL.md # Skill 定义 (必填)
│ │ ├── .seed-hash # 种子哈希 (防重复安装)
│ │ ├── template.yaml # 可选模板
│ │ ├── scripts/ # 可选脚本
│ │ └── examples/ # 可选示例
│ ├── atomcode-automation-recommender/ # 内置推荐 Skill
│ └── ...
│
├── commands/ # 斜杠命令目录
│ ├── <name>.md # 每个命令一个 Markdown 文件
│ └── ...
│
├── agents/ # 子代理模板目录
│ ├── code-reviewer.md
│ ├── security-reviewer.md
│ ├── test-writer.md
│ ├── api-documenter.md
│ ├── performance-analyzer.md
│ ├── ui-reviewer.md
│ ├── dependency-updater.md
│ └── migration-helper.md
│
├── plugins/ # 插件目录
│ ├── installed_plugins.json # 已安装插件索引
│ ├── marketplaces.json # 市场源列表
│ ├── <plugin>/ # 每个插件子目录
│ │ ├── plugin.json # 插件清单
│ │ ├── .atomcode-plugin/
│ │ │ └── marketplace.json # 市场元数据
│ │ └── ...
│ ├── local/ # 本地插件
│ │ └── ...
│ └── ...
│
├── auth.json # OAuth 认证数据 (StoredAuth)
├── codingplan_sync.json # CodingPlan 同步标记 (SyncMarker)
│
├── telemetry/ # 遥测数据
│ ├── queue/ # NDJSON 事件队列
│ │ ├── YYYYMMDD-HHMMSS.ndjson # 按时间分片
│ │ └── ...
│ └── health.json # 遥测健康状态
│
├── datalog/ # 调试日志 (按回合记录)
│ ├── <session_id>/ # 每个会话一个子目录
│ │ ├── turn_001.md # 回合详情 Markdown
│ │ ├── turn_002.md
│ │ └── ...
│ └── ...
│
├── sessions/ # 会话存储
│ ├── <session_id>.json # 会话数据 (JSON)
│ ├── <session_id>.ndjson # 会话数据 (NDJSON 流式)
│ └── ...
│
├── .setup.lock # Setup 锁文件
├── setup-state.json # Setup 状态 (种子哈希 + 版本)
│
├── staged/ # 升级暂存目录
│ └── <new_binary> # 新版本二进制暂存
│
├── wire-dump/ # 网络包转储 (ATOMCODE_WIRE_DUMP)
│
├── tools.atomcode.md # 工具指令文件
│
└── local/ # 项目本地数据
├── hooks.json # 项目级钩子
├── hooks.toml # 项目级钩子 (TOML)
└── ...2. 项目级 .atomcode/ 目录
项目根目录的 .atomcode/ 是项目级配置目录,与 ~/.atomcode/ 层叠共存:
.project-root/
└── .atomcode/ # 项目级配置
├── SKILL.md # 项目级 Skill
├── ATOMCODE.md # 项目级指令文件
├── CLAUDE.md # Claude 兼容指令
├── claude.md # (同上,小写)
├── .user.md # 用户指令覆盖
├── local/ # 项目本地数据
│ ├── hooks.json # 项目级钩子
│ ├── hooks.toml
│ └── ...
├── skills/ # 项目级 Skills
├── commands/ # 项目级命令
├── mcp.json # 项目级 MCP 配置
├── plugins/ # 项目级插件
│ └── local/ # 项目级本地插件
└── wire-dump/ # 项目级网络转储配置合并规则:
- 项目级
.atomcode/覆盖全局~/.atomcode/ - Skills:全局 + 项目级均加载
- Hooks:全局
hooks.json+ 项目级.atomcode/local/hooks.json均执行 - 插件:全局
~/.atomcode/plugins/与项目级.atomcode/plugins/都可见
3. Datalog 系统
3.1 配置
toml
[datalog]
# dir = "~/.atomcode/datalog" -> default (follows $HOME, ignores /cd)3.2 源代码路径
crates/atomcode-core/src/turn/datalog.rs3.3 记录格式
每个回合写入一个 Markdown 摘要文件:
~/.atomcode/datalog/<session_id>/
├── turn_001.md
├── turn_002.md
└── ...3.4 记录的 LLM 事件
每个回合记录:
- Input: 用户消息 + 系统提示
- Accessing: 读取的文件
- Reading: 正在读取的内容
- Writing: 写入的文件
- Tool Calls: 工具调用详情
- LLM Responses: 模型响应
- Tokens: Token 使用统计
4. 会话存储格式
4.1 JSON 格式(完整会话)
json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"project_hash": "a1b2c3d4",
"name": "my-session",
"created_at": "2026-06-23T10:00:00Z",
"updated_at": "2026-06-23T11:30:00Z",
"turns": [
{
"stat": {
"input_tokens": 523,
"output_tokens": 142,
"cached_tokens": 100,
"tool_calls": 3,
"had_error": false,
"duration_ms": 12345
},
"tool_calls": [
{
"id": "call_001",
"name": "read_file",
"arguments": "{\"file_path\": \"/path/to/file\"}",
"result": "..."
}
]
}
]
}4.2 NDJSON 格式(流式)
每行一个 JSON 事件,支持增量写入:
ndjson
{"type":"message","role":"user","content":"Hello"}
{"type":"message","role":"assistant","content":"Hi"}
{"type":"tool_call","id":"call_001","name":"read_file","arguments":"{...}"}
{"type":"tool_result","id":"call_001","result":"..."}
{"type":"tokens","input":523,"output":142}4.3 SyncMarker(CodingPlan 同步标记)
json
{
"last_sync_unix_secs": 1687500000,
"session": "..."
}文件路径:~/.atomcode/codingplan_sync.json
5. 权限缓存
AtomCode 维护一个"始终允许"的权限缓存,以规范路径为粒度:
路径: always_allow_map[canonical_path] = true
敏感路径(始终提示审批):
~/.ssh/
.env
/etc/
/private/etc/
/private/var/root/
/usr/local/
/Applications/
/var/folders/
credentials
id_rsa
id_dsa
id_ed25519
非敏感路径(可自动批准):
项目工作目录内的文件编辑6. 数据生命周期
| 数据类型 | 位置 | 保留策略 |
|---|---|---|
| 会话数据 | sessions/*.json | 用户手动删除 (TUI/API) |
| 遥测队列 | telemetry/queue/*.ndjson | 发送后删除或 7 天后清理 |
| Datalog | datalog/*/turn_*.md | 用户手动清理 |
| 升级暂存 | staged/ | 升级完成后清理 |
| 插件 | plugins/<name>/ | 通过 /plugin uninstall 卸载 |
| 认证 | auth.json | 通过 /logout 清除 |
| 同步标记 | codingplan_sync.json | 自动更新 |
7. 敏感路径保护
二进制中包含的敏感路径列表:
/System
/sbin
/private/etc
/private/var
/var/root
/usr/local
/private/usr/local
/Applications
/var/folders
/private/var/folders
.gnupg
.bashrc
.bash_profile
.zshrc
.zprofile
.zshenv
.npmrc
.pypirc
.env.local
credentials
id_rsa
id_dsa
id_ed25519Windows 敏感路径:
\Program Files
\Program Files (x86)
\ProgramData8. 新覆盖的盲区
| # | 之前未覆盖的领域 | 状态 | 发现 |
|---|---|---|---|
| 1 | 完整目录结构 | ✅ | ~/.atomcode/ 16+ 子目录和 20+ 文件 |
| 2 | 项目级 .atomcode/ | ✅ | 7+ 子目录,全局/项目级层叠 |
| 3 | Datalog 系统 | ✅ | crate 路径 + Markdown 格式 + 每回合记录 |
| 4 | 会话存储格式 | ✅ | JSON + NDJSON 双格式 |
| 5 | 权限缓存机制 | ✅ | 始终允许表 + 敏感路径列表 |
| 6 | 数据生命周期 | ✅ | 各类型保留策略 |
| 7 | 敏感路径保护 | ✅ | 28 个 Linux/macOS 路径 + 3 个 Windows 路径 |
| 8 | SyncMarker 格式 | ✅ | codingplan_sync.json |
| 9 | 配置搜索路径 | ✅ | 3 层 TOML 配置合并 |
本报告由持续分析循环生成 — 文件系统与存储完整覆盖
逆向命令索引
bash
# 提取文件系统路径
strings atomcode.bin.bak | grep -E "\.atomcode/|sessions/|datalog/|telemetry/" | sort -u
# 运行时查看目录结构
ls -la ~/.atomcode/
ls -la ~/.atomcode/sessions/*/ 2>/dev/null | head -5