v0.2.0

0.2.0 — 2026-09-08

Keybindings

  • One keymap for every chord, overridable in ~/.config/rexa-<namespace>/keybindings.json (add, override, unbind), hot-reloaded.
  • Keybindings screen: a row per binding with its context and source, searchable, Compact view of the everyday chords. Record a key to rebind; conflicts are named and the old key is unbound.
  • Chords show in hover tooltips, the command palette and context menus. Modifiers draw as keycaps.
  • Rebinds off alt, which the terminal needs for its own input: pane focus cmd-shift-<direction>, dock focus cmd-shift-b / cmd-shift-r, Run cmd-k cmd-r, Import project cmd-o.
  • A user binding survives a keymap reload.

Navigation

  • The sidebar takes the keyboard: j/k move a cursor, Enter opens, and rename, copy path, reveal, collapse and hide are bound on the row under it.
  • ~ in the command palette lists every worktree, grouped by project.
  • cmd-` and cmd-~ cycle imported projects.
  • Zen mode, focus-dock actions, run bar toggle.
  • Focus no longer goes dead after an overlay closes over an empty window, a pane's last tab closes, a pane refills, or a worktree switch opens no tab — every app chord did nothing until the next click.

Agents

  • Cursor Agent behind a session card: launch and resume, live turn state, past chats, transcript, rules/skills/MCP. No blocked state and no tool results in the transcript yet.
  • A card takes its name from the terminal title when the agent puts the session's name there, so it lands as soon as the CLI knows it. Spinner frames cleaned out first.
  • Claude: a prompt names an unnamed card once, instead of renaming it to the last thing typed every turn.
  • Claude: a running teammate no longer holds a card at working while the chat is idle. A subagent still does.
  • Codex: a live card carries the thread's name.
  • A null in a card patch clears the field — an idle card kept showing the activity line of a tool that had long finished.
  • A card that finished keeps its title.
  • The transcript strips a provider's own scaffolding from a prompt.
  • Hooks own a live card and the store is read only for a relaunch. A restored card shows what its last run persisted, rather than a title, model and token count re-derived from the transcript.

Terminal

  • One sysctl replaces a ps fork per process inventory: 52–59 ms to 0.3–0.8 ms over ~995 processes.
  • A selection dragged to the edge scrolls the grid.
  • A pane closes when its terminal exits.
  • The pane context menu is app-drawn and shows each item's chord.

Editor and views

  • Mermaid diagrams render in markdown, through Rexa's own engine.
  • An empty pane names its worktree and path, and offers New console, Launch agent, Open file and the palette.
  • Agent cards indent under their worktree.
  • Inline-code chips and overlay quads stay inside their scroll container.
  • Panes split the center into even columns, the divider runs through the tab bar, neighbours share one grab band, and a drag ends on button up.
  • Imported projects take their text rung by contrast.

Extensions

Breaking, for anyone shipping an adapter of their own:

  • The transcript line bus is gone. Adapters lose the lineInterests, storePath and readLines handlers and the LineInterest, InterestKind, StorePathRequest, LineBatch and LineReading types. Report turn state through hooks; the store is read for a relaunch. An adapter that declared any of them keeps working — the handlers are simply never called — but the types no longer resolve, so a typecheck fails until they come out.
  • New: terminal_title = { names_session, unnamed } on an agent, for a CLI that puts the session's own name in its terminal title; strip_pattern on a transcript mapping, to remove a provider's scaffolding from a block before the record is judged.
  • trimOneLine is exported from packages/extension, replacing the private "one line, ellipsized" copy most adapters carried.

Install

  • The .dmg carries the Applications link to drag onto.