# atomcode
**Repository Path**: 471351719/atomcode
## Basic Information
- **Project Name**: atomcode
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-18
- **Last Updated**: 2026-07-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
_ _ ____ _
/ \ | |_ ___ _ __ ___ / ___|___ __| | ___
/ _ \| __/ _ \| '_ ` _ \ | / _ \ / _` |/ _ \
/ ___ \ || (_) | | | | | | |__| (_) | (_| | __/
/_/ \_\__\___/|_| |_| |_|\____\___/ \__,_|\___|
用 Rust 编写的开源终端 AI 编码助手
English · 简体中文
安装 ·
快速开始 ·
功能 ·
架构 ·
开发 ·
贡献 ·
社区
---
> **本项目 100% 由 AI 生成。** 每一行代码、每一个架构决策的实现、每一次提交都由 AI 完成。人类开发者仅担任决策者和产品经理的角色——定义"要做什么",而不是"怎么做"。
---
AtomCode 是一款住在你终端里的 AI 编码助手。用自然语言给它一个任务,它会自动阅读代码、编辑文件、执行命令、验证结果——全程自主完成。
你可以把它理解为 Claude Code / Cursor Agent 的开源替代品,完全运行在终端里,并且可以接入任何兼容 OpenAI 接口的模型。
## 功能特性
### Agent 循环
- **自主多步执行** —— 读文件、改代码、跑测试、修错误,循环直到完成
- **验证回路** —— 每次编辑后自动跑语法检查确认无误,才算任务完成
- **动态步数预算** —— 根据编辑文件数动态放宽步数上限,同时封顶以控成本
- **循环检测** —— 识别并打破重复调用同一工具的死循环
- **三层 JSON 修复** —— 修复畸形工具调用参数
- **Turn 级 datalog** —— 结构化记录每一轮工具调用,便于回放、调试和评测
### 模式与自主
- **Plan / Build 模式** —— `/plan` 切换到只读探索模式(agent 只调研、不改文件),`/build` 切回完整执行
- **目标模式** —— `/goal <目标>` 设定完成条件后,agent 会一轮接一轮自动循环执行,直到目标达成
- **代码审查** —— `/review` 审查当前改动,`/review staged` 审查暂存区,`/review ` 对比某个基准 ref
- **后台会话** —— `/bg` 把任务放到分离的槽位执行,长任务进行时你仍可继续使用 TUI
### 内置工具
文件与 Shell:
- `read_file`、`write_file`、`edit_file`、`search_replace`
- `bash`、`grep`、`glob`、`list_directory`、`change_dir`
- `web_search`、`web_fetch`
代码图谱(语言感知的代码智能):
- `list_symbols`、`read_symbol`、`find_references`
- `trace_callers`、`trace_callees`、`trace_chain`
- `file_deps`、`blast_radius`
自动化:
- `auto_fix` —— 自动 lint / 类型检查修复循环
- `use_skill` —— 调用用户自定义 skill
### 多模型支持
支持任何实现了 OpenAI function calling 接口的模型:
| 提供方 | Function Calling | 已验证模型 |
|----------|:---:|---|
| Claude(Anthropic) | 支持 | Claude Sonnet 4.5/4.6、Opus 4.6 |
| OpenAI | 支持 | GPT-4o、GPT-4.1 |
| DeepSeek | 支持 | DeepSeek V3、DeepSeek R1、DeepSeek V4 |
| 智谱(GLM) | 支持 | GLM-4、GLM-5、GLM-5.2(AtomCode Pro 套餐专属模型) |
| 通义千问(阿里) | 支持 | Qwen-Plus、Qwen-Max |
| SiliconFlow | 支持 | 多种开源模型 |
| Ollama(本地) | 部分支持 | Llama 3、Qwen2 等 |
| 任意 OpenAI 兼容接口 | 支持 | — |
### 会话与登录
- **持久化会话** —— 每次对话都会保存;命令行可用 `atomcode --continue` 或 `-c` 继续上一次会话,在 TUI 内可用 `/resume` 恢复或切换
- **AtomGit OAuth 登录** —— `/login`(或 `atomcode login`)将 CLI 与你的 AtomGit 账号绑定
- **SSO 登录** —— `/login-with-sso`,GitCode 内部用户使用
- **Headless 模式** —— `atomcode -p "..."` 非交互式跑一条 prompt,结果直接输出到 stdout(类似 Claude Code 的 `-p`);需要确认的 `bash` 会自动批准,其他需要确认的工具会被拒绝
- **Daemon 模式** —— `atomcode-daemon` 提供 HTTP API,用于查询会话历史和 SSE 流式对话
### 终端 UI
- **实时流式输出** —— Markdown 渲染 + 语法高亮
- **代码块** —— 语言标签、行号、`base16-ocean.dark` 主题
- **多行输入** —— Shift+Enter 或 `\` + Enter 换行、高度自适应、历史记录
- **任务完成通知** —— 长任务结束后优先走终端原生通知协议,必要时回退到系统通知
- **文本选择** —— 鼠标拖选、自动滚动、复制到剪贴板
- **斜杠命令** —— `/model`、`/provider`、`/resume`、`/bg`、`/diff`、`/undo`、`/cost`、`/clear`、`/compact` 等(完整列表见下)
- **文件附加** —— 粘贴文件路径即可把内容作为上下文带入
- **Bracketed paste** —— 长文本粘贴自动折叠为紧凑的指示器
- **Skills** —— 从 skill 目录加载的用户自定义命令,像普通斜杠命令一样调用
### Web UI
- **`/webui`**(TUI 内)或 **`atomcode webui`**(命令行)会在浏览器里打开一个本地 Web 界面,作为终端界面之外的另一种选择——同一个 agent、同一份会话,渲染在浏览器中
- **仅本地回环** —— server 绑定 `127.0.0.1` 并使用一次性 token,不对网络暴露
- **`/webui stop`** 停止进程内 server(之后再次 `/webui` 会重新启动)
### App 远程访问
- **`/app`**(TUI 内)开启移动端远程访问,终端打印二维码,用手机 GitCode App 扫码即可在任意网络下连入当前对话
- **任意网络可达** —— 电脑通过反向 WSS 隧道连接到公网中继,手机经中继访问电脑,不需要公网 IP、DDNS 或路由器端口映射
- **双向实时同步** —— 任一端发消息,另一端实时显示(AI 流式回复、工具调用卡片、token 用量)
- **远程命令** —— 手机端支持 `/status`、`/cost`、`/diff`、`/whoami` 等斜杠命令,在桌面端执行并回显
- **切项目 / 切会话** —— 手机端切换项目或点开历史对话,桌面端跟随切换
- **模型双向同步** —— 任一端切换模型,另一端同步跟随
- **`/app stop`** 断开远程访问
### 安全性
- **破坏性命令检测** —— `rm -rf`、`git push --force`、`DROP TABLE` 等需要显式确认
- **按路径分层确认** —— 工作区外读取、敏感路径访问、以及所有工作区外写入会按风险等级请求确认
- **敏感文件保护** —— 系统保护路径、凭证目录、shell 配置、`.env` 文件、密钥/证书文件会触发更强的确认规则
- **Shell 绕过防护** —— `cat`、`head`、`ls`、`cp`、`mv`、`tee` 等常见 shell 文件命令会继承和文件工具一致的路径审批模型
- **按会话的权限授予** —— 单条工具模式一次授权,或设为始终允许
- **源码文件删除必须确认** —— 对代码文件执行 `rm` 从不自动放行
- **撤销** —— `/undo` 通过文件历史快照回滚上一轮的所有文件编辑
完整设计与当前边界见 [权限模型](./docs/security/permission-model.md)。
### 隐私
- 📊 匿名遥测(默认开启,可关闭)— 详见 [docs/telemetry.md](docs/telemetry.md)
## 安装
### 从源码构建(推荐)
```bash
git clone https://atomgit.com/atomgit_atomcode/atomcode.git
cd atomcode
cargo install --path crates/atomcode-cli --locked
```
编译产物位于 `target/release/atomcode`。在 macOS / Linux / HarmonyOS PC 其被安装到 `~/.cargo/bin/atomcode`,
在 Windows 系统上其被安装到 `$env:USERPROFILE/.cargo/bin/atomcode.exe`。请确保 `~/.cargo/bin`
(或 `%USERPROFILE%\.cargo\bin`)已经被添加到 `PATH` 环境变量中。
如果只想要编译,不要安装,运行:
```bash
cargo build --release
```
编译产物会在 `target/release/atomcode` 生成。
### 包管理器安装
除了从源码构建外,AtomCode CLI 也可以通过以下包管理器安装:
```bash
# 使用 npm 安装
npm install -g @atomgit.com/atomcode
# 使用 Homebrew 安装
brew install --cask atomcode
```
### 依赖
- Rust 1.88+(用于构建;更旧的 Cargo 无法解析当前 lock 文件)
- 任一支持的模型提供方的 API Key(或使用 `/login` 的 AtomGit 账号)
### 权限 —— 不要用 `sudo` 启动
请用**普通用户**运行 AtomCode,切勿 `sudo`。AtomCode 把配置、会话、日志都放在
`~/.atomcode`;一旦用 root 跑过一次,就会在那里留下 root 属主的文件,之后非 root
启动会在引擎初始化阶段报错:
```
engine v2 assemble failed: Permission denied (os error 13)
```
(提示里可能是 `prepare` 而非 `assemble`——同一个原因。)遇到这种情况,把属主收回
并停止使用 `sudo`:
```bash
sudo chown -R "$(id -un):$(id -gn)" ~/.atomcode
atomcode # 不要再加 sudo
```
在 Linux 客户机上,工作目录若在 VirtualBox 共享文件夹(`/media/sf_*`,属主
`root:vboxsf`)也会导致权限错误——用 `sudo usermod -aG vboxsf "$USER"` 把自己加进
该组(重新登录后生效),而不是用 `sudo`。
### 卸载
移除 AtomCode 及(可选)其数据:
```bash
atomcode uninstall # 交互模式:分组询问
atomcode uninstall --keep-data # 仅删除二进制 + PATH 配置
atomcode uninstall --purge # 一并删除 ~/.atomcode/
atomcode uninstall --dry-run # 仅打印计划,不实际删除
```
二进制已损坏或丢失时使用兜底脚本:
```bash
curl -fsSL https://raw.atomgit.com/atomgit_atomcode/atomcode/raw/main/scripts/uninstall.sh | sh
# Windows:
irm https://raw.atomgit.com/atomgit_atomcode/atomcode/raw/main/scripts/uninstall.ps1 | iex
```
默认保留凭据(`auth.toml`、`mcp.json`、`config.toml`、`ATOMCODE.md`),传 `--purge` 才会一起清除。
## 快速开始
### 1. 首次运行
```bash
atomcode
```
首次运行会有一个向导帮你配置模型:
```
Welcome to AtomCode! Let's set up your first provider.
Select provider:
[1] Claude (Anthropic)
[2] OpenAI
[3] OpenAI Compatible (DeepSeek, Qwen, Zhipu, Moonshot...)
[4] Ollama (local)
```
### 2. 配置
配置文件位于 `~/.atomcode/config.toml`,最小单 provider 样例:
```toml
default_provider = "deepseek"
[providers.deepseek]
type = "openai"
api_key = "sk-..."
model = "deepseek-chat"
base_url = "https://api.deepseek.com/v1"
context_window = 64000
```
可以配置多个 provider,用 `/model` 或 `/provider` 切换。完整示例
(涵盖 Claude / OpenAI / OpenAI-兼容 endpoint 如 DeepSeek / GLM /
SiliconFlow / OpenRouter / Ollama,以及 `[datalog]` 段)见
[`docs/config.example.toml`](docs/config.example.toml)——拷出来按需改。
手动改完 `config.toml` 后,在 atomcode 里执行 `/reload` 重新加载配置,
不用重启。
### 3. 开始编码
```bash
# 在项目目录下启动
cd your-project
atomcode
# 或指定目录
atomcode -C /path/to/project
# 或指定模型
atomcode --model gpt-4o
# Headless 模式(单条 prompt,结果输出到 stdout)
atomcode -p "简要说明这个仓库的 agent loop"
# 从文件读取 prompt
atomcode --prompt-file task.md
```
在 headless 模式下,需要确认的 `bash` 会自动批准并写到 stderr;其他需要确认的工具会被拒绝。
然后直接用自然语言描述你想做的事:
```
> 修复 OAuth 回调后用户被重定向到 404 的登录 bug
> 给设置页加一个深色模式切换
> 把数据库模块重构为使用连接池
> 给支付处理模块写单元测试
```
## 快捷键
### 输入
| 键位 | 动作 |
|-----|--------|
| `Enter` | 发送消息 |
| `Shift+Enter` | 换行(需要终端支持 Kitty 键盘协议) |
| `Ctrl+Enter` | 换行(需要终端支持 Kitty 键盘协议) |
| `Ctrl+J` | 换行(需要终端支持 Kitty 键盘协议) |
| `Alt+Enter` | 换行(多数终端可用,见下方兼容性说明) |
| `\` + `Enter` | 换行(所有终端通用——输入一个 `\` 后按回车,`\` 会被自动删除) |
| `Esc` | 清空输入 / 取消流式输出 |
| `Esc` ×2 | 撤销上一轮 |
| `Up/Down` | 浏览输入历史 |
| `Tab` | 接受补全 |
| `Ctrl+U` | 清空当前行 |
| `Ctrl+W` | 删除一个单词 |
| `Ctrl+K` | 删除到行尾 |
| `Ctrl+V` | 从剪贴板粘贴图片(Windows 下请改用 `/paste`,见下方说明) |
> **换行快捷键的终端兼容性:**
> - `Shift+Enter`、`Ctrl+Enter`、`Ctrl+J` 都需要终端支持 Kitty 键盘协议 — kitty、WezTerm、Alacritty、iTerm2 ≥3.5、Windows Terminal ≥1.21。不支持的终端会把它们都退化成普通 `Enter`(直接发送消息)。
> - `Alt+Enter` 在多数终端的字节层面就能工作,但 **Windows Terminal 默认把它绑给"切换全屏"** — 在 设置 → 操作 中删掉那条绑定即可释放。
> - Xshell 不支持 Kitty 协议;可在键盘映射设置中把某个空闲组合映射为发送 `ESC, Enter`(`\x1b\r`)达到同样效果,或直接从剪贴板粘贴多行文本(已启用 bracketed paste)。
> **Windows 下粘贴图片:**
> Windows Terminal 和 conhost 默认把 `Ctrl+V` 绑给它们自己的 `paste` action — 这个 action 只会从剪贴板读 `CF_UNICODETEXT`,剪贴板上只有图片时它什么都不会发,应用里的 `Ctrl+V` 处理器根本收不到事件。两种解法:
> 1. 使用 **`/paste`** —— 这个斜杠命令直接读取剪贴板图片并以 `[Image #N]` 的形式附加到输入框,在 Windows Terminal、PowerShell 7、conhost、git bash 等所有终端里都能正常工作。Windows 版的 TUI 右下角会自动显示 `剪贴板有图片 · /paste 粘贴` 作为提示。
> 2. 若想保留 `Ctrl+V` 的肌肉记忆:打开 Windows Terminal 的 `settings.json`(`Ctrl+,` → 右下角"打开 JSON 文件"),在 `"actions"` 数组里删掉 `{ "command": "paste", "keys": "ctrl+v" }`,或把它改绑到 `ctrl+shift+v`。重启 Windows Terminal 后,`Ctrl+V` 就能透传给 atomcode 了。
>
> Git Bash(MinTTY)不拦截 `Ctrl+V`,开箱即用。
### 导航
| 键位 | 动作 |
|-----|--------|
| `Ctrl+Up/Down` | 滚动聊天区(3 行) |
| `PageUp/PageDown` | 滚动聊天区(一页) |
| `Ctrl+L` | 清空对话 |
| `Ctrl+Shift+C` | 复制选中内容 |
| `Ctrl+C` | 取消当前操作(连按两次退出) |
### 斜杠命令
在 TUI 中输入 `/` 即可浏览完整列表并实时补全;`/help` 会列出命令与快捷键。
**会话与工作区**
| 命令 | 动作 |
|---------|--------|
| `/resume` | 恢复或切换会话 |
| `/session` | 创建新会话 |
| `/rename <名称>` | 重命名当前会话 |
| `/clear` | 开始新对话(清空上下文与屏幕) |
| `/bg` | 将当前会话放到后台;子命令:`/bg list`、`/bg `、`/bg drop `、`/bg help` |
| `/background ` | 兼容入口:在 `/bg` 槽位中启动一次性后台任务 |
| `/cd` | 切换工作目录 |
| `/worktree` | Git worktree 隔离(`create` / `list` / `done` / `cleanup`) |
| `/webui` | 启动浏览器 webui(子命令:`stop`、`lan`、`--host <地址>`) |
| `/sync` | 连接到实时 webui 会话(`/sync off` 断开) |
**模式、自主与审查**
| 命令 | 动作 |
|---------|--------|
| `/plan` | 切换到 Plan 模式(只读探索) |
| `/build` | 切换到 Build 模式(完整执行) |
| `/goal <目标>` | 设置完成目标——agent 自动循环执行直到条件满足 |
| `/review` | 代码审查当前改动(`/review` · `/review staged` · `/review `) |
| `/think` | 控制深度思考(on / off / budget N) |
| `/effort` | DeepSeek 推理努力控制(high / max / off) |
**Provider 与账号**
| 命令 | 动作 |
|---------|--------|
| `/model` | 切换模型 / provider |
| `/provider` | 管理 provider(添加 / 编辑 / 删除) |
| `/proxy` | 切换出站代理模式 |
| `/login` | 通过 AtomGit OAuth 登录并申领 CodingPlan 免费模型 |
| `/logout` | 退出 AtomGit 登录 |
| `/whoami` | 查看当前登录用户 |
| `/status` | 查看登录状态和模型信息 |
**文件、编辑与上下文**
| 命令 | 动作 |
|---------|--------|
| `/diff` | 显示当前修改的 git diff |
| `/undo` | 撤销某一轮的文件编辑(`/undo` 或 `/undo N`) |
| `/view <文件路径>` | 在浮层窗口中查看文件内容 |
| `/paste` | 从剪贴板粘贴图片(Windows 下 Ctrl+V 被终端拦截时的备用入口) |
| `/copy` | 从上一条回复复制代码块(`/copy`、`/copy N`、`/copy all`) |
| `/cost` | 显示本次会话的 token 消耗 |
| `/context` | 查看上下文预算占用明细 |
| `/compact` | 压缩对话历史 |
**记忆**
| 命令 | 动作 |
|---------|--------|
| `/remember <事实>` | 保存一条记忆(`--global` 对所有项目生效) |
| `/forget <关键词>` | 删除匹配的记忆 |
| `/memory` | 查看所有已保存的记忆 |
**扩展**
| 命令 | 动作 |
|---------|--------|
| `/mcp` | MCP 服务状态(子命令:`reload`、`tools`、`login`、`logout`) |
| `/plugin` | 插件市场(`marketplace` / `install` / `uninstall` / `list`) |
| `/skills` | 浏览已加载的 skills |
**项目与系统**
| 命令 | 动作 |
|---------|--------|
| `/init` | 根据工作目录生成 `.atomcode.md` 项目指令 |
| `/config` | 显示配置文件路径 |
| `/reload` | 从磁盘重新加载 `~/.atomcode/config.toml` |
| `/upgrade` | 升级 atomcode 到最新版(子命令:`rollback`) |
| `/setup` | 首次运行:安装推荐 skill 并执行 |
| `/welcome` | 重新运行引导向导 |
| `/language` | 切换显示语言 |
| `/issue` | 反馈 bug / 提交功能需求(交互式向导) |
| `/guide <问题>` | 向 atomcode-guide 询问使用方式 |
| `/keys` | 查看键盘快捷键 |
| `/help` | 查看命令与快捷键 |
| `/quit`、`/exit` | 退出 AtomCode(或连按 Ctrl+C) |
> **插件命令**:除了上面的内置命令,插件还能注册自己的斜杠命令。例如安装官方频道插件后即可使用 `/wechat`(显示 AtomCode 微信用户群二维码):
>
> ```text
> /plugin marketplace add https://atomgit.com/atomgit_atomcode/AtomCode-Channel
> /plugin install weixin@atomcode-channel
> ```
## 架构
AtomCode 是一个 Rust workspace,由四个 crate 组成:
```
atomcode/
crates/
atomcode-core/ # 无头核心库,不依赖 TUI
agent/ # AgentLoop:自主工具调用循环
turn/ # TurnRunner、datalog、权限决策器
config/ # 配置加载、provider 配置
conversation/ # 消息类型、窗口化上下文
provider/ # LlmProvider trait + OpenAI/Claude/Ollama
tool/ # Tool trait + 内置工具实现
session/ # 持久化会话
skill.rs # 用户自定义 skill
atomcode-tuix/ # 终端 UI — retained-mode 渲染器(CC 风格 normal mode)
event_loop/ # App 状态机、命令分发
render/ # cell-level 渲染器、diff、retained-mode 帧循环
modals/ # 各种 picker(dir、model、session、provider、issue)
atomcode-cli/ # 可执行入口(TUI + headless -p 模式)
main.rs # CLI 参数、首次运行向导、启动
auth/ # AtomGit OAuth 客户端
atomcode-daemon/ # 基于 atomcode-core 的 HTTP/SSE API 服务
```
### 设计原则
1. **技术栈无关** —— 核心引擎不硬编码任何特定语言的逻辑,通过 `package.json`、`Cargo.toml`、`pyproject.toml`、`pom.xml` 等描述文件动态探测项目类型。
2. **Agent 解耦** —— `AgentLoop` 作为独立的异步任务运行,通过 channel(`AgentCommand` / `AgentEvent`)与 TUI 通信。核心库完全不依赖 TUI,这也是 daemon 得以存在的基础。
3. **工具安全** —— 所有破坏性操作必须经用户显式确认。工具失败会作为 observation 返回给模型,绝不 panic。
4. **上下文感知** —— token 预算感知的会话窗口、项目文件树注入、每轮系统提醒,在不超出上下文限制的同时让模型保持专注。
## 项目指令文件
在项目根目录创建 `.atomcode.md` 文件,给 AtomCode 提供持久化上下文:
```markdown
# Project Instructions
本项目是 Vue 3 + TypeScript,使用 Pinia 做状态管理。
- 始终使用 `