Repository navigation
The desktop app is updated too: Desktop v0.0.8. This release is called Overnight. Give the agent a long task, a budget and a time limit, go to sleep, and read what it did in the morning.
Overnight runs
atomic-agent overnight "<task>". One command for a long unattended run.--budget <usd>caps the money,--hours <h>caps the time (8 by default, up to 24),--dir <path>picks the folder,--notify telegramsends the report if no desktop app or TUI is using your Telegram bot,--detachmoves it to the background and prints the task id and log path. A live line per step shows the step, the time and the spend:[step 12 | 14m | $0.42 of $5.00] read src/app.ts.- Approvals during an overnight run. By default an action that needs approval is denied; the log names each one and the summary says how many.
--no-approvalallows everything for that run; use it only in a folder you can throw away. - Budgets for tasks and turns.
agent.task.maxCostUsdandtask create --max-cost-usd <n> --max-duration <dur>. When the cap is reached the agent writes a short summary and stops withstopped: spent $X of $Y budget. Spend is an estimate from the provider's price list and counts the main agent only, not Fusion workers, memory or compaction, so a run can end slightly over the cap. Local models count as $0. - Tasks resume after a crash. Background tasks save a checkpoint after every step. If the agent crashes or the app restarts, the task continues from the last finished step instead of starting over (
agent.task.resumeInterrupted, up toagent.task.maxResumes= 3 times). Do not count on this for a terminalatomic-agent overnightrun yet. - Done, Failed, Needs you. A finished task's Telegram report lists Done, Failed and Needs you, with the number of steps, the time and the reason it stopped.
/statusin Telegram shows running background tasks. SetATOMIC_AGENT_TASKS_REPORT_QUIET_HOURS=23:00-08:00to hold reports at night and get one morning report instead. /goalin the TUI. Give the chat a checklist, plus optional checks such ascheck: npm test, and it keeps working round after round until every item passes, it needs you, or it reaches 10 rounds./goal status,/goal pause,/goal resume,/goal clear.- Long normal work is no longer taken for a loop. Re-running tests after edits or polling a long build no longer trips the loop guard. Real loops are still stopped, and a deliberate poll is allowed 20 identical answers instead of 5.
Fewer approval prompts, same safety
- Always allow. Most approval prompts (TUI, CLI, Telegram, Discord, the desktop app) now also offer Always allow, which saves a rule, for example
Always allow "git status" in this project. In the TUI it isctrl+n, in the CLI thewkey. - Saved rules. Rules live in
approval-rules.jsonin the agent's folder (allow, ask, deny) and in.atomic-agent/approval-rules.jsonin a project, where only ask and deny count, so a project cannot grant itself anything. Deny wins over ask, ask wins over allow. Always allow covers simple commands only (no pipes,&&or redirects) and is saved by program and subcommand (git status) or by program alone (ls). Deny and ask rules also match each command inside a compound line. Dangerous commands and secret files never get an Always allow. - Dangerous commands ask every time.
rm -rf,git reset --hard, force pushes,sudo,bash -c,evalandchmod 777now have their own category that a session grant never covers. Only the top approval level skips the question. - More dangerous commands recognised. The shell guard now catches
git -C repo push --force,git push origin +main,--force-with-lease,git clean -fdx,git checkout -- .,git branch -D,find -deleteandbash <(curl …), and asks before running them. - Risk check (opt-in). With
agent.smartApprovalon, a model rates ordinary actions before you are asked (agent.smartApprovalModelif set, else your local model if one is running, else the active provider). Dangerous commands, secrets and email always ask. Low-risk actions run; the rest are asked as usual. If the check does not answer in 8 seconds, you are asked. - Fusion fan-outs are safer. Approving a fan-out no longer lets workers run destructive commands in that folder unasked, and writing
.envorconfig.jsonno longer asks again and again.
Claude plugins
- Install a Claude Code plugin as is.
atomic-agent plugin install <folder>reads Claude Code, Codex and Cursor plugin packages. Their skills show up asplugin:skill, their MCP servers join the agent (always behind approval) and their commands become slash commands in the TUI with$ARGUMENTS,$1to$9. - Marketplaces.
atomic-agent plugin marketplace add <owner/repo>, thenplugin install <name>,plugin update,plugin list,enable,disable,remove. Installing never runs plugin code. - Hooks. PreToolUse and PostToolUse command hooks in Claude's
hooks.jsonformat, from~/.atomic-agent/hooks.jsonor from a plugin. A hook can block a tool call or add a note after it. Matchers understand Claude's names (Bash,Read,Write,Edit,mcp__server__tool). - Code stays off until you allow it. Every install and update is scanned; a plugin's local MCP servers and hooks run only after
--accept-codeorplugin allow-code <name>, and that consent is asked again when what the plugin runs changes. /pluginsin the TUI (ctrl+g x) shows what each plugin brings and lets you switch whole plugins or single parts, allow or stop plugin code, and remove a plugin.- Not supported yet: output styles, LSP servers, other hook events, and running a plugin's subagents.
Continue from Claude Code or Codex
atag handoff --from claude-code(orcodex). When Claude Code or Codex stops in the middle of a task, this saves its latest session (the newest one from this folder, else the newest anywhere) as an Atomic Agent chat in that session's folder, opens the TUI and sends a message to carry on.--session <id>,--list,--note "<text>",--no-open.- Fits a local model. A long session is shortened to fit the local model's window (its configured size, else 32k;
--context <tokens>): the newest steps are kept word for word, the older part becomes a short extract. No model call is needed for that.
Zero setup, then a bigger model
- No key on first run. The TUI's first run offers the 1.3 GB starter model to start right away, then downloads the best model this computer can run in the background and moves to it when it lands.
atomic-agent models recommendshows what the machine has and a fast, balanced and quality pick.atomic-agent models upgradedownloads the quality pick in the background without switching. For example: 16 GB Mac, Qwen 3.5 9B; 32 GB Mac, Gemma 4 26B A4B; 64 GB Mac, Qwen 3.6 35B A3B.
Readable output
- Finished turns fold into one line,
Used 6 tools · 40s ▸./expandopens the last turn (/expand allopens every turn),/collapsefolds them back,/steps onkeeps steps open (tui.showSteps). - Steps read as words: "Read config.ts", "Ran npm test · failed", "Used github: create issue", in the TUI and in the Telegram progress message.
- A live plan. The agent keeps a checklist above the composer (
plan 3/7) and updates it with the newplan.updatetool. It survives a restart. - Cost and limits beside the context gauge, for example
$0.31 · 17% left, resets 15:00./usage(or/cost) shows the breakdown. Local models showlocal. /statusshows what a running turn is doing, in the TUI and in Telegram, where a long turn's progress message becomes one status card that updates in place.- Answers fit where you read them. They start with the result; Telegram gets one message without tables. Before a reply reaches you, unclosed code fences are closed and filler lines and repeated paragraphs are removed (
ATOMIC_AGENT_REPLY_POLISH=0turns this off). - Code blocks are drawn without the ``` fences, so copying code copies only code.
Small local models
- A compact prompt for small windows. With a context window of 64K or less, the agent sends a shorter version of its own instructions and leaves more room for your task (
agent.prompt.compact:autoby default,on,off). - Compaction works on 16K and 32K windows. From a 32K window up, local models without prompt reuse get a summary written by the model instead of an extract.
- No more empty tool calls. The grammar now requires the arguments of the tools small models use most (edit, move, list, grep, glob, web search and fetch, HTTP, memory).
- Local thinking models keep their reasoning between the tool steps of one turn.
- Nemotron 3.5 Bolt E4B and other Gemma 4 fine-tunes are recognised by their chat template.
- On 24 GB GPUs and 32 GB Macs the automatic window accounts for the server's real buffers; if layers still land on the CPU, the model restarts once with a smaller window.
Fusion
- Steer one worker.
/worker steer <id> <note>sends a note to one running worker;/worker stop <id>and/worker escalate <id>act on one worker without stopping the rest. Worker rows show tokens and cost as they run. - Resume a cut-off run. Fusion saves each run as it goes. After a crash or a restart,
/fusion resumepicks up the unfinished part and keeps what was done; steps with side effects are not repeated unless you confirm them. - Honest cost and caps. Cached tokens are now counted at the cached price.
llm.runMode.fusion.turnBudgetUsdandturnTimeBudgetMscap one Fusion turn. - New options, all off by default: models by role (
llm.runMode.fusion.roles: plan, build, review, explore, utility), a task tree where a worker proposes a split (taskTree.enabled), each worker in its own git worktree with an automatic merge (isolation: "worktree"), a judge that closes a task only on a green checklist (judge), automatic replanning (autoReplan) and asking a stronger model when a worker is stuck (escalation). - If the local model server stops answering after a worker was cut off, the next part fails at once with a restart hint instead of waiting.
Screen
- The agent shows you where to click (macOS, desktop app).
os.screen.pointdraws arrows, boxes and numbered steps over your screen instead of clicking for you. It only draws; it never clicks or types. On by default withtools.screen.point. - Snapshot one window.
os.screen.capturetakesapp,windowandtext: trueto capture one app's window, even under other windows, and read its text (macOS, with screen control on). Password managers and system sign-in windows are refused.
Models and providers
- No silent switch to a local model. When a cloud provider fails, you see the reason and one next step instead of being moved to a local model you did not pick (
llm.fallback.appendLocalis now off by default). - Says when it switched. A long rate-limit cooldown is no longer spent on retries in place: the agent waits it out or moves to your fallback chain and tells you, for example "OpenRouter is rate-limited, switched to Gemini (gemini-2.5-flash)."
- Cheap, Balanced and Best come first in the TUI model pickers for OpenRouter and AI/ML API (in the desktop app also for Gemini).
- Kimi K3.1 gets the temperature it accepts (1), OpenAI reasoning models get none, and a 400 that names the only allowed temperature is retried once with it.
- A
claudeorcodexCLI installed with npm or Homebrew now findsnodewhen the agent starts from the desktop app, once the app has found the CLI.
Fixed
verify.runcommands now go through the shell guard, so dangerous ones are blocked or asked about.- Windows: the CLI no longer crashes on exit with a
UV_HANDLE_CLOSINGassertion. - Windows x64: a cancelled model load no longer moves you to the slow CPU build.
- An older terminal no longer crashes when a newer desktop app wrote the local engine's session record.
- Your own llama-server with
--api-key: the error now namesATOMIC_AGENT_LLAMA_API_KEYinstead of telling you to restart the model. - A model that fills every argument with 0 no longer turns off the shell timeout.
timeoutMs: -1now means no limit. - Fusion: removing a provider used as the escalation or judge model no longer breaks the config; a worker that leaves a placeholder in its file is no longer reported as ok; workers no longer wait on a sibling's unwritten file or run browser code under node.
DO_NOT_TRACK=1turns off analytics and crash reports.- 16 of 21 production dependency advisories closed, including both critical ones.
- Qwen 3.8: mixed spellings of a tool name no longer leak raw tool-call text into the chat.
Also
- An older build no longer breaks on settings written by a newer one, and no longer overwrites them.
- Local connection refusals are reported with the engine and its state, so we can tell a crashed engine from one that never started.
- Desktop and terminal installs from one shared folder are counted separately.