# 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
      _   _                  ____          _
     / \ | |_ ___  _ __ ___ / ___|___   __| | ___
    / _ \| __/ _ \| '_ ` _ \ |   / _ \ / _` |/ _ \
   / ___ \ || (_) | | | | | | |__| (_) | (_| |  __/
  /_/   \_\__\___/|_| |_| |_|\____\___/ \__,_|\___|

Open-source terminal AI coding agent written in Rust

English · 简体中文

Install · Quick Start · Features · Architecture · Development · Contributing · Community

version rust license platform AtomGit Star

--- > **This project is 100% AI-generated.** Every line of code, every architectural decision's implementation, and every commit was written by AI. The human developer serves solely as the decision-maker and product manager — defining what to build, not how to build it. --- AtomCode is an AI coding agent that lives in your terminal. Give it a task in natural language, and it will read your codebase, edit files, run commands, and verify its work — autonomously. Think of it as an open-source alternative to Claude Code / Cursor Agent, but running entirely in your terminal and connecting to any OpenAI-compatible API. ## Features ### Agent Loop - **Autonomous multi-step execution** — reads files, edits code, runs tests, fixes errors, all in a loop - **Verification loop** — automatically verifies edits via syntax checks before declaring success - **Dynamic step budget** — scales with the number of edited files, capped per turn to bound cost - **Loop detection** — detects and breaks out of repetitive tool-call patterns - **3-layer JSON repair** — recovers malformed tool-call arguments - **Turn-level datalog** — structured per-turn logs for replay, debugging, and eval harnesses ### Modes & Autonomy - **Plan / Build modes** — `/plan` switches to read-only exploration (the agent investigates without touching files); `/build` switches back to full execution - **Goal mode** — `/goal ` sets a completion condition and the agent loops autonomously, turn after turn, until the goal is met - **Code review** — `/review` reviews your current changes, `/review staged` the staged diff, and `/review ` against a base ref - **Background sessions** — `/bg` runs work in detached slots so you can keep using the TUI while a long task progresses ### Built-in Tools File & shell: - `read_file`, `write_file`, `edit_file`, `search_replace` - `bash`, `grep`, `glob`, `list_directory`, `change_dir` - `web_search`, `web_fetch` Code graph (language-aware code intelligence): - `list_symbols`, `read_symbol`, `find_references` - `trace_callers`, `trace_callees`, `trace_chain` - `file_deps`, `blast_radius` Automation: - `auto_fix` — automatic lint/typecheck fix loop - `use_skill` — invoke a user-defined skill ### Multi-Provider Support Connect to any LLM that supports OpenAI's function-calling API: | Provider | Function Calling | Tested Models | |----------|:---:|---| | Claude (Anthropic) | Yes | Claude Sonnet 4.5/4.6, Opus 4.6 | | OpenAI | Yes | GPT-4o, GPT-4.1 | | DeepSeek | Yes | DeepSeek V3, DeepSeek R1, DeepSeek V4 | | Zhipu (GLM) | Yes | GLM-4, GLM-5, GLM-5.2 | | Qwen (Alibaba) | Yes | Qwen-Plus, Qwen-Max | | SiliconFlow | Yes | Various open models | | Ollama (local) | Partial | Llama 3, Qwen2, etc. | | Any OpenAI-compatible API | Yes | — | ### Sessions & Login - **Persistent sessions** — every conversation is saved; continue the last session with `atomcode --continue` / `-c`, or resume/switch inside the TUI with `/resume` - **AtomGit OAuth login** — `/login` (or `atomcode login`) pairs your CLI with your AtomGit account - **SSO login** — `/login-with-sso` for GitCode internal users - **Headless mode** — `atomcode -p "..."` runs a single prompt non-interactively and streams the reply on stdout (Claude Code `-p` style); approval-required `bash` calls are auto-approved, while other approval-required tools are denied - **Daemon mode** — `atomcode-daemon` exposes an HTTP API for session history and SSE streaming chat ### Terminal UI - **Real-time streaming** with markdown rendering and syntax highlighting - **Code blocks** with language labels, line numbers, and `base16-ocean.dark` theme - **Multi-line input** with Shift+Enter (or `\` + Enter), auto-growing height, input history - **Task completion notifications** — long-running tasks trigger terminal-native notifications first (kitty / WezTerm / iTerm2), falling back to OS-native alerts - **Text selection** with mouse drag, auto-scroll, and clipboard copy - **Slash commands** — `/model`, `/provider`, `/resume`, `/bg`, `/diff`, `/undo`, `/cost`, `/clear`, `/compact`, etc. (see table below) - **File attachment** — paste file paths to attach content as context - **Bracketed paste** — long paste content collapsed to a compact indicator - **Skills** — user-defined commands loaded from your skill directory, invoked like any slash command ### Web UI - **`/webui`** (in the TUI) or **`atomcode webui`** (CLI) launches a local browser UI as an alternative to the terminal interface — same agent, same sessions, rendered in your browser - **Loopback only** — the server binds to `127.0.0.1` and uses a one-time token; nothing is exposed to the network - **`/webui stop`** stops the in-process server (a later `/webui` restarts it) ### App Remote Access - **`/app`** (in the TUI) enables mobile remote access — prints a QR code; scan it with the GitCode mobile app from any network to connect to your current session - **Any-network reachable** — your PC connects to a public relay via a reverse WSS tunnel; the phone reaches your PC through the relay. No public IP, DDNS, or port forwarding required - **Bidirectional real-time sync** — messages from either end appear on the other in real time (streaming replies, tool call cards, token usage) - **Remote commands** — the phone can run `/status`, `/cost`, `/diff`, `/whoami` etc., which execute on the desktop and echo results back - **Switch projects / sessions** — switch projects or open a history session on the phone, and the desktop follows immediately - **Model sync** — switching models on either end keeps the other in sync - **`/app stop`** disconnects remote access ### Safety - **Destructive command detection** — `rm -rf`, `git push --force`, `DROP TABLE`, etc. require explicit approval - **Path-aware confirmations** — external reads, sensitive paths, and all writes outside the workspace can require confirmation depending on risk level - **Sensitive file protection** — protected system paths, credential directories, shell configs, `.env` files, and key/cert files receive stronger confirmation rules - **Shell bypass protection** — common shell file commands like `cat`, `head`, `ls`, `cp`, `mv`, and `tee` inherit the same path approval model as file tools - **Per-session permission grants** — approve once per tool pattern, or always-allow - **Source file deletion requires approval** — `rm` on code files is never auto-approved - **Undo** — `/undo` rolls back the last turn's file edits via file-history snapshots See [Permission Model](./docs/security/permission-model.md) for the full design and current boundaries. ### Privacy - 📊 Anonymous telemetry (opt-out) — see [docs/telemetry.md](docs/telemetry.md) ## Installation ### From Source (recommended) ```bash git clone https://atomgit.com/atomgit_atomcode/atomcode.git cd atomcode cargo install --path crates/atomcode-cli --locked ``` The binary will be generated at `target/release/atomcode` and installed to `~/.cargo/bin/atomcode` for macOS / Linux / HarmonyOS PC and `$env:USERPROFILE/.cargo/bin/atomcode.exe` for Windows. Make sure that `~/.cargo/bin` (or `%USERPROFILE%\.cargo\bin` on Windows) is in your `PATH`. To compile without installing, run: ```bash cargo build --release ``` and the binary will be generated at `target/release/atomcode`. ### Package Managers AtomCode CLI can also be installed via the following package managers: ```bash # Install using npm npm install -g @atomgit.com/atomcode # Install using Homebrew brew install --cask atomcode ``` ### Requirements - Rust 1.88+ (for building; older Cargo versions cannot parse the current lockfile) - An API key from any supported provider (or an AtomGit account for `/login`) ### Permissions — don't run with `sudo` Run AtomCode as your **normal user**, never with `sudo`. AtomCode keeps its config, sessions, and logs under `~/.atomcode`; running once as root leaves root-owned files there, so every later non-root start fails at engine init with: ``` engine v2 assemble failed: Permission denied (os error 13) ``` (the message may say `prepare` instead of `assemble` — same cause.) If you hit this, reclaim ownership and stop using `sudo`: ```bash sudo chown -R "$(id -un):$(id -gn)" ~/.atomcode atomcode # start WITHOUT sudo ``` On a Linux guest, a working directory on a VirtualBox shared folder (`/media/sf_*`, owned by `root:vboxsf`) can also trigger permission errors — add yourself to the group with `sudo usermod -aG vboxsf "$USER"` and re-login, rather than using `sudo`. ### Uninstall Remove AtomCode and (optionally) its data: ```bash atomcode uninstall # interactive: per-group prompts atomcode uninstall --keep-data # only remove binary + PATH edit atomcode uninstall --purge # remove everything, including ~/.atomcode atomcode uninstall --dry-run # show plan, change nothing ``` If the binary is already broken or missing: ```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 ``` By default credentials (`auth.toml`, `mcp.json`, `config.toml`, `ATOMCODE.md`) are kept; pass `--purge` to remove them too. ## Quick Start ### 1. First Run ```bash atomcode ``` On first run, a setup wizard will guide you through configuring your LLM provider: ``` 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. Configuration Config is stored at `~/.atomcode/config.toml`. A minimal single-provider setup looks like this: ```toml default_provider = "deepseek" [providers.deepseek] type = "openai" api_key = "sk-..." model = "deepseek-chat" base_url = "https://api.deepseek.com/v1" context_window = 64000 ``` You can declare multiple providers and switch between them with `/model` or `/provider`. A **complete reference** covering Claude / OpenAI / OpenAI-compatible endpoints (DeepSeek, GLM, SiliconFlow, OpenRouter...) / Ollama, plus the `[datalog]` section, lives at [`docs/config.example.toml`](docs/config.example.toml) — copy and edit the bits you need. After editing `config.toml` by hand, run `/reload` inside atomcode to pick up the changes without restarting. ### 3. Start Coding ```bash # Open in your project directory cd your-project atomcode # Or specify directory atomcode -C /path/to/project # Or specify model atomcode --model gpt-4o # Headless (single prompt, reply on stdout) atomcode -p "Explain the agent loop in this repo" # Read prompt from file atomcode --prompt-file task.md ``` In headless mode, approval-required `bash` calls are auto-approved and logged to stderr; other approval-required tools are denied. Then just type what you want: ``` > Fix the login bug where users get redirected to 404 after OAuth callback > Add a dark mode toggle to the settings page > Refactor the database module to use connection pooling > Write tests for the payment processing module ``` ## Keybindings ### Input | Key | Action | |-----|--------| | `Enter` | Send message | | `Shift+Enter` | New line (requires Kitty keyboard protocol) | | `Ctrl+Enter` | New line (requires Kitty keyboard protocol) | | `Ctrl+J` | New line (requires Kitty keyboard protocol) | | `Alt+Enter` | New line (most terminals; see compatibility note below) | | `\` + `Enter` | New line (works on all terminals — type a `\` and press Enter; the `\` is consumed) | | `Esc` | Clear input / Cancel stream | | `Esc` ×2 | Undo the previous turn | | `Up/Down` | Browse input history | | `Tab` | Accept suggestion | | `Ctrl+U` | Clear line | | `Ctrl+W` | Delete word | | `Ctrl+K` | Delete to end of line | | `Ctrl+V` | Paste image from clipboard (Windows: use `/paste`, see below) | > **Terminal compatibility for newline chords:** > - `Shift+Enter`, `Ctrl+Enter`, and `Ctrl+J` all need a terminal that speaks the Kitty keyboard protocol — kitty, WezTerm, Alacritty, iTerm2 ≥3.5, Windows Terminal ≥1.21. Older terminals collapse them to plain `Enter` (which sends the message). > - `Alt+Enter` works at the byte level on most terminals, but **Windows Terminal binds it to "toggle full screen" by default** — remove that binding under Settings → Actions to free it up. > - Xshell does not support the Kitty protocol; in its keymap settings, map a free chord to send `ESC, Enter` (`\x1b\r`) to get the same effect, or paste multi-line text via the clipboard (bracketed paste is enabled). > **Pasting images on Windows:** > Windows Terminal and conhost bind `Ctrl+V` to their own `paste` action, which only forwards `CF_UNICODETEXT` from the clipboard — an image-only clipboard sends nothing, so the in-app `Ctrl+V` handler never fires. Two ways out: > 1. Use **`/paste`** — the slash command pulls the clipboard image and attaches it as `[Image #N]`. Works in every terminal, including Windows Terminal, PowerShell 7, conhost, and git bash. The TUI's bottom-right hint on Windows says `Image in clipboard · /paste` automatically. > 2. If you want `Ctrl+V` muscle memory: open Windows Terminal `settings.json` (`Ctrl+,` → "Open JSON file") and either delete the `{ "command": "paste", "keys": "ctrl+v" }` entry under `"actions"`, or rebind it to `ctrl+shift+v`. After a restart, `Ctrl+V` passes through to atomcode. > > Git Bash (MinTTY) doesn't intercept `Ctrl+V`, so it works there out of the box. ### Navigation | Key | Action | |-----|--------| | `Ctrl+Up/Down` | Scroll chat (3 lines) | | `PageUp/PageDown` | Scroll chat (page) | | `Ctrl+L` | Clear conversation | | `Ctrl+Shift+C` | Copy selection | | `Ctrl+C` | Cancel operation (double-tap to exit) | ### Slash Commands Type `/` in the TUI to browse the full list with live completion; `/help` shows commands and shortcuts. **Sessions & workspace** | Command | Action | |---------|--------| | `/resume` | Resume or switch session | | `/session` | Start a new session | | `/rename ` | Rename the current session | | `/clear` | Start a new conversation (clears context + screen) | | `/bg` | Background current session; subcommands: `/bg list`, `/bg `, `/bg drop `, `/bg help` | | `/background ` | Compatibility alias: start a one-shot task in a `/bg` slot | | `/cd` | Change working directory | | `/worktree` | Git worktree isolation (`create` / `list` / `done` / `cleanup`) | | `/webui` | Launch the browser webui (subcommands: `stop`, `lan`, `--host `) | | `/sync` | Attach to the live webui session (`/sync off` to detach) | **Modes, autonomy & review** | Command | Action | |---------|--------| | `/plan` | Switch to Plan mode (read-only exploration) | | `/build` | Switch to Build mode (full execution) | | `/goal ` | Set a completion goal — the agent loops autonomously until it's met | | `/review` | Code review the current changes (`/review` · `/review staged` · `/review `) | | `/think` | Control extended thinking (on / off / budget N) | | `/effort` | DeepSeek reasoning effort control (high / max / off) | **Providers & account** | Command | Action | |---------|--------| | `/model` | Switch model / provider | | `/provider` | Manage providers (add / edit / delete) | | `/proxy` | Switch outbound proxy mode | | `/login` | Sign in with AtomGit OAuth and claim CodingPlan free models | | `/logout` | Sign out of AtomGit | | `/whoami` | Show the current logged-in user | | `/status` | Show login status and model info | **Files, edits & context** | Command | Action | |---------|--------| | `/diff` | Show git diff of current changes | | `/undo` | Undo a turn's file edits (`/undo` or `/undo N`) | | `/view ` | View file content in an overlay modal | | `/paste` | Attach an image from the clipboard (Windows fallback for Ctrl+V) | | `/copy` | Copy a code block from the last reply (`/copy`, `/copy N`, `/copy all`) | | `/cost` | Show token usage for this session | | `/context` | Show the context budget breakdown | | `/compact` | Compact conversation history | **Memory** | Command | Action | |---------|--------| | `/remember ` | Save a fact to memory (`--global` for all projects) | | `/forget ` | Remove matching memories | | `/memory` | Show all saved memories | **Extensions** | Command | Action | |---------|--------| | `/mcp` | MCP server status (subcommands: `reload`, `tools`, `login`, `logout`) | | `/plugin` | Plugin marketplace (`marketplace` / `install` / `uninstall` / `list`) | | `/skills` | Browse loaded skills | **Project & system** | Command | Action | |---------|--------| | `/init` | Generate `.atomcode.md` project instructions from the working directory | | `/config` | Show config path | | `/reload` | Reload `~/.atomcode/config.toml` from disk | | `/upgrade` | Upgrade atomcode to latest (subcommand: `rollback`) | | `/setup` | First run: install the recommended skill and run it | | `/welcome` | Re-run the onboarding wizard | | `/language` | Switch display language | | `/issue` | Report a bug / request a feature (interactive wizard) | | `/guide ` | Ask atomcode-guide how to use AtomCode | | `/keys` | Show keyboard shortcuts | | `/help` | Show commands & shortcuts | | `/quit`, `/exit` | Exit AtomCode (or Ctrl+C ×2) | > **Plugin commands.** Beyond the built-ins above, plugins can register their own slash commands. For example, install the official channel plugin to get `/wechat` (shows the AtomCode WeChat community group QR code): > > ```text > /plugin marketplace add https://atomgit.com/atomgit_atomcode/AtomCode-Channel > /plugin install weixin@atomcode-channel > ``` ## Architecture AtomCode is a Rust workspace with four crates: ``` atomcode/ crates/ atomcode-core/ # Headless library — no TUI dependency agent/ # AgentLoop: autonomous tool-use loop turn/ # TurnRunner, datalog, permission decider config/ # Config loading, provider configs conversation/ # Message types, windowed context provider/ # LlmProvider trait + OpenAI/Claude/Ollama tool/ # Tool trait + built-in tool implementations session/ # Persistent sessions skill.rs # User-defined skills atomcode-tuix/ # Terminal UI — retained-mode renderer (CC-style normal mode) event_loop/ # App state machine, command dispatch render/ # Cell-based renderer, diff, retained-mode frame loop modals/ # Picker UIs (dir, model, session, provider, issue) atomcode-cli/ # Binary entry point (TUI + headless -p mode) main.rs # CLI args, first-run wizard, launch auth/ # AtomGit OAuth client atomcode-daemon/ # HTTP/SSE API server over atomcode-core ``` ### Design Principles 1. **Tech-stack agnostic** — never hardcodes language-specific logic. Detects project type dynamically from descriptor files (`package.json`, `Cargo.toml`, `pyproject.toml`, `pom.xml`, etc.). 2. **Decoupled agent** — `AgentLoop` runs as an independent async task, communicating with the TUI via channels (`AgentCommand` / `AgentEvent`). The core library has zero TUI dependencies, which is also what makes the daemon possible. 3. **Tool safety** — all destructive operations require explicit user approval. Tool failures become LLM observations, never panics. 4. **Context-aware** — token-budget-aware conversation windowing, project file-tree injection, and per-turn system reminders keep the model focused without exceeding context limits. ## Project Instruction File Create a `.atomcode.md` file in your project root to give AtomCode persistent context: ```markdown # Project Instructions This is a Vue 3 + TypeScript project using Pinia for state management. - Always use Composition API with `