Skip to content

Calyx v0.48.0

Choose a tag to compare

@yuuichieguchi yuuichieguchi released this 14 Oct 17:34
· 41 commits to main since this release

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-ff into 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 asyncRewake hook, 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 asyncRewake hooks.

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-map in 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.