Skip to content

The genome now learns as you work, and the terminal UI is reborn, plus custom agents, first-class skills, and background subagents

Empryo 3.5.0-beta, released Jul 24, 2026. Part of the 3.5 line.

Release notes

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.