| name | hcom-agent-messaging |
| description | | Use when this capability is needed. |
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
hcom
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 | hcom send @name -- "msg" | delivers in under 1s (claude), 1-3s (codex) |
| read each other's transcripts | hcom transcript @name --full | includes tool I/O with --detailed |
| view/inject into terminal screens | hcom term inject name "text" --enter | approves prompts, types commands |
| query event history | hcom events --sql "..." --last N | file edits, commands, status, lifecycle |
| subscribe to activity | hcom events sub --idle name | real-time notifications via system messages |
| spawn/fork/resume/kill agents | hcom 1 claude --tag X --go --headless | headless background agents for scripts |
| build context bundles | hcom send --title X --transcript 1-20:full --files a.py | structured handoffs between agents |
| collision detection | automatic | 2 agents edit same file within 30s, both notified |
| cross-device messaging | hcom send @name:DEVICE -- "msg" | 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
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
read other agents' work
hcom transcript @luna --full
hcom transcript @luna --full --detailed
hcom transcript @luna --last 3
agent lifecycle
hcom list
hcom kill luna --go
hcom kill all --go
hcom stop luna --go
hcom r luna
hcom f luna --tag rev
event subscriptions (reactive)
hcom events sub --idle luna
hcom events sub --file "*.py" --once
hcom events sub --collision
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 | hcom start 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
hcom status — if "command not found", install first:
curl -fsSL https://github.com/aannoo/hcom/releases/latest/download/hcom-installer.sh | sh
- run
hcom hooks add to install hooks for all detected tools
- restart the AI tool for hooks to activate
| status output | meaning | action |
|---|
| command not found | not installed | install via curl or pip install hcom |
[~] claude | tool exists, hooks not installed | hcom hooks add then restart |
[✓] claude | hooks installed | ready |
[✗] claude | tool not found | install the AI tool first |
troubleshooting
"hcom not working"
hcom status
hcom hooks status
hcom relay status
hooks missing? hcom hooks add then restart tool.
still broken?
hcom reset all && hcom hooks add
hcom claude
"messages not arriving"
| symptom | diagnosis | fix |
|---|
agent not in hcom list | agent stopped or never bound | relaunch or wait for binding |
| message sent but not delivered | check hcom events --last 5 | 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 @tag- prefix for reliable routing |
| messages leaking between workflows | no thread isolation | always use --thread |
intent system
agents follow these rules from their bootstrap:
--intent request → agent always responds
--intent inform → agent responds only if useful
--intent ack → agent does not respond
sandbox / permission issues
export HCOM_DIR="$PWD/.hcom"
hcom hooks add
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
cross-tool: claude designs, codex implements
hcom events --wait 30 --idle "$codex_name"
ensemble: 3 agents + judge
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)"
key rules:
- always parse and forward
--name (hcom injects it)
- always use
--go on launch/kill
- always use
--headless for script agents
- always use
--thread for message isolation
- use
hcom events --wait instead of sleep
- capture agent names from
grep '^Names: ' in launch output
- cleanup with
trap cleanup ERR + hcom kill
files
| what | location |
|---|
| database | ~/.hcom/hcom.db |
| config | ~/.hcom/config.toml |
| logs | ~/.hcom/.tmp/logs/ |
| user scripts | ~/.hcom/scripts/ |
with HCOM_DIR set, uses that path instead of ~/.hcom.
reference files
| file | when to read |
|---|
references/patterns.md | writing multi-agent scripts — 6 tested patterns with full code and real event JSON |
references/cli-reference.md | complete command reference with all flags and examples |
references/cross-tool.md | claude + codex + gemini + opencode collaboration details and per-tool quirks |
references/gotchas.md | debugging scripts — timing, stale agents, codex binding, message delivery issues |
more info
hcom --help
hcom <command> --help
hcom run docs
github: https://github.com/aannoo/hcom
Converted and distributed by TomeVault — claim your Tome and manage your conversions.