Skip to content

Claude Code

Claude Code has a first-party Chorus plugin. It provides Chorus tools and workflow skills in an interactive Claude Code session, and it can run as a supported Chorus daemon backend.

Before you install, create an agent key by following Prepare agent access.

Claude daemon wakes wait up to 60 minutes (3600000 ms) after the main turn for background children. CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS takes precedence over CHORUS_CLAUDE_BG_WAIT_CEILING_MS. This is not a whole-wake timeout. Parents must collect completion or explicitly stop their children before ending the turn. Forced background termination is abnormal even with a raw zero exit code; Chorus attempts to comment on the triggering idea/task without repairing task status or retrying automatically. See daemon timeout settings for zero/empty-value risks, configuration, and diagnostics.

The quickest path is the chorus CLI, which installs the plugin and stores the credential for you:

Terminal window
npm install --global @chorus-aidlc/chorus
chorus agents add --agents claude

Enter the Chorus URL and agent key when prompted. chorus agents add runs claude plugin marketplace add / claude plugin install for you and writes CHORUS_URL, CHORUS_API_KEY, and CHORUS_AGENT_PROFILE into the env block of your user-global ~/.claude/settings.json, so an interactive Claude Code session authenticates with no manual environment setup. Restart Claude Code afterward.

To install by hand instead, set the credential in the launching shell:

Terminal window
export CHORUS_URL="https://chorus.example.com"
export CHORUS_API_KEY="cho_REDACTED"

Then add the plugin from inside Claude Code:

/plugin marketplace add Chorus-AIDLC/chorus
/plugin install chorus@chorus-plugins

Restart Claude Code after installation.

Skip this section if you only use Chorus from an interactive Claude Code session. Otherwise, follow Connect an agent runtime and select claude-code as the backend. Verify the connection in the foreground before using Operate the Chorus daemon to keep it online.

Each wake still starts one claude -p process and exits after its turn. Chorus now uses bidirectional stream-json input and output, keeping the connection open for control responses. Existing sessions and claude --resume continue to work; there is no plain-text fallback or transport switch. This behavior was verified live on Linux with Claude Code 2.1.283 and 2.1.284; treat those as tested versions, not a guaranteed minimum for every Claude Code release.

  • Interrupt: the daemon sends a protocol interrupt first. If the process does not stop within sigintTimeoutMs, it force-stops the process tree. The default remains 10 seconds.
  • Restricted tools: in --chorus-only mode, non-Chorus tools receive an explicit denial telling the agent to use Chorus tools or ask in a Chorus comment. Logs identify the denied tool by name without its input. YOLO behavior is unchanged.
  • Questions: AskUserQuestion is disabled for every daemon wake, including YOLO, because nobody is at the terminal to answer. The agent should ask through Chorus comments or elaboration. Interactive Claude Code sessions retain their normal question flow.

After upgrading, verify check-in, a follow-up turn, and interrupt/resume with the actual Claude Code version on your host. Use daemon logs to diagnose a protocol failure; Interrupt and resume a session explains how to continue.

In Claude Code, run /plugin list and confirm that chorus@chorus-plugins is enabled. Then ask Claude Code to check in to chorus. A successful response identifies the connected agent and its permissions.

For daemon mode, open Settings → Agents in Chorus and confirm that the expected host and working directory are online.

  • The plugin provides Chorus MCP tools, workflow skills, and lifecycle integration.
  • Daemon mode supports remote start, follow-up instructions, interrupt, and resume.
  • Remote work can access everything available to the local operating-system user within the registered working directory. Register only directories you trust.

Use Start work on a remote agent and Interrupt and resume a session for shared operating procedures.

To take over a live conversation from your own terminal, copy its session ID from the chat UI (Copy session ID in the transcript header) and run, from the conversation’s working directory:

Terminal window
claude --resume <sessionId>

The copied ID is the same ID Chorus passes to Claude Code when it resumes a session; for a Claude Code backend it is the UUID of the Idea the session belongs to. See Interrupt and resume a session for the full flow.

  • Plugin does not appear: restart Claude Code, then check /plugin list.
  • Check-in is unauthorized: create or rotate the agent key, then re-run chorus agents add (or update the env block in ~/.claude/settings.json), and restart Claude Code.
  • Daemon is offline: run chorus daemon status, then see Troubleshoot agent connections.
  • The wrong working directory is online: reinstall the daemon with the intended absolute --cwd value.

Plugin-managed sub-agent sessions use the agent type as their name. Parallel sub-agents of the same type can share a Chorus session; it stays open until the last one finishes. This prevents one sibling’s exit from ending another sibling’s tracked work.