Skip to content

Privacy Policy

Last updated: October 6, 2026

Calyx is a macOS terminal application that runs locally. This page describes the data Calyx handles and the network traffic it generates.

Calyx does not collect any user identifiers, usage logs, or crash reports. Calyx sends no analytics or telemetry.

The developer has no way to observe your launch times, feature usage, or input. The optional Usage Tracking feature keeps Claude Code’s token counts on your machine, and the developer does not receive them.

Calyx stores the following on your machine to restore state and run features. None of it is sent off your machine.

  • Open tabs, splits, per-tab working directories, and the positions of Mission Map cards you moved (for session restore) — for a tab opened from a herdr workspace, this also includes herdr’s socket path and its own pane id, so the tab can reconnect after relaunch; herdr’s terminal ids are never stored
  • Persistent-session bookkeeping kept by the local calyx-session daemon (session list and working directories) — only when persistent sessions are enabled (off by default)
  • Session history files under ~/.calyx/state/history/ — only when Persist session history to disk is enabled (off by default)
  • Terminal scrollback (in memory, within the session)
  • Command log records (command line, exit status, and captured output) — in memory only, while Track shell commands is on (on by default); capped per pane, never written to disk, discarded when Calyx quits; known secret patterns (tokens, passwords, API keys, JWTs) are redacted before being stored
  • AI Agent IPC messages, including their text, and the paths of files agents are about to write, kept for Mission Map — in memory only, up to the latest 512 messages and 256 paths; never written to disk, discarded when Calyx quits
  • Shell integration scripts for command tracking (~/Library/Application Support/Calyx/shell-integration)
  • AI agent integration configs, written into each agent’s own configuration directory (~/.claude.json, ~/.codex/, ~/.config/opencode/, ~/.hermes/, ~/.grok/) as a calyx-ipc entry and a calyx-mcp entry; for OpenCode, Hermes, and Grok before 1.0.52 each entry carries the local server’s bearer token, while for Claude Code, Codex, and Grok 1.0.52 or later it names the helper script or token file listed below instead; for pi, which has no configuration file of its own, this is instead a TypeScript extension at ~/.pi/agent/extensions/calyx.ts that pi loads and runs
  • The local IPC server’s endpoint file (~/Library/Application Support/Calyx/agent-endpoint.json, readable by your user only) — while Enable AI Agent IPC is on: the server’s port and bearer token, the process ID and start time of the Calyx that wrote it, and the keys that Calyx uses to sign approval answers and wake notes; rewritten at each launch and removed when the server stops
  • A token file for Grok 1.0.52 or later (~/Library/Application Support/Calyx/calyx-bearer-token-<port>, readable by your user only), holding only the bearer token — removed together with the endpoint file
  • Hook and helper scripts under ~/Library/Application Support/Calyx/bin/ (the approval hook, the Claude Code wake hook, calyx-mcp-headers, and calyx-usage-headers), written while Enable AI Agent IPC is on and left in place when it is turned off
  • Calyx’s hook entries in Claude Code’s own settings file (~/.claude/settings.json), including the wake hook on Stop and SessionStart — only while Enable AI Agent IPC is on; removed when it is turned off
  • For each worktree task, a linked worktree under ~/.calyx/worktrees/<repository>/<branch> and a branch.<branch>.calyxbase entry in that repository’s Git config — removed when the task is merged or discarded
  • Claude Code token usage (~/Library/Application Support/Calyx/usage/usage.sqlite, readable by your user only) — only once Usage Tracking has been turned on (off by default): token counts with their model, effort, thread, agent type, and session ID, each session’s project path and working directory, the path of its Claude Code transcript file, the time each count was received, when each Claude Code process started and its start type (for example a fresh start), when each run in the transcript began and ended, and how far Calyx has read the transcript; never conversation text; kept, also after Usage Tracking is turned off, until you erase it with Delete Usage Data…, after which the file remains and holds only SHA-256 digests identifying the Claude Code processes heard so far (so that their earlier usage is not counted again), the time tracking restarted, and whether tracking is on; a database Calyx cannot read is kept beside it as usage.sqlite.corrupt-… and is not erased by Delete Usage Data…
  • Telemetry settings added to Claude Code’s own settings file (~/.claude/settings.json) — only while Usage Tracking and Enable AI Agent IPC are both on: nine env entries and an otelHeadersHelper entry that point Claude Code’s metrics exporter at Calyx’s server on 127.0.0.1; removed when either switch is turned off, but not when Calyx quits
  • The bearer token Claude Code presents with those counts (~/Library/Application Support/Calyx/usage-otel-credential.json, readable by your user only; read only by the calyx-usage-headers helper) — created the first time Usage Tracking is used, and kept afterwards; the usage-otel-headers.json file that Calyx 0.47.0 and earlier used is deleted
  • The MCP servers you add in Settings under MCP Apps (~/Library/Application Support/Calyx/mcp-servers.json, readable by your user only), with their environment values, request headers, OAuth tokens, client secrets, and registered client IDs kept in the login Keychain
  • Images an MCP App sends to an agent, written under a calyx-mcp-apps folder in the temporary directory
  • Tool calls the approval hook passes to Calyx while AI Agent IPC is on (each Claude Code and Codex permission prompt, and every Grok tool call), and Calyx’s reply to each, written to files in the temporary directory while the hook runs and deleted when it exits, including when Show agent tool prompts in the approval banner is off; a hook that is force-killed leaves them behind
  • Browser server connection info (~/.config/calyx/browser.json)
  • Background language server processes for the LSP proxy
  • Browser tab storage (non-persistent — discarded when the tab closes)

The only outbound traffic Calyx initiates is the following.

The directly-downloaded build fetches the Appcast on launch to check for new versions.

  • URL: https://yuuichieguchi.github.io/Calyx/appcast.xml
  • Content: version info, release notes, and download URLs
  • Downloads are verified against a public key signature before installation

When you accept an update, Calyx downloads the new build from GitHub Releases. This happens only after you confirm in the update dialog.

3. Language server auto-install (optional)

Section titled “3. Language server auto-install (optional)”

If you enable auto-install in Settings under LSP Proxy, Calyx downloads missing language servers via package managers. This feature is off by default.

URLs you load in a browser tab generate normal browser traffic. Storage is non-persistent and is discarded when the tab closes.

5. Remote session SSH connections initiated by you

Section titled “5. Remote session SSH connections initiated by you”

Creating or attaching to a remote session, and calyx-session remote-install, spawn ssh to the host you choose. Remote sessions generate no other traffic, and nothing connects unless you initiate it.

The MCP Apps pane of Settings holds MCP servers you add or import yourself. Calyx connects to them only while Enable AI Agent IPC is on and the server’s own switch is on, and it ships with none configured.

  • An HTTP server is connected to at the URL you entered, with the headers you entered. Calyx sends the calling pane’s working directory to a server that asks for the workspace roots.
  • A stdio server is started as a local process with the command and environment you entered. What it connects to is up to that process.
  • Signing in to a server that requires OAuth fetches the server’s authorization metadata, may register Calyx as a client with the authorization server (identifying itself with https://getcalyx.app/oauth/mcp-client.json where that form is supported, otherwise by dynamic registration), opens the authorization page in your default browser, and exchanges the code for tokens. The redirect returns to a listener on the loopback interface, on a random port or on port 41890 when you turn that option on. Signing out deletes the tokens locally and sends nothing to the server.
  • A view an MCP App shows is rendered from HTML the server provides over that connection; Calyx fetches nothing from the web to display it. The view can make requests only to the domains its server declares for it, and none when it declares none. The view is told the theme colors and font, the locale and time zone, and the tool’s arguments and result.
  • A link an app asks to open goes to your default browser only after you approve it.

Calyx hosts several servers inside its own process. They listen on the loopback interface (localhost) and are not exposed to the network.

  • AI Agent IPC MCP server: used by AI agents on the same machine; the same port also serves the /calyx-mcp endpoint that republishes the MCP servers configured under MCP Apps, and the /usage/v1/metrics endpoint for Claude Code’s token counts, which are stored only while Usage Tracking is on and discarded otherwise
  • OAuth redirect listener: opened on the loopback interface only for the duration of an MCP server sign-in
  • Browser automation server: localhost:41840, used by the calyx browser CLI
  • Session daemon (calyx-session): a separate local process reachable only over a Unix domain socket; it opens no network port
  • Secure input socket: a Unix domain socket in the temporary directory ($TMPDIR/calyx-secure-input-<pid>.sock), readable and writable only by your user, opened at every launch. Through it, a persistent session reports whether it is at a password prompt; it carries only that on/off state, the pane’s session and surface IDs, and a protocol version number

They do not accept connections from outside the machine, so no firewall-crossing traffic is generated.

If herdr, a separate terminal multiplexer, is installed and running on your machine, Calyx detects it and connects automatically. There is no setting to turn this off; not running herdr avoids it entirely.

The connection is a local Unix domain socket only (for example ~/.config/herdr/herdr.sock), never a network connection, and nothing about it leaves your machine. Calyx uses it to list herdr’s workspaces in the Session Browser and to show herdr-hosted agents in the Agents Sidebar.

To tell whether a herdr TUI is running in one of your Calyx panes, Calyx also reads the process list each time the Session Browser refreshes, and, for processes named herdr only, their command-line arguments and environment variables. Only your own user’s processes are read, nothing is saved, and nothing leaves your machine.

When you use AI agents (Claude Code, Codex CLI, OpenCode, Hermes, Grok, pi) through Calyx, the prompts you type and the responses you receive flow through Calyx and appear in the terminal, but Calyx itself does not record or transmit them.

What each agent sends to its provider’s API is governed by that agent’s own privacy policy.

With Wake Claude Code on IPC messages on, Calyx hands an idle Claude Code pane a short note saying how many AI Agent IPC messages await it and which peer id to read them with. The note contains nothing written by another agent, and Calyx never reads a message on the agent’s behalf.

Usage Tracking is off by default. While it is on, Calyx adds telemetry settings to ~/.claude/settings.json so that Claude Code sends its token counts to Calyx’s server on the loopback interface. Calyx configures only Claude Code’s metrics exporter, and only with that loopback address. The settings apply to every Claude Code session started on the Mac while they are in place, including sessions started outside Calyx, and they stay in the file while Calyx is not running.

Of what Claude Code sends, Calyx stores only the token counts and labels listed under Information stored locally. To account for tokens it did not receive, Calyx reads the transcript file Claude Code keeps for each tracked session under ~/.claude/projects/, and keeps only timestamps, the working directory, and the per-model token totals written there. It also runs git in that working directory to find the project’s root. None of this leaves your machine.

What Claude Code itself does once its telemetry is enabled is governed by Claude Code’s own documentation and privacy policy.

Review comments you create from the sidebar Git view are sent only to the AI agent tab you select with Submit Review. They are not sent to GitHub or any other external service.

  • Homebrew install: Sparkle auto-update is disabled. Updates flow through brew upgrade. The Appcast is not fetched.
  • Direct download: “Auto-update” and “Release asset download” above apply.

This policy may be updated as features change. Updated versions take effect when published on this help site.

Questions about privacy can be filed on GitHub Issues.