‹ all releases

Six agents that are not the coding agent — duck, advisor, council, orchestrator, routines, namer

Empryo 3.8.0-beta · Sep 10, 2026
Release artwork & highlights
3.8.0-betaSep 10, 2026
Agents beside the coding agent
  • Duck is a repo-blind conversation partner: /duck [question] or --mode duck. Its belt is web search, page fetch, the agent link, the advisor and find_model — it cannot read your files, and it will hand work to a coding tab instead.
  • Advisor gives a second opinion on the current conversation: /advise <question>, or the advisor tool from inside a turn. It has no tools and never acts. Every consult is kept in /advice. An empty answer is reported as a failed consult, not a silent success.
  • Council seats two to four agents with different briefs in one room: /council <topic>. Every reply is relayed to the whole room, and each seat can carry its own model and effort level. Rooms show a roundtable with the transcript inline.
  • Orchestrator runs a graph of agents with loops, gates and verdicts: /orchestrate <graph or goal>, --mode orchestrate, /runs for the cockpit. A council can be a node in the graph. A run can be restarted from where it failed, and you can talk to its live nodes.
  • Routines are cron-scheduled headless runs scoped to a repository: /schedule, /routine, --routines for the daemon. A finished run now tells you on both surfaces and reports what it said, not just an exit code.
  • The namer labels a tab in two or three words from its first prompt, on the TUI, the desktop app and saved headless sessions. A name you typed yourself is never overwritten. /tab rename writes a new one; tabNaming: false switches it off.
  • Agents can message each other over the agent link while they work: link is on every belt, and background agents, orchestration runs and the advisor are all reachable endpoints.
  • Each of these has its own model slot in the router, its own command on every surface, and its own line in the cost ledger.
The goal loop
  • /goal <what must be true> (alias /loop) runs coder and reviewer rounds until a fresh judge returns PASS. --headless --loop returns the verdict as an exit code.
  • Typecheck and the test suite run before any model sees a round, so a broken build never costs a reviewer call.
  • A stalled loop changes one variable per round instead of feeding the same failure to the same model.
  • Images attach to a goal the same way they attach to a prompt.
Instructions and custom agents
  • An instruction file can be routed to specific models, providers, model families or custom agents — one source can serve several at once. Pick the routes from the instruction picker on the TUI and the desktop app.
  • The main conversation can run under a custom agent definition, not just dispatched work: --agent <name>.
  • Custom agents appear on the routing table, and a lane can carry its own agent key.
  • A restored session resumes as the agent it ran under.
The agent configures Empryo
  • A new settings tool lets the agent read and write Empryo's own configuration — about 140 settings, each validated against its real type.
  • The running surface owns the write, so a change made mid-conversation shows up in the interface immediately. Settings that are only read at launch say so instead of claiming they applied.
  • Scope is explicit: your global configuration or this project's. Unasked, it writes to the layer that already sets the key, so a toggle never seeds a project file by accident.
  • find_model now reports published prices per million tokens — input, output, cached read and cached write — from the provider's own listing, models.dev, or OpenRouter. A model with no published price prints none rather than a guess, so routing by cost can be done from real numbers.
Prompt cache
  • Keep-alive refreshes a cached prefix before it expires, so a lane you come back to reads the cache instead of paying to rebuild it. /ping start arms it, /ping stop stands it down, and the status bar shows armed, cold or off.
  • Unattended lanes stand down on their own after a number of refreshes, so a tab left open overnight does not keep billing.
  • The refresh is a cache read of the lane's own last request with a one-token cap, and the answer is discarded. Lanes where a refresh would invalidate the cache are named instead of pinged.
  • Pre-warm sends the prefix while you are still typing, on providers that support it, so the first real turn reads a warm prefix. There is a switch for it in provider settings on both surfaces.
  • Keep-alive timing follows the provider's own cache lifetime — five minutes refreshes at four and a half, an hour refreshes at fifty-four minutes.
  • When the cache does break, the engine names what moved: which tools, which message, which part of the system prompt.
The desktop app
  • The Genome room is a full workspace: the code map with navigator, deep view and understanding panes. Switch tabs and the map re-tells that tab's story — what it read, what it edited, which helpers ran. Areas can be hidden or soloed, and the picture switches live in one icon strip. Large repositories draw far lighter than before, and the room shows its own frame time and cost readout.
  • Routing is one table. Agent behavior is merged into it, every task is a row with its model and effort inline, and Best, Balanced and Frugal quick-setup cards state their trade-off. Switches the engine never read are gone.
  • Marionette works inside the conversation. While it maps your prompt a swarm presses each word in place; on a rewrite the old words scramble out and the new ones decode in. A facts row shows locations, lane, cost and duration, and an inspect dialog opens the full map with anything selectable into your draft.
  • Inline diffs are one card per file, with real line numbers from the original file and collapsed "unchanged lines" seams between hunks.
  • Events have their own tab in the context panel, with system notes classified once.
  • Cells can mount interface into named seams of the app and open as a full workspace tab.
  • Every lazy surface warms after boot rather than on first open, so pages no longer build themselves as you arrive.
  • The plan dock, the mapping inspector and the workspace panes were reworked; panes open from any page.
The TUI
  • The workbench shelf on the landing card lists what the engine is running — orchestration runs, background jobs, link rooms, routines, advice — each with the command that opens it.
  • Engine events ride the tool rail: cache notices, retries, fallbacks, compaction, agents, goal rounds, side calls and advice all land between the calls, at their own clock. /events opens the pane, and an unread cue sits above the composer.
  • Steering messages appear in the rail with their reply quoted, instead of being folded under the question.
  • A plan workspace with steps, document, scope and feedback, matching the desktop's plan state machine. /plan open, or the open chip on the plan band.
  • One lifecycle row per background agent, from start to finish.
  • /heap reports the JavaScript heap by object type.
  • Hero and lifecycle splashes, the workbench and the mote were polished; the workbench reads clean at every terminal width.
Providers and models
  • Codex Astra: the leaner Responses wire shape, client identity, catalog-gated defaults, and Responses over WebSocket. Astra rows in /provider-settings.
  • Computer use asks per application which windows it may drive, keyed by macOS bundle id, Windows identifier or Linux window class. The rule follows the frontmost application, and a refusal names the identifier to add to your configuration.
  • MCP tool schemas are deferred on lanes with native tool search, so a turn that never calls MCP does not carry its schemas.
  • Provider options reach parity across the TUI and the desktop app.
Cells and Morphs
  • Cells can mount into named application seams, drive their own surfaces, and take screenshots of themselves for the agent to look at.
  • Extension targets carry through the runtime, the schema and the documentation.
  • Documentation moved from /docs/tools/cells to /docs/tools/morphs.
Documentation and the website
  • New pages: the workbench, side agents, the goal loop, provider tools, a tool reference, and documentation for agents.
  • Any documentation page or section can be copied or downloaded as Markdown or plain text, and there is a read-only documentation MCP server at empryo.com/mcp.
  • The empryo skill ships installed, so an agent reads live documentation instead of guessing configuration.
  • Search results deep-link to the heading that matched.
  • Language chips fill to their real translation coverage, counted live.
  • One dead-end screen for 404s and render errors.
Release tooling
  • A full release now takes about 22 minutes instead of 42: the Linux desktop builds as a lane beside macOS and Windows, uploads run six at a time, and the artifact prune remembers what it already cleared.
  • --no-r2 is genuinely offline — no upload, no tag push, no GitHub, no website deploy — and the live page says "built, nothing uploaded" for such a run.
  • The GitHub draft release is off by default; add --github for it.
Breaking changes
  • --mode chat is now --mode duck. The old value is rejected with the list of valid modes; scripts passing chat must be updated.
  • Three routing switches that the engine never read — tier routing, dispatch cache and target-file validation — have been removed from configuration and the interface.
  • Documentation links to /docs/tools/cells should now point at /docs/tools/morphs.
Bug fixes
  • The conversation sent to the model is byte-stable between turns, so the prompt cache is no longer broken by the engine rewriting earlier history.
  • Screenshots nested inside tool results are priced as pictures; previously they read as a budget overflow, which rewrote the whole prompt on every step.
  • A stalled response stream is detected on every provider lane rather than only one, and a half-open connection is closed instead of hanging.
  • A locked code index says which session holds it and retries, instead of showing a stuck loading state.
  • A declared custom model keeps the details discovered from the provider's own model list.
  • The 24-hour cache lifetime is only claimed when it is actually in use.
  • Price lookups use the fully-qualified model id, so prices are no longer blank.
  • The context gauge restores from the measured request, and hosted tool steps count as cost rather than as context.
  • Rate limits are read across both lanes, not the main prompt alone.
  • Stopping a tool call that had not started yet stops the turn.
  • Streaming code blocks stay painted instead of being rebuilt on every tick.
  • Region capture on Wayland uses the correct geometry.
  • Running a single test file runs it in the package that owns it, not the whole workspace.
  • Background shell output reaches the caller, not only the log.
  • The bundled skill is never written through a symbolic link.
  • A stopped agent is reported as dismissed rather than failed.
  • Council rounds wait for each seat and keep replies that were said before the round opened.
  • An interrupted configuration save no longer leaves an empty file that reads as no configuration at all.
  • Routine runs open in their own tab and never take over the window; the overlap guard belongs to the workspace.
  • Markdown links only carry web schemes.
  • The live star count on the website is served from the edge and stays readable on narrow phones.