Skip to content

Releases: AtomicBot-ai/atomic-agent

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 31 Aug 21:27

Community feedback release: 18 fixes and features sourced from GitHub issues and the Discord server — every report from the last month triaged, fixed, and independently verified.

Reasoning & providers

  • No more chain-of-thought leaking into replies — unparseable reasoning is never "salvaged" as the agent's answer; prompts are now transport-aware, so native function-calling providers stop being ordered to emit text-JSON tool calls (#286, fixes #285)
  • Think-tag prefill no longer sent to native-tools chat providers — stops Ollama Cloud silently corrupting literal <think> strings; live reasoning display survives grammar fallover (#287, fixes #283)
  • Live reasoning no longer freezes at the first { in the model's thoughts — the stream parser only hands off to tool-call parsing on a real {"tool": " payload (#292)
  • Gemini RetryInfo.retryDelay honored on 429/503 — cooldowns from the error body instead of burning retries on fixed backoff (#271, fixes #106)
  • Final step reserved for a real answer — the agent replies instead of stalling at max_steps; user cancellation is no longer mislabelled as max_steps (#272, fixes #107 — based on @mikemikimike's #269)

Security & correctness

  • MCP tools with trust: approval_gated actually route through the approval gate — strict readOnlyHint === true exempts; everything else fails closed (#273, fixes #132)
  • Search cache + provider cooldown persist across restarts — per-task processes stop re-spending quota (#274, fixes #256)
  • skills.catalogTokenBudget is honored — the skill catalog is no longer hard-capped at 4096 chars (#288)
  • Warn on repeated test runs against an unchanged workspace (#276, fixes #118)

Local models

  • CPU llama.cpp fallback — iGPU-only Windows boxes get an automatic, visible fallback to the CPU build instead of a silent model-load failure; backendVariant config for manual control (#293)
  • Multi-GPU tensor splitlocalModels.managed.tensorSplit passes --split-mode layer --tensor-split to the managed llama-server (#298)
  • Ollama steer — pointing the External llama.cpp URL at an Ollama server now offers a one-key jump into the OpenAI-compatible provider wizard, prefilled (#290)

TUI

  • Clicking a slash-command completion runs the clicked command, not the half-typed buffer (#289)
  • Free/paid price filter on both cloud model pickers — press p (#295)
  • Mouse-report hardening over ssh — coordinate spam can't leak into the composer; a tripped session auto-disables mouse tracking with a /mouse hint (#297)
  • Legacy conhost guard — Windows 10 cmd/PowerShell (outside Windows Terminal) reserves the bottom row to stop shaking/duplicated last-row rendering, with a one-time Windows Terminal hint; opt out with ATOMIC_AGENT_CONHOST_GUARD=0 (#291)

Memory

  • memory export --vault <path> — one-way, idempotent Obsidian export of notes/lessons/procedures with frontmatter and wikilinks (#296)
  • MEMORY_GUIDE.md — the memory system end to end, with worked examples (#294)

Thanks to everyone who reported on Discord and GitHub: l.hk, thegreatteacher, detraxsenpai, adithr, johnfasterlane_83003, magicw0rm5, gokcanakalin, yablokolabs, Ramyazzam, sosidudku1, and @mikemikimike for #269.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 14:18

The TUI answers the mouse, and the mouse answers back

Seven changes, all in the terminal UI, all about things you could see but not touch.

Select text with a plain drag

Mouse support and native drag-to-select are mutually exclusive at the terminal level — while the app receives clicks, the terminal stops selecting. Now the drag itself resolves the conflict: drag across message text once and mouse reporting pauses for 10 seconds with a notice — drag again and native selection works, in every terminal, no modifier to remember. Shift- or Alt-modified presses open the same window instantly where terminals deliver them, and the idle strip carries a clickable [drag] select text chip that skips the first drag entirely. /mouse off remains the permanent form. (#278)

Links you can actually open

  • URLs in chat are OSC 8 hyperlinks everywhere now — including while the reply is still streaming, and including scheme-less www.example.com, which previously wasn't detected at all. (#277)
  • Terminals that ignore OSC 8 (stock macOS Terminal.app among them) get a working path too: messages with URLs grow [open <host>] chips beside [copy], routed through the app's own mouse layer — one click opens the OS default browser. Only http(s) is ever handed to the OS. (#277)

The rail folds away

A « in the sidebar's top-right corner folds it; a » at the head of the status bar brings it back; /sidebar does both from the keyboard. The fold is your choice and survives resizes — the restore control only appears when the terminal could actually seat the rail again. (#275)

Tasks catch up with Sessions

The Tasks header gets its own + new chip, landing straight in the create form, with the N running counter seated mid-gap between title and chip. The counter also counts correctly now: it used to read at most "5 running" because it measured the five visible rows, not the task list. (#282)

⚠️ ctrl+p retires — the menu answers to Esc alone

Esc already opened the menu from an empty idle prompt and already closed every overlay; ctrl+p was a second name for the same thing. It is removed end to end — binding, hint chips, rail label, docs. Muscle memory: Esc on an empty prompt, the ☰ Menu button, the breadcrumb, or the ctrl+g chords. (#280)

Smaller

  • The idle hint strip now advertises ctrl+n · new window — the shortcut existed, nothing on screen said so. The chip is clickable. (#279)
  • New curated local model: Qwen3.8 27B Uncensored (JonathanColetti/Qwen3.8-27B-Uncensored-GGUF, noMTP Q4_K_M, 16.5 GB, vision projector included) — the most-downloaded uncensored upload on Hugging Face of the last month. Deliberately last in every list, tagged Use at your own risk, and never the auto-recommendation. (#281)

What's Changed

  • feat(tui): clickable links in every chat message, including mid-stream by @plombeer31 in #277
  • feat(models-catalog): add uncensored Qwen3.8 27B, pinned last and never auto-recommended by @plombeer31 in #281
  • feat(tui): a collapsible rail — « folds it, » brings it back, /sidebar for the keyboard by @plombeer31 in #275
  • feat(tui): + new on the Tasks header, with the running counter centered — and counted correctly by @plombeer31 in #282
  • feat(tui): the menu answers to esc alone, ctrl+p retires by @plombeer31 in #280
  • feat(tui): advertise the ctrl+n new-window key in the idle hint strip by @plombeer31 in #279
  • feat(tui): Shift+drag text selection while the mouse is on by @plombeer31 in #278

Full Changelog: v0.4.2...v0.5.0

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 28 Aug 11:10

Steer context in tasks, not tokens

One task is a thing you asked plus everything the agent did answering it. agent.conversationMaxPairs (1–100, default 20) says how many the prompt carries, and the context panel now has a selector for it:

 context · 13.6k of 128k window · 11%
 prompt scaffold        5.9k   5% ==========
 conversation              6  <1%
 free                 106.2k  83%
────────────────────────────────────────────
 tasks per turn      −   20  +   sent each turn (1-100)

Every figure above the selector recalculates as you move it, so the cost of the choice is on screen while you make it. Click /+ or press -/+. This replaces the old transcript line, the capped by … sentence and the set auto (a) button.

Tokens remain the ceiling underneath — a task has no bounded size, so N tasks can still exceed a window, and whichever limit cuts more wins.

⚠️ Behaviour change

History is now capped at 20 tasks by default, where previously only the 32k token cap applied. A long, cheap history that used to survive whole will be trimmed. Set agent.conversationMaxPairs to 100 to effectively turn it off:

atomic-agent config set agent.conversationMaxPairs 100

Fixed

  • set auto could shrink the transcript 30× — with no window known it fell back to tokenBudget * 0.35 = 1050 tokens, taking the transcript from 32,000 to 1,050, the opposite of what it promised.
  • Cloud models had no context window at all in the prompt budget — it came only from the llama-server /props probe, so no window clamp was ever applied off the local path. The model catalogue now reaches the budget.
  • config set agent.approvalLevel could never succeed — the one safety-critical key rejected the value it had just been given.
  • Retry-After could corrupt a redirect URL in os.http.request, turning a plain 429-with-redirect into a blocked result.
  • The approval prompt advertised keys that did nothing — the hint strip said y/n while only ctrl+y/ctrl+d worked.
  • The uninstall dialog did not hold the keyboard — the confirmation word landed in the composer behind it, and Esc opened the operator menu on its way out.
  • Plan mode: the composer hint could never render, and the plan buttons were mouse-only. They answer to ctrl+y / ctrl+b / ctrl+d now.

Reliability

A dead socket is a transport failure rather than a tool bug (#262) · a closed pipe or vanished tty no longer crashes the agent (#263) · an empty completion gets one repair before the turn dies (#264) · errno survives being rewrapped (#265) · stacks Sentry can actually read (#266).

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 24 Aug 10:59

What's Changed

  • fix(tui): the six-hour OOM, the wrecked terminal, and three pane fixes by @plombeer31 in #232

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 21:27

The first-run experience, rebuilt end to end — plus mouse everywhere, a smarter composer, background sessions, and a working fallback chain.

Onboarding, redesigned

  • Intro splash: the atomic mark under a seeded starfield, with the tagline typing itself in. Any key — or any mouse click — continues; every setup screen is centred and mouse-navigable (#220#228)
  • The backend choice explains what each path costs (privacy · money · time); Esc-skip is remembered instead of re-running setup on every launch
  • Local models: a "Recommended models" picker sized to your machine's RAM, live download bars with rate/ETA (and ambient atoms to keep you company), press c to configure a cloud model mid-download, and press s to skip straight to the agent — the pull continues with a progress chip in the top bar
  • Any GGUF from Hugging Face: paste an owner/repo or URL and download it like a catalog model — built on the groundwork by @sachin-detrax in #38
  • If both backends aren't set up, the flow offers the other one exactly once — never after a custom endpoint, and never again after you've seen it

Composer & home screen

  • The input grows upward over the transcript instead of pushing the screen around; Shift+arrows select, Ctrl/Cmd+C copies to the system clipboard, Ctrl/Cmd+X cuts, Ctrl/Cmd+V pastes; right-click opens a cut/copy/paste menu on any text field
  • The meta row is three live controls — backend · provider/model · status: switch backend (cloud/local/custom), switch or add providers, pick models with type-to-filter. In local mode it shows your chosen model and the daemon's health with live RAM usage
  • Session title stays on one row (#221); long model names in the download chip are capped

Sessions & reliability

  • Creating or switching sessions no longer waits for the agent: a running turn detaches, keeps working in its old session, and replays its transcript when you switch back — approvals stay scoped to the session that owns them
  • Turns against a not-yet-downloaded local model fail fast with the model name and live download progress, instead of a bare transport error after a retry burn
  • The fallback-chain pane's edits (add / move / remove / append-local) now actually persist — they were silently dropped before — and the pane is clickable
  • External llama.cpp: reverse-proxy path prefixes are preserved, probe errors show on the pane you're looking at, and --api-key servers are detected with guidance (ATOMIC_AGENT_LLAMA_API_KEY)

For testing

A hosted stub llama-server is available at https://llama-stub-vercel.vercel.app (happy path at /, path-prefix at /llama, api-key at /auth, OpenAI-only at /openai) — see TESTING.md in the repo.

Merged: #220, #221, #222, #223, #224, #225, #226, #227, #228 by @plombeer31

Full Changelog: v0.3.7...v0.4.0

v0.3.7

Choose a tag to compare

@github-actions github-actions released this 21 Aug 21:02

What's Changed

  • feat(tui): bring back /debug, listed last under Go by @plombeer31 in #219

Full Changelog: v0.3.6...v0.3.7

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 21 Aug 15:33

What's Changed

  • TUI brand mark: Atomic cross as per-scale assets, with layout hardening by @plombeer31 in #211

Full Changelog: v0.3.4...v0.3.5

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 21 Aug 10:28

Fixes both things that broke 0.3.3. If you installed 0.3.3, update to this release — 0.3.3 has been unpublished.

Input is alive again

The kitty-keyboard probe added in 0.3.3 paused stdin after reading the terminal's reply. Node does not resume an explicitly paused stream when a new listener attaches, so Ink's own handler received nothing: the UI rendered perfectly and swallowed every keystroke and every mouse report. The probe now restores the stream exactly as it found it, and a regression test pins that contract.

A newer config can no longer brick an older build

0.3.3 migrated config.json to v41. Rolling the release back to 0.3.2 — whose supported-version list stops at 40 — killed every command at boot with unsupported config version 41, because getConfig() runs ahead of all of them, config set included. The check had been an enumeration with no upper bound since the first commit, so any future bump could have done this to anyone running two builds against one state dir.

From this release:

  • a config written by a newer build is read with the running build's schema instead of rejected — every version-gated rule in the parser is a < comparison, so a higher number correctly falls through to reading the file verbatim;
  • that version is preserved rather than stamped down, and writeUserConfigFileSync — the only function in the tree that writes config.json — refuses to lower it, covering the ~30 call sites that spread a config object and write it straight back. It says so on stderr rather than silently ignoring the payload;
  • ensureUserConfigFileSync migrates upward only, so a newer file is never rewritten at startup;
  • unknown top-level blocks survive the round trip. The docstring has promised this since the first commit; the parser never did it;
  • version must be a positive whole number — {"version": 1e308} used to parse, and would have pinned the file above every future schema for good;
  • config set refuses a version newer than the build understands. Reading one off disk is right; typing one is not;
  • when the config really is unusable, the error names the file and how to recover instead of printing a bare field and reason.

USER_CONFIG_VERSION is 42, with no schema change behind the bump — it marks the baseline the rules above hold from.

Known limit: unknown keys inside a known block are still dropped, so an older build re-writing a newer file loses them while keeping the newer version label.

If you are stuck on 0.3.2 or 0.3.3 right now

A build that is already compiled cannot be taught the new rule, so an older install holding a newer config still refuses to start — and atag update is one of the commands that dies, so it cannot pull the fix. Re-run the installer instead:

curl -fsSL https://raw.githubusercontent.com/AtomicBot-ai/atomic-agent/main/scripts/install.sh | sh

Or edit ~/.atomic-agent/config.json and set "version": 40, then update normally.

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 20 Aug 14:32

What's Changed

  • feat(cli): install atag as a short alias for atomic-agent by @plombeer31 in #195

Full Changelog: v0.3.1...v0.3.2

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 20 Aug 12:41

One PR on top of v0.3.0, but a visible one: the TUI redesign that was written alongside the v0.3.0 work and did not make it into that release.

Highlights

The rail moves to the left, and becomes the app frame

Sessions and Tasks used to sit in a right-hand rail that only existed in chat mode, so switching to a panel took all the chrome off screen. The rail is now on the left, carries the brand mark, the version and a Menu button above the two lists, and is drawn in every mode.

The menu is a centred overlay

ctrl+p opened a list anchored to the bottom of the pane, hanging off the prompt like a dropdown. It is now a true overlay: centred on both axes, with the app behind it dimmed.

The composer is a framed field

The prompt was a single left border column capped by a glyph. It is now a closed rounded frame whose bottom row is an action bar carrying the model label and a clickable send →.

Copy any message, re-run your own

Every message carries [copy], and your own messages also carry [try again], which re-runs the text through the same path Enter uses. The clipboard layer picks the right platform command on its own (pbcopy, clip.exe, wl-copy, xclip).

Everything else

Fixed

  • The rail no longer overruns a short terminal. Its chrome budget still described the old right-hand rail, so at 24 rows the rail asked for 28. Ink paints later lines over earlier ones instead of clipping, so that garbled the whole frame rather than losing the tail.
  • The menu is centred on the content area rather than the terminal, so its right border no longer falls off screen while the rail is up.
  • The one-row status bar keeps the breadcrumb and drops its duplicate brand lockup while the rail is on screen.

Install / Update

macOS / Linux:

curl -fsSL https://atomicagent.io/install | sh

Windows (PowerShell):

irm https://atomicagent.io/install.ps1 | iex

Atomic Agent updates itself in place. After an update the TUI prompts you to restart.

No config migration in this one: the schema stays at v40.

Full Changelog: v0.3.0...v0.3.1

The UI round is @plombeer31's design and code, recovered onto current main. Built by @plombeer31 and @sosidudku1, reviewed by @Ooooze.