atlas
面向 AI 编程代理的源代码控制系统,把多个 coding agent 的会话、prompt、工具调用与 commit 关联起来,在一个地方统一查看和检索。它同时支持 Claude Code、Codex 和自家 agent,通过本地语义索引共享记忆,切换 agent 不丢上下文,Checkpoint 能在 rebase 后仍追踪到原始会话。本地优先,适合多 agent 协作开发的团队。
README
下载 · Discord · 文档 · 参与贡献 · 问题反馈
Atlas
Atlas 是编码 agent(智能代理)的源代码控制工具。每一次 agent 运行都会产生检查点:提交(commit)会关联回产生它的会话,连同该会话中的提示词、工具调用和推理过程。你可以看到哪个 agent 具体做了什么、为什么这么做。
让 Claude Code、Codex、Atlas 自带的 agent,或 ACP 注册表中的任何工具,在同一个代码库上并行运行,共享同一份记忆,因此在任务中途切换 agent 也不必从头再来。
- 每一次提交都有迹可循。 一个检查点将提交关联回产生它的会话:提示词、工具调用和文件变更保存在一起,数月之后仍可查询。
- 并行运行任意 agent。 Claude Code、Codex、Atlas 自带 agent 以及更广泛的 ACP 注册表中的工具,全部可以在同一窗口中对同一代码库操作。任务中途切换 agent 不必重新开始。
- 一份记忆,所有 agent 通用。 Claude Code 做出的决策会出现在 Codex 的下一次提示中。计划、文件变更、失败记录和架构备注会自动共享,并在设备端与你的提问进行匹配。
- 你的笔记就是 agent 的上下文。
.atlas/knowledge/中的 Markdown 文件,以及你已经写好的CLAUDE.md和AGENTS.md,会提供给项目中的每一个 agent。 - 在提示词中
@任何内容。 文件、文件夹、符号、分支、提交、笔记、论文和历史会话都会在提示词发送之前在本地解析。 - 默认本地化。 代码、笔记和会话都保留在你的机器上。当你需要在团队之间同步时,再登录并创建组织。
加入 Discord · #general 综合讨论 · #dev 构建问题 · #feature-requests 功能建议 · #bugs 问题反馈
从 CONTRIBUTING.md 开始提交改动,或在遇到任何问题时提出 issue。
目录
为什么选择 Atlas
如今 agent 编写了大量代码,却没有保留这些代码背后的推理过程。Atlas 将两者都记录下来,并使其可查询:什么发生了变更、由哪个 agent 完成、在什么时间点。
- agent 每次会话都从零开始。 Atlas 在设备端保留关于决策、计划和变更的持久记忆,并将相关内容推送到每一轮对话中。
- 切换 agent 会丢失上下文。 新会话的第一条消息会携带一份精选的事实包和上一条会话的末尾记录,即使那条会话是在不同的 agent 上运行的。
- 看不见的东西就无法审查。 每个会话都会被存储和检索,并与真实的提交图和文件级 diff(差异)相对照,展示实际落地的变更。
- 上下文散落在十个地方。 知识库、
CLAUDE.md、AGENTS.md、Claude Code 的记忆文件和 Codex 的历史记录,最终汇聚成一个所有 agent 都能读取的索引。 - 没有任何内容被锁定。 笔记是 markdown、画布是 JSON、会话是 JSONL,编辑器本身也是磁盘上的一个文件。关闭 Atlas 后,你可以在 vim 中继续工作。唯一的例外是检查点记录(哪个 agent 会话产生了哪个提交),它以 SQLite 形式存放在项目 gitignore 的
.atlas/目录中,因为它是被查询的,而不是被读取的。 - 从零开始为 agent 构建。 agent 运行时、共享记忆和会话历史是整个应用其余部分的基础。
工作原理
Atlas 按原样运行你的 agent,并丰富它们所看到的内容。
Claude Code 和 Codex 作为外部子进程通过 ACP(最常用、经过最多测试的协议路径)运行。Atlas agent 则在 Cersei(我们的 Rust agent 框架)上以进程内方式运行。
除此之外,Atlas 还可以启动 ACP 注册表中的任何 agent(Cursor、OpenCode、Kilo Code 等),自动拉取每个 agent 的官方二进制文件。所有这些 agent 都经过同一条发送路径,因此无论你选择哪一个,以下所有功能都适用。
[!NOTE] 对注册表中大量 agent 的 QA(质量保障)工作仍在持续进行中。
在你的消息到达 agent 之前,Atlas 会围绕它组装上下文:
| 注入内容 | 来源 | 时机 |
|---|---|---|
@ 提及 |
在提示词发送前于 Rust 中本地解析。笔记、技能、论文和历史会话直接内联;文件和文件夹解析为路径 | 每一轮 |
| 共享 agent 记忆 | 由任意 agent 写入的活动计划、决策、文件变更、失败记录和架构备注 | 每一轮 |
| 语义匹配 | 你的消息在设备端进行 embedding(向量嵌入),并与项目的记忆索引进行匹配 | 每一轮 |
| 会话交接 | 一份精选的事实包加上你在该项目中上一个会话的末尾记录,包括来自不同 agent 的会话 | 第一条消息 |
| 你已经写好的内容 | 知识笔记、CLAUDE.md、AGENTS.md、Claude Code 的记忆文件和 Codex 的历史记录,合并为一个索引 |
持续进行 |
- 一条路径,不针对个别 agent 做特殊处理。 通过 Atlas 运行你现有的 Claude Code 或 Codex 订阅,会话会获得更多上下文,而你的工作方式无需任何改变。
- Claude Code 的记忆对 Codex 可见,反之亦然。 这两种 agent 都无法单独读取对方的操作历史。
- 文件夹解析为指针,而非粘贴。
@一个 5000 行的文件会发送一个路径,agent 按需读取,因此一次提及不会在整场会话中占用上下文窗口。 - embedding(向量嵌入)在本地运行。 检索过程永远不会离开设备。
检查点
检查点提供的是单独一次提交无法告诉你的信息:哪个会话产生了它、agent 被要求做什么、它做了哪些工具调用、以及变更背后的推理过程。这些信息被保存在一起,而不是在终端滚动的一瞬间就丢失。
Atlas 将每个 agent 会话都本地记录在 .atlas/sessions.db 中,任何内容写入磁盘之前,秘密(secrets)都会被清除。当你提交时(使用任何工具,甚至在 Atlas 关闭的情况下),该提交会作为检查点关联回产生它的会话,而且这些关联在 rebase(变基)和 amend(修改提交)之后依然有效。
你不必阅读原始记录就能找回上下文:选定一个检查点,直接与它对话,它会根据该会话中实际发生的事情来回答。本地模式完全离线工作,无需账户。
功能特性
Agents(代理)
| 能力 | 描述 | 链接 |
|---|---|---|
| 多 agent 会话 | Claude Code、Codex 和 Atlas 原生 agent,可按会话选择,并在多个标签页中并行运行。会话独立于标签页,因此切换标签页永远不会中断正在进行的运行 | 聊天与会话 |
| 共享 agent 记忆 | 设备端语义索引(本地 embedding,HNSW 搜索),每个 agent 都可以读写 | 记忆 |
| @ 提及 | 本地解析文件、文件夹、符号、分支、提交、笔记、技能、论文和历史会话 | 聊天与会话 |
| 技能(Skills) | 全局或按项目范围的 SKILL.md 文件,通过符号链接到该 agent 自己的技能目录中来按 agent 启用 | 技能 |
| 包(Packs) | 安装包含技能、子 agent、命令、钩子、规则和脚本的 GitHub 仓库,可通过 skills.sh 索引发现 | 技能 |
| 模型聊天 | 在独立标签页中直接与模型对话,不经过 agent 循环 | 聊天与会话 |
| 组织 | 登录后创建组织,并在多台设备和团队成员之间同步 | 组织 |
Agent 历史
| 能力 | 描述 |
|---|---|
| 会话捕获 | 每个会话都会记录到 .atlas/sessions.db:提示词、消息、工具调用、每个工具触及的文件,以及它应用过的补丁 |
| 检查点 | 每个会话都关联到它产生的提交。提交是被观察而非拦截的,因此从终端执行的、从其他编辑器执行的、或 Atlas 关闭时执行的提交仍然能找到它的会话 |
| 经受历史改写 | 通过 patch-id 比对,链接会在 amend 和 rebase 后重新指向。当 squash(压缩提交)使链接真正产生歧义时,会将其孤立而不是猜测 |
| 导入历史记录 | 回填你现有的 Claude Code 历史记录,让记录从你安装 Atlas 之前就开始了 |
| 写入时清除秘密(secrets) | 任何内容被持久化之前都会进行脱敏处理,因此本地存储本身永远不会构成泄露风险 |
| 捕获健康状态 | 每个工作区一个信号:正常(OK)、降级(Degraded)或已停止(Stopped),每种状态都附有原因和下一步操作 |
| 任务控制中心 | agent 活动仪表板:随时间的使用量、消耗明细、时间线,以及可筛选的日志表 |
无需账户、无需网络即可工作。
工作区
| 能力 | 描述 | 链接 |
|---|---|---|
| 编辑器 | CodeMirror 编辑界面,支持跨重启恢复各项目的编辑器状态 | 编辑器 |
| Git | 真实提交图,带泳道分配、暂存/取消暂存/提交、分支操作和文件级 diff | Git 与 Diff |
| 终端 | 分块终端,每条命令都带有自己的输出、退出码和耗时,同时提供完整的交互界面以支持 vim、htop 等工具 |
终端 |
| 知识库 | .atlas/knowledge/ 中的纯 markdown 笔记,与代码一起进行版本管理,支持反向链接、链接图谱,并可导出为 HTML 或独立的服务器二进制文件 |
知识库 |
| 研究 | 搜索 arXiv 和 Semantic Scholar,拉取论文,在应用内阅读,并可在提示词中通过 @ 提及引用 |
研究 |
| 浏览器 | 标签页中的原生 WebKit webview,支持真实登录、cookie(网络饼干)和阅读模式 | 浏览器 |
| Spaces(空间) | 用于笔记及其关联关系的空间画板,以 JSON 形式保存在项目中 | 聊天与会话 |
| 分栏视图 | 最多三个可调整宽度的列,每列都有自己的标签页 | 编辑器 |
| 活动日志 | 项目中的每一个重要事件,均可筛选,并可在重启后固定若干行 | 时间线 |
下载
从 tryatlas.cc 或发布页面获取最新的 .dmg 文件。
[!NOTE] macOS 是当前支持的平台。
从源码构建
[!NOTE] Linux 和 Windows 基于同一套 Tauri 代码库构建,但尚未经过测试。
要使用 Claude Code agent,请安装 claude CLI 并将其加入你的 PATH。Atlas 原生 agent 不需要外部 CLI。
需要 Bun、Rust(稳定版,通过 rustup 安装)和 Xcode Command Line Tools。
Linux 系统依赖(GTK 3、WebKit2GTK 4.1、GLib 头文件)- Debian / Ubuntu / Linux Mint:
sudo apt install -y libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev - Fedora / RHEL:
sudo dnf install glib2-devel gtk3-devel webkit2gtk4.1-devel - Arch Linux / Manjaro:
sudo pacman -S glib2 gtk3 webkit2gtk-4.1 - openSUSE:
sudo zypper install glib2-devel gtk3-devel webkit2gtk3-devel
git clone https://github.com/pacifio/atlas
cd atlas
bun install
bun run dev:app
首次 Rust 编译需要几分钟;之后只需几秒钟。前端单独迭代时使用 bun run dev,但任何调用 invoke() 的操作都需要 dev:app。
生产构建:
bun run build:app # 生成 .app 包
bun run build:app:dmg # 生成 .app + .dmg 安装包
参与贡献
参见 CONTRIBUTING.md。有一点容易让人困惑:
- 功能开发针对当前版本分支,而非
main。main只接收已完成的版本分支,那次合并就是一次发布。
ARCHITECTURE.md 涵盖 Atlas 的构建方式。SECURITY.md 涵盖漏洞报告方式。
默认本地化
- 你的代码、笔记和会话都保留在你的机器上。 不会为了运行 agent 而上传任何内容。
- 任何内容写入磁盘之前,秘密(secrets)都会被清除。 不是上传之前,而是持久化之前。
- 会话捕获默认仅限本地。 你的 agent 会话的检查点记录会写入本机的
.atlas/sessions.db,并保留在那里。无需账户,在你明确选择同步之前,不会向任何地方发送任何内容。 - 账户是可选加入的。 登录以创建组织,并在多台设备和团队成员之间同步。
- 匿名使用分析默认开启。 仅收集粗略的元数据,绝不收集代码或提示词。了解收集哪些内容以及如何关闭。
相关链接
- 网站: tryatlas.cc
- 文档: docs.tryatlas.cc
- Discord: discord.gg/GmnFggaPfP
- 问题反馈: github.com/pacifio/atlas/issues
- 遥测: Atlas 收集哪些数据,以及如何关闭
贡献者
许可证
MIT。参见 LICENSE。