Claude-hook-comms hcom-agent-messaging
install
source · Clone the upstream repo
git clone https://github.com/aannoo/hcom
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aannoo/hcom "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/hcom-agent-messaging" ~/.claude/skills/aannoo-claude-hook-comms-hcom-agent-messaging && rm -rf "$T"
manifest:
skills/hcom-agent-messaging/SKILL.mdsource content
hcom — multi-agent communication for AI coding tools
AI agents running in separate terminals are isolated. hcom connects them via hooks and a shared database so they can message, watch, and spawn each other in real-time.
curl -fsSL https://github.com/aannoo/hcom/releases/latest/download/hcom-installer.sh | sh hcom claude # or: hcom gemini, hcom codex, hcom opencode hcom # TUI dashboard
what humans can do
tell any agent:
send a message to claude
when codex goes idle send it the next task
watch gemini's file edits, review each and send feedback if any bugs
fork yourself to investigate the bug and report back
find which agent worked on terminal_id code, resume them and ask why it sucks
what agents can do
| capability | command | tested behavior |
|---|---|---|
| message each other | | delivers in under 1s (claude), 1-3s (codex) |
| read each other's transcripts | | includes tool I/O with |
| view/inject into terminal screens | | approves prompts, types commands |
| query event history | | file edits, commands, status, lifecycle |
| subscribe to activity | | real-time notifications via system messages |
| spawn/fork/resume/kill agents | | headless background agents for scripts |
| build context bundles | | structured handoffs between agents |
| collision detection | automatic | 2 agents edit same file within 30s, both notified |
| cross-device messaging | | via MQTT relay, 1-5s latency |
essential commands (quick reference)
launch agents
hcom 1 claude --tag worker --go --headless --hcom-prompt "your task" hcom 1 codex --tag engineer --go --headless --hcom-prompt "your task" hcom 3 claude --tag team --go --headless # batch launch
flags:
--go (skip confirmation), --headless (background), --tag X (group routing), --hcom-prompt (initial task), --hcom-system-prompt (role/personality)
send messages
hcom send @luna -- "direct message" hcom send @worker- -- "all agents tagged worker" hcom send @luna @nova -- "multiple targets" hcom send -- "broadcast to everyone" hcom send @luna --intent request -- "expecting reply" hcom send @luna --intent inform -- "fyi, no reply needed" hcom send @luna --thread review-1 -- "threaded conversation"
wait for events (replaces sleep in scripts)
hcom events --wait 120 --sql "msg_text LIKE '%DONE%'" hcom events --wait 60 --idle luna hcom listen 30 # block until any message
read other agents' work
hcom transcript @luna --full # complete conversation hcom transcript @luna --full --detailed # with tool I/O, file edits hcom transcript @luna --last 3 # last 3 exchanges
agent lifecycle
hcom list # show all active agents hcom kill luna --go # kill + close terminal pane hcom kill all --go # kill everything hcom stop luna --go # graceful stop (preserves session) hcom r luna # resume stopped agent hcom f luna --tag rev # fork (clone session, new identity)
event subscriptions (reactive)
hcom events sub --idle luna # notify when luna goes idle hcom events sub --file "*.py" --once # one-shot: next .py file edit hcom events sub --collision # file edit collisions
tool support
| tool | hooks | delivery | session binding | launch to ready |
|---|---|---|---|---|
| claude code (incl. subagents) | 10 hooks | automatic (hook output) | instant on sessionstart | 3-5s |
| gemini cli (>= 0.26.0) | 7 hooks | automatic (hook output) | instant on beforeagent | 3-5s |
| codex | 1 hook (notify) | PTY injection | on first agent-turn-complete | 5-10s |
| opencode | 4 handlers (plugin) | plugin TCP endpoint | on plugin binding | 3-5s |
| any ai tool | manual | inside tool | on first command | varies |
codex note: session binding takes 5-10s. always wait before sending messages:
hcom events --wait 30 --idle "$codex_name"
setup
if the user invokes this skill without arguments:
- run
— if "command not found", install first:hcom statuscurl -fsSL https://github.com/aannoo/hcom/releases/latest/download/hcom-installer.sh | sh - run
to install hooks for all detected toolshcom hooks add - restart the AI tool for hooks to activate
| status output | meaning | action |
|---|---|---|
| command not found | not installed | install via curl or |
| tool exists, hooks not installed | then restart |
| hooks installed | ready |
| tool not found | install the AI tool first |
troubleshooting
"hcom not working"
hcom status # check installation hcom hooks status # check hooks specifically hcom relay status # check cross-device relay
hooks missing?
hcom hooks add then restart tool.
still broken?
hcom reset all && hcom hooks add # close all ai tool windows hcom claude # fresh start
"messages not arriving"
| symptom | diagnosis | fix |
|---|---|---|
agent not in | agent stopped or never bound | relaunch or wait for binding |
| message sent but not delivered | check | verify @mention matches agent name/tag |
| codex agent shows inactive | stale_cleanup (session didn't bind in 30s) | wait for idle before sending |
| wrong agent receives message | @mention ambiguity | use prefix for reliable routing |
| messages leaking between workflows | no thread isolation | always use |
intent system
agents follow these rules from their bootstrap:
→ agent always responds--intent request
→ agent responds only if useful--intent inform
→ agent does not respond--intent ack
sandbox / permission issues
export HCOM_DIR="$PWD/.hcom" # project-local mode hcom hooks add # installs to project dir
scripting patterns (tested with real agents)
basic two-agent messaging
thread="t-$(date +%s)" launch_out=$(hcom 1 claude --tag worker --go --headless \ --hcom-prompt "count 1-5. send result: hcom send \"@reviewer-\" --thread ${thread} --intent inform -- \"RESULT: <answer>\". stop: hcom stop" 2>&1) worker=$(echo "$launch_out" | grep '^Names: ' | sed 's/^Names: //' | tr -d ' ') launch_out=$(hcom 1 claude --tag reviewer --go --headless \ --hcom-prompt "wait for @worker-. send DONE to bigboss. stop: hcom stop" 2>&1) hcom events --wait 120 --sql "msg_thread='${thread}' AND msg_text LIKE '%DONE%'" hcom kill all --go
worker-reviewer feedback loop
# worker does task, reviewer evaluates, sends APPROVED or FIX feedback # worker corrects if needed, loop until approved # see references/patterns.md for full tested scripts
cross-tool: claude designs, codex implements
# claude sends spec to @eng- (codex), codex implements, claude approves # CRITICAL: wait for codex binding before messaging hcom events --wait 30 --idle "$codex_name" # see references/patterns.md for full tested scripts
ensemble: 3 agents + judge
# 3 agents independently answer, judge aggregates via hcom events --sql # agents run in parallel (same wall-clock as 1 agent) # see references/patterns.md for full tested scripts
script template (for workflow scripts in ~/.hcom/scripts/)
#!/usr/bin/env bash set -euo pipefail LAUNCHED_NAMES=() track_launch() { local names=$(echo "$1" | grep '^Names: ' | sed 's/^Names: //') for n in $names; do LAUNCHED_NAMES+=("$n"); done } cleanup() { for name in "${LAUNCHED_NAMES[@]}"; do hcom kill "$name" --go 2>/dev/null || true done } trap cleanup ERR name_flag="" task="" while [[ $# -gt 0 ]]; do case "$1" in --name) name_flag="$2"; shift 2 ;; -*) shift ;; *) task="$1"; shift ;; esac done name_arg="" [[ -n "$name_flag" ]] && name_arg="--name $name_flag" thread="workflow-$(date +%s)" # your logic here
key rules:
- always parse and forward
(hcom injects it)--name - always use
on launch/kill--go - always use
for script agents--headless - always use
for message isolation--thread - use
instead ofhcom events --waitsleep - capture agent names from
in launch outputgrep '^Names: ' - cleanup with
+trap cleanup ERRhcom kill
files
| what | location |
|---|---|
| database | |
| config | |
| logs | |
| user scripts | |
with
HCOM_DIR set, uses that path instead of ~/.hcom.
reference files
| file | when to read |
|---|---|
| writing multi-agent scripts — 6 tested patterns with full code and real event JSON |
| complete command reference with all flags and examples |
| claude + codex + gemini + opencode collaboration details and per-tool quirks |
| debugging scripts — timing, stale agents, codex binding, message delivery issues |
more info
hcom --help # all commands hcom <command> --help # command details hcom run docs # full CLI + config + API reference
github: https://github.com/aannoo/hcom