Mailbox names are now built as <project>-<session-short>, where <project> is the sanitized git-repo basename (or cwd basename) — no more env-var prefix step. Sessions can re-tag themselves at runtime via the new mcp__mailbox__rename tool (POST /v1/rename), which transfers all pending messages to the new name in a single transaction. Peers using the old name re-discover via list_mailboxes. BREAKING: \$CLAUDE_MAILBOX_NAME is no longer read. Existing setups that relied on the env-var prefix should remove it from .claude/settings.json; the prefix now comes from the working directory automatically. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@kuns/claude-mailbox
Standalone MCP mail server that lets parallel Claude sessions coordinate with each other. TypeScript / Node port of the .NET claude-mailbox daemon — wire-compatible (same port, same X-Mailbox header, same MCP tool names, same SQLite schema).
Install
One-time per machine:
npm config set @kuns:registry=https://git.kuns.dev/api/packages/releases/npm/
npm install -g @kuns/claude-mailbox
Then:
claude-mailbox install-autostart # registers per-OS autostart, no admin needed by default
See the repository README for the full architecture, MCP tool reference, and .mcp.json snippet.
Claude Code hook (auto-check inbox)
Register a UserPromptSubmit hook so Claude pulls pending mailbox messages before every prompt:
claude-mailbox install-hook --name alice # patches ~/.claude/settings.json
claude-mailbox install-hook --name alice --project # patches <cwd>/.claude/settings.json
claude-mailbox uninstall-hook # remove again
The hook is idempotent (running install-hook twice does nothing the second time) and only touches the UserPromptSubmit block — other hooks and settings are preserved.
Under the hood the hook runs claude-mailbox check --name <mailbox> --hook, which:
- prints unread messages in a Claude-friendly format,
- silently exits 0 if the inbox is empty or the daemon is unreachable (no context noise),
- marks the messages delivered so they aren't injected again next prompt.
Cost: one local HTTP round-trip plus Node coldstart per prompt (~100ms on Windows).
Troubleshooting
npm installreturns401 Unauthorized- The Gitea registry usually serves the
releasesscope publicly, but if your instance requires auth you'll need a read token:npm config set //git.kuns.dev/api/packages/releases/npm/:_authToken=<token> Cannot find module 'node:sqlite'or similar- claude-mailbox uses Node's built-in
node:sqlite, stable since Node 24. On Node 22.5–23.x it works only with--experimental-sqlite. Upgrade to Node 24 LTS or newer:nvm install 24 && nvm use 24(orwinget install OpenJS.NodeJS.LTSon Windows).