Назад към всички

hcom-agent-messaging

// Let AI agents message, watch, and spawn each other across terminals. Claude Code, Gemini CLI, Codex, OpenCode. Use this skill when the human user needs help, status, or reference about hcom - when user asks questions like "how to setup hcom", "hcom not working", "explain hcom", or any hcom troublesh

$ git log --oneline --stat
stars:105
forks:20
updated:March 2, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namehcom-agent-messaging
descriptionLet AI agents message, watch, and spawn each other across terminals. Claude Code, Gemini CLI, Codex, OpenCode. Use this skill when the human user needs help, status, or reference about hcom - when user asks questions like "how to setup hcom", "hcom not working", "explain hcom", or any hcom troubleshooting.

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://raw.githubusercontent.com/aannoo/hcom/main/install.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

capabilitycommandtested behavior
message each otherhcom send @name -- "msg"delivers in under 1s (claude), 1-3s (codex)
read each other's transcriptshcom transcript @name --fullincludes tool I/O with --detailed
view/inject into terminal screenshcom term inject name "text" --enterapproves prompts, types commands
query event historyhcom events --sql "..." --last Nfile edits, commands, status, lifecycle
subscribe to activityhcom events sub --idle namereal-time notifications via system messages
spawn/fork/resume/kill agentshcom 1 claude --tag X --go --headlessheadless background agents for scripts
build context bundleshcom send --title X --transcript 1-20:full --files a.pystructured handoffs between agents
collision detectionautomatic2 agents edit same file within 30s, both notified
cross-device messaginghcom 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    # 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

toolhooksdeliverysession bindinglaunch to ready
claude code (incl. subagents)10 hooksautomatic (hook output)instant on sessionstart3-5s
gemini cli (>= 0.26.0)7 hooksautomatic (hook output)instant on beforeagent3-5s
codex1 hook (notify)PTY injectionon first agent-turn-complete5-10s
opencode4 handlers (plugin)plugin TCP endpointon plugin binding3-5s
any ai toolmanualhcom start inside toolon first commandvaries

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:

  1. run hcom status — if "command not found", install first:
    curl -fsSL https://raw.githubusercontent.com/aannoo/hcom/main/install.sh | sh
    
  2. run hcom hooks add to install hooks for all detected tools
  3. restart the AI tool for hooks to activate
status outputmeaningaction
command not foundnot installedinstall via curl or pip install hcom
[~] claudetool exists, hooks not installedhcom hooks add then restart
[✓] claudehooks installedready
[✗] claudetool not foundinstall 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"

symptomdiagnosisfix
agent not in hcom listagent stopped or never boundrelaunch or wait for binding
message sent but not deliveredcheck hcom events --last 5verify @mention matches agent name/tag
codex agent shows inactivestale_cleanup (session didn't bind in 30s)wait for idle before sending
wrong agent receives message@mention ambiguityuse @tag- prefix for reliable routing
messages leaking between workflowsno thread isolationalways 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"     # 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 --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

whatlocation
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

filewhen to read
references/patterns.mdwriting multi-agent scripts — 6 tested patterns with full code and real event JSON
references/cli-reference.mdcomplete command reference with all flags and examples
references/cross-tool.mdclaude + codex + gemini + opencode collaboration details and per-tool quirks
references/gotchas.mddebugging 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