‹ all releases
Empryo now answers the question most AI coding tools quietly avoid: where did the money go? /usage opens a live breakdown you can steer — spend and tokens per model, per day or per week, how long each step actually took, and how much prompt caching saved you versus paying full price for every token. This release also brings a real file tree with drag-to-chat, branch switching from the status bar, and a fix for the classic "works in my terminal, broken when I launch the app" bug.
- `/usage`, now interactive. Instead of one flat total, you get a breakdown you can move through: cost and tokens per model, grouped by day, week or all time, with average step latency so you can see which model is actually slowing you down. Models that exist on several providers are labelled with the provider they ran on, so a cheap route and an expensive one never get averaged together. The same view is in the desktop app's usage drawer.
- What caching saved you, in real numbers. Alongside your spend, Empryo now shows the counterfactual: what the same work would have cost with no prompt caching at all. It turns an invisible optimization into a number you can point at.
- A file tree worth using. The sidebar tree gained a toolbar — sort, and toggle dotfiles and gitignored files in or out. Gitignored files now show up in
@-mention pickers too (dimmed and marked, so you always know what you are pulling in), and you can drag a row straight from the tree onto the composer to insert it as a mention. - Switch branches from the status bar. Click the branch name in the desktop status bar and pick another branch — no terminal detour.
- Your edits get syntax-checked as they land. After Empryo edits a YAML or JSON file, it re-parses it on the spot and tells you immediately if the result is broken, instead of letting you discover it at deploy time.
- The goal bar names the reviewer. In closed-loop runs you can now see at a glance which model is reviewing the work, not just which one is writing it.
- Reasoning controls follow the model you picked. Effort levels and thinking settings are now derived from what the active model genuinely supports, so non-reasoning models stop offering knobs that do nothing, and models with unusual ladders show their real options.
- The context map behaves. The panel under your chat folds away when you want the room back, its detail card scrolls when the content is long, and fullscreen no longer leaves a stray backdrop behind.
- Smaller edges, smoothed. Keyboard navigation in
@-mention lists keeps the highlighted entry in view, the composer resizes correctly when the window rewraps or a font finishes loading, zoom shortcuts respect the current layout, and the tree toolbar stays on one row even at the narrowest pane width.
- Launching the app from the dock no longer breaks your environment. If Empryo worked when started from a terminal but misbehaved when launched as a desktop app — wrong language and encoding, missing tools, commands that could not find your setup — that gap is closed. A GUI launch now recovers your real shell environment and locale before anything else runs.
- Relative links in chat are clickable again. Links pointing at files and paths in your own project were being rewritten as
[blocked]. They render and work normally now. - A corrupted memory database can be salvaged instead of blocking you. When Empryo's cross-session memory store could not be opened — most often on Windows, where a lingering file handle kept the damaged file locked — it got stuck in a loop it could not recover from. It now releases the handle, sets the bad file aside and continues with a fresh store, and it no longer quarantines a database that was merely busy rather than broken.
- The file watcher no longer crashes the app. On the runtime Empryo ships with, the fast native watcher could corrupt memory and take the whole process down under heavy file churn. It is now switched off on affected runtimes and falls back to a safe watcher — file search, glob and grep are unchanged and still native.
- Agent runs end cleanly. A step that produced no tool calls could leave the loop spinning instead of finishing the turn. It now ends where it should.
- Switching between providers mid-conversation is safe. Reasoning content produced by one provider is now cleaned up before it is sent to another, so moving a conversation across models no longer trips an error.
