Empryoempryo.beta
release sequence

What's shipping.

Every release, newest first — straight from the repo CHANGELOG.

3.4.6-beta2026-07-13
release

Four reported bugs, fixed — including two that failed silently

Every fix here came from a bug report, and three of them shared a habit: they failed quietly. Model fallback didn't fire, embeddings never reached your provider, and syntax colours ignored your theme — none of it announced itself. This release fixes all four, and makes the remaining failure paths say what went wrong.

Fixed
  • Model fallback now fires on a rate limit, however the provider words it. Failures were classified by reading the error *message*, and the HTTP status never made it into that text. So a textbook 429 whose body said something like *"Prepaid credit balance is exhausted"* — naming no status and no rate limit — was treated as permanent, and the turn died instead of swapping to your fallback model. The status now decides: 408, 429 and any 5xx always retry and fail over. Auth rejections still never burn the retry budget. The same rule now covers the terminal, the desktop app and subagents, which each had their own copy of the old one.
  • Memory embeddings actually use your provider now. Setting memory.embeddingModel did nothing: the model id was handed to the AI SDK as a plain string, and a bare string always resolves through the Vercel AI Gateway — so every embedding call went there, wanted a gateway key you don't have, failed, and fell back to the offline embedder without a word. Embeddings are now built from your own provider and your own key. Local embedders (Ollama, LM Studio) work too, with no key at all. If one still can't be wired, /memory → Settings tells you exactly why instead of just reading offline.
  • Reasoning models work on strict backends. We sent reasoning_effort and reasoning: { effort } in the same request, on the theory that an API ignores keys it doesn't recognise. Strict ones don't — they reject the whole request ("pass either, not both"), making those providers unusable. Empryo now sends the single flat OpenAI field. Custom providers that genuinely need the nested shape can ask for it with reasoning.effortStyle.
  • `/theme` finally reaches your code. Syntax highlighting in code blocks, diffs and tool results used a fixed dark palette that was built once and never rebuilt, so changing themes did nothing to it — and on a light theme, comments and ordinary text were close to invisible. Colours are now drawn from the active theme and follow it when you switch.
Grok
  • `/grok login`, `status`, `logout` and `switch` exist now. The commands were missing entirely, even though the model picker told you to run /grok login — and there was no way to sign out of Grok on any surface.
  • The desktop app can find the Grok CLI. It installs to ~/.grok/bin, which only reaches your PATH through your shell profile — so an app launched from the Dock reported "grok CLI not found" and greyed out sign-in even when it was installed.
Under the hood
  • The reported problems came with source-level diagnoses. Thanks to the people who wrote them up that carefully.
3.4.5-beta2026-07-13
release

Stop really stops, diffs stop lying, and the desktop app grows up

Three fixes in this release reach every surface — the terminal, headless runs and the desktop app all share the same tool belt, and all three had a way of quietly doing the wrong thing. Stop could leave a runaway process alive, a diff could report "no changes" when there were changes, and resuming a session could crash the next turn. On top of that, the desktop app gets its largest upgrade yet.

Fixed
  • Stop now kills the whole process tree. Shell commands were started without their own process group, so stopping a turn only killed the shell wrapper — anything it had spawned kept running. A hung grandchild could survive indefinitely and Stop appeared to do nothing. Commands now run detached and are reaped as a group (Windows kills the tree via taskkill /T).
  • `git diff` no longer hides real changes. A dedup cache suppressed any diff identical to the previous one, so asking twice reported "No changes since last diff" even when the working tree was clearly dirty. The cache is gone — a diff now always shows what's actually there.
  • Resuming a session no longer crashes the next turn. If a session was saved while a tool call was still in flight — or you stopped mid-turn — the restored history contained a tool call with no result, and the next request failed outright. Those gaps are now repaired on load.
New
  • Kill one tool without ending the turn. A single running tool can be stopped by itself now; the agent keeps going with everything else.
  • A real desktop app. The chat is virtualized and stays anchored while it streams, with syntax-highlighted markdown and a shared diff renderer used by both the transcript and the inspector. There's a live file tree that follows changes on disk, tabs that show cost and edits at a glance, a model picker that opens on first launch if no model is set, subagent detail views, and a Stop button that is a genuine hard cancel — the turn, its subagents and any background agents, all at once.
Under the hood
  • Goal-loop runs report the phase they're actually in (no more bars stuck on "planning"), and the reviewer's tokens and cost are folded into the tab total.
  • Every macOS and Linux build is still executed before it ships — empryo doctor must load the native runtime and parse real code inside a Linux container and, for Intel macOS, under Rosetta.
3.4.4-beta2026-07-12
release

The terminal app stops breaking when you also install the desktop app

If you used the TUI and then installed the desktop app, the TUI could stop launching entirely — dying with opentui is not supported on the current platform, even though nothing about your platform had changed. This release fixes that, adds a one-command way to check your install, and makes every Linux and macOS build prove it actually runs before it ships.

Fixed
  • The TUI no longer breaks after you use the desktop app. Both apps share ~/.empryo, and the desktop's startup refresh was deleting native libraries it doesn't ship but the TUI depends on. The desktop is now fully self-contained — it reads its runtime from inside its own app bundle and never writes to the shared directory. Each surface now owns only the files it installs.
  • Installs repair themselves. The installer keeps a pristine copy of the native runtime, so a TUI whose libraries were already wiped restores them on the next launch instead of staying broken. This also protects you if you're still running an older desktop build.
  • A missing runtime finally says so. Instead of the misleading "not supported on the current platform", you get the exact file that's missing and how to fix it — and the crash report keeps the full message rather than a bare Error.
New
  • `empryo doctor` — checks that the native runtime loads and that tree-sitter parses, then prints OK or the precise failure. Run it any time an install misbehaves; it's also what our release now runs against every build.
Under the hood
  • Every macOS and Linux build is now executed before release — Linux inside a container, Intel macOS under Rosetta — and must load its native library and parse real code, not merely print a version number. A stale or mismatched native library can no longer reach a download link.
3.4.3-beta2026-07-11
release

Live code-intelligence on the desktop, sharper genome, and the site opens to everyone

The desktop app now surfaces code-intelligence the way the TUI does, the genome understands more languages, and empryo.com is out of coming-soon — anyone can download.

Desktop
  • Code-intelligence surfaces live. A late-ready genome rebuilds one agent mid-session instead of degrading the whole session; toggling genome, instructions, or skills rebuilds running lanes; and project-scoped cache / token-budget settings now apply on every host.
  • `/genome` and `/context` are in the command palette.
Genome
  • Wider language coverage — TSX/JSX, PHP, and C++ headers/includes parse cleanly, with sharper TSX signatures and known gaps closed.
Site
  • empryo.com is public. The coming-soon gate is gone — downloads for macOS, Windows, and Linux are open to everyone, and there's a new /benchmarks page with a console-verified head-to-head.
3.4.2-beta2026-07-11
release

Anonymous, opt-out usage telemetry and configurable desktop terminals

3.4.2 adds a small anonymous usage beacon so we can see which platforms, surfaces, and models to prioritise — and gives the desktop terminal real shell profiles. The telemetry is privacy-first and easy to turn off.

New
  • Anonymous usage telemetry. On session start Empryo sends one tiny beacon — version, OS, surface (TUI / headless / hearth / desktop), install method, provider + public model name, agent mode, terminal, runtime, theme, and a random install id used only to count distinct installs. Never prompts, file paths, code, keys, IPs, or anything that could identify you. Turn it off any time: set "telemetry": false in your config, or DO_NOT_TRACK=1 / EMPRYO_TELEMETRY=0 in the environment. A one-time notice explains this on first run.
  • Desktop terminal shell profiles. The embedded terminal now supports VS Code-style shell profiles — pick your shell and args per platform instead of being stuck with the default login shell.
Fixed
  • The desktop terminal failed to spawn in packaged builds — the bundled app now resolves the shell correctly, so the terminal opens in the shipped DMG / installer as it does in dev.
3.4.1-beta2026-07-11
release

A redesigned task router, live task visibility, and a first-boot freeze fixed

A quick follow-up to 3.4.0 with a reworked task router, a live view into what the agent's doing, and a first-boot freeze fixed at the root.

Desktop
  • Task router redesign. Grouped lanes, icons, effective-model hints, and segmented concurrency controls; targets a single tab's session override when more than one tab is open; changing the topbar model now keeps the router's default slot in sync, and the model dropdown scrolls correctly inside the drawer.
  • See what the agent's doing, live. A tasks panel above the composer streams the agent's task list as it updates; the goal reviewer's report text now reaches the desktop instead of being dropped; GoalBar gets a toggle for the reviewer's live steps and past verdicts.
  • Maze choreography. Agent hops read as a fast swim instead of a teleport, dispatch and background workers hatch from and return to the organism instead of orbiting as static dots, the main agent perches while a swarm or the reviewer works nearby, and the camera eases in during review.
Fixed
  • A first-boot freeze. Migrating settings into place could hang the TUI on a fresh install when the filesystem couldn't clone files in place — regenerable data now skips cleanly instead of blocking, runtime files like a stale pid or lock never migrate, and a corrupt memory database is quarantined and recreated instead of bricking startup.
  • The boot sequence stopped teleporting. Brand, picker, and version text now hand off on one shared clock instead of racing separate entrance animations; the workspace no longer replays its entrance after indexing; the logo no longer flashes when the halo settles.
  • The genome popup showing 0 files after the map format overhaul — the parser now follows the directory-folded layout and groups files under their directory with a blast-radius heat bar.
  • A loading state instead of a blank flash on the maze, browser, setup wizard, and full genome view while they lazily mount.
3.4.0-beta2026-07-11
release

Fast file search everywhere, session import from Claude Code & Codex, and a smarter long-session brain

A big minor: a resident file-search engine now powers the app end to end, your Claude Code and Codex history can move in with you, and the machinery behind long sessions — compaction, memory, the code graph — got a serious upgrade.

Fast file search (fff)
  • @-mentions are instant and get smarter as you use them. The picker (TUI and desktop) runs on a resident native index: results are frecency-ranked, every pick teaches it, and a bare @ now surfaces your hot files — the ones you've been touching — instead of an alphabetical wall.
  • The agent's search tools ride the same engine. Warm greps for "does X exist" answer in well under a millisecond, glob matches skip the process spawn, and everything still falls back to ripgrep/fd when it must — complex regexes, scoped paths, or the first seconds while the index warms.
  • It ships in every install. macOS, Linux, and Windows binaries (both architectures) carry the engine and set it up on first launch — nothing to install. On by default; /fff off (TUI) or Settings → General (desktop) turns it off per project or globally.
Bring your sessions with you
  • Import from Claude Code and Codex. The desktop wizard gained an Import step (also /import) that scans ~/.claude and ~/.codex, shows what it found, and migrates transcripts into Empryo's session store — each session imported individually with live status, so one odd file never sinks the batch.
Long sessions got cheaper and sharper
  • Compaction keeps more of what matters. Summaries are genome-aware (files the map already covers collapse to one line), subagent work survives into the parent's working state, aged edit results fold down to their status line, and truncated lists say so — the model knows when it's seeing a tail.
  • Compaction no longer torches your prompt cache. Prior summaries are carried byte-identically and the genome snapshot is preserved when the head survives, so compacting mid-session stops guaranteeing a full-price re-read.
  • Memory learns from being ignored. Recalled-but-never-used memories decay and eventually archive themselves; the ones you act on rise. Near-duplicate writes auto-supersede the older note instead of piling up.
  • The code map leans toward your question. Identifiers in your prompt pull their defining files up the map, LSP call-hierarchy now corrects the call graph for the hottest symbols, and standalone-LSP enrichment runs itself after every scan — no more "LSP off" until you poked settings.
Desktop
  • A proper hello and goodbye. A brand splash plays on launch (click to skip, respects reduced motion), the workspace selector is a redesigned two-column instrument with a manageable recent list, and quitting masks the teardown instead of flashing it.
  • Live turn timing where you're looking. The active tab shows a ticking timer from the instant you hit send; durations across the app read as humane 5m 12s instead of 312.0s.
  • Wizard polish. Model search matches across separators, the mode step breathes, and the first Keys panel opens fast — the keychain probes warm in the background during the splash.
Fixed
  • Nested `app/` directories were invisible. An unanchored .gitignore pattern hid every nested app/ dir from git and the code graph.
  • fff grep matches ripgrep line-for-line. Multiple hits on one line no longer produce duplicate rows.
  • Docked maze clears the right-side panels, and the titlebar divider sits where it should.
3.3.7-beta2026-07-10
release

Correct version in About, a tidy workspace picker, and a clean quit

A quick follow-up to 3.3.6 with the small fixes that make the desktop app feel right — the version you're actually running, control over your recent list, and a quit that doesn't flash.

Fixed
  • The "can't click anything" freeze. Confirming a delete (file tree, storage) could leave the whole app unclickable — the modal's focus-return target had just been deleted, wedging an invisible pointer lock. A global safety net now releases it the moment no modal is actually open, across every dialog, drawer, and menu.
  • Sending while indexing works. Sending a message during the initial codebase scan errored with "Agent not initialized"; now your message shows immediately with a live status and sends itself the moment indexing finishes.
  • Composer hints stop colliding. Squeeze the center column and the keyboard hints now shed their labels, then hide entirely — instead of being clipped under the buttons.
  • Tab chips drop the redundant model label when a tab uses the workspace default model.
  • About shows the version you're actually running. It reported Electron's version in development builds; it now bakes in the real Empryo version at build time and shows it as a badge next to the title.
  • Manage your recent workspaces. The picker now has a per-item remove (hover a row) and a Clear-all — no more permanent list of folders you opened once.
  • No flash when you quit. On Linux especially, closing the window briefly flashed the app content before it vanished; the window now hides instantly, so the shutdown animation is the last thing you see.
New
  • The file tree keeps up. When the agent creates a file it now appears in the sidebar automatically, and the tree header gains three buttons — New file, New folder, and a manual Refresh — right beside the hide control.
3.3.6-beta2026-07-10
release

Every language highlights, errors finally make sense, and Grok behaves

Syntax highlighting grew from a handful of languages to the entire grammar registry — lazily, so the app doesn't get heavier — and the Errors panel stopped shouting stack dumps.

New
  • 332 languages highlight now. Chat code blocks and the editor share one highlighter: core languages preload, everything else (Astro, Svelte, Vue, Zig, Prisma, GraphQL, Haskell, Nix, …) loads the first time it appears — nothing to install, works offline. The editor gains real TextMate grammars for languages it never had, themed to match the app.
  • Languages panel. /languages (or More tools → Languages): every language with live status — core, loaded this session, on-demand, or off — per-language toggles that persist, and a hand-off to the Language-servers panel for completions and diagnostics.
  • `/about`, with the version, lineage, support links — and the titlebar wordmark opens it on click.
Fixed
  • The random TUI freeze. The terminal renderer could lock up mid-session — opening a picker, moving a cursor, sometimes for no visible reason — with the process still alive underneath. The rendering engine is upgraded to a release that guards against exactly this (destroyed-renderable lifecycle loops, FFI pointer lifetimes, render-tree corruption). If you ever see a freeze again, please report it — we're watching this one closely.
  • The Errors panel reads like a log you'd want. One failure used to land three times wrapped in minified stack dumps; entries now dedupe, titles are readable, embedded JSON pretty-prints on expand, and a copy-all button sits beside clear. Raw text is preserved — nothing is paraphrased away.
  • Grok (subscription CLI). Failures surface the CLI's own message instead of a source-code dump, and the model list now comes from grok models live — so ids that vanished from your plan (looking at you, grok-4.3) stop being offered.
  • File preview crash on the second open ("Theme forge not found") — the editor and the highlighter now agree on theme names, and highlighting failures degrade gracefully instead of reaching the error screen.
  • Linux: windows associate with their launcher entry properly (taskbar icon, pinning) via WM_CLASS alignment.
  • Genome view panels stopped blending into the modal backdrop; the Settings button tooltip says Settings.
3.3.5-beta2026-07-10
release

Empryo updates itself now — signature-verified, on every platform

The desktop app gains a real self-updater, the update feed that silently froze is fixed for good, and the macOS first-launch fix is now impossible to miss.

New
  • Self-updating desktop app. When a new version ships, Empryo tells you — a dialog on launch (once per version, Skip respected), /update on demand, a light 4-hourly background check, and an OS notification if the window is in the background. On Windows and Linux (AppImage) one click downloads, verifies, installs silently, and restarts. On macOS (unsigned builds can't self-install) it downloads and opens the verified DMG — and because the download never touches a browser, there's no quarantine flag and no "damaged app" dance on updates.
  • Trust before bits. Every update is checked against the release's RSA-4096-signed checksum manifest with a key pinned inside the app — the same chain the install scripts use. A tampered or spoofed feed can't get a single unverified byte executed.
  • Support Empryo. The About dialog now says the quiet part: the app ships unsigned because certificates are a recurring cost. If Empryo helps you, GitHub Sponsors and PayPal links live there — appreciated, never expected.
Fixed
  • A missing API key can no longer brick the app. If your configured model's key isn't set (or no model is configured at all), the workspace now boots normally — genome, files, and the Keys panel all work, the Errors panel explains what's missing, and chat shows the same actionable message per send until you add a key or switch models. Previously this failed the whole bridge at the workspace picker.
  • Linux gets its icon back. Installs shipped the icon only into an unregistered 1024px slot, so Mint/Cinnamon menus showed nothing — a full 16→1024 size set now lands in the right places, and the window/taskbar icon ships as a real resource instead of a path that only existed in dev.
  • The update check told everyone they were current. The release feed gated on a changelog file nothing was updating, so it froze at 3.0.1 and every newer install compared against it and answered "up to date". The feed now includes every release no matter which pipeline wrote it — and empryo.com/changelog shows the full history again.
  • Slash commands the composer forgot. Commands declared in the shared manifest (like /update and /usage) ran from the ⌘K palette but were invisible to the chat composer. The composer now reads the same manifest and runs them through the same bindings.
  • macOS install hint you can actually see. The xattr -cr first-launch fix is now a bold amber callout with one-click copy, sitting directly under the download buttons — on the download page, the wizard, and the docs.
  • Docs accordions were rendering empty. A markdown-renderer bug dropped content nested inside tabs and accordions — the "Other install methods" section on the installation page was blank on the live site. Fixed.
  • Memory tab's scope controls are labeled, readable fields now; select dropdowns app-wide slimmed down with a consistent chevron; wizard download labels no longer vanish in light theme.
3.3.4-beta2026-07-10
release

A real file manager, a genome you can read, and glass that finally behaves

The biggest desktop UX pass since launch — the file tree became a file manager, the genome became a browsable interface, the titlebar got out of its own way, and transparency stopped turning menus into ghosts. Plus two real intelligence bugs fixed under the hood.

New
  • File manager in the tree. Right-click (or keyboard) to create, rename, duplicate, copy/cut/paste, and delete files and folders — with drag-and-drop moves, inline rename, and a confirm dialog for deletes. The tree also stopped hiding things: dotfiles (.github, .env…) show, and deep folders load on expand instead of being silently truncated.
  • Draggable panels. The sidebar, context pane, and inspector all resize by dragging, with sane min/max widths, double-click to reset, and the layout persists across restarts. Both side panels collapse and reopen from the titlebar.
  • A genome you can actually read. The genome view now parses our own structure into a real interface — a stats bar, dependency pills, and a searchable grid of file cards showing blast-radius, exported signatures, and clickable :line links — with Structured / Markdown / Raw modes. Open it full-screen from the context pane.
  • Sessions, reorganized. The sessions menu leads with search (focused on open) and a New-session button that names and starts a fresh conversation; saving is a secondary action.
  • A calmer titlebar. Twelve occasional tools fold into one More tools menu, narrow windows collapse the rest into it, provider rows show live readiness dots with a Refresh button, and Zen mode has a one-click toggle.
Fixed
  • Transparency behaves on every theme. With transparency on, menus, pills, tabs, dialogs, and toasts now use a fixed-opacity frosted glass (blurred, but readable) instead of going see-through at low window opacity — and light themes no longer turn murky. Opaque mode is unchanged.
  • Language servers stop dying. A second Empryo process (a TUI beside the desktop, a relaunch) was killing the first instance's language servers, which then showed as stuck "starting…" forever. The reaper now only touches genuinely orphaned servers, and dead servers are reported honestly.
  • The genome stopped lying about itself. A fully enriched genome could display "semantic: off" if a background task hiccuped — the status now comes from the database, and the mislabeled lsp: line (actually symbol enrichment) reads enriched:.
  • Creating a new file in a workspace behind a symlink (macOS /tmp, /var) no longer fails with "path escapes workspace".
  • Scrollbar no longer overlaps toggles in drawer lists; the model picker's right-side reopen button no longer hugs the window edge.
3.3.3-beta2026-07-10
release

The desktop model picker shows every live model — gateway providers were stuck on a hardcoded list

One targeted fix, big visible difference: on desktop, gateway-style providers never showed their real catalogs.

Fixed
  • Desktop model picker: live catalogs for grouped providers. LLM Gateway, OpenRouter, Copilot, GitHub Models, opencode-zen, the local proxy, and Vercel AI Gateway all listed only a short hardcoded fallback set on desktop — regardless of your key or login. The picker's probe asked these providers the wrong question (their flat model call intentionally returns nothing; the grouped catalog is the real one). It now fetches the grouped catalog: LLM Gateway shows its full ~232 models, OpenRouter ~347, and DevPass logins see everything their plan allows. The TUI was never affected.
3.3.2-beta2026-07-10
release

The TUI-crash fix — stale native libraries can never survive an upgrade again

The root cause of "the TUI keeps crashing" on Linux, Windows, and Intel Macs: builds since the OpenTUI 0.4.2 upgrade shipped a two-versions-old native render library next to new code, and on upgraded machines the old library could survive in ~/.empryo/native indefinitely. Both halves are fixed, and a set of production-hardening guards landed with them.

Fixed
  • TUI startup crash (`Symbol "dumpOutputBuffer" not found`). The build now verifies every platform's native OpenTUI library against the exact JS version and fetches the right one from the registry when the local copy is stale — a lockstep gate in the release pipeline makes shipping a skew impossible. If you hit this: reinstall, or rm -rf ~/.empryo/native and relaunch.
  • Upgrades fully refresh the runtime. A version marker forces ~/.empryo/{native,wasm,opentui-assets} to be rebuilt whenever the binary version changes, files are swapped atomically (a running Empryo never sees a torn library), and dropped files can't linger.
  • Addons survive upgrades. Installing a new version no longer wipes opt-in addons (proxy, Neovim) — they stay installed and linked.
  • Installs verify themselves. The installer now runs the freshly installed binary before declaring success — wrong-CPU downloads (SIGILL) and corrupt archives fail loudly with the exact fix, and EMPRYO_ARCH=x64-baseline can force the no-AVX build explicitly.
  • Updates behave. Beta users are offered the final release of the same version, and empryo update no longer times out at 60 seconds and orphans a half-finished installer.
Under the hood
  • Build-time smoke tests run every host-compilable binary before packaging.
  • TUI renderer-init failures now write a crash report and, when the cause is a stale native runtime, say exactly that instead of blaming your terminal.
3.3.1-beta2026-07-10
release

Linux reliability patch — Wayland rendering fixed, GPU self-healing, crash reports everywhere

A fast patch for Linux users hitting crashes on 3.3.0. If Empryo went black, invisible, or down in flames on your machine yesterday — this one's for you.

Fixed
  • Wayland black window / render-loop crash. Chromium 144's new wp_color_manager path is broken on KWin/Plasma-family compositors (endless "Unable to set image transfer function", invisible windows). The feature is now disabled — the desktop renders correctly on Wayland again. On an affected 3.3.0 build: --disable-features=WaylandWpColorManagerV1.
  • GPU crash-loops self-heal. Three GPU-process crashes in a run and the desktop relaunches itself with hardware acceleration off and remembers the choice — a broken driver no longer reads as "the app keeps crashing".
  • TUI crashes leave evidence. Fatal TUI/CLI errors now write a crash report to ~/.empryo/logs/crash-tui-*.txt (mirroring the desktop's ~/.config/@empryo/desktop/logs/), so "it crashed" comes with a file.
  • Clean piped output. empryo … | jq and friends no longer risk truncated output or stray terminal escapes on exit.
Notes
  • On Ubuntu 23.10+ prefer the .deb over the AppImage — Ubuntu's AppArmor blocks the AppImage's Chromium sandbox by design; the .deb installs a proper AppArmor profile. The new [Linux troubleshooting docs](/docs/troubleshooting) cover all of this.
3.3.0-beta2026-07-09
release

Crash-proof desktop with real logs, Linux .deb/.rpm packages, and a faster everything

The reliability release. The desktop app can no longer die silently — every early failure now surfaces with the logs you need to report it — Linux users finally get native packages, and a Chromium-generations Electron jump plus the React Compiler make the whole app quicker.

Highlights
  • Crashes now show themselves. A global crash guard catches every fatal error — even before the window exists — and shows a dialog with the full story: copy the logs, save them to a file, open the log folder, restart, or close. No more blank-screen deaths on Linux (or anywhere).
  • Persistent logging, finally. Main-process, bridge, and interface errors all land in a rotated log file (~/Library/Logs/Empryo on macOS, ~/.config/Empryo/logs on Linux), so a GUI-launched app no longer discards its own diagnostics. Fatal errors also write a standalone crash report.
  • Linux gets .deb and .rpm. Alongside the AppImage, native packages for Debian/Ubuntu and Fedora-family distros — x64 and arm64 — built and checksum-signed by the same release pipeline, on the download page now.
  • Electron 43 + React Compiler. Ten Chromium generations newer (and back in the security-support window), with the interface auto-memoized by the React Compiler — snappier long chats without a single hand-written memo.
  • LLM Gateway, three ways in. Log in with your browser to account credits or straight into your DevPass subscription (/login llmgateway, /login llmgateway-devpass), or paste an API key — on desktop, in the TUI, and headless. Empryo now identifies itself as Empryo on the consent page.
  • Know what you're spending. A new Usage view — desktop drawer and TUI /usage — with today/week/month spend, per-model breakdowns, a 30-day sparkline, and a DevPass budget ring showing exactly how much is left until reset. Powered by a local ledger, so it works offline and for every provider; it switches to live gateway numbers automatically once the gateway ships a key-scoped usage API.
Fixed
  • A stopped turn no longer waits out the full retry backoff before actually stopping, and a closed tab can no longer wedge itself mid-send.
  • Checkpoint restore no longer corrupts binary files and no longer strips trailing newlines from text files; Windows paths restore correctly.
  • --timeout in headless runs now also bounds background agents; piped --json output can no longer be truncated on exit; a failed --login exits non-zero; Ctrl+C keeps its documented exit code on Windows.
  • The TUI no longer sprays escape sequences into pipes or logs when stdout isn't a terminal, and a clean quit can no longer terminate the shell wrapper that launched it.
  • On Linux, bridge child processes (git and friends) now find per-user installs (~/.bun/bin, ~/.local/bin) when launched from the desktop.
Under the hood
  • Conversation-history sanitizing now skips arrays it has already proven clean — per-turn cost stays flat instead of growing with session length.
  • Renderer errors, unhandled rejections, and React error-boundary crashes are reported to the same log file over IPC, rate-limited so a hot loop can't flood it.

If Empryo ever breaks on your machine now, it will tell you — and hand you the logs to make it our problem instead of yours.

3.2.0-beta2026-07-09
release

Desktop gets real memory, full session management, and deep settings parity with the TUI

The biggest desktop update since launch. The app now remembers across turns, manages sessions the way the TUI does, and exposes the provider and task-router controls power users have been asking for — all running through one unified bridge instead of a growing pile of one-off wiring. Alongside it: a full provider pricing refresh and a run of composer polish.

Highlights
  • Real cross-turn memory + compaction. The desktop app now keeps genuine conversation memory across turns and compacts it automatically as context fills up, with a UI to watch it happen — no longer a TUI-only feature.
  • Session management, for real. /continue, /new, rename, and a full diagnostic session export now work on desktop exactly like the TUI — pick up where you left off, or hand off a session for debugging.
  • Provider Settings, deepened. Per-provider reasoning-effort overrides, context-management controls, capability toggles, key-priority ordering, and advanced request-shaping — desktop Settings now covers what the TUI's /provider-settings has for a while.
  • Task router gets teeth. Per-model fallback chains, a dedicated goal-review model slot, and searchable model pickers make routing different work to different models something you configure, not just read about.
  • One command palette, two hosts. TUI and desktop now share the same command manifest — a new slash command shows up in both automatically.
  • Zen mode, and a redesigned composer. A focus mode that strips the chrome away, plus several rounds of composer polish — ToolTrace tool-call rendering and new Chat FX treatments — for a calmer conversation view.
Under the hood
  • Every desktop feature that talks to the backend now goes through one unified bridge-invoke seam instead of a bespoke protocol case per feature — git, memory, skills, LSP, checkpoints, diagnostics, and more all moved onto it this release.
  • Refreshed pricing, model catalogs, and reasoning/effort capabilities across every supported provider: new models (Grok 4.5, Gemini 3.5 Flash, and more), corrected context windows, and a couple of real capability bugs fixed — Claude Sonnet 5 was silently missing its full effort range.
  • Fixed a genome-indexing freeze on large backends, clamped prompt-cache breakpoints to Anthropic's 4-block limit, and closed a race between a new turn starting and an in-flight compaction.

Same graph engine, same workshop — now with a desktop app that remembers, and a TUI that isn't the only one with the good settings.

3.1.0-beta2026-07-03
release

The desktop app grows a browser, clickable file mentions, and a Markdown preview

The v3 beta's biggest desktop update yet. Empryo's desktop app gains a real embedded browser, turns the agent's file references into things you can actually click, and learns to render Markdown — plus a long list of smaller refinements across chat, the maze, settings, and the workspace picker.

Highlights
  • An embedded browser, built in. Preview your dev server without leaving Empryo — a tabbed, local-only browser lives right inside the app, so the thing you're building and the agent building it share one window.
  • Clickable file mentions. When Empryo names a file, it's now a link. Click to open it in place (desktop) or jump straight there from the terminal (CLI). Only real files in your indexed codebase light up, so a mention is never a dead end.
  • Markdown, prettified. The file peek can render Markdown instead of only showing source — hit the prettify toggle to read a doc the way it's meant to look, headings, code, and all.
  • Choose your prompt-cache window. Settings now expose the prompt cache TTL (5 minutes or 1 hour), so you can trade freshness for cost on your terms.
Smoother all over
  • The maze opens zoomed in with a clearer HUD, gives each agent a distinct color, and keeps links off by default so it reads at a glance.
  • The workspace picker scrolls and filters your recent projects, so getting back into a codebase is one keystroke.
  • Settings grew a dedicated Providers tab, a clearer workspace-scope toggle, and tabs that scroll when they need to.
  • Resuming a session brings back the full transcript — agent messages and tool cards included — instead of a bare outline.
  • Steadier chat streaming, reliable glass transparency, framed image lightboxes, sharper themes on dark backgrounds, and a tidier titlebar round it out.
Under the hood
  • The download page now builds its links from a tracked manifest, and a release refuses to finish until empryo.com is actually serving the new version — no more dead download buttons.
  • Every artifact here — CLI, TUI, and the desktop app for macOS, Windows, and Linux — is built, signed, and shipped straight from a Mac. No CI in the loop.

Same graph engine, same workshop — now with a window onto the web and fewer dead ends.

3.0.1-beta2026-07-03
release

A calmer first launch — you pick the workspace, Empryo asks for less

A focused follow-up to the v3 beta that makes the desktop app's first moments calmer and more predictable — and asks your OS for a lot less.

Highlights
  • Always start at the workspace picker. The desktop app no longer reopens your last project on its own. You choose the workspace on every launch — recent ones are one click away — so your codebase graph indexes exactly the folder you meant, and nothing else.
  • Far fewer permission prompts. Empryo doesn't touch a single file or open the network until you pick a workspace, and it no longer asks macOS or Windows for local-network access it never used. It only ever asks for what it actually needs, when it needs it.
  • The right theme from the first frame. The picker and loading screen now follow your system light/dark setting instead of briefly flashing the wrong palette.
Under the hood
  • The bundled agent sidecar now ships with a stable, hardened identity instead of an anonymous one, so the file access you grant is attributed to Empryo cleanly.

Same graph engine, same workshop — just a gentler way in.

3.0.02026-06-23
release

The Empryo era. SoulForge becomes Empryo — same engine, new name, and a much wider surface: a native desktop client, a real website at empryo.com, and binary-first distribution straight from the source. Versioning continues from SoulForge v2 — this is v3, not a restart.

Features
  • brandrebrand SoulForge → Empryo across CLI, desktop, and web; migrate ~/.soulforge config to ~/.empryo
  • desktopnew Electron client — TUI session + config sync, multi-tab workspaces, redesigned chat/status/settings
  • desktopLiving Map / maze — pan, zoom, search, fly-to camera, achievements, keyboard navigation
  • desktopfull Git panel — stage, unstage, commit, and diff from a drawer
  • desktopcommand palette, app-wide toasts, keyboard cheatsheet, theme crossfade, dockable genome map
  • webappempryo.com on TanStack Start — owned docs (dropped Mintlify), blog pipeline, download page, glass UI
  • genomestable symbol monikers, polyglot structural-edit tool, trigram search with gitignore + hash CAS
  • cli--cwd plumbed through a single global; Empryo brand splash on boot/landing/shutdown
  • distbinary-first releases via dl.empryo.com (Cloudflare R2) — signed SHA256SUMS, install.sh / install.ps1, Homebrew + WinGet channels
Bug Fixes
  • releaseredact builder paths from compiled CLI/bridge binaries; mandatory leak audit before ship
  • releaseone arch per desktop job; native fpm for arm64 .deb; square 1024² app icon
  • headlesswire full agent capabilities into setupAgent
  • llmcorrect app-identity headers for OpenRouter and LLM Gateway
Performance
  • desktopstop maze RAF teardown on every hover/link/target change; reduce-motion guard
  • clifix react-compiler bailouts and cut render-path allocations
Documentation
  • point install/download references at dl.empryo.com, not GitHub Releases
  • document package architecture; refresh README, getting-started, and project guide
Tooling
  • workspace-wide lint/format/typecheck/build coverage across all packages and apps
  • manual-only package publish workflow; pack rehearsal without npm auth
3.0.0-beta2026-07-02
release

Empryo v3 — SoulForge, reborn

Meet Empryo — the coding agent that treats your codebase as code, not text. It's the successor to SoulForge v2: same graph-powered engine, a whole new form. SoulForge lived in your terminal. Empryo is the entire workshop — a polished TUI, a native desktop app, and empryo.com. Versioning continues where SoulForge left off, so we open at v3, and the whole line is a public beta.

Highlights
  • A real desktop app. Native on macOS, Windows, and Linux — multi-tab sessions, a live map of your codebase, and every tool a click away.
  • A TUI that feels crafted. Rebuilt from the ground up: soft depth, fluid panels, an agent dock, an inspector, and a fast command palette.
  • It understands your code. Empryo parses your whole repo into a dependency graph and edits by symbol and line — AST surgery and LSP rename, not find-and-replace.
  • Your models, your way. Bring any provider, or sign in with the ChatGPT, Grok, or Copilot subscription you already pay for.
  • Always current. A built-in changelog and one-command updates keep the CLI and desktop fresh.
Under the hood
  • Cross-platform binaries — signed, checksum-verified, and installed by a single curl … | bash (or irm … | iex on Windows).

This is day one. Welcome to Empryo — let's forge.

2.19.02026-05-31
release
Bug Fixes
  • forgemode inject latches on mode name + frozen turn-mode
  • llmset correct app identity headers for OpenRouter and LLM Gateway
  • soulmaptrigram search falls back to full scan on un-populated index
Documentation
  • soulmapteach agents when/why to use soul_query
Features
  • forgeinject mode as cache-stable message, not cached prefix
  • forgemode-gate tools at execution, keep schema cache-stable
  • soulmapstable symbol monikers + polyglot structural_edit tool
  • soulmaptrigram search, gitignore, soul_query pipeline, hash CAS, scan gating
  • structural-editvendor ast-grep so it's always available in prod
Testing
  • forgecover mode tool gating — cache-stable schema + execution deny
2.18.62026-05-30
bug fixes
Bug Fixes
  • providerspin gpt-5.5 context to 272k for codex/proxy
  • streammatch orphan tool-results against all prior assistants
  • streamdrop orphaned tool-result blocks from provider-executed tool-calls
  • useChat,dispatchinline stall-retry backoff + return DispatchOutput on single-agent failure
  • incremental context compression — correct token tracking, add ea… (#78)
Miscellaneous
  • contextdrop redundant = undefined init on lastInstructionsSize
  • useChatrewrite stale stall-retry comment after inline-backoff rewrite
2.18.52026-05-30
release
Bug Fixes
  • chatrestore single rail + gated narration in live auto view
  • chatstable segment-positional render for live auto view
  • configexit with clear error on invalid config.json instead of silently using defaults
  • llmOpus 4.8 support — adaptive-only thinking, correct headers, pricing verified
Documentation
  • sponsorsadd @nerminba to backers
Features
  • providersadd NVIDIA NIM provider
2.18.42026-05-27
release
Bug Fixes
  • launcherdetach child process group to preserve exit banner
  • presetsapply overlay against seeded defaults, validate via zod
Features
  • providersexpand context-length field mapping for custom providers
  • providersauto-discover models for custom OpenAI-compatible providers
2.18.32026-05-27
bug fixes
Bug Fixes
  • skip neovim-not-found system banner
2.18.22026-05-27
bug fixes
Bug Fixes
  • shellJS-enforced timeout + killTree to prevent infinite hangs
  • toolstimeout tee + io-worker calls; drop stale tests
  • harden workers, tools, and abort path
2.18.12026-05-27
bug fixes
Bug Fixes
  • brewwiden gzip glob to deps/**/*.{node,dylib,so}
  • buildexternalize native + asset deps from main dist bundle
  • bundleexternalize native + asset deps from worker bundles
2.18.02026-05-27
release
Bug Fixes
  • addonssurface install/uninstall flows + clean Windows user data
  • addonsaccept --list/-l/--help/-h flags + clearer unknown-verb error
  • addonsaccept --addon flag form + surface addon help in top-level usage
  • addonshonour system PATH binaries, guard reinstall, wipe stale state
  • agentsdrop orphan provider-executed tool blocks before replay
  • brewclean ~/.empryo on uninstall + version-stamp upgrade
  • bundleuse --outdir for worker builds (Bun multi-chunk output)
  • cibump @opentui/core-win32-x64 pin to 0.2.15
  • depsbump @opentui/core native dylibs to 0.2.15
  • llmhide addon-gated providers from Ctrl+L when addon missing
  • setupsplit addon wizard into sequential yes/no prompts
  • soul_visionstabilize Kitty image rendering across rail transitions
  • soul_visionrender image inline in streaming tool rail
  • soul_visionopen image by default, ctrl+o collapses
  • uicorrect Ctrl+B/F label — browse checkpoints, not undo/redo
Documentation
  • escape literal $ in prose so Mintlify stops eating it as math
  • sweep windows install — fix bogus URLs, fold into installation
  • sweep mintlify docs against code, add addons + presets pages
  • add Discord community link
Features
  • addonsgate UI surfaces on addon presence (headless, footer, help)
  • addonshide proxy/neovim commands and editor tool when addon missing
  • addonsfirst-run wizard prompts for proxy + neovim via clack
  • addonsmake proxy + neovim opt-in via empryo addon install
  • releaseadd pre-flight lint/typecheck/test gate
  • windowsnative Windows x64 support (#74)
Miscellaneous
  • LockInStreamViewsort imports
  • buildharden compile pipeline (opencode-inspired)
  • scriptsdrop fake empryo.dev URLs from installer comments
  • testsdrop stale LockInStreamView terminology in dispatch test
Performance
  • inputunblock submit path for large pasted text
Refactor
  • modalsuse shared SPINNER_FRAMES in Diagnose/UpdateModal
  • toolrename set_lockin → final_response + fix boundary race
  • minor cleanups
2.17.02026-05-22
release
Bug Fixes
  • exitprint banner on Ctrl+C in installed binary
  • routerfull provider/model id + dedicated Tools section
  • sessionsUI must be superset of model view — guard against messages.jsonl truncation
  • sessionsstop restore loop, cap tabs, preserve progress
Documentation
  • promptenforce strict lockin ordering before final answer
  • promptdocument soul_map_update delta channel
Features
  • contextsession header only when foreign or post-compaction
  • contextentry points in snapshot + session header in delta
  • contextsurface memory category next to delta files
  • contextdelta provenance — modified-since-new + recent failures
  • contextfreeze per-tab soul-map snapshot with explicit refresh boundary
  • repo-mapexpand entry points to PHP, Zig, Haskell, Scala, C#, Elm
  • repo-maprank delta file symbols by inbound call count
  • toolsexpose web_search + fetch_page to ember explore agents
Miscellaneous
  • useChatformatter touch-ups on dependency arrays
Performance
  • repo-mapwarm-start PageRank with prior vector + L1 early-stop
  • sqliteindex edges by target + PRAGMA optimize on close
Refactor
  • contextprovider-aware soul-map snapshot with idle TTL
  • repo-mapindex bare filenames + dotfiles via detectLanguageFromPath
  • repo-mapconsolidate language detection, skip non-code from pagerank
2.16.52026-05-21
release
Bug Fixes
  • assetswiden llmg svg viewBox to prevent text clipping
  • contextdrive pending semantic mode through onScanComplete
  • memoryper-tab hint state — tabs no longer silence each other
  • presetsskip malformed specs at boot instead of failing each load
  • sessionssingle app-level session id + per-tab slice writes
  • sessionsserialize saves per session to prevent restore corruption
  • uikeep thinking spinner up until final text streams
Documentation
  • sponsorsclarify GitHub Sponsors supports one-time, fix dark-mode logo, reorder nav
  • sponsorsself-host LLM Gateway logo + add mintlify sponsors page
Features
  • memoryhint surface telemetry — schema v2→v3, non-breaking
  • memoryper-subagent hint scope via AsyncLocalStorage
  • memorystrip hint footers on compaction + teach agent the new shape
  • memoryactionable inline hints — category, imperatives, dedup, gates
  • repo-mapscale type-edge weight in PageRank propagation
  • repo-mapdemote type-only and barrel files in ranking
Miscellaneous
  • biomeadd github + json reporters with artifact upload
Performance
  • repo-mapcache cochanges by HEAD sha and persist rendered map
Refactor
  • memoryloud/quiet hint shape — prefs are loudest, pinned/pref bypass cooldown
  • memoryrelax hint gate — surface relevant decisions, not just gotcha/pinned
2.16.42026-05-21
release
Features
  • memoryrich hint tails with per-turn dedup
  • themedefault to proxysoul-coffee
Miscellaneous
  • themesort imports in store
Refactor
  • forgegroup set_lockin with flow-control tools
2.16.32026-05-20
release
Bug Fixes
  • chatpreserve chronological order in tools rail
  • chatdrop inline <think> parser — reasoning only from native stream parts
  • compactionallow user-configured per-model context window override
  • memoryannotate buildMemoryIndex locals with MemoryIndex type
  • memorysurvive concurrent sf SQLite I/O errors
Documentation
  • changelogadd sponsors shoutout to 2.16.2
  • promptsrewrite commit-boundary rule to clarify set_lockin timing
Features
  • presetsload shareable config bundles by name, URL, or path
Miscellaneous
  • update readme
  • update readme
  • update readme
  • update readme
Refactor
  • promptspositive framing + naturalize memory
  • promptsper-family tuning + tighter answer voice
2.16.22026-05-20
💜 sponsors
💜 Sponsors
  • [LLM Gateway](https://llmgateway.io/dashboard?ref=6tjJR2H3X4E9RmVQiQwK) ([@theopenco](https://github.com/theopenco)) — one API for OpenAI, Anthropic, Google, and 30+ providers. Up to 30% off frontier models, real-time analytics, BYOK. Now wired into Empryo as the llmgateway provider. Thanks for keeping the forge lit. 🔥
Bug Fixes
  • lockininvalidate commit when tools land after set_lockin
  • read-highlightrender unknown-lang files plain in multi-file reads
Documentation
  • sponsorsadd BACKERS.md + README sponsor wall with LLM Gateway
2.16.12026-05-20
release
Features
  • configurable Anthropic cache TTL + fix lockin nudge tracking
Performance
  • reseed soul-map diff state after 5min idle on Anthropic cache
2.16.02026-05-20
release
Bug Fixes
  • chatsurface premature stop when agent ends without final message
  • commandssync forgeMode when toggling plan via /plan
  • dialogsgate DialogSelect when another dialog is layered above
  • dialogsgate host pickers when a dialog is on the stack
  • dialogsswallow keyboard events on dialog primitives
  • inputmove stash bindings to alt+s/alt+p to avoid skills/sessions collision
  • modalsswallow keyboard events so popup scroll doesn't bleed to chat
  • promptstell agent shell runs in cwd
  • settingsstop keyboard propagation across settings + plan popups
Documentation
  • installationadd OpenRouter key tab
  • providersdrop literal anchor syntax from headings
  • providersadd LLM Gateway and OpenRouter anchors
Features
  • chatclick tool row to expand full result inline
  • chatclick reasoning fold and tool rows to expand/collapse
  • chattips catalog for input placeholder rotator
  • commandsgate /clear and /storage cleanups behind confirm()
  • commandssuggested + aliases metadata on CommandDef
  • historyprompt stash + frecency store
  • inputstash hotkeys, frecency-ranked autocomplete, rotating tips
  • llmrank model picker by frecency within each provider
  • lockinauto mode + model-controlled set_lockin tool
  • palettesurface suggested commands at the top of empty-query view
  • railshow "Thinking…" trailing row while agent narrates
  • railhover, single-click expand, syntax-highlighted read results
  • rendererenable mouse motion tracking for hover states
  • rendererpassthrough output, fps cap, terminal title sync
  • safetycentral confirm() dialog for destructive git + session actions
  • stash/stash browser command + draft-restore event bus
  • uihover state on user messages, tool rows, and reasoning fold
  • uiborder primitives + reasoning disclosure glyphs
  • uidialog stack store + confirm/alert/select primitives
Performance
  • intelligencestream semantic summary generation to bound heap
  • messagescustom equality on StaticMessage so historical rows skip rerender
  • tool-rowmemoize StaticToolRow with prop-shape equality
  • uiscroll acceleration on every scrollbox
  • cache & dedup hot paths in forge prepareStep
Refactor
  • chatconsolidate RAIL_BORDER on the ui/borders primitive
  • lockinper-tab verbose + commit-boundary rail render
2.15.72026-05-14
release
Bug Fixes
  • cachedefault pruningTarget to none, force-off for sparks
  • keyspass secret via -w argv to avoid TTY prompt leak
  • keysstop keychain prompt leak and UI freeze in /keys
  • routerfallback row layout + docs page
  • telemetrylive toggle, key routing, table widths + docs
  • toolsisolate subprocess stdin/tty to prevent UI hangs
Documentation
  • fix model-events icon to valid FA name
Features
  • retryper-model fallback chains + split transient/stall budgets (#58)
  • telemetryopt-in per-call model events sidecar
  • toolsactionable truncation hints + sharper edit guidelines
  • uisubdued grouped-list rows + indent remove key action
Performance
  • promptstrim system prompt 5.2k→2k tokens, relocate refs to tools
Testing
  • promptsupdate assertions for system prompt trim
2.15.62026-05-14
release
Bug Fixes
  • agentspropagate max_tokens cap to dispatched subagents
  • agentssurface abnormal finish + auto-continue on length truncation
Features
  • providersrefresh model lists & opencode-go fetchModels
Miscellaneous
  • themedefault to proxysoul-main
2.15.52026-05-14
bug fixes
Bug Fixes
  • buildstub react-devtools-core initialize to prevent TUI crash
2.15.42026-05-13
bug fixes
Bug Fixes
  • terminalhand TTY to child via renderer.suspend
  • wizardpaste + cursor in setup api key input
Miscellaneous
  • bump bun engine, make nvim optional
2.15.32026-05-11
release
Features
  • timeoutsconfigurable watchdog timeouts with /timeouts picker (#61)
2.15.22026-05-11
release
Bug Fixes
  • lock-inlive dispatch updates
  • routermake concurrency picker navigable
Documentation
  • memoryadd user-facing memory page
  • promptsstrengthen memory write/search habits
Features
  • hearthexpose provider settings as remote slash commands
  • provider-settingsclarify tabs with info banners
  • reasoningwire thinking knobs for all providers
Refactor
  • provider-settingsgroup rows into sections, compact to one line
2.15.12026-05-11
bug fixes
Bug Fixes
  • memory-browsertighten content width padding
2.15.02026-05-11
release
Bug Fixes
  • clipboardsurface backend-missing + update prerequisite for Wayland
  • clipboardwayland support + ctrl+shift+c no-exit + empty-export guard
  • memorydeclare new_id in supersede tool schema
  • memoryrebalance recall scoring
  • memorybetter near-duplicate detection on write
  • memoryrewrite breakage tests to new API + harden write/FTS
  • memoryfew memory fixes
Documentation
  • memoryrewrite prompt with value framing + capability-first ordering
  • memoryrewrite prompt guidance — triggers, supersede, conflict protocol
  • memorystronger tool guidance + per-action display
  • promptsinstruct proactive memory.search when convention matters
Features
  • memorystub-mode auto-recall — details on demand via memory(get)
  • memoryprovider-aware embedder resolution + live refresh on model switch
  • memorysurface recall signals in injected memories block
  • memoryco-change recall boost via Soul Map git history
  • memorywire provider embeddings via config.memory.embeddingModel
  • memoryprovider embeddings + cleanup hint in statusbar
  • memorysupersede action + 3x summary weight + boot backfill
  • memoryhashbag-v2 embedder with paraphrase-grade recall
  • memoryunified popup with Settings tab + UI toggle for auto-extraction
  • memoryid prefix resolution + phase 6 auto-trigger hook
  • memoryphase 6 — post-turn extraction primitives (opt-in)
  • memoryphase 5 — contradiction hints on fresh writes
  • memoryphase 4 — embeddings, semantic recall, memory_edges, Deep cleanup
  • memorypremium popup browser — sidebar tabs + table + cleanup
  • memoryphase 3 — cleanup primitives, interactive /memory, hint banner
  • memoryphase 2 — multi-signal recall, passive inject, compaction-safe
  • memoryphase 1 — schema rewrite, dedup, dual FTS, file refs
Miscellaneous
  • governance, build hardening, mintlify sweep
Other
  • memorydrop phase 6 auto-extraction
Testing
  • memoryadversarial sweep + 3 real bug fixes
  • step-utilsawait prepareStep — now async
2.14.112026-05-10
bug fixes
Bug Fixes
  • empryouse find -exec + to avoid heredoc backslash stripping
2.14.102026-05-10
bug fixes
Bug Fixes
  • ciuse Hardware::CPU.flags for AVX check in generated formula
2.14.92026-05-09
bug fixes
Bug Fixes
  • plan-modealways register plan tools and sync mode on resume
Miscellaneous
  • remove test_scaffold tool
2.14.82026-05-08
bug fixes
Bug Fixes
  • installself-heal missing libopentui + verify install integrity
2.14.72026-05-07
bug fixes
Bug Fixes
  • proxyself-heal version file and reuse bounceProxy on restart
2.14.62026-05-07
release
Bug Fixes
  • agentsset max output tokens and surface abnormal finish reasons
  • dispatchpassthrough agent text, fix cache prefix, per-agent stats
  • errorsroute silent catches through surface-aware sinks
  • useChatclassify stream errors via cause chain (#63)
Documentation
  • document key storage, keyPriority, and Windows/WSL
Features
  • commandsadd /exit to autocomplete
Other
  • router visual improvements
2.14.52026-05-04
bug fixes
Bug Fixes
  • bundleauthenticate proxy version lookup, bump fallback
2.14.42026-05-04
bug fixes
Bug Fixes
  • bundleuse aarch64 suffix for CLIProxyAPI assets
  • proxymatch upstream aarch64 asset rename, fallback to legacy arm64
2.14.32026-05-04
release
Bug Fixes
  • chatpick last text segment after tools, skipping trailing reasoning
  • chatsnap drip cuts to grapheme/ANSI boundaries
  • compactionbill cache-read tokens at cache rate, not full input
  • deepseekuse openai-compatible provider to preserve reasoning_content
  • pricingsync provider rates to 2026-04-30 official docs
  • promptsmandate final answer on every turn
  • uirebuild update modal on PremiumPopup primitives
  • retry logic for stall watchdog and transient streaming errors (#55)
Features
  • footerexpand hints with hearth, checkpoints, tabs, hooks, mcp
Miscellaneous
  • useTextDriprename reassigned param to local cut
Performance
  • streamkill render churn in lock-in and long autonomous loops
Testing
  • pricingalign deepseek expectations with v4-flash rates
2.14.22026-04-29
bug fixes
Bug Fixes
  • agentsguard normalizePath against non-string + Windows separators
Documentation
  • note Windows is not natively supported, link #57
2.14.12026-04-28
release
Bug Fixes
  • copilotroute all models through /chat/completions, surface clear errors
  • lock-ininclude ast_edit in edit-tool set
  • lockinkeep rail border constant across tool count changes
  • toolsshorten ast_edit description to fit popup row
  • prefer project instructions over global defaults (#56)
Features
  • lock-inenable by default and hint toggle in input
Miscellaneous
  • bump deps and ignore app build artifacts
2.14.02026-04-24
release
Bug Fixes
  • approvalsprompt locally when Hearth is offline
  • approvalsprompt locally when Hearth is offline
  • ast-editharden replace_in_body + surgical ops
  • hearthhoist redact import in tui-host log sink
  • hearthproduction hardening sweep (H1-H9, M1-M8)
  • hearthrebuild all surfaces on config reload
  • hearthguard bridge lock against pid reuse
  • hearthtee TuiHost logs to hearth.log for Recent log visibility
  • hearthlog imessage inbound + binding miss for debuggability
  • hearthwrite daemon log to disk; hide token row for iMessage
  • hearthcap attachments at 10 MB, scrub filenames
  • hearthstamp [via <origin>] on remote-surface messages
  • hearthredact bot token in URL-path form
  • hearth/discordintent minimization, fatal-close lockout, 429 retry, allowlist
  • hearth/imessageparameterized SQL, TCC probe, exact approval prefix, rate limit
  • hearth/telegramspoof detection, 429 retry, callback allowlist, rate limit
  • intelligencecap ts-morph SourceFiles and tie LSP diagnostics to doc eviction
  • intelligencestop biome/LSP zombie process leak; report true memory footprint
  • subagent-toolspreserve full dispatch result body in aggregate summary
  • uitighter popup layouts
  • useChatadd tabId to unmount effect deps
  • wizarddrop fabricated content, correct URL and web-search providers
Documentation
  • ast-editadd user-facing docs, README feature, pills pill
  • hearthmark as experimental across UI and docs
  • hearthdrop iMessage from README and Mintlify
  • overhaul
  • remove legacy /docs (migrated to mintlify-docs)
Features
  • ast-editsmart-resolve, anchors, arrow targets, robust errors
  • hearthTUI-aware stop and Discord snowflake validation
  • hearth/hearth status reports TUI host as alive
  • hearthTUI steals bridge from daemon and auto-binds on /pair
  • hearthsocket peer-auth via SO_PEERCRED / getpeereid
  • hearthpersistent daemon service — launchd/systemd unit install
  • hearthremote control surface layer with TUI + daemon hosts
  • proxydynamic version, self-heal on connection errors, undici fetch
  • toolsadd ast_edit — surgical ts-morph AST editing for TS/JS
  • uiintroduce popup design system primitives
Miscellaneous
  • hearthuse optional chain in telegram handleUpdate
  • logsroute boot-path stderr writes through logBackgroundError
  • formatting + minor cleanups
Other
  • Load instruction files from the home directory (#49)
  • loads enabled instruction sources from both the project directory and
  • keeps both project and global instructions in the prompt and makes
  • adds targeted loader tests and updates the docs for prompt assembly,
  • `bun test tests/instructions-loader.test.ts tests/shiki-marked.test.ts
  • `bunx biome check src/core/instructions.ts
Performance
  • intelligencefix 20+ GB worker heap balloon on long sessions
Refactor
  • chat,landingast_edit row label + KeyCaps migration + NewFlameLogo
  • checkpointsredo stack stores dropped messages per entry
  • contextmake cross-tab coordination block passive FYI
  • hearthremove iMessage surface
  • popupsdrop POPUP_BG/POPUP_HL module exports
  • popupsmigrate all modals/settings to PremiumPopup + primitives
  • promptsdedupe workflow, XML-structure tool guidance, add ast_edit examples
  • promptsdedupe shared rules, single-source CORE_RULES
  • promptsrewrite identity + output-discipline grammar rules
  • tool-formattersrestrict outside-cwd scan to path args
  • toolsprefer ast_edit for TS/JS + forge usage telemetry
  • tools-popupdrop redundant keyHint checkmark
  • uiVirtualList primitive replaces usePopupScroll
  • useChatconsolidate web + fetch approval prompts into permission helper
  • wizarddrop dead Feat and SectionLabel primitives
  • wizardrebuild onboarding around docs feature surface
  • wizardmigrate onboarding to new UI primitives
Testing
  • test
2.13.22026-04-18
bug fixes
Bug Fixes
  • retryhonor retry.maxAttempts in SDK + cover connection errors
2.13.12026-04-18
bug fixes
Bug Fixes
  • honor user retry config for both transient and stall retries
  • model picker always background-refreshes on open
2.13.02026-04-18
release
Bug Fixes
  • validate restored core messages and preserve tool prototype chains
Documentation
  • promptsdrop outdated absolute-paths rule
Features
  • landingstronger tint, flame stays alive at breath trough
  • landingwordmark breath pulse, deeper flame lighting
  • landinganimated flame+wordmark logo
  • proxyadd Opus 4.7 support, auto-upgrade stale proxy binary
  • splashhand-drawn ASCII wordmark with animated boot/shutdown
2.12.32026-04-16
release
Features
  • configurable retry for transient provider errors
Miscellaneous
  • useChatsort imports
Refactor
  • promptstighten output discipline with curse persona and grammar rules
  • tool-displaycompact tool call rendering
2.12.22026-04-16
release
Bug Fixes
  • guard cost computation against NaN/undefined usage fields
  • avoid matching date suffixes as minor version in supportsTemperature
  • prevent tab name popup from opening when at max tabs
Features
  • log final Anthropic provider options to .empryo/effort.json
  • add xhigh effort level and per-model effort clamping
  • inline checkpoint legend with tabs bar
Other
  • remove .empryo/effort.json debug logging
  • group Clear Thinking under thinking section, disable when thinking off, clarify label
2.12.12026-04-16
bug fixes
Bug Fixes
  • use install @latest instead of update for upgrade commands
2.12.02026-04-16
release
Bug Fixes
  • soul-visionyt-dlp retry without size cap when first attempt fails
  • soul-visiondirect video URLs, auto-resize oversized images
  • stop auto-labeling tabs from first user message
  • don't auto-start proxy for new users
  • prevent orphaned LSP processes via PID file tracking
  • remove unnecessary checkpoints.length dependency from rail scroll effect
  • checkpoint scroll lands on user message consistently
  • latest checkpoint keeps diamond shape while browsing
  • ^B skips current checkpoint and goes directly to previous
  • eagerly sync coreMessagesRef on setCoreMessages
  • end-to-end checkpoint undo/redo file restoration
  • robust checkpoint rail and deterministic scroll positioning
  • align checkpoint legend to right side
  • checkpoint bugs, race conditions, and rail UI overhaul
  • eliminate stale file reads from dispatch cache
  • per-model endpoint routing for copilot provider
  • use responses API instead of chat completions for copilot and github-models providers
  • bypass proxy+Claude system prompt cloaking
  • kill LSP process groups to prevent orphaned grandchildren
  • surface clone hints on file creation, not just edits
  • clone detection missed low-pagerank files and produced duplicate results
  • default semantic summaries to "ast" instead of "synthetic"
  • stop spamming /errors on normal completions, log actual failures
  • stop spamming /errors on normal agent completions
  • re-raise signals instead of process.exit(128+N) on Ctrl+C
  • detect multi_edit and dispatch changes in hasChangedFiles
Features
  • configurable max concurrent agents in /router
  • LSP server version tracking and updates
  • add tab name popup for new tab creation
  • context bar uses warning style with ~ prefix when browsing checkpoints
  • context bar shows estimated tokens for viewed checkpoint
  • show rewind hint in input placeholder when viewing checkpoint
  • git-backed checkpoints with undo/redo, visual rail, and session persistence
  • add global toolTimeout config with /timeouts command
  • replace hand-rolled JSON repair with jsonrepair library
  • auto-compress large images before API submission
  • surface clone detection hints after edit_file and multi_edit
Miscellaneous
  • remove harbor agent adapter
  • update README and replace header with logo assets
Other
  • restore .chat() for copilot and github-models providers
Performance
  • improve clone detection quality — reduce noise, add semantic filtering
Refactor
  • centralize test file SQL filter in RepoMap
  • deduplicate edit/multi-edit diagnostics, blast-radius, and occurrence counting
  • dedup inferModelGroup, fallbackTracked, and ZERO_USAGE
2.11.02026-04-12
release
Bug Fixes
  • speed up model selector modal open path (#32)
  • disable stall watchdog by default, add /watchdog toggle
Features
  • scroll long command descriptions in command palette (#25)
  • add opencode go and opencode zen provider support. (#28)
  • custom thinking/reasoning params for OpenAI-compatible providers (#33)
  • add Codex account management commands (#24)
Miscellaneous
  • update models context & missing models (#30)
Other
  • Fix blank assistant messages being marked complete (#29)
  • stop finalizing assistant messages when the only collected output is a
  • extract shared assistant-content and assistant-message helpers so the
  • add regression tests that prove blank orphan tool segments do not
  • `bun test tests/usechat-content.test.ts tests/codex-provider.test.ts
  • bun run typecheck
  • `bunx @biomejs/biome check src/hooks/useChat.ts
  • manually validated against the original issue scenario
Refactor
  • replace auto-restart with manual restart prompt in /update
2.10.02026-04-10
release
Bug Fixes
  • multi-editfall through to string match on line-range mismatch
  • post-editmake error reporting more prominent to force immediate fixes
  • forward execution context in hook tool wrapper
  • remove redundant ^X stop hint from loading status
  • remove non-null assertions in useNeovim poll handler
  • remove microtask batching — feed PTY data directly
  • edit wrong inline count
  • cast ghostty-opentui renderable to avoid duplicate @opentui/core type mismatch
Documentation
  • promptsadd tool result error-checking rules to shared prompt
  • unify and update all documentation to reflect codebase
  • strengthen multi_edit rule — explain why sequential edit_file fails
Features
  • sessionspersist core messages directly instead of rebuilding from chat history
  • add /hooks command with per-event toggle
  • add disableAllHooks, once:true, and if conditional to hooks
  • wire remaining hook events across agent lifecycle
  • add Claude Code-compatible hooks system
  • add OpenCode Zen provider + fix reasoning_content stripping in custom providers
  • auto-add .soulforge to .gitignore in git repos
  • session rename — /session rename, ^R in picker, persistent custom titles
  • replace NvimScreen grid renderer with native PTY + ghostty rendering
Miscellaneous
  • fix import ordering (biome auto-format)
Performance
  • consolidate 4 RPC polls into single executeLua call
  • batch PTY data chunks per microtask to prevent torn frames
Refactor
  • strip redundant editor chrome — neovim statusline is enough
Testing
  • add hook test configs for .claude and .soulforge
2.9.52026-04-08
miscellaneous
Miscellaneous
  • cast type ghostty
  • deps upgrade
2.9.42026-04-08
bug fixes
Bug Fixes
  • revert npm build to 2.8.0 approach — no patching, no native lib copying
2.9.32026-04-08
bug fixes
Bug Fixes
  • use ESM-compatible path resolution in npm build patch
2.9.22026-04-08
bug fixes
Bug Fixes
  • early termination
2.9.12026-04-08
bug fixes
Bug Fixes
  • blank screen on npm/bun install and LSP process leaks
2.9.02026-04-08
release
Bug Fixes
  • connect tree rails through multi-file read expansions during streaming
  • correct stop shortcut hint from ^+X to ^X
  • lock-in view hides left border for single tool calls
  • correct GLM model context window sizes
  • inline Spinner imperative update uses children not content
  • context percentage fallback when API tokens unavailable
  • prevent stale soul map entries and LSP zombie processes
  • restart compiled installs without bunfs entrypoint (#22)
  • centralized Anthropic tool version selection per model capability
  • detect kitty version, fall back to chafa for ≥0.38
Documentation
  • strengthen output discipline — no narration between tool calls
  • add mempalace integration guide
  • improve soul_impact tool guidance in agent prompts
Features
  • nested file tree display for multi-file reads and batch tool calls
  • Tab/Shift+Tab to cycle between tabs from input box
  • InputBox widthPct prop for landing transition
  • smooth opacity fade for streaming text drip
  • register text-table renderable for JSX usage
  • landing page redesign with animated transition to chat
  • redesign boot splash with rune spinner and glitch-decode wordmark
  • migrate 15 popups to reusable Popup compound component
Miscellaneous
  • remove brackets from stop hint in LoadingStatus
  • remove ForgeSpinner3D and three.js type stubs
  • bump AI SDK providers and dependencies
Other
  • Add Codex as a first-class provider (#20)
  • add Codex as a first-class provider in SoulForge
  • use the official Codex app-server for browser login and live model
  • add /codex login, Codex-aware model picker login UX, and live
  • `bun test tests/provider-status.test.ts tests/codex-provider.test.ts
  • bun run typecheck
  • `bun run dev -- --headless --model codex/gpt-5.2-codex --max-steps 3
Performance
  • offload model fetching and session listing to IO worker
Refactor
  • remove unused queueCount prop from LoadingStatus and InputBox
  • improve tool call display — tree borders, multi_edit diffs, flat standalone lists
  • tab bar back to bracket style with active background
  • cleaner tab bar design without brackets
  • popup polish — deferred rendering, import order, cleanup
  • oscillating rune wheel spinner and unified Spinner component
2.8.02026-04-07
release
Documentation
  • replace intro video with looping GIF in README
  • fix video embed to bare URL and remove intro.mov
  • add compressed intro.mp4 and fix video embed in README
  • replace main-1 screenshot with intro video in README
Features
  • rich soul map diffs + navigate annotations from DB
  • MemPalace integration via MCP
  • add Harbor Terminal-Bench agent adapter
Miscellaneous
  • fix import ordering and add missing cwd dependency
2.7.02026-04-07
release
Bug Fixes
  • sanitize MCP tool names to match API pattern ^[a-zA-Z0-9_-]{1,128}$
  • restore session after crash — synchronous emergency save (#18)
Documentation
  • fix task router slots — replace legacy fields with spark/ember (#17)
Features
  • add MCP servers support
2.6.52026-04-06
miscellaneous
Miscellaneous
  • match git repo link
2.6.42026-04-06
miscellaneous
Miscellaneous
  • *sigh* npm pls x2
2.6.32026-04-06
miscellaneous
Miscellaneous
  • *sigh* npm pls
2.6.22026-04-06
miscellaneous
Miscellaneous
  • fix npm publish
2.6.12026-04-06
miscellaneous
Miscellaneous
  • upgrade npm in ci
2.6.02026-04-05
release
Bug Fixes
  • use HTML formatting inside sub tag in README image table
Features
  • clipboard image paste support (#3)
Miscellaneous
  • update workflow
2.5.02026-04-05
release
Bug Fixes
  • warn agent when auto-format changes line count after edit
  • complete async migration and bug fixes for soul_vision
  • smart video fallback — animated GIF for Kitty, static frame for others
  • remove Konsole from Kitty Unicode placeholder support
  • render reasoning blocks with Markdown component
Features
  • auto mode bypasses all permission prompts, use hardRestart for updates
  • cap soul_vision image height, retry flaky video-to-GIF, update README
  • async video pipeline with live progress UI
  • restore Kitty images on session resume
  • restore Kitty images on session resume
  • soul_vision tool for inline image display
Refactor
  • clean up soul_vision for performance and reusability
Testing
  • add image rendering and terminal detection tests
2.4.02026-04-05
bug fixes
Bug Fixes
  • custom providers not showing in Ctrl+L model picker
  • eliminate unsafe casts on LLM data, add Zod validation for plan output
Documentation
  • fix features SVG — drop animations, use static opacity for GitHub compatibility
  • fix features SVG visibility, remove prompt caching and sandboxed execution
  • expand features SVG with 16 pills, fix header spacing
  • update README and assets
Miscellaneous
  • readme overhaul
2.3.02026-04-04
release
Features
  • add LM Studio provider; fix non-nerd-font icons for ollama, lmstudio, and custom providers
2.2.12026-04-04
bug fixes
Bug Fixes
  • add Java/JVM LSP support and fix health check hangs (#8)
2.2.02026-04-04
release
Bug Fixes
  • resolve stream stall watchdog deadlock and surface retry messages
  • show FREE tag in model picker, drop sub-group rearrangement
  • accurate OpenRouter cost reporting and free model detection
  • improve Ctrl+L model selector performance and fix handleNewSession hoisting
  • track and kill all child processes on exit
  • handle SIGHUP to clean up child processes on terminal close
  • correct free Qwen model ID in Headless Forge workflow
Features
  • add /session new command to start fresh session
  • add Groq, DeepSeek, Mistral, Bedrock, and Fireworks providers
Miscellaneous
  • remove stale tea_test file
  • update gitignore
  • update README badges and rename workflow
  • bump all actions to latest (checkout v6, artifact v7, setup-node v6)
  • bump actions to v5 for Node.js 24 compatibility
  • add Headless Forge workflow for end-to-end testing
2.1.12026-04-04
bug fixes
Bug Fixes
  • x64-baseline bundle uses wrong native addon paths
2.1.02026-04-04
release
Bug Fixes
  • make headless test TTY-independent
  • detect brew install when ~/.soulforge/bin shadows PATH\n\nBrew's post-install copies the binary to ~/.soulforge/bin/, which\nshadows the brew symlink at $HOMEBREW_PREFIX/bin/soulforge in PATH.\nThis caused detectInstallMethod() to fall through to \"binary\".\n\nFix: directly check if $HOMEBREW_PREFIX/bin/soulforge exists as a\nsymlink — the one artifact only brew creates.
  • accordion behavior in model selector — expanding a provider collapses others
  • update prompt-content test to match shell guidance heading
  • apply default transparent theme on first launch
  • strip mismatched provider options from subagents
  • git commit messages with literal \n instead of real newlines
  • remove Copilot auto-detect, require manual OAuth token
  • prevent interactive prompts from freezing the TUI
  • add x64-baseline build for pre-AVX CPUs
  • call GREEN() in headless --list-providers output
  • show clean error in headless when model API key is missing
  • detect package manager from monorepo root lockfile
  • handle web-tree-sitter WASM rename and broken grammar resilience
Documentation
  • add Copilot provider guide, update README and mintlify for 12 providers
  • fix theme token reference and add PayPal badge
  • merge redundant README sections into single feature table
Features
  • detect GitHub CLI and surface availability in system prompt
  • add MiniMax provider with M2/M2.1 models
  • inject working directory into system prompt and add conventional commits rule
  • add Copilot auto-detect toggle in /keys and fix footer text
  • add GitHub Copilot and GitHub Models as LLM providers
Miscellaneous
  • move Fuel the Forge badge to top of README
Refactor
  • derive secrets, icons, and API key UI from provider registry
2.0.02026-04-03
bug fixes
Bug Fixes
  • resolve all lint errors and warnings across 7 files
  • show proper labels in lock-in tool rail instead of raw tool names
  • child context managers now defer to parent for repo map readiness
Documentation
  • refresh for spark/ember architecture + screenshot update
Miscellaneous
  • fix changelog generation — include non-conventional commits
Other
  • skip bus coordination tools for desloppify/verifier
  • hide task text for desloppify/verifier in dispatch display
  • drop hallucinated files, coerce weak model read args
  • agent lifecycle: unified result handling, display fixes, soul map UX
  • extractFinalText: last step text, not concatenated result.text
  • calledDone → succeeded: derived from agent text + edits, not ghost done tool
  • removed extractDoneResult (done tool never existed)
  • desloppify/verifier routed through runAgentTask (no duplicate code)
  • agent role label from info.role not tier (explore ember no longer shows [code])
  • succeeded drives checkmark (✓) vs warning (!)
  • hideOther prop on PendingQuestion for single-option prompts
  • interactive prompt with live progress (files, symbols, phase)
  • "Proceed without Soul Map" button, auto-dismiss on ready
  • scan errors shown in prompt text
  • child contexts defer to parent isRepoMapReady (was files>0 bug)
  • Ctrl+X aborts cleanly via AbortSignal
  • loadingStartedAt set after Soul Map wait, not on submit
  • headless startTime after setupAgent
  • start counting after Soul Map wait, not on submit
  • use waitForRepoMap with 30s timeout and progress
  • soul map wait: show scan errors in prompt, cleaner progress
  • scan failure shown in question text (user decides to proceed)
  • removed stall auto-skip (user should decide, not timeout)
  • progress shows file/symbol counts from repo map store
  • hide "Other" option via explicit hideOther prop on PendingQuestion
  • soul map wait: interactive prompt with live progress
  • shows a PendingQuestion with live progress (files, symbols, phase)
  • progress updates every 500ms from the repo map store
  • user can click "Proceed without Soul Map" to skip (with warning)
  • auto-dismisses when Soul Map finishes (200ms poll)
  • respects Ctrl+X abort
  • warns about reduced capabilities if proceeding without
  • soul map wait: abort-aware, clearer messaging
  • waitForRepoMap accepts AbortSignal — Ctrl+X during indexing cancels
  • wait message simplified: "Soul Map indexing… will proceed when ready."
  • timeout warning is now a system message with reduced-capabilities note
  • add dispatch testing notes
  • app layout fixes, icons, skills lockfile update
  • plan tool: JSON array coercion + schema refinements
  • coerceJsonArray preprocessor for array fields (handles stringified JSON)
  • refined plan file/step schemas for clarity
  • router settings: spark/ember labels + proxy perf defaults
  • "Code Agent" → "Explore", "Exploration" → "Code"
  • added icons to slot labels
  • simplified section subtitles
  • retry, keepalive, streaming settings for reliability
  • versioned marker block (replaced on version bump)
  • skips injection if user already has conflicting keys
  • /context panel: scope-aware tabs, token fixes, display cleanup
  • scope selector (←→ arrows) to view per-tab or aggregate token usage
  • single tab: no scope selector, identical to before
  • multi-tab: Tab 1 / Tab 2 / All — each shows full breakdown
  • "All" scope: aggregated tokens + per-tab summary table
  • context window/compaction/system prompt shown for all tab scopes
  • compaction preserves cacheRead/cacheWrite/subagentInput/subagentOutput
  • BarRow/EntryRow right padding (values no longer touch border)
  • BarRow descW param for aligned bars across rows
  • removed compact prop (always show last running step only)
  • fresh agent shows thinking spinner (removed doneCount>0 gate)
  • removed dead true in memo comparator
  • spark/ember architecture with clean classification and lean prompts
Testing
  • update agent-results budget cap expectations
1.9.02026-04-03
release
Bug Fixes
  • fix loading timer persistence across lock-in toggle
  • detect brew install method for homebrew-wrapped binary
Features
  • prompt engineering overhaul + soul_grep dep fix + soul_find ranking
  • programmatic tool calling (smithy) + code execution UI nesting
  • token-efficient prompt + tab layout fix + disable unused tools
Other
  • project tool: expose "check" action in input schema
  • project tool: add "check" action — runs typecheck+lint+test in parallel
  • read tool: show callees and qualified names in symbol output
  • duplication detection: reduce false positives with smarter filtering
  • Skip parent-contains-child matches (intra-function nesting)
  • Skip pairs where both are type declarations (similar AST ≠ duplication)
  • Skip pairs of short variables (<10 lines) — config literals are noise
  • For sub-95% matches, compare signature tokens and skip when signatures
  • Join symbols table to get kind + signature for filtering context
  • soul map: show top caller names in symbol badges instead of just counts
  • update tests for read_file → read rename
  • strip programmatic tool calling for Haiku subagents
  • improve architect, socratic, and auto mode prompts
  • Architect: add "Critical Files" list requirement, recommend next mode
  • Socratic: add web_search guidance, structured option presentation,
  • Auto: add safety rails (destructive action confirmation, no secret
  • add rotating hint system to footer with glitch transitions
  • 30+ hints covering modes, intelligence, tabs, router, git, skills,
  • Elimination-random bag: each hint shows once before any repeats
  • Garble glitch transition animation between shortcuts and hints
  • Highlighted segments for commands/keywords in brand color
  • Auto-truncation for narrow terminals
  • enhance error display with flavor text, codes, and stream errors
  • Extract HTTP status codes and error type codes from raw messages
  • Add forge-themed flavor text per error category
  • Add stream error category (INTERNAL_ERROR, api_error)
  • Show error code badge [429] and flavor text in header
  • Use accentUser/accentAssistant for user/assistant message borders
  • Fix error text color (was t.error, now t.textSecondary for readability)
  • update all read_file references to read
  • track symbol endLine across intelligence stack
  • LSP: add endLine/endColumn from symbol location ranges
  • Tree-sitter: add endLine from node.endPosition across all symbol queries
  • ts-morph: add endLine from getEndLineNumber() for imports and exports
  • Repo map: return line/endLine from getFileSymbols, getUnusedExports,
  • Intelligence client: update type signatures and cache types
  • Navigate: show line ranges (start-end) in formatSymbol output
  • Soul analyze: display :line-endLine in unused exports report
  • Soul find: show line ranges in symbol details and "also:" hints
  • Bus cache: include endLine in symbol hints for cached reads
  • Step utils: include line ranges in pruned symbol hints
  • rename read_file → read with batch files API
  • Rewrite execute to handle array/single file specs with parallel reads
  • Add smart truncation at 200 lines with symbol outline from repo map
  • Add symbol outline for truncated AST extractions (>200 lines)
  • Update error messages to reference new ranges syntax
  • Update tool formatters for batch read display (file count, range count)
  • Update tool grouping, display labels, icons, categories
  • Update dispatch cache wrapper to handle new schema
  • overhaul setup wizard: inline model picker with provider-scoped fetch
  • Provider selection → key input → fetch models → pick model, all inline
  • Add fetching phase with spinner, error phase with retry
  • Fuzzy search within fetched model list
  • onSelectModel now accepts modelId directly, App.tsx handles save
  • Remove memo wrappers from wizard primitives (Gap, Hr, StepHeader, etc.)
  • Remove memo from FirstRunWizard itself
  • track and display response duration on assistant messages
  • Add durationMs to ChatMessage type
  • Record responseStartedAt in useChat, set durationMs on completion
  • Show "✓ Completed in Xm Ys" after assistant messages in MessageList
  • Use formatElapsed in LockInStreamView for consistent time formatting
  • export soul-find/soul-grep internals for testing, add ranking + dep tests
  • Export fileTypePenalty from soul-find for direct testing
  • Export DepResolution, resolveDepSearch, annotateDepNoMatch from soul-grep
  • Format long regex patterns (line length lint)
  • Add soul-find-ranking.test.ts: file type penalty scoring
  • Add soul-grep-dep.test.ts: dependency resolution logic
  • reorder tool definitions: soul tools first for model preference bias
  • slim down system prompt: remove cwd, projectInfo, forbidden, memory from builder
  • Remove cwd, projectInfo, forbiddenContext, memoryContext from PromptBuilderOptions
  • Simplify ContextManager.buildSystemPrompt() to only pass projectInstructions
  • Trim projectInfo to just toolchain label (no file content)
  • Update tests to match new prompt structure
Refactor
  • refactor settings panels and QuestionPrompt: extract row components, polish UI
  • Extract ProviderKeyRow, RemoveKeyRow, PriorityRow components
  • Add provider icons, fixed-width input field, typed flash messages
  • Use cursor character ▎ instead of underscore
  • Extract ServerRow, ScopeRow components
  • Remove memo wrapper, consistent popup color usage
  • Extract SearchSkillRow, InstalledSkillRow, ActiveSkillRow, ScopeRow
  • Remove memo wrapper, use usePopupColors consistently
  • Extract OptionRow component
  • Use brand color instead of warning for question styling
  • Add padding and bgInput for text input mode
  • refactor modal components: extract row components, remove unnecessary memos
  • Extract inline render logic into focused row components (HeaderRow,
  • Remove useMemo/useCallback wrappers that added complexity without benefit
  • Add search result counts in search bars
  • Use Unicode escapes for special characters (arrows, dashes, dots)
  • Consistent search bar styling with bgPopupHighlight
  • Add fuzzy match highlighting in CommandPalette
  • Improve confirm-clear UX with red background in SessionPicker
1.8.32026-04-02
bug fixes
Bug Fixes
  • stall watchdog uses first-content detection, not first stream event
1.8.22026-04-02
bug fixes
Bug Fixes
  • compaction model context window uses authoritative API value
1.8.12026-04-02
bug fixes
Bug Fixes
  • context bar re-renders on window change, status dashboard uses fresh model
1.8.02026-04-02
release
Bug Fixes
  • context window propagation — authoritative source wins
  • improve model context window resolution
  • overhaul context window fallback tables across all providers
  • lock-in elapsed timer uses loadingStartedAt for accuracy
  • stall watchdog uses generous timeout between API steps
  • cache-friendly Anthropic context edits
  • improve tool formatters for soul_grep, soul_find, soul_impact, dispatch
  • improve tool descriptions and navigate auto-resolve
  • fuzzy clear cmd & prompt improvements
Features
  • updaterich changelog from GitHub releases, brew detection fix
  • lock-in UI polish — elapsed timer, color tweaks, minimal loading bar
  • wire flags param through git tool actions
  • phase-specific spinners and animated dots for lock-in mode
  • stream stall watchdog with auto-retry + sanitize empty assistant content
  • lock-in mode — hide narration, show tools + final answer
Performance
  • pre-warm OpenRouter + LLM Gateway model caches at boot
Refactor
  • improve system prompts — claude rewrite, shared rules, tool guidance
1.7.62026-04-01
bug fixes
Bug Fixes
  • make getModelContextWindow async for accurate context sizes
1.7.42026-04-01
release
Features
  • agentsshare forge tool definitions with miniforges for cache prefix hits
  • Anthropic native tools, tool streaming toggle, prompt refinements, and UI polish
1.7.32026-03-31
release
Features
  • tree continuation lines through expanded tool content
Other
  • v1.7.3
1.7.22026-03-31
bug fixes
Bug Fixes
  • landing page wordmark style, status checkmark, model label accuracy
Other
  • v1.7.2
1.7.12026-03-31
release
Features
  • redesign landing page with glitch-decode animation & forge personality
1.7.02026-03-31
release
Features
  • large repo support — React (6.5k files, 36k symbols) scans fully
1.6.32026-03-31
bug fixes
Bug Fixes
  • buildCoChanges stalls on repos with large git history
1.6.22026-03-31
bug fixes
Bug Fixes
  • heartbeat progress events in all post-indexing phases
1.6.12026-03-31
bug fixes
Bug Fixes
  • scan RPC used 30s default timeout instead of activity-based idle timeout
1.6.02026-03-31
release
Features
  • robust repo map scanning for large repos and edge cases
1.5.32026-03-31
bug fixes
Bug Fixes
  • support large repos — activity-based scan timeout, git ls-files safety
1.5.22026-03-31
bug fixes
Bug Fixes
  • deep symlink resolution, pin Bun in CI, robust brew wrapper
  • robust brew wrapper template with auto-gunzip and error recovery
1.5.12026-03-31
bug fixes
Bug Fixes
  • resolve symlinks in bin.sh for bun/pnpm global installs
1.5.02026-03-31
release
Bug Fixes
  • brew wrapper detects upgrades via mtime comparison
Features
  • revamp wizard steps, add image art display, improve shell/edit robustness
Other
  • v1.5.0
1.4.02026-03-30
bug fixes
Bug Fixes
  • brew formula template uses first-run wrapper, not post_install
Other
  • v1.4.0
  • improve edit tools UX and clean up skill search
  • edit-file/multi-edit: clarify that lineStart is recommended (not required),
  • multi-edit: remove unused warnings array
  • SkillSearch: remove agentSkillsEnabled toggle prop and UI
  • instance: preserve recentToolWrites entry for repeated fresh reads
1.3.82026-03-30
bug fixes
Bug Fixes
  • inline package.json version at build time for all install methods
  • brew post_install uses bash -c instead of Ruby file ops
1.3.72026-03-30
release
Features
  • bun runtime requirement, shell wrapper, inline brew install, version check
1.3.62026-03-30
refactor
Refactor
  • remove lsp_status editor action, improve implementation diagnostics
1.3.52026-03-30
bug fixes
Bug Fixes
  • use original OpenTUI parser worker from node_modules for npm installs
1.3.42026-03-30
bug fixes
Bug Fixes
  • bundle parser worker + tree-sitter WASM for npm, gzip Mach-O for brew
1.3.32026-03-30
bug fixes
Bug Fixes
  • markdown rendering in npm/brew, dylib relinking, wrapper script escaping
1.3.22026-03-30
bug fixes
Bug Fixes
  • robust resource resolution for brew, npm, and binary installs
1.3.12026-03-30
bug fixes
Bug Fixes
  • resolve worker crashes on npm install and brew sandbox issues
Other
  • v1.3.1
1.3.02026-03-30
release
Bug Fixes
  • improve tree connectors, clamp popup scroll, and re-render on tab bar changes
  • multi-step undo with tab filtering + stale detection hardening
  • wizard index and theme step improvements
  • use wrapper scripts instead of symlinks in Homebrew formula
Documentation
  • replace dark-forge screenshot with main-1 and main-2 in mintlify docs
  • replace dark-forge screenshot with main-1 and main-2 in README
Features
  • adaptive footer layout with tier-based label fitting
  • merge consecutive tool segments, add theme wizard options, skip cold diagnostics
Other
  • v1.3.0
Performance
  • route intelligence operations through worker thread
  • offload file reads to worker thread, reduce main-thread blocking
Refactor
  • tighten exports, improve edit robustness, and add past-tense tool labels
  • unify tool management, remove dead code, improve multi-edit
Testing
  • skip auto-format in edit tests via setFormatCache helper
1.2.02026-03-29
bug fixes
Bug Fixes
  • dynamic parser discovery for bundled binary, fallback bun path for LSP installer
1.1.12026-03-29
bug fixes
Bug Fixes
  • run install steps synchronously in quiet mode (fixes Homebrew killing bg jobs)
1.1.02026-03-29
bug fixes
Bug Fixes
  • detect user shell for PATH config, support fish/ksh/bash/zsh
  • add --quiet flag to install.sh for Homebrew, skip shell RC and animations
  • show subcommands in /font help description
  • wizard UI improvements and bundle script updates
1.0.32026-03-29
release
Bug Fixes
  • analyticsfix sales report bugs, add date filtering, add API routes
  • wire agent-managed tools, rename DEFERRED_TOOL_CATALOG, fix npm publish docs
  • correct neovim linux arm64 asset name
  • npm pack tar extraction on macOS, tolerate published versions
  • use npm pack for cross-platform native deps, retry uploads
  • patch dynamic platform import in bundled JS before compile
  • cross-platform bundle — stub native libs for compiled binaries
  • use available CI runners for all platforms
  • npm registry, publish workflow, and build plugin fixes
  • dead barrel detection for Python packages\n\n- isForbidden() returned truthy when uninitialized, causing collectFiles()\n to skip all files and break repo map indexing in tests\n- Dead barrel edge check now excludes sibling files within the same\n package directory (e.g. core.py → __init__.py is internal, not external)\n- Fallback ref check also excludes refs from files inside the barrel dir
  • worker thread missing initForbidden — scan found 0 files
  • wait-for-repomap UX + timeout increase
  • sync symbol cache on IntelligenceClient for buildSymbolLookup
  • shell guard no longer blocks code strings in node -e / python -c
  • token-budget-only pruning for forge, z.preprocess coercion for numeric tool params
  • enable pruning
  • TabBar mode label reads stale registry on Ctrl+D cycle
  • project format action uses dedicated formatter instead of lint+fix
  • StatusDashboard bar alignment and popup width
  • StatusDashboard data matches topbar, bar style improved
  • remove misleading ^K hint from InputBox
  • remove deprecated baseUrl, fix web-search agent callback types
  • remove non-null assertions in intelligence router
  • move Soul Map from message pair to system block, memoize LlmSelector rows
  • add compaction to NESTED_KEYS, replace last scattered keepRecent default
  • seed compaction defaults in DEFAULT_CONFIG
  • centralize compaction defaults, LlmSelector fetch timeout
  • await flushPromise on close, .aiignore hot reload, soul tool warnings, first-run hint, headless model fallback logging
  • LSP race dedup, failedServer cooldown, shell env filtering, config hardening, UX guards
  • reindexTimer cleanup, dynamic tool guidance, config dir hardening, agent-bus tests
  • add action descriptions to soul_impact and subagent soul_analyze/soul_impact
  • final claim sweep — correct all stale numbers across README and docs
  • claim verification — correct all README/docs numbers, wire OpenRouter provider
  • contested file edit stops agent, faster claim release, lock icon cleanup
  • tool registration audit — remove invalid entries, add missing tools
  • reduce dispatch token waste — scarier description, strip rejected attempts
  • reject single-task dispatch, disable desloppify/verify by default, fix /changes per-tab
  • secure auth system in little_backend
  • close audit gaps — subagent shell claims, compound pre-checks, test coverage
  • cross-tab coordination hardening — git blocking, cache staleness, agent sweep
  • smoother text streaming, forge mode per-tab, edit tool cleanup
  • tab bar lock icon formatting, add trailing newline
  • deduplicate multi_edit result display, fix completed time not showing
  • lint — replace non-null assertion with guard clause
  • tab numbering in context popup, planning effort level, enriched API error messages
  • prevent CI timeout on read-file outline test
  • lint errors and add tabId to subagent explore tools type
  • prevent steering message bar from wrapping to two lines
  • scope tasks to owning tab, add attention indicator for pending input
  • robust parent agent re-read blocking with full invalidation
  • extract human-readable output from edit tool results in message history
  • bump subagent step limits +3 to compensate for forced final step
  • prevent NoObjectGeneratedError on subagent final step
  • increase timeout for read-file outline tests to prevent CI flakiness
  • add explicit return in useEffect to satisfy strict typecheck
  • increase timeout for read-file outline tests to prevent CI flakiness
  • show edit results inline in tool call displays
  • async session saves, agent improvements, reasoning block & UI fixes
  • report directory creation in edit_file output
  • auto-create parent directories when edit_file creates new files
  • relax circuit breaker threshold for dispatch agents
  • wire checkAndClaim into buildTools edit_file/multi_edit (was missing)
  • add leading slash to claims command registrations
  • remove duplicate plan message injection in useChat
  • downgrade zod for structured outputs consistency
  • update paste handlers to use PasteEvent.bytes API
  • fix tabs: ctrl-based shortcuts, event propagation, bulletproof close cleanup
  • Rebind all tab operations from Meta (unreachable in terminals) to Ctrl:
  • Add consume() helper — stopPropagation + preventDefault on every global
  • Ctrl+O now toggles all expand/collapse (code + reasoning + plans) via
  • Bulletproof tab close: abort() no longer short-circuits on compaction,
  • Update HelpPopup, command registry, README, GETTING_STARTED docs
  • Deps bump, agent runner/results improvements, project tool linter
  • deep re-export chains, FTS rebuild, pruning input mutation
  • edit_file rich errors with lineStart, editor auto-open and file navigation
  • two-pass ref resolution, Python normalization bug, buildEdges precision
  • LLM semantic summaries UI consistency
  • repo map live updates for neovim user saves and shell commands
  • remove ghost recall tool refs, fix token ratio consistency, WSM cap
  • salvage partial results from failed dispatch agents
  • repo map import specifier extraction, refs priority, steering render bug
  • improve dispatch agent collaboration — context-aware desloppify/verifier, file overlap warnings
  • reduce flush interval 150ms→50ms, remove 100ms throttle — real-time UI updates
  • remove startTransition from streaming flush — was deferring UI updates indefinitely causing frozen display
  • tasks always resolve — complete on success, reset on error/abort, taskId for per-agent updates
  • auto-complete in-progress tasks when agent finishes streaming
  • Ctrl+X abort preserves partial chat content instead of clearing it\n\nSnapshot liveToolCallsBuffer and streamSegmentsBuffer before abort()\nclears them, so the catch block can reconstruct in-flight tool calls\nand partial assistant messages. Previously the buffers were empty by\nthe time the catch block ran, causing content to vanish on cancel.
  • alphabetize /help and autocomplete commands, add 7 missing entries to help
  • dispatch UI freeze — mark toolCallsDirty on agent stats + multi-agent events so streaming display updates during dispatch
  • steering flush includes in-progress tool calls — shows progress before steering message
  • StatusIcon shows warning for failed tool results
  • dedupe installed skills by name, prefer project-scoped over global
  • project tool reports lint warnings as failures — agent sees issues and can auto-fix
  • SystemBanner useMemo exhaustive deps
  • SystemBanner hooks after early return, rename icon to bannerIcon
  • lint — move biome-ignore comments to correct lines
  • wrap all raw numbers in String() for OpenTUI text compatibility
  • wrap hiddenCount in String() — OpenTUI rejects raw numbers as text children
  • nudge-aware tokenStop eliminates race condition where a single step could jump past both nudge threshold and stopWhen budget
  • UI stability — stop scroll leaks, timer blink, reasoning duplication, picker cursor drift
  • update step-utils tests for cache-aware pruning + done removal
  • dispatch cache bugs + subagent fallback + forge pruning revert
  • dispatch cache bugs + subagent fallback + forge pruning revert
  • flush token display on finish-step, rename dispatch agents label
  • async plugin bootstrap on first editor launch
  • update Mason registry URL — moved from raw content to release artifacts
  • prevent UI freeze during repo map indexing
  • ContextBar content preserved across re-renders via ref
  • git commit modal background, update /commit description
  • complete modal stacking fix for toggleModal and openCommandPicker
  • modal stacking, transient renders, keyboard early returns, scan throttle
  • show dark red border on input during loading/compaction instead of invisible gray
  • ContextBar token reset on modal open, repo-map picker live updates, scan progress labels
  • health check readSymbol probe picks valid identifier name
  • tree-sitter grammar for ALL typescript/tsx files — no tree-sitter-typescript.wasm exists
  • tree-sitter tsx grammar lookup in findImports/findExports/getFileOutline + wider diagnose popup
  • tree-sitter tsx grammar mismatch + smarter health check readSymbol probe
  • improve steering message injection — drain all queued messages at once, stronger framing
  • ASCII fallback icons for all providers, remove hardcoded Nerd Font glyph
  • teach subagents to use startLine/endLine when task provides line ranges\n\nAdds WORKFLOW hint to explore and code agent prompts: when the dispatch\ntask includes line numbers, use read_file with startLine/endLine to\nbypass the 500-line truncation cap and get exact content.\n\nAlso removes fixresearch.md — all fixes verified as implemented.
  • dispatch UI — late agent seeding, broken tree connectors, render storms
  • strip contextManagement from subagent provider options
  • steering race conditions — abort gate, ref sync, postAction queue drain
  • add missing @openrouter/ai-sdk-provider dependency
  • SQLite "database is locked" crash on concurrent repo map access
  • SSRF protection hardening, rename-symbol comment awareness, shell path parsing
  • shell timeout tests — fallback resolve after SIGKILL, bump test timeout
  • CI test failures — git default branch, clone dirs, spawn timeout
  • lint issues and add test step to CI
Documentation
  • add theme attribution credits
  • audit and polish Mintlify documentation
  • add Mintlify documentation site
  • add Mintlify documentation site
  • expand README comparison table with full intelligence stack
  • full license compliance audit
  • update third-party licenses for LazyVim migration
  • add cross-tab coordination doc, fix commands-reference
  • fix help popup — add missing commands, remove mislabeled entry
  • fix wrong claims, update counts, add missing features
  • update README with new headless CLI flags
  • update README and repo-map docs for universal language support
  • roadmap — SoulForge intelligence as library, MCP server, headless CLI
  • command reference (60 commands), expanded security, docs index
  • update contact email and website in license files
  • fix Vercel Gateway and Proxy provider info + links
  • fix ECC link, remove false Claude Code inspiration claim
  • fix provider table — links, correct env vars, LLM Gateway description
  • add inspirations section — Aider, Claude Code, ECC, AI SDK, Neovim
  • honest comparison table against Claude Code, Copilot CLI, Aider
  • sharpen differentiators, add hero screenshot, roadmap
  • fix architecture diagrams, add hero screenshot, deep-dive links
  • comprehensive README with logo, mermaid diagrams, feature deep-dives
  • update readme and relevant docs
  • slim README to highlights with deep dive links
  • comprehensive documentation overhaul and architecture deep dives
Features
  • little_backendadd search, enrich products, fix notifications
  • add X-Source header to LLM Gateway requests
  • floating terminals, 22 builtin themes, install script, edit-stack API fix
  • terminals panel, worker bundling, dispatch role transitions, headless fixes
  • add floating terminal, ghostty integration, command restructuring & theme fixes
  • theme system, UI rebrand, docs refresh, and headless color updates
  • add ASCII visualization guidance to plan & architect modes\n\n- Architect mode now instructs use of dependency graphs, comparison\n tables, box diagrams, and flow charts for design analysis\n- Plan mode (both full and light) presents visual file change summaries\n and dependency diagrams before calling the plan tool
  • tab bar UX improvements and subagent fix\n\n- Hide model label in tab when it matches the default model\n- Restyle tab model labels with brackets and move after edit count\n- Fix explore subagent provider options not being stripped for mini-forge
  • extended git tools, mini-forge dispatch display, tab UX improvements
  • first-run wizard, UI polish, and toolchain improvements
  • per-model cost breakdown with accurate multi-provider pricing
  • /lsp now opens full management popup with disable/enable support
  • max file cap for repo map — 10k file limit with git recency prioritization
  • worker architecture — intelligence & IO workers, async FS migration, RPC framework
  • cache-safe architecture, accurate cost tracking, tools management
  • repo map toggle, shared tool schemas, zod 4 + biome bump
  • distinct UI for code execution (node -e, bun -e, python -c, etc.)
  • token optimization — two-layer pruning, subagent context management, slim dispatch output
  • parallel tool display, multi-edit line tracking, cache breakpoints, scan animation + fixes
  • editing model routing, tool-loop detection, scan animation, pruning toggle + bug fixes
  • release infrastructure, changelog config, and skills lock update
  • release infrastructure, install docs overhaul, OpenRouter support, and UX improvements
  • redesign /changes sidebar with tree connectors and git status
  • command palette, popup consolidation, and UX overhaul
  • modular per-family prompt system, Soul Map as user message, streaming fixes
  • dispatch overhaul, token optimization, LSP-first tiers, key priority
  • agent editor access control, /export all diagnostic, text drip streaming, repo map always-on
  • LazyVim editor, multi-lang LSP warmup, headless markdown rendering, UI unification
  • integrate shiki + marked for syntax highlighting and markdown rendering
  • semantic summaries, multi-lang LSP warmup, repo map UX overhaul
  • model picker refresh, binary detection, tool & UI improvements
  • cross-platform bundle, version sync, lint fixes
  • LazyVim editor, async repo map, multi-provider proxy, tool grouping
  • add project format action — explicit alternative to lint --fix
  • cross-tab coordination hardening — shell guards, prompt guidance, dispatch gates, memory safety
  • dispatch reliability — auto-split oversized tasks + complexity warnings
  • mechanical re-read blocking for parent agent read_file
  • export clipboard, per-tab expand state, reasoning context, input history fix
  • subagent step limits, coordinator hardening, and test improvements
  • post-edit formatter integration — authoritative indent fix
  • WorkspaceCoordinator cross-tab file coordination (Tier 2 Soft Claims)
  • add disablePruning option and "disabled" compaction strategy
  • headless --chat multi-turn mode, session resume, SIGINT cleanup
  • modular headless CLI, undo stack for all edit tools
  • instruction files system, headless events/mode/timeout, InputBox history improvements
  • custom providers, InputBox paste/history improvements, headless provider support
  • read_file outline mode for large code files, InputBox history fixes
  • merge read_code into read_file, soul_grep dep search, textarea input, headless CLI, mtime cache invalidation\n\n- Merge read_code tool into read_file via target/name params (delete read-code.ts)\n- Update all references across agents, prompts, intercepts, tool display (~15 files)\n- soul_grep: add dep param to search node_modules/vendor dirs with --no-ignore\n- InputBox: replace <input> + InputEditor with native <textarea> from @opentui/core\n - Paste collapse (4+ lines → placeholder, ^E toggle)\n - History navigation with isNavigatingHistory guard\n - Proper visual line tracking for char-wrap height\n- Headless CLI mode: --headless, --list-providers, --list-models, --set-key\n- Read tracker: mtime-based cache invalidation (re-read if file changed on disk)\n- Docs: CLI flags in README/CLAUDE.md, headless.md documentation
  • add call graph, fix ref resolution, filter non-code refs
  • semantic summaries — merged AST+LLM mode, smart targeting, lazy regen, token tracking
  • comprehensive unused_exports with dead files, barrels, clusters, test-only detection
  • CommonJS exports, export * wildcards, Go modules, tsconfig paths
  • source-resolved refs for precise unused export detection
  • expose repo map data — top files, packages, symbol signatures, symbol-by-kind queries
  • universal language support for repo map, dead code accuracy improvements
  • ReadTracker, skill injection, dispatch returnFormat
  • link tasks to dispatch agents via taskId — auto-updates on agent start/done/error
  • add /keys command — manage LLM provider API keys from UI
  • steering flush + LSP fixes + forge improvements
  • project tool — raw mode skips preset flags, failure hints suggest raw: true for version issues
  • legacy flag fallback for lint fix — auto-retries with older syntax on unknown-flag errors
  • extend project lint fix support — oxlint, dart, swiftlint, hlint, gofmt, clippy allow-dirty
  • fix subagent budget, skills loading, task UI, context drop, stop logging
  • expand LSP server registry — 30+ servers, auto-discovered from PATH/Mason
  • context-aware subagent limits — no step caps, proportional token thresholds
  • remove done tool — output schema is the sole structured result mechanism
  • Output schema for guaranteed structured subagent results
  • cap 5 files per explore agent — auto-split large tasks for done reliability
  • guaranteed done results — auto-synthesize DoneToolResult when agents exhaust steps
  • question-driven tool routing + grep→navigate code hint
  • prohibition-style prompts — FORBIDDEN enforcement + turnover discipline
  • strip markdown formatting from system prompt — save tokens
  • cache-aware pruning — skip tool result compaction when context is low
  • token efficiency overhaul — dispatch contract, done-call fixes, system prompt split, outline filtering
  • token optimization — forge-level pruning, escalating read nudges, richer summaries
  • verification specialist, auto mode, dispatch quality, compaction UX
  • dispatch validation gates + destructive action approval + compaction fix
  • nerd font auto-detection, UI polish, chat export, bundle improvements
  • project toolchain hardening, pre-commit checks, monorepo discovery, v2 compaction improvements
  • co-author shell injection, LSP uninstall UI, biome lint fixes
  • add uninstall for soulforge-installed LSP servers
  • LSP backend — implement findImports, findExports, getFileOutline, readSymbol
  • intelligence health check — /diagnose command probes all backends
  • LSP installer with Mason registry, refactor name-based extraction, context bar improvements
  • quickfix list, terminal output capture, editor event wiring
  • neovim deep integration, pane splitting, git improvements, UI polish
  • new editor tools, fix co-author email, update readiness doc
  • new neovim editor tools + few subtle fixes
  • extract editor layout module, improve editor panel UX and performance
  • auto-install fd + lazygit, add licenses, extract UI components
  • add concrete read_file hint in edit error output
  • auto-enrich dispatch tasks with symbol line ranges from repo map
  • user steering, abort cleanup, shell abort signals, task reset, breakage tests
  • production hardening, outside-CWD security, open-source readiness
  • tool consolidation, clone detection, system prompt scaling, UI cleanup
  • UI refinements — blue user accent, message padding, queued message display
  • title-only memory, boot spinner, splash polish, safety fixes, 1M context windows
  • token optimization — slim subagent prompts, tighter pruning, progressive dispatch UI
  • UI polish — bordered input, user msg backgrounds, collapsible errors/plans, history fixes
  • ECC-enforced dispatch improvements, scoped model selection, UI rendering fixes
  • llmgateway provider, site link extraction, shell read-redirect, plan mode polish
  • unified web access approval gate for fetch_page + EventTarget listener fix
  • rolling tool result pruning with repo-map symbol enrichment
  • isolated tabs, smooth streaming, borderless input, icon centralization
  • responsive UI, popup overlays, /lsp command, boot granularity, web search fixes, dispatch thresholds
  • v2 compaction, git branch/stash ops, SSRF protection, agent bus hardening, and comprehensive test suite
  • context compaction, plan view overhaul, persistent system messages, and broad refinements
  • repo map intelligence, compound tools, web scraper, and Ink → OpenTUI migration
  • multi-tab chat, parallel agent dispatch, and provider config system
Miscellaneous
  • add SHA256SUMS.txt checksum generation to release workflow
  • untrack .agents/skills, remove stale homebrew/ copy
  • wrap tab bar indicators in brackets\n\n- Edited file count, unread dot, and error markers now use bracket styling\n- Consistent visual language across all tab bar indicators
  • upgrade deps
  • remove completed/obsolete improvement docs
  • add HTML coverage report script
  • add test coverage reporting + lcov artifact upload
  • biome formatting — normalize imports, indentation, line wrapping
  • fix lint formatting across refactored files
  • fix lint errors from dead code removal (trailing blank lines, let→const)
  • delete PlanView.tsx (dead file), remove dead exports from splash.ts and types/index.ts
  • remove 43 dead exports, delete highlight.ts (fully dead file)
  • remove 10 dead files (780 lines)
  • fix biome formatting across 5 files
  • remove JetBrains Mono from bundle, keep Symbols Only
  • biome format fixes
Other
  • pre-cost-breakdown checkpoint + misc improvements
  • worker architecture (phases 0-3) into main
  • Revert "chore: remove completed/obsolete improvement docs"
  • rename abbreviated types and fields in little_backend/
  • wire dead code (validate/middleware) and fix bugs
  • Import and use validateUser/validateProduct from validate.ts in god.ts
  • Import and use authMiddleware/adminMiddleware from middleware.ts in god.ts
  • Wire rateLimit into processRequest in index.ts
  • Fix login: use local users Map instead of globalThis
  • Fix doCheckout race condition: single-loop with rollback on stock failure
  • Fix p.stk → p.stock and tot → total to match types
  • Move logRequest after handle() call (skip logging rate-limited requests)
  • reset little_backend: god object, bad names, buried bugs (round 3)
  • reset little_backend test arena to clean buggy state (round 3)
  • reset little_backend test arena to clean buggy state
  • add Forge label to assistant message header
  • tab-scoped tasks, cache hardening, agent retry, prompt tightening
  • move skills injection before tool guidance for better positional attention
  • compaction v2 default, new tab label, soul_find guidance, agent retry improvements
  • Make compaction v2 the default strategy across App, useChat, statusbar, types
  • Update /compaction command descriptions to reflect new default
  • Show "New tab" label for freshly created tabs instead of empty string
  • Improve soul_find tool description to discourage generic queries
  • Add soul_find guidance in context manager for specific identifier usage
  • Pass abortSignal to isRetryable to skip retries on user-initiated abort
  • Treat "aborted" errors as retryable network failures
  • Increase agent step timeout from 180s to 300s
  • Fix biome formatting in tools/index.ts
  • enable prompt caching for tool schemas
  • compaction v2: make default, skip gap-fill when state is rich, add tests
  • Default strategy v1 → v2: 75% cheaper per compaction (2k tokens vs 8k),
  • Skip LLM gap-fill when WSM has ≥15 slots — incremental extraction
  • 32 tests covering WSM state tracking, extraction pipeline (tool calls,
  • cap omitted findings file list, add agent-results tests
  • Limit omitted findings file list to 10 names (prevents unbounded
  • 51 tests for agent-results: formatDoneResult, synthesizeDoneFromResults,
  • tighten dispatch synthesis: max 5 findings displayed, halve synthesis budget
  • MAX_FINDINGS_DISPLAY = 5: cap findings shown in formatDoneResult,
  • SYNTHESIS_BUDGET 8000 → 4000: less raw file content dumped when
  • Worst case per agent now: 5 × 500 + 500 summary ≈ 3k chars
  • 4-agent dispatch: ~12k typical (was 30-40k before all changes)
  • reduce dispatch content echo: cap finding detail + truncate task text
  • Cap per-finding detail to 500 chars in formatDoneResult (was unlimited
  • Truncate task text to first line (200 chars) in multi-agent sections.
  • Combined with existing 24KB toModelOutput cap, dispatch results are
  • cap individual file size at 512KB
  • shell compress: tee original on significant compression for agent recovery
  • Export saveTee from tee.ts for direct use
  • compressShellOutputFull returns {text, original} — original set when
  • Shell tool: saves original to tee file, appends [full output: path]
  • Project tool: same tee-on-compress behavior
  • Follows RTK pattern: zero inline tokens for noise, full recovery via disk
  • token optimization: strip dispatch skill echo, compress shell output, cap dispatch size
  • Strip "--- Relevant skill: ---" blocks from dispatch toModelOutput (main
  • Cap dispatch output at 24KB with clean truncation
  • Replace misleading "All file content included below" with read_file hint
  • Add language-agnostic shell output compressor (shell-compress.ts):
  • Wire compressor into shell + project tools (runs before truncation)
  • 21 tests covering all major language ecosystems
  • add output truncation, max-columns, and source map exclusions
  • UI polish: fix loading counter flicker, horizontal prompts, adaptive streaming, tab UX
  • auto-dismiss task progress after all tasks complete
  • add missing tool display entries (multi_edit, undo_edit, list_dir, rename_file)
  • harden agent bus, async repo-map scan, remove dead code
  • Wrap all waiter notifications in try/catch via notifyWaiters()
  • Wrap onCacheEvent/onToolCacheEvent callbacks in try/catch
  • Add 300s timeout to file and tool result waiters to prevent hangs
  • Skip self-waits when same agent re-reads a file it's already reading
  • Convert collectFiles to async (fs/promises readdir/stat)
  • Yield to event loop every 50 files during collection
  • Yield more frequently during indexing (every 5 files vs 10)
  • Add tick() calls between resolve/build/compute phases
  • Pre-read file contents outside DB transaction in buildCallGraph
  • Use imported readFileSync instead of require("node:fs")
  • Remove redundant repoMap.clear() before scan (scan handles it)
  • Remove unused exports: BASE_DELAY_MS, MAX_RETRIES,
  • Remove unused exports: DESLOPPIFY_PROMPT, VERIFY_PROMPT
  • Remove dead functions: toolOk, catchToolError (tool-utils.ts)
  • improve repo map cross-language quality and reduce ref noise
  • Add COMMON_LOCAL_NAMES filter (~120 ubiquitous variable names like
  • Raise min identifier length from 3→4 chars (3-char ids are noise)
  • Expand IDENTIFIER_KEYWORDS with comprehensive builtins for Python,
  • Add import resolution for Java/Kotlin packages (com.foo.Bar → path),
  • Expand isResolvable to flag Java/Kotlin/PHP imports for deferred
  • Add more resolveRelPath candidates: lib.rs, .go, index.php
  • Relax resolveIdentifierRefs: resolve unique exports directly without
  • Total refs: 37,710 → 30,944 (-18%)
  • Call resolution: 97.9% → 100%
  • Noise refs eliminated: ~6,800 common local names filtered
  • Top unresolved are now project-specific (types, react, opentui)
  • LSP: multi-server support per language (e.g. biome + tsserver)
  • LSP: findServersForLanguage returns all available servers
  • LSP: diagnostics merge from all servers with dedup
  • Subagent: handle NoObjectGeneratedError from AI SDK v6
  • Memory: tighten tool description to write-only-when-asked
  • bundled distribution, investigate agents, dispatch UI overhaul
  • fix AGPL references across codebase to BSL 1.1
  • switch from AGPL-3.0 to Business Source License 1.1
  • Add proxy provider, code intelligence tools, and UI refinements
  • Add CLIProxyAPI as a grouped LLM provider with auto-install/start lifecycle
  • Add /proxy, /proxy login, /proxy install commands
  • Generalize gateway-only model selector to support any grouped provider
  • Replace useGatewayModels with useGroupedModels hook
  • Add intelligence router with ts-morph, tree-sitter, regex, and LSP backends
  • Add navigate, read_code, refactor, and analyze tools for static analysis
  • Add post-edit diagnostics to edit_file tool
  • Add tree-sitter-wasms, ts-morph, web-tree-sitter dependencies
  • Redesign ReasoningBlock with rail styling and braille spinner
  • Simplify HealthCheck from table to inline layout
  • Add GhostLogo component
  • Add noAltScreen option for suspend (OAuth login flow)
  • Handle error parts in stream to surface API failures
  • Fall back gracefully on NoOutputGeneratedError
  • Save full tool call history in sessions instead of text-only
  • Fix table overflow in chat — constrain columns to terminal width
  • Update README and Getting Started guide
  • Add CI workflow for lint and typecheck
  • v2.0.0 — open-source refactor
  • AGPL-3.0-only license
  • Provider registry: adding an LLM provider is now 1 file + 2 lines
  • Shared UI: deduplicated Spinner, PopupRow, tool display across 11+ components
  • App.tsx decomposition: extracted commands, StreamSegmentList, RightSidebar (2349 → 1535 lines)
  • Barrel exports for core/, hooks/, components/
  • Rewrote README and CONTRIBUTING for open-source contributors
  • Fixed all lint warnings (no any, exhaustive deps, template literals)
  • Fixed GitCommitModal coAuthor prop
  • v1 - initial commit
Performance
  • audit fixes — granular modal selectors, store selectors, concurrency guard, listener cleanup
  • audit fixes — smoothStream factory, unmount cleanup, abort-aware retry, error handling, memo & memoization
  • comprehensive React performance audit — 21 fixes across 25+ files
Refactor
  • prompt updates, async DiffView, compaction return type, cost breakdown improvements
  • UI polish, context bar simplification, repo map token budget, worker memory tracking, lint fixes & test updates
  • collapse re-export symbols in repo map render
  • remove shell search redirect gate\n\nRemove checkSearchAntiPattern and the blocking redirect layer that\nprevented shell from running grep/cat/find commands. This gate was\noverly aggressive and incorrectly blocked legitimate git and shell\noperations. The softer post-success hints in shell.ts are retained.
  • clean up stream options, subagent tools, tab instance, and context manager\n\nCo-Authored-By: SoulForge <soulforge@proxysoul.com>
  • fix dumb tests, reduce plan eagerness, clean up truncation messages
  • production-grade codebase cleanup — remove noise, deduplicate, tighten exports
  • production-grade codebase restructure
  • production-grade codebase restructure
  • remove ReadTracker (re-read prevention at tool execution time)
  • ReadTracker replaces RecallStore, remove dead code, cleanup agent wiring
  • centralize language detection — single EXT_TO_LANGUAGE map in types.ts
Testing
  • test
  • comprehensive tests for format detection across 18 ecosystems
  • comprehensive tests for WorkspaceCoordinator and tool-wrapper
  • comprehensive edge cases for custom providers
  • comprehensive edge case tests for unused export detection
  • update .vue extension test — now correctly detected as 'vue' via centralized map
1.0.02026-03-29
documentation
Documentation
  • correct tool/theme/command counts, fix agent roles in diagrams