‹ all releases

Sign in with Cursor, Devin, Gemini CLI, Antigravity and Kimi Code

Empryo 3.7.2-beta · Sep 5, 2026
Release artwork & highlights
3.7.2-betaSep 5, 2026
Subscriptions and sign-in
  • Sign in with Cursor, Devin, Gemini CLI, Antigravity or Kimi Code: /login cursor, /login devin, /login google-gemini-cli, /login google-antigravity, /login kimi-code. Native OAuth or device flow, no addon in between.
  • Fire Pass and Ollama Cloud sign in with an API key: /login firepass <key>, /login ollama-cloud <key>.
  • Every signed-in account shows under the Subscriptions provider in the model picker on the TUI and the desktop app; switch or sign out from there.
  • When one account of a kind reaches its limit, the request continues on the next account without repeating output you already received.
  • Models come from the provider's own API first, then models.dev, then the bundled list. Each lane reports input, output and cached tokens.
  • Codex: the client version is learned from the backend, the context window follows the account's max_context_window, and GPT-6's effort ladder lists only the values the model accepts.
  • An expired grant reads "sign in again" with the server's reason. A rotated grant is kept for the session if the keychain declines to store it.
Morphs and Cells
  • Views can call intent("approve", row) to run one of the cell's named actions, gated like a button press. Views also get desk(), popup(), select(), refresh() and on(type, cb) over the app's event stream.
  • New blocks: heading, button and buttons, usable anywhere a block goes.
  • kv rows take boxed, right, mono, tone and tag; text takes size, mono and tone.
  • list.from renders a pulse's rows live, with where, sort, limit and a select that writes state.selected*.
  • board: "none" gives the centre of the window to the cell's blocks; chrome: "bare" removes the app header.
  • Views can use three.js through runtime.three (bundled, loaded on first use) and a per-view css that applies only to that view.
  • engine:// feeds refresh when the host events behind them change.
  • cells press, cells simulate and cells watch let the agent act on a running cell and watch the result; cells debug prints each region's block tree and each view's state.
  • A view that throws shows its error in place.
  • Helpers restart when their script changes and report stderr on the wire. Helpers left behind by a previous sidecar are cleaned up before a new one starts.
Prompt cache
  • Compaction, review, marionette, web search, memory distill and dispatched workers each use their own cache lane on the ChatGPT and Codex route. Your main conversation's lane is unchanged, so two tabs on one project still share a warm prefix.
  • prompt_cache_key stays workspace-wide; only the Codex session_id carries per-conversation identity.
  • On gpt-6-astra models the top effort level is labelled ultra on the slider; the value sent is still max.
Review
  • A passing review is final: after PASS the footer offers no apply or re-review, and the reviewer prints only the verdict line.
  • The turn footer offers once or till pass on the TUI and the desktop app.
Desktop
  • Prompts and steers clamp at two lines with a toggle.
  • The tool-row popout is always visible.
  • The turn ledger shows duration, cost, in, out and cached, matching the TUI.
  • Quota error text wraps; the plan tooltip has a maximum width.
TUI
  • Each running tool on the rail has its own stop chip.
  • Arming the stop strip closes the inspector.
  • Live trailing text past the final_response threshold is shown as narration.
Release tooling
  • bun run release opens a page at localhost:7411 with every stage, each child's output as it streams, and the hosts the run depends on (apple/container, the Windows machine, Tailscale, R2, GitHub, empryo.com).
  • bun run release:wait blocks until the run ends and returns an exit code that says how.
Bug fixes
  • Subagents that finish without output are retried once, then reported to the parent instead of being marked complete.
  • Non-streaming calls on the ChatGPT and Codex route return their output when the final response object is empty.