A local model server
Inference runs through llama-server (from llama.cpp). Atomic Agent can download and manage this for you (managed mode), or you can point it at a server you run yourself (external mode).
Atomic Agent is a local-first AI agent that runs on your own machine. There’s no cloud account to create and no per-token bill — it talks to a language model running locally and keeps your data on disk. This page gets it installed and ready to run.
The whole app ships as a single binary with a small folder of helpers next to it. Installation is one command; updating is one button.
v0.5.0 publishes prebuilt binaries for exactly four targets:
| Platform | Target | Status |
|---|---|---|
| macOS (Apple Silicon) | darwin-arm64 | Supported |
| Linux x64 | linux-x64 | Supported |
| Linux arm64 | linux-arm64 | Supported |
| Windows x64 | win32-x64 | Supported |
The fastest path is the install script. It downloads the right binary for your platform, verifies it, and puts it on your PATH.
On macOS (Apple Silicon) or Linux, run it in your shell:
curl -fsSL https://atomicagent.io/install | shOn Windows, run it in PowerShell:
irm https://atomicagent.io/install.ps1 | iexOnce it finishes, confirm the binary is found:
atomic-agent --helpThen launch the terminal UI to get going:
atomic-agent tuiAtomic Agent bundles most of what it needs into the binary, but a few things live outside it and must be present on your system.
A local model server
Inference runs through llama-server (from llama.cpp). Atomic Agent can download and manage this for you (managed mode), or you can point it at a server you run yourself (external mode).
A browser (optional)
Browser tools drive Chrome, Edge, or Chromium. Browser binaries are not bundled — install one yourself if you want web automation.
Disk + RAM/VRAM
The download is a self-contained binary that embeds the Node runtime, plus a small vendor/ folder — tens of megabytes in total. Models dominate the footprint: the default model (qwen-3.5-4b) needs a few GB. GPU acceleration is used when available.
Linux desktop tools
Some Linux tools (clipboard, notifications, window control) rely on small system packages. See Linux notes below.
Node.js 25.7+ (source installs only)
The prebuilt binary needs no Node at all. Building or running from source requires Node.js 25.7.0 or newer — see Installing from source.
What’s already inside the binary, so you don’t install it separately:
Atomic Agent is the binary you install. It connects out to a model server for inference and, optionally, to a browser for web tasks. Everything else — your sessions, memory, and config — lives in a local state directory.
flowchart LR
subgraph machine["Your machine"]
CLI["atomic-agent<br/>(single binary)"]
Llama["llama-server<br/>(llama.cpp)"]
Browser["Chrome / Edge<br/>(optional)"]
State["~/.atomic-agent<br/>config.json, .env,<br/>sessions, memory"]
end
CLI -->|inference| Llama
CLI -->|web tools| Browser
CLI -->|read/write| State
Install["install.sh"] -->|downloads| CLI
Llama -->|managed mode<br/>downloads| Models["GGUF models<br/>(HuggingFace)"]
You have two ways to provide inference.
Let Atomic Agent handle the model server for you. Inside the TUI’s first-run setup, or from the CLI:
# See the catalog of available chat modelsatomic-agent models list
# Download and select a model (qwen-3.5-4b is the default)atomic-agent models pull qwen-3.5-4batomic-agent models use qwen-3.5-4b
# Start the managed daemonatomic-agent models start
# Check it's healthyatomic-agent models statusManaged mode downloads the llama.cpp backend and the GGUF model, spawns the daemon, and polls its /health endpoint until it reports ok. To upgrade the backend or swap models later, use atomic-agent models update, models pull, and models stop.
If you already run llama-server (or run it on another host), point Atomic Agent at it. The URL comes from config.json — there is no environment variable for it:
{ "localModels": { "url": "http://127.0.0.1:8080", "mode": "external" }}If your server requires a bearer token, provide it with ATOMIC_AGENT_LLAMA_API_KEY.
With a model ready, start a session:
# Interactive terminal UIatomic-agent tui
# Or a plain stdin/stdout chat loopatomic-agent run --cwd .Useful flags on run:
--cwd DIR — set the working directory the agent operates in.--max-steps N — cap how many steps a single turn may take.--no-approval — auto-approve dangerous tools (shell, file writes, HTTP). Convenient for trusted/dev use; risky otherwise.Everything lives in a single state directory, defaulting to ~/.atomic-agent. Override it with ATOMIC_AGENT_STATE_DIR.
| Path | What it holds |
|---|---|
config.json | User-facing settings (model, browser, tasks, memory, MCP servers) |
.env | Secrets — API keys, tokens (mode 0600) |
sessions.sqlite | Conversation transcripts and session state |
memory.sqlite | Profile facts, notes, lessons, procedures |
tasks.sqlite | Durable task queue |
skills/ | Globally installed skills |
Atomic Agent runs on Linux x64 and arm64. A few desktop capabilities depend on small system packages that are not bundled. Install the ones you want:
os.clipboard).os.notify).os.window.*). Atomic Agent probes for this at startup and reports it in capabilities.ripgrep is already bundled, so you do not need to install it separately. (To point at a different ripgrep, set ATOMIC_AGENT_RG_PATH.)
Two more things to know on Linux:
llama-server --list-devices; prefer a discrete GPU when present.ATOMIC_AGENT_BROWSER_NO_SANDBOX=1 (containers/CI only — it disables the browser sandbox).Browser binaries aren’t shipped with Atomic Agent — install Chrome, Edge, or Chromium yourself. Then tune behavior with environment variables:
# Which browser channel to driveexport ATOMIC_AGENT_BROWSER_CHANNEL=chrome # chrome | msedge | chromium
# Explicit binary path (overrides auto-detect)export ATOMIC_AGENT_BROWSER_EXECUTABLE_PATH=/path/to/chromium
# Run headlessexport ATOMIC_AGENT_BROWSER_HEADLESS=1
# Attach to an already-running browser via CDP instead of launching oneexport ATOMIC_AGENT_BROWSER_CDP_URL=http://127.0.0.1:9222The same options exist as browser.* keys in config.json if you prefer not to use environment variables.
Building from a checkout is the fallback when there’s no prebuilt binary for your machine — notably Intel Macs.
git clone https://github.com/AtomicBot-ai/atomic-agentcd atomic-agentnpm installnpm run buildThe prebuilt binary has no such requirement: it embeds its own Node runtime, so you never install Node to use a released build.
How you update depends on how you installed.
If you installed via the script, Atomic Agent can update itself. When the TUI starts, it checks GitHub for a newer release (when eligible) and surfaces a prompt. Confirm it, and Atomic Agent re-runs the install script in place.
The check is a single anonymous GET to the GitHub Releases API (/repos/<repo>/releases/latest) and compares the latest tag with your running version. It is fire-and-forget: if you are offline, rate-limited, or the API errors, the failure is swallowed and your launch proceeds as normal. The result is cached in-process for ten minutes, so rapid relaunches do not re-query. If GITHUB_TOKEN or GH_TOKEN is set in your environment, it is sent as a bearer token to lift the anonymous rate limit.
Two honest caveats:
node or tsx, so it can never overwrite your Node runtime. See the Development checkout tab.The update settings are environment-only — there is no update block to add to config.json:
| Setting | Variable | Default |
|---|---|---|
| Startup version check | ATOMIC_AGENT_UPDATE_CHECK_ON_STARTUP | true |
| Repository queried and installed from | ATOMIC_AGENT_REPO | AtomicBot-ai/atomic-agent |
# Disable the on-startup update check (skips the network call and the prompt)export ATOMIC_AGENT_UPDATE_CHECK_ON_STARTUP=0
# Target a fork or a specific repoexport ATOMIC_AGENT_REPO=AtomicBot-ai/atomic-agentATOMIC_AGENT_REPO sets both halves of the flow: the release the check looks at, and the install.sh (or install.ps1) the in-app update downloads and runs.
You can always update by re-running the install command. Pin a version for reproducible installs:
# Latestcurl -fsSL https://atomicagent.io/install | sh
# Pin a specific releaseATOMIC_AGENT_VERSION=v0.5.0 curl -fsSL https://atomicagent.io/install | shThe install script (and its PowerShell counterpart) honors these environment variables:
| Variable | What it does |
|---|---|
ATOMIC_AGENT_VERSION | Install a specific release tag instead of the latest. |
ATOMIC_AGENT_INSTALL_DIR | Choose where the binary lands (default $HOME/.local/bin). |
ATOMIC_AGENT_NO_PATH=1 | Skip modifying your PATH. |
Set ATOMIC_AGENT_NO_PATH=1 when you manage your own PATH — in a Dockerfile, a dotfiles repo, or a CI image. The installer then leaves your shell rc file (or, on Windows, your user PATH) untouched and just prints the line you’d need to add yourself:
ATOMIC_AGENT_NO_PATH=1 curl -fsSL https://atomicagent.io/install | sh# add to PATH: export PATH="$HOME/.local/bin:$PATH"Note that the binary is still installed normally — only the PATH edit is skipped, so atomic-agent will not be found until you add its directory yourself.
If you’re running from source (via node/tsx), self-update is intentionally disabled so it never overwrites your Node runtime. Update through your package manager or git instead:
git pullnpm installnpm run buildSame requirement as a fresh source install: Node.js 25.7.0 or newer. See Installing from source.
Run your first task
Open the TUI with atomic-agent tui and ask the agent to do something real — read a file, search the web, or run a command.
Configure it
Tune models, browser, memory, and tasks in config.json. See the Configuration reference.
Serve an API
atomic-agent serve exposes an OpenAI-compatible endpoint at POST /v1/chat/completions.
Bring your own model server
Prefer external mode? Set localModels.url in config.json and skip managed downloads.
Hit a snag?
Model server, GPU, ports, or browser issues — see Troubleshooting.