# atomcode **Repository Path**: yanglbsjz/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-04-19 - **Last Updated**: 2026-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
      _   _                  ____          _
     / \ | |_ ___  _ __ ___ / ___|___   __| | ___
    / _ \| __/ _ \| '_ ` _ \ |   / _ \ / _` |/ _ \
   / ___ \ || (_) | | | | | | |__| (_) | (_| |  __/
  /_/   \_\__\___/|_| |_| |_|\____\___/ \__,_|\___|

用 Rust 编写的开源终端 AI 编码助手

English · 简体中文

安装 · 快速开始 · 功能 · 架构 · 开发 · 贡献

version rust license platform

--- > **本项目 100% 由 AI 生成。** 每一行代码、每一个架构决策的实现、每一次提交都由 AI 完成。人类开发者仅担任决策者和产品经理的角色——定义"要做什么",而不是"怎么做"。 --- AtomCode 是一款住在你终端里的 AI 编码助手。用自然语言给它一个任务,它会自动阅读代码、编辑文件、执行命令、验证结果——全程自主完成。 你可以把它理解为 Claude Code / Cursor Agent 的开源替代品,完全运行在终端里,并且可以接入任何兼容 OpenAI 接口的模型。 ## 功能特性 ### Agent 循环 - **自主多步执行** —— 读文件、改代码、跑测试、修错误,循环直到完成 - **验证回路** —— 每次编辑后自动跑语法检查确认无误,才算任务完成 - **动态步数预算** —— 根据编辑文件数动态放宽步数上限,同时封顶以控成本 - **循环检测** —— 识别并打破重复调用同一工具的死循环 - **三层 JSON 修复** —— 修复畸形工具调用参数 - **Turn 级 datalog** —— 结构化记录每一轮工具调用,便于回放、调试和评测 ### 内置工具 文件与 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 | | 智谱(GLM) | 支持 | GLM-4、GLM-5 | | 通义千问(阿里) | 支持 | Qwen-Plus、Qwen-Max | | SiliconFlow | 支持 | 多种开源模型 | | Ollama(本地) | 部分支持 | Llama 3、Qwen2 等 | | 任意 OpenAI 兼容接口 | 支持 | — | ### 会话与登录 - **持久化会话** —— 每次对话都会保存,用 `/resume` 恢复或切换 - **AtomGit OAuth 登录** —— `/login`(或 `atomcode login`)将 CLI 与你的 AtomGit 账号绑定 - **SSO 登录** —— `/login-with-sso`,GitCode 内部用户使用 - **Headless 模式** —— `atomcode -p "..."` 非交互式跑一条 prompt,结果直接输出到 stdout(类似 Claude Code 的 `-p`) - **Daemon 模式** —— `atomcode-daemon` 提供 HTTP API,用于查询会话历史和 SSE 流式对话 ### 终端 UI - **实时流式输出** —— Markdown 渲染 + 语法高亮 - **代码块** —— 语言标签、行号、`base16-ocean.dark` 主题 - **多行输入** —— Shift+Enter 换行、高度自适应、历史记录 - **文本选择** —— 鼠标拖选、自动滚动、复制到剪贴板 - **斜杠命令** —— `/model`、`/provider`、`/resume`、`/diff`、`/undo`、`/cost`、`/clear`、`/compact` 等(完整列表见下) - **文件附加** —— 粘贴文件路径即可把内容作为上下文带入 - **Bracketed paste** —— 长文本粘贴自动折叠为紧凑的指示器 - **Skills** —— 从 skill 目录加载的用户自定义命令,像普通斜杠命令一样调用 ### 安全性 - **破坏性命令检测** —— `rm -rf`、`git push --force`、`DROP TABLE` 等需要显式确认 - **敏感文件保护** —— 写入 `/etc`、`~/.ssh`、shell 配置文件需要确认 - **按会话的权限授予** —— 单条工具模式一次授权,或设为始终允许 - **源码文件删除必须确认** —— 对代码文件执行 `rm` 从不自动放行 - **撤销** —— `/undo` 通过文件历史快照回滚上一轮的所有文件编辑 ## 安装 ### 从源码构建(推荐) ```bash git clone https://atomgit.com/atomgit_atomcode/atomcode.git cd atomcode cargo build --release ``` 产物位于 `target/release/atomcode`,将其加入 PATH: ```bash # macOS / Linux cp target/release/atomcode ~/.local/bin/ # 或 sudo cp target/release/atomcode /usr/local/bin/ ``` ### 依赖 - Rust 1.75+(用于构建) - 任一支持的模型提供方的 API Key(或使用 `/login` 的 AtomGit 账号) ## 快速开始 ### 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 ``` 然后直接用自然语言描述你想做的事: ``` > 修复 OAuth 回调后用户被重定向到 404 的登录 bug > 给设置页加一个深色模式切换 > 把数据库模块重构为使用连接池 > 给支付处理模块写单元测试 ``` ## 快捷键 ### 输入 | 键位 | 动作 | |-----|--------| | `Enter` | 发送消息 | | `Shift+Enter` | 换行 | | `Esc` | 清空输入 / 取消流式输出 | | `Up/Down` | 浏览输入历史 | | `Tab` | 接受补全 | | `Ctrl+U` | 清空当前行 | | `Ctrl+W` | 删除一个单词 | | `Ctrl+K` | 删除到行尾 | ### 导航 | 键位 | 动作 | |-----|--------| | `Ctrl+Up/Down` | 滚动聊天区(3 行) | | `PageUp/PageDown` | 滚动聊天区(一页) | | `Ctrl+L` | 清空对话 | | `Ctrl+Shift+C` | 复制选中内容 | | `Ctrl+C` | 取消当前操作(连按两次退出) | ### 斜杠命令 | 命令 | 动作 | |---------|--------| | `/resume` | 恢复或切换会话 | | `/session` | 创建新会话 | | `/provider` | 管理 provider | | `/model` | 切换模型 / provider | | `/login` | 通过 AtomGit OAuth 登录 | | `/cd` | 切换工作目录 | | `/undo` | 撤销上一轮的文件编辑 | | `/diff` | 显示当前修改的 git diff | | `/cost` | 显示本次会话的 token 消耗 | | `/copy` | 复制 AI 的最后一条回复 | | `/clear` | 清空对话 | | `/issue` | 在 AtomGit 上创建 issue | | `/config` | 编辑配置文件 | | `/status` | 查看登录状态和模型信息 | | `/logout` | 退出 AtomGit 登录 | | `/help` | 查看命令与快捷键 | | `/quit` | 退出程序(或连按 Ctrl+C) | ## 架构 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-tui/ # 终端 UI(ratatui + crossterm) app.rs # App 状态机 ui/ # 渲染:聊天、输入、状态栏、Markdown 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 做状态管理。 - 始终使用 `