EmpryoEmpryo.beta
‹ all releases
3.5.0-betaJul 24, 2026

This is the big one. All this time you've wanted your coding agent to actually understand your codebase — this is where it comes together. Empryo's genome — the graph that knows how your code fits together — stops being a static snapshot and becomes a system that gets better the more you use it. And the terminal UI is rebuilt from the ground up around a single living idea, so what you see finally matches how the work actually flows. On top of that: custom agents you define in markdown, skills as a first-class part of every prompt, background subagents that wake you when they're done, and a per-model effort dial.

The genome grows with you

Until now the genome read your code — the syntax tree, the symbol graph, who calls whom. That's still there, and it's sharper. But 3.5 adds something new: the genome now learns from how you actually work, and it keeps learning every session.

  • It mines your git history. Files that truly change together are surfaced with PMI scoring — so a real coupling stands out while a "changes with everything" hub file scores near zero. It's rename-aware (a git mv never orphans what it learned) and it skips the noise (release bumps, lockfile-only sweeps are process, not coupling). The mining window went from 300 commits to 2,500, so it stops missing the bulk of your history.
  • It learns from your sessions. Every session's actual tool walk is distilled into behavioral trails the static graph can't see: files that get read together, the file you always open *before* editing another, and the reads that turned out to be dead ends. Successful sessions reinforce their trails; at the end of each one a judge marks what actually paid off, and trails that prove out repeatedly graduate into confirmed knowledge.
  • It calibrates to your model. The hint economy is derived from each model's own follow-through — if a model keeps ignoring a class of hint, those hints tighten automatically; when it starts acting on them, the gates open back up. Files you actually open from a search result feed a click-through signal back into ranking, so your clicks become part of the ranking.
  • It heals itself. When a tool can resolve what you meant from the symbol index, it returns something useful instead of a bare failure — visibly, and logged as a bug report against its own schema so the rough edge gets filed.

The effect, measured on Empryo's own repo: co-change coverage went from 86 to 3,239 file pairs, the edit-advisory pool from 14 to 444, and a mis-ranked side-app formatter that used to rank #1 across the whole repo dropped to #103. The whole subsystem shipped behind a 13-finding adversarial review and a 3,831-test suite that passes clean.

Genome stays off for workspaces where you've disabled it, and every engine upgrade forces a clean re-index so stale data can never strand you.

A new terminal

The terminal UI is reforged around one metaphor — a living strand of work — and it's now what you get on a fresh boot.

  • Your prompts live above the work, forever. A prompt deck pins every prompt you've sent (last few, then folded) at the top; the transcript below only ever grows. The old "two views showing the same thing" duplication is now structurally impossible — the live turn renders inside its own transcript group, so there's exactly one copy of everything.
  • Subagents are a living constellation. Dispatch a few agents and they render as breathing "critter" faces in a SwarmDock, each tagged with its routed model, connected by cache-talk arrows — click a face to open its inspector. Background agents collapse into a single dock line you can expand.
  • Your history is a star-map. A checkpoint crown turns your session into a clickable constellation (latest, edits, reads, what you're viewing) with a routing chip — persistent from your very first checkpoint. Click a star to view or rewind.
  • It's frameless and soft. No rounded box, no scrollbar — the strand *is* the landmark. Tasks, plans, and ask-surfaces get a soft-depth "well" skin instead of four-sided borders, there's an inline effort slider in the composer, honest single-source thinking indicators, and a jump-to-bottom pill.
  • The splash paints your real logo. On kitty, Ghostty, and WezTerm the boot splash reveals the actual Empryo artwork over the graphics protocol with a rune-decode animation, degrading gracefully to a mosaic persona and then half-blocks on plainer terminals. There are boot, restart, and shutdown tiers.
  • A render error can't blank your terminal anymore. A three-tier crash boundary (transcript / modal / root) catches React render throws, and every surface writes to a durable errors.jsonl you can actually read.

Prefer the classic look? /presentation (and the /v2 alias) toggles between organic, normal, and zen.

Custom agents, defined in markdown

Drop a markdown file in .empryo/agents (or .claude, .gemini, .opencode, .agents) and you've defined an agent: frontmatter sets its name, model, tools, skills, and effort; the body becomes its system prompt. Dispatch a task to it by name, browse them in the TUI /agents panel or the desktop Agents drawer, or run one headless with --agent <name>. Project definitions win name collisions with global ones, and the tool allow/deny lists act as a real execute-time guard.

Background subagents that wake you
  • A solo `explore` tool — one read-only delegate for "go find out," no dispatch ceremony, foreground or background, with its own display chrome and a router slot.
  • Background report-back, delivered exactly once. Send an agent to the background and its report wakes the tab that spawned it — atomically, journaled, never double-injected — across the TUI, headless, chat, and desktop. A compact marker shows in the transcript while the full report rides the model's context.
  • `web_search` can run detached and wake you when the research is in.
Skills, first-class
  • Type `$` in the composer — on every surface — to pick skills: a caret-aware, multi-select float with your installed skills first and live registry results below. Space installs, Enter collapses your picks into a [skills: …] chip that expands into a clean "use these skills" block on submit. (This release also makes that picker's list scroll with the cursor, just like ⌃R history.)
  • Empryo remembers your skills per session — active skills restore when you reopen a session, pinned skills auto-load, and installs from another terminal announce themselves mid-session without disturbing the cached prompt.
Effort, per model

An inline effort slider (· ∙ ● ◉ ◈ ✶) on both the TUI and desktop composers lands on each model family's native reasoning knob — Claude, OpenAI, Google, xAI, DeepSeek — and applies to your next turn. There's /effort <level> and a headless --effort too, and it's gated to models that actually support it so the API never rejects your turn.

Desktop
  • A project-wide Search panel off the warm file index — literal, regex, or fuzzy, with smart-case, glob scope, and open-at-line in the editor (⌘⇧F).
  • A faster file watcher (the resident engine replaces the native @parcel/watcher), git-badged file/dir results in the @-mention picker, and a cumulative cache-hit-rate meter in the usage drawer.
Cost & caching
  • "Is caching actually working?" now has an answer: a 30-day cumulative prompt-cache hit-rate bar in /usage and the desktop drawer, plus cache-miss surfacing in headless via --events.
  • Long-lived (1-hour) cache writes are now costed at their real 2× rate, and main-turn spend finally reaches the usage ledger on every surface (it had been landing for roughly 1 event in 145).
Fixed
  • Invalid tool pairings and oversized images can't be sent. Message sanitization is now total (strict 1:1, in-order tool-call/result pairing), which kills the replayed-tool-id error, and images clamp their pixel dimensions — a tall 1200×12000 screenshot no longer 400s.
  • Genome ranking poisoning — a generic-word floor stops short, plain-word exports from minting false provenance, and upgraded databases migrate the stale resolutions out.
  • Inline kitty images stopped blanking, terminal identity is read from TERM/TERM_PROGRAM only (a parent terminal's leaked env no longer makes Terminal.app paint tofu), and the embedded desktop browser's blank-until-reopen bugs are fixed.
  • A cluster of dispatch/deferred-tool activation bugs, a proxy bounce that could signal sibling sessions, Windows hearth dispatch through compiled binaries, and the boot-flash on organic startup — all fixed.
Under the hood
  • The image pipeline moved to Bun.Image — no more shelling out to sips/ffmpeg/magick, so it works on Windows and bare Linux and survives bun --compile.
  • Mature genome databases shrink about 47% (100 MB → 53 MB in under a second on the live DB), and the file engine is upgraded to 0.10.1.
  • Live end-to-end coverage grew: background-wake tested on the real TUI (pyte) and desktop (Playwright), tool-pairing exercised on all three surfaces.
  • Every build is still executed before it ships — empryo doctor loads the native runtime and parses real code inside a Linux container, under Wine for Windows, and under Rosetta for Intel macOS.