Claude Code Plugin
The waggle plugin gives Claude Code agents access to ACP coordination primitives. It’s how Claude Code instances participate in multi-agent workflows.
What it provides
Section titled “What it provides”One MCP tool called waggle with 5 ACP operations + wait:
| Operation | Description |
|---|---|
publish | Publish an event to the coordination server |
claim | Atomically claim a resource (mutex) |
release | Release a claimed resource |
get_state | Read shared state |
set_state | Write shared state |
wait | Sleep until an event arrives |
{ "dance": [ { "do": "claim", "resource": "file:src/api.ts" }, { "do": "read_file", "path": "src/api.ts" }, { "do": "publish", "type": "file.claimed", "data": { "file": "src/api.ts" } } ], "wait": "review.complete"}Installation
Section titled “Installation”The plugin lives in plugins/acp/ and is loaded automatically by the claude() shell function if configured:
# Manual loadclaude --plugin-dir ~/projects/honeybee/plugins/acpThe plugin auto-detects a running incubator by checking .honeyb/brood.state.json. If no incubator is found, it can auto-spawn one.
How it works
Section titled “How it works”- Claude Code starts with the waggle plugin loaded
- The plugin discovers the local incubator (via
.honeyb/brood.state.json) - When Claude calls the
waggletool, the plugin makes HTTP requests to the incubator - Events, state changes, and claims are processed server-side
- Results return to Claude as tool output
The plugin handles session tokens automatically — the incubator assigns a session on first connect, and the plugin includes it in subsequent requests for anti-spoofing.
Inter-Claude communication
Section titled “Inter-Claude communication”Multiple Claude Code instances can coordinate through the waggle plugin:
Claude A (frontend) Claude B (backend) │ │ ├─ waggle: set_state │ │ key: "api_spec_ready" │ │ value: "true" │ │ ├─ waggle: wait │ │ types: ["state.changed"] │ │ │ │ ← (wakes up) │ ├─ waggle: get_state │ │ key: "api_spec_ready" │ │ → "true" │ ├─ waggle: claim │ │ resource: "file:src/api.ts"This has been verified end-to-end: Opus sets state → spawns Haiku Task agent → Haiku reads state, publishes event, writes response → Opus reads response. Two Claudes coordinating through a live incubator.
Plugin configuration
Section titled “Plugin configuration”The plugin.json configures MCP server startup:
{ "name": "waggle", "description": "ACP coordination for Claude Code", "mcpServers": { "waggle": { "command": "node", "args": ["server.js"] } }}Note: Only stdio-based MCP ("command" + "args") works in Claude Code plugins. URL-based MCP causes hangs.