Skip to content

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.rs

3.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 天后清理
Datalogdatalog/*/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_ed25519

Windows 敏感路径:

\Program Files
\Program Files (x86)
\ProgramData

8. 新覆盖的盲区

#之前未覆盖的领域状态发现
1完整目录结构~/.atomcode/ 16+ 子目录和 20+ 文件
2项目级 .atomcode/7+ 子目录,全局/项目级层叠
3Datalog 系统crate 路径 + Markdown 格式 + 每回合记录
4会话存储格式JSON + NDJSON 双格式
5权限缓存机制始终允许表 + 敏感路径列表
6数据生命周期各类型保留策略
7敏感路径保护28 个 Linux/macOS 路径 + 3 个 Windows 路径
8SyncMarker 格式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

基于 VitePress 构建 · AtomCode v4.25.3 逆向工程分析文档