Skip to main content

How It Works

  1. Global hooks in ~/.claude/settings.json fire on every Claude Code event
  2. Hook script ~/.claude/hooks/ravi-copilot.sh reads the JSON, wraps it in an envelope, and publishes to NATS
  3. Ravi triggers subscribe to ravi.copilot.* topics and react
  4. Mailbox injection — Ravi writes to CC’s inbox JSON to communicate back (CC must be in team mode)

Commands

Send message to CC session

List CC teams

NATS Topics

Payload Envelope

Trigger Examples

Alert on tool failure

Monitor new sessions

Monitor dangerous Bash commands

Notify on session end

Setup

  1. Install nats CLI: nats --version (or brew install nats-io/nats-tools/nats)
  2. Daemon running: ravi daemon status
  3. Hook script executable: ls -la ~/.claude/hooks/ravi-copilot.sh
  4. Hooks registered: cat ~/.claude/settings.json | grep -c "ravi-copilot.sh" (should show 14)
  5. Test: nats sub "ravi.copilot.>" --server nats://127.0.0.1:4222
  6. Open a CC session — events should appear in the subscriber

Key Files

Notes

  • CC must be in team mode to receive messages from Ravi (inbox poller only runs with an active team)
  • Hook script requires jq and nats in PATH — fails silently if missing
  • Publishes in background (&) — never blocks CC
  • Triggers have anti-loop: events from trigger sessions are ignored