Repository navigation
Calyx v0.48.0
What's Changed
Worktree tasks
- New Worktree Task (File menu, Cmd+Shift+N, command palette, or the "+" in the Git sidebar's Changes header) creates a branch and a git worktree under
~/.calyx/worktrees, opens a tab there and launches the agent CLI you pick with your prompt. An optional Arguments field passes extra CLI options such as--model opus. - Claude Code, Codex and Grok receive the prompt as a launch argument; the other CLIs get it typed in once the agent appears.
- When the agent exits, the pane drops into your interactive shell inside the worktree instead of closing.
- Task worktrees show Merge and Discard in the Git sidebar section header and on their Mission Map card. Merge requires a clean task worktree, merges with
--no-ffinto the base branch, then removes the worktree, the branch and the task's panes. Discard asks for confirmation, then force-removes the worktree and deletes the branch.
agent_status MCP tool
- A read-only view of every pane's agent (or one pane by surface id or calyx-session id): pane fields, agent state and current tool, subagents, bound IPC peer and unread count, pending approvals, git badge, worktree task and live token usage. The same data a Mission Map card shows.
- Not approval-gated, and reading it does not touch inbox counters. Tool summaries are now redacted for secrets before the length cap, so a secret straddling the cut no longer leaks its leading characters into Mission Map or
agent_status. - The Calyx MCP server now exposes 87 tools.
Wake Claude Code on IPC messages
- Settings → Agents → Wake Claude Code on IPC messages (off by default). When on, a message arriving for an idle Claude Code pane wakes it through an
asyncRewakehook, so the agent picks up the message without being prompted. - The wake note carries only message counts and the pane's own peer id; Calyx never reads a message on the agent's behalf. A message wakes a pane at most once.
- The hook accepts only wake responses signed by the running Calyx, so a stale endpoint file after a crash cannot be used by another local process to show the agent text or wake panes.
- Claude Code only, and it needs a Claude Code version that supports
asyncRewakehooks.
IPC endpoint hardening
- Approval hook answers are now signed per request and verified before a decision is printed. On any mismatch the hook stays silent, so Calyx never invents a permission decision.
- Every sender (hook scripts, zsh/fish shell integration, OpenCode plugin, pi extension) checks that the Calyx that wrote the endpoint file is still alive before sending the bearer token.
- Claude Code and Codex now fetch the bearer token through a Calyx-owned headers helper instead of having it baked into their config; Grok 1.0.52 or later reads it from a 0600 token file. A renewed token is picked up without restarting the CLI.
- The bearer token is renewed when Calyx restarts and finds its previous port taken; Settings → Agents shows a line when that happened.
- Bearer comparison is constant time on every route.
Diff preview tab
- Single-clicking a file in the Changes sidebar opens its diff in a reusable preview tab (italic title) per tab group, VS Code style. Double-click, commenting, the tab's double-click or context menu, or the Keep Tab Open palette command make it permanent (#51).
- Settings → Appearance → Changes → Open diffs in a preview tab (on by default) restores the one-tab-per-click behaviour when off.
Fixes
- Calyx no longer forces emoji codepoint ranges onto Apple Color Emoji, so text-presentation symbols such as Claude Code's ✳ spinner render as text again, and
font-codepoint-mapin your own Ghostty config is honoured (#50).
Note: After updating, restart your agent CLI instances once so they pick up agent_status, the new wake hook and the token headers helper.