Skip to content

CLI Reference

atomic-agent is the single command-line tool for running the agent, serving it over HTTP, scheduling background work, managing local models and skills, and inspecting what happened after the fact. This page lists every command and every flag.

If you just want to start chatting, run atomic-agent with no arguments β€” it opens the terminal UI.

At a glance

Terminal window
atomic-agent [command] [flags]

There are 10 top-level commands. Running atomic-agent with no command opens the TUI.

CommandWhat it does
runInteractive chat loop on stdin/stdout
tuiFull terminal UI (default when no command is given)
serveStart the OpenAI-compatible HTTP server
taskManage the durable task queue (schedule, list, run)
traceInspect, export, and replay recorded sessions
skillInstall, list, and toggle skills
modelsManage local llama.cpp models and GPU devices
configRead or write config.json
replMinimal debug REPL
importMigrate sessions and tasks from Hermes or OpenClaw

Exit codes: 0 success Β· 1 runtime or logic error Β· 2 bad arguments.

flowchart TD
    A["atomic-agent [command]"] --> B{command}
    B -->|none| TUI["tui"]
    B -->|run| RUN["interactive chat loop"]
    B -->|serve| SRV["HTTP server + approval bus"]
    B -->|task| TSK["TaskStore / TaskRunner"]
    B -->|trace| TRC["trace files (NDJSON)"]
    B -->|skill| SK["skill install / toggle"]
    B -->|models| MD["managed llama.cpp daemon"]
    B -->|config| CF["config.json"]
    B -->|import| IM["Hermes / OpenClaw migration"]
    RUN --> RT["runtime.runTurn"]
    SRV --> RT
    TSK --> RT

Commands

Run β€” interactive chat

Starts the agent in a plain stdin/stdout chat loop. Type a message, press Enter, and the agent runs a turn and prints its reply. Diagnostics go to stderr; the assistant’s reply goes to stdout.

Terminal window
atomic-agent run [--cwd DIR] [--max-steps N] [--no-approval]
FlagDefaultDescription
--cwd DIRcurrent directoryWorking directory the agent resolves relative paths against and scopes the session to.
--max-steps Nconfig.agent.maxSteps (25)Maximum LLM steps per turn before the loop stops with max_steps.
--no-approvaloffForce approval level 5 (approve everything) for this process. See the caution below.

At the default approval level (1), dangerous tools pause and prompt you over stdin. Approval is serial: a long-running approval blocks later ones in the same turn.

The approval prompt

The stdin prompt takes four answers, not two:

AnswerEffect
yApprove this one call.
sApprove, and allow this whole category (file writes, HTTP, shell…) for the rest of the session.
aApprove, and allow this shell command shape for the rest of the session.
NDeny. Anything that is not y, yes, s, or a is a refusal.

s and a only appear when the request is grantable. Writes to the agent’s own trust config (config.json, .env) are never grantable β€” those requests only ever offer y/N, because a silent write there could raise the ladder for the next boot.

TUI β€” terminal UI

Launches the full React/Ink terminal interface: chat plus tabs for tasks, skills, memory, MCP, providers, local models, and Telegram. This is what runs when you type atomic-agent with no command.

Terminal window
atomic-agent tui [--cwd DIR] [--max-steps N] [--no-approval] [--skip-llama-setup]
FlagDefaultDescription
--cwd / --working-dir DIRcurrent directoryWorking directory for the session.
--max-steps Nconfig.agent.maxSteps (25)Max LLM steps per turn.
--no-approvaloffForce approval level 5 (approve everything). In the TUI, approvals otherwise appear as a modal.
--skip-llama-setupoffSkip the first-run model setup wizard. Also settable via ATOMIC_AGENT_TUI_SKIP_LLAMA_SETUP=1.

Inside the TUI, slash commands drive everything: /help, /new, /clear, /abort, /quit, /theme, plus panel switches like /tasks, /skills, /memory, /mcp, /llm, /models, /telegram, and /import. Sessions are created lazily on your first message, so opening the TUI just to glance at settings does not litter the session store.

Serve β€” HTTP server

Starts a Node HTTP server exposing an OpenAI-compatible chat API plus Atomic Agent management endpoints. Listens until SIGINT (Ctrl-C).

Terminal window
atomic-agent serve [--host H] [--port P] [--cwd DIR] [--api-key K] [--no-approval]
FlagDefaultDescription
--host H127.0.0.1Address to bind.
--port P8787Port to listen on.
--cwd DIRcurrent directoryWorking directory for sessions.
--api-key KATOMIC_AGENT_API_KEY env varBearer token required on authenticated routes. If both are omitted, auth is disabled.
--no-approvaloffForce approval level 5 (approve everything) for all requests.

Authenticated routes expect an Authorization: Bearer <token> header. Two routes are intentionally public so OpenAI SDKs can probe them before sending a key: GET /health and GET /v1/models.

HTTP endpoints exposed by serve
Method & pathPurpose
POST /v1/chat/completionsOpenAI-compatible chat, streaming or sync.
POST /v1/chat/completions/{id}/cancelAbort a streaming completion by id.
GET /v1/modelsModel catalog (public, single atomic-agent entry).
GET /healthLiveness probe (public).
GET /api/capabilitiesRuntime wiring summary.
GET|PATCH /api/configRead or merge-write user config.
GET /api/skills, GET /api/skills/{name}List / inspect skills.
POST /api/skills/install, /api/skills/uninstallManage skills.
GET /api/sessions, GET|DELETE /api/sessions/{id}List / fetch / delete sessions.
POST /api/approval/resolveResolve a pending approval.
GET /api/eventsSSE stream of approval requests (replays pending on connect).
POST|GET /api/tasks, GET|DELETE /api/tasks/{id}Task CRUD.
POST /api/tasks/{id}/run, POST /api/tasks/drainTrigger task execution.
POST /api/webhooks/{name}Webhook ingress, materialized as a task.

Custom headers: X-Atomic-Session-Id (request/response) pins the session; X-Atomic-Completion-Id is returned for streaming; X-Atomic-Extensions opts into named SSE events (e.g. tool_progress) instead of the strict OpenAI subset; X-Webhook-Secret authenticates webhook posts.

Task β€” durable task queue

Schedule deferred or recurring agent turns. Tasks persist to SQLite and survive restarts. Reads (list, show) use the task store directly; create for recurring schedules and run boot the full runtime.

Terminal window
atomic-agent task list [--session ID] [--status CSV] [--limit N]
atomic-agent task show <id>
atomic-agent task create [--session ID] --message TEXT
[--at MS | --cron EXPR | --every SEC] [--tz IANA]
[--notify telegram]
[--max-attempts N] [--max-steps N]
atomic-agent task cancel <id>
atomic-agent task run <id> | --all-pending [--session ID]
atomic-agent task tick [--limit N]
SubcommandNotes
listFilter by --session, comma-separated --status, and --limit.
show <id>Print one task record.
create--message is required. Pick at most one schedule: --at (epoch ms one-shot), --cron (cron expression), or --every (interval in seconds). --tz sets the IANA timezone and is only valid together with --cron β€” passing it with --at, --every, or no schedule at all is an error. --notify telegram pings you over the Telegram channel when the task finishes; telegram is the only accepted value.
cancel <id>Idempotent cancel.
run <id> / --all-pendingExecute now, applying retry backoff between attempts.
tick [--limit N]One-shot drain of all due tasks, then exit. Good for cron-style ops.

Trace β€” inspect & replay sessions

Traces are append-only NDJSON files, one per session, capturing turns, steps, prompts, LLM completions, and tool calls. The trace command reads and replays them.

Terminal window
atomic-agent trace list [--limit N]
atomic-agent trace show <sessionId> [--step N] [--raw]
atomic-agent trace export <sessionId> [--format ndjson|json]
atomic-agent trace replay <sessionId> [--step N]
SubcommandNotes
listRecent trace summaries.
show <sessionId>Human-readable chronology. --step N isolates one step; --raw prints unformatted lines.
export <sessionId>Dump as ndjson (default) or json.
replay <sessionId>Rebuild the stable prefix with current tools/skills/capabilities and compare hashes to detect prompt drift. --step N isolates a step. Exits 0 if no drift, 2 if drift is detected.

Skill β€” manage skills

Skills are folders (a SKILL.md plus optional scripts) that extend the agent with reusable playbooks.

Terminal window
atomic-agent skill install <path|owner/repo[/path]|@owner/slug> [--force] [--acknowledge-risk]
atomic-agent skill uninstall <name>
atomic-agent skill list
atomic-agent skill show <name>
atomic-agent skill enable <name>
atomic-agent skill disable <name>
atomic-agent skill browse [--source owner/repo]
atomic-agent skill search <query>
atomic-agent skill tap list | add <owner/repo> | remove <owner/repo>
SubcommandNotes
install <target>Install from three kinds of source: a local directory path, a GitHub skill hub tap (owner/repo or owner/repo/path), or ClawHub (@owner/slug). --force overwrites an existing skill of the same name. --acknowledge-risk confirms you accept a remote skill flagged as suspicious by the install scan β€” without it, a flagged skill is refused.
uninstall <name>Remove a global skill.
listShow all skills with enabled/disabled state and source.
show <name>Print the SKILL.md body.
enable / disable <name>Toggle visibility by mutating skills.disabled in config.json. Disabled skills stay on disk but are invisible to the model.
browse [--source owner/repo]List installable skills from ClawHub plus every configured GitHub tap. --source narrows it to a single tap.
search <query>Search ClawHub and the configured taps by keyword.
tap list|add|removeManage the GitHub repositories browse and search read from. Mutates skills.taps in config.json. Ships with anthropics/skills, openai/skills, and vercel-labs/agent-skills.

Models β€” local llama.cpp models

Manage the managed-mode local inference daemon: download backends and GGUF models, start/stop the server, and pick GPU devices. Most subcommands require config.localModels.mode = "managed".

Terminal window
atomic-agent models list | status | devices
atomic-agent models pull <id> | use <id> | remove <id>
atomic-agent models start | stop | update
atomic-agent models use-device <auto|cpu|Vulkan0>
atomic-agent models list-embeddings
atomic-agent models pull-embedding <id>
atomic-agent models use-embedding <id> | --disable
GroupSubcommands
Chat modelslist, pull <id>, use <id>, remove <id>, status, update
Daemonstart, stop
GPUdevices, use-device <auto|cpu|Vulkan0>
Embeddingslist-embeddings, pull-embedding <id>, use-embedding <id> / --disable

Config β€” read & write config

Read or replace the user config file at <stateDir>/config.json.

Terminal window
atomic-agent config get
atomic-agent config set '<json>'
  • get prints the whole config file as JSON.
  • set '<json>' replaces the entire file with the JSON you pass.

REPL β€” debug REPL

Terminal window
atomic-agent repl

A minimal scaffold REPL for debugging. Not a substitute for run or tui.

Import β€” migrate from Hermes / OpenClaw

Migrate conversations and scheduled tasks from a legacy agent into Atomic Agent. Imported sessions are prefixed (hermes: / openclaw:) so they never collide with native ones.

Terminal window
atomic-agent import hermes [--source DIR] [--preset default|full]
[--include a,b] [--exclude a,b]
[--migrate-secrets] [--limit N]
[--overwrite] [--dry-run] [--yes]
  • --source defaults to ~/.hermes (or HERMES_STATE_DIR).
  • --preset selects what to import (default = sessions + cron). --include / --exclude adjust it.
  • --migrate-secrets is the only way to copy secrets, and is limited to an allowlist (OPENROUTER_API_KEY, AIMLAPI_API_KEY). Secrets are never part of a preset.
FlagDescription
--limit NCap the number of sessions processed (-1 = no limit).
--overwriteOverwrite a differing destination instead of flagging it as a conflict.
--dry-runPreview only β€” reconciliation runs but nothing is written.
--yesSkip the interactive confirmation.

Environment variables

The CLI reads these at bootstrap. They override the config file for operational and bootstrap values (the file wins for user-facing settings like model and log level).

VariablePurpose
ATOMIC_AGENT_STATE_DIRRoot for state: config.json, traces, tasks.sqlite, memory, skills. Defaults to ~/.atomic-agent.
ATOMIC_AGENT_LLAMA_API_KEYBearer token for llama-server (optional).
ATOMIC_AGENT_LLAMA_MAX_TOKENSMax new tokens per completion (default 4096, clamped 64–131072).
ATOMIC_AGENT_API_KEYBearer token for the serve HTTP API (fallback when --api-key is omitted).
ATOMIC_AGENT_RG_PATHOverride the bundled ripgrep binary path.
ATOMIC_AGENT_BROWSER_CHANNELchrome | msedge | chromium (default chrome).
ATOMIC_AGENT_BROWSER_EXECUTABLE_PATHExplicit Chromium binary path (overrides auto-detect).
ATOMIC_AGENT_BROWSER_HEADLESS1 for headless mode (default 0).
ATOMIC_AGENT_BROWSER_NO_SANDBOX1 to pass --no-sandbox (containers/CI only).
ATOMIC_AGENT_BROWSER_CDP_URLAttach to an existing browser via Chrome DevTools Protocol.
ATOMIC_AGENT_DEBUG_ARGV1 logs process.argv to stderr.
ATOMIC_AGENT_UPDATE_CHECK_ON_STARTUPCheck for a newer release at startup (default true).

Task queue

The task queue is configured only through environment variables β€” there is no tasks block in config.json.

VariableDefaultPurpose
ATOMIC_AGENT_TASKS_ENABLEDtrueMaster switch for the durable task queue.
ATOMIC_AGENT_TASKS_MAX_ATTEMPTS3Default retry budget per task.
ATOMIC_AGENT_TASKS_RUN_ON_CREATEtrueRun a task immediately when it is created with no schedule.
ATOMIC_AGENT_TASKS_SCHEDULER_ENABLEDtrueRun the long-lived background scheduler.
ATOMIC_AGENT_TASKS_SCHEDULER_TICK_MS5000Scheduler poll interval.
ATOMIC_AGENT_TASKS_MIN_INTERVAL_MS1000Floor on --every intervals.

There are many more ATOMIC_AGENT_* tuning vars for the agent loop, tasks, and memory β€” see the Configuration reference for the full list.

Common config keys

These live in <stateDir>/config.json and back the flags above. Edit them with atomic-agent config set (which replaces the whole file β€” see above) or the TUI.

KeyDefaultDescription
localModels.modeexternalmanaged runs the daemon; external expects a llama-server you run yourself. models use <id> flips this to managed.
localModels.urlhttp://127.0.0.1:8080HTTP URL for the llama-server API.
localModels.managed.modelIdnullActive model id in managed mode. Nothing is active until you pull a model.
localModels.managed.port19091Port for the managed chat daemon (embeddings use 19092).
localModels.completionMaxTokens8192Max new tokens per completion.
agent.maxSteps25Default max steps per turn (overridden by --max-steps).
agent.tokenBudget3000Max prompt tokens per turn.
agent.toolTimeoutMs60000Tool execution timeout.
agent.approvalLevel1Approval ladder, 1–5. See below. --no-approval forces 5 for one process.
log.levelinfodebug | info | warn | error.

The approval ladder

agent.approvalLevel replaced the old boolean agent.approvalRequired in schema v37. It is a 1–5 ladder and each level is cumulative β€” it stops asking about everything the level below it stopped asking about.

LevelNameStops asking about
1paranoidNothing β€” every gated action asks first. This is the default.
2workspaceFile writes, edits, and patches strictly inside the session working directory.
3homeAdds file writes anywhere under your home directory, moves to Trash, archive extraction, and HTTP requests.
4operatorAdds guarded shell commands, skill scripts, and process kills.
5full trustEverything, including browser navigation to non-web URLs and writes to the agent’s own trust config.

Hardline shell-guard rules sit outside the ladder and block at every level.

Where to go next

Configuration

The full config.json schema, every environment variable, and precedence rules.

HTTP API

Request/response shapes for serve, including streaming chat completions and the approval SSE stream.

Tasks & scheduling

Schedule syntax (--at / --cron / --every), retry behavior, and session binding.

Skills

The SKILL.md format, script allowlisting, and the approval gate for skill.run_script.