diff --git a/skills/hcom-agent-messaging/SKILL.md b/skills/hcom-agent-messaging/SKILL.md index 2ac1e01..d19eee2 100644 --- a/skills/hcom-agent-messaging/SKILL.md +++ b/skills/hcom-agent-messaging/SKILL.md @@ -5,24 +5,21 @@ description: | --- -# hcom — Let AI agents message, watch, and spawn each other across terminals. Claude Code, Gemini CLI, Codex, OpenCode. +# hcom — multi-agent communication for AI coding tools -AI agents running in separate terminals are isolated from each other. Context doesn't transfer, decisions get repeated, file edits collide. hcom connects them. +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. -``` -pip install hcom -hcom claude -hcom gemini -hcom codex -hcom opencode -hcom # TUI dashboard +```bash +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 +## what humans can do -Tell any agent: +tell any agent: > send a message to claude @@ -36,104 +33,270 @@ Tell any agent: --- -## What agents can do +## what agents can do -- Message each other (@mentions, intents, threads, broadcast) -- Read each other's transcripts (ranges, detail levels) -- View agent terminal screens, inject text/enter for approvals -- Query event history (file edits, commands, status, lifecycle) -- Subscribe and react to each other's activity in real-time -- Spawn, fork, resume, kill agents in new terminal panes -- Build context bundles (files, transcript, events) for handoffs -- Collision detection — 2 agents edit same file within 20s, both notified -- Cross-device — connect agents across machines via MQTT relay +| 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 | --- -## Setup +## essential commands (quick reference) + +### launch agents +```bash +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 +```bash +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) +```bash +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 +```bash +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 +```bash +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) +```bash +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 +``` -If the user invokes this skill without arguments: +--- -1. Run `hcom status` — if "command not found", run `pip install hcom` first -2. Tell user to run `hcom claude` or `hcom gemini` or `hcom codex` or `hcom opencode` in a new terminal (auto installs hooks on first run) +## tool support -| Status Output | Meaning | Action | -|--------|---------|--------| -| command not found | hcom not installed | `pip install hcom` | -| `[~] claude` | Tool exists, hooks not installed | `hcom hooks add` then restart tool (or just `hcom claude`) | -| `[✓] claude` | Hooks installed | Ready — use `hcom claude` or `hcom start` | -| `[✗] claude` | Tool not found | Install the AI tool first | +| 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 | -After adding hooks or installing hcom you must restart the current AI tool for hcom to activate. +**codex note:** session binding takes 5-10s. always wait before sending messages: +```bash +hcom events --wait 30 --idle "$codex_name" +``` --- -## Tool Support +## setup + +if the user invokes this skill without arguments: -| Tool | Message Delivery | -|------|------------------| -| Claude Code (incl. subagents) | automatic | -| Gemini CLI | automatic | -| Codex | automatic | -| OpenCode | automatic | -| Any AI tool | manual - via `hcom start` | +1. run `hcom status` — if "command not found", install first: + ```bash + 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 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 +## troubleshooting ### "hcom not working" ```bash -hcom status # Check installation -hcom hooks status # Check hooks specifically -hcom daemon status -hcom relay status +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. +hooks missing? `hcom hooks add` then restart tool. -**Still broken?** +still broken? ```bash hcom reset all && hcom hooks add -# Close all claude/codex/gemini/opencode/hcom windows -hcom claude # Fresh start +# close all ai tool windows +hcom claude # fresh start ``` ### "messages not arriving" -1. **Check recipient:** `hcom list` — are they `listening` or `active`? -2. **Check message sent:** `hcom events --sql "type='message'" --last 5` -3. **Recipient shows `[claude*]`?** Restart the AI tool +| 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` | -### Sandbox / Permission Issues +### 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 ```bash -export HCOM_DIR="$PWD/.hcom" # Project-local mode -hcom hooks add # Installs to project dir +export HCOM_DIR="$PWD/.hcom" # project-local mode +hcom hooks add # installs to project dir ``` --- -## Files +## scripting patterns (tested with real agents) -| What | Location | +### basic two-agent messaging +```bash +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: \". 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 +```bash +# 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 +```bash +# 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 +```bash +# 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/) + +```bash +#!/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 + +| what | location | |------|----------| -| Database | `~/.hcom/hcom.db` | -| Config | `~/.hcom/config.toml` | -| Logs | `~/.hcom/.tmp/logs/hcom.log` | +| 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 -With `HCOM_DIR` set, uses that path instead of `~/.hcom`. +| 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 +## more info ```bash -hcom --help # All commands -hcom --help # Command details -hcom run docs # Full CLI + config + API reference +hcom --help # all commands +hcom --help # command details +hcom run docs # full CLI + config + API reference ``` -GitHub: https://github.com/aannoo/hcom +github: https://github.com/aannoo/hcom diff --git a/skills/hcom-agent-messaging/references/cli-reference.md b/skills/hcom-agent-messaging/references/cli-reference.md new file mode 100644 index 0000000..9b0e91f --- /dev/null +++ b/skills/hcom-agent-messaging/references/cli-reference.md @@ -0,0 +1,384 @@ +# hcom CLI Command Reference + +Complete reference for all hcom commands, flags, and usage patterns. + +## Global Flags + +These flags can be used with any command: + +| Flag | Description | +|------|-------------| +| `--name ` | Specify identity (instance name, tag-name, or agent_id) | +| `--go` | Skip confirmation prompts (required in scripts) | +| `--help` | Show help for command | + +## Launching Agents + +### `hcom [count] [flags]` + +Launch one or more AI coding agents. + +**Tools:** `claude`, `codex`, `gemini`, `opencode` + +| Flag | Description | Default | +|------|-------------|---------| +| `--tag ` | Group tag for routing (`@tag-` prefix) | none | +| `--headless` | Run as detached background process | false | +| `--go` | Skip confirmation prompt | false | +| `--hcom-prompt ` | Initial task/prompt for the agent | none | +| `--hcom-system-prompt ` | System prompt (personality/role) | none | +| `--terminal ` | Terminal preset (tmux, kitty, wezterm, here, etc.) | auto-detect | +| `--batch-id ` | Group related launches for coordinated init | none | + +**Tool-specific flags (forwarded):** +- Claude: `--model`, `--system-prompt`, `--resume`, `--fork-session`, `-p` (print/headless), `--verbose`, `--continue`, `--ide` +- Codex: `--model`, `-c` (config), `--sandbox`, `--full-auto`, `--add-dir`, `exec`, `resume`, `fork` +- Gemini: `--model`, `-r`/`--resume`, `--yolo`, `--sandbox`, `-e`/`--extensions` +- OpenCode: standard flags + +**Examples:** +```bash +hcom 1 claude --tag worker --go --headless --hcom-prompt "Do X" +hcom 3 claude --tag team --go --headless --hcom-prompt "Answer question" +hcom 1 codex --tag eng --go --headless --hcom-prompt "Implement spec" +hcom claude # Interactive Claude in new terminal +hcom codex --terminal tmux # Codex in tmux split +``` + +**Output:** +``` +Names: luna # Single agent +Names: luna nemo bali # Batch launch (space-separated) +``` + +## Messaging + +### `hcom send [@target...] [flags] -- ` + +Send a message to one or more agents. + +| Flag | Description | +|------|-------------| +| `@name` | Direct target (agent name) | +| `@tag-` | All agents with this tag prefix | +| `@name:DEVICE` | Remote agent on specific device | +| `--intent ` | request, inform, or ack | +| `--thread ` | Thread for conversation isolation | +| `--reply-to ` | Reference a specific event | +| `--from ` | Send as external identity (not an agent) | +| `--file ` | Send file content as message | +| `--base64 ` | Send base64-encoded content | +| `--stdin` | Read message from stdin | + +**Message delimiters:** Use `--` before message text to prevent flag parsing: +```bash +hcom send @luna -- "this is the message" +hcom send @luna --intent request -- "review this code" +``` + +**Examples:** +```bash +hcom send @worker- --thread review-1 --intent request -- "please review" +hcom send @luna @nova -- "sync up" +hcom send -- "broadcast to all" +hcom send @luna --from "github-ci" -- "PR merged" +cat report.md | hcom send @reviewer --stdin +hcom send @luna --file /tmp/output.log +``` + +## Listing Agents + +### `hcom list [flags]` + +Show active, stopped, and remote agents. + +| Flag | Description | +|------|-------------| +| `-v` | Verbose output (includes timestamps, PIDs, directories) | +| `--json` | JSON output | +| `--names` | Names only (space-separated) | +| `--format