codename-11/hermes-relay/hermes-relay-self-setup
Claude Code and agent skill by codename-11/hermes-relay
- community
Checking that the SKILL.md file is still in the repository.
Install, verify, update, troubleshoot, or uninstall the Hermes-Relay plugin and Android pairing pipeline. Self-contained setup recipe for AI agents helping a user get Hermes-Relay running end-to-end.
Install
npx vskill@latest install codename-11/hermes-relay/hermes-relay-self-setupSKILL.md
Hermes-Relay Self-Setup
Hermes-Relay is a native Android client for the Hermes AI agent platform. It ships a Python plugin (relay server + tools + skills) that runs alongside hermes-agent on the host, plus a Kotlin Compose Android app that talks to it. This skill is the canonical, agent-readable setup recipe — it covers fresh installs, updates, verification, pairing, troubleshooting, and uninstallation.
When to Use
Invoke this skill when any of the following happens:
- User runs the
/hermes-relay-self-setupslash command. - User asks to "install Hermes-Relay", "set up the Android app", "update Hermes-Relay", "fix my Hermes-Relay install", or anything equivalent.
- User reports any of: missing
hermes-pair/hermes-statusshims, missingandroid_*tools, "Bridge is disabled" 403s,phone_connected: falsefrom the relay, stale plugin tools after agit pull. - User pasted the "For AI Agents" copy-paste block from the Hermes-Relay README or docs site and asked you to follow it.
Do NOT use this skill to write feature code or modify the plugin source. This is a setup/maintenance skill, not a development one.
Prerequisites
- hermes-agent already installed at
~/.hermes/hermes-agent/. Verify with:
``bash ls ~/.hermes/hermes-agent/venv/bin/python `` If that file doesn't exist, stop and ask the user to install hermes-agent first — you cannot install hermes-relay without it. Hermes-Relay is a plugin, not a standalone product.
- Linux or macOS host. The relay's terminal channel uses a real PTY, which is POSIX-only. Windows hosts can run chat/bridge but the terminal tab won't work.
- Internet access to fetch the install script from GitHub. The one-liner installer pulls from
raw.githubusercontent.com.
Procedure
A. Fresh install (or repair)
The canonical install command is idempotent — safe to re-run on any existing install. It pulls the latest main, refreshes the editable pip install, recreates the shell shims, re-registers the skills directory, restarts the relay service, and prompts before restarting hermes-gateway.
Confirm before running if the user has active chat sessions — the optional gateway restart will interrupt them for ~2 seconds. The installer prompts for the gateway restart by default; you do not need to opt in unless the user added new plugin tools and wants them re-imported immediately.
To opt into the gateway restart automatically (for scripted runs):
To skip it entirely:
B. Update an existing install
Same command. The installer is idempotent — it detects an existing clone, fast-forwards it from main, and re-runs every step. Do not suggest manual git pull + pip install -e + shim recreation; the one-liner does all of that more reliably.
C. Verify the install
After install completes, run these checks in order. Stop and report if any fail.
- Relay health endpoint (unauthenticated, fastest signal):
``bash curl -s http://localhost:8767/health ` Expect: 200 OK with a JSON body containing "status": "ok" and a non-blank "version"`.
- Status endpoint (loopback only, expects no phone yet on a fresh install):
``bash curl -s http://localhost:8767/bridge/status ` Expect: 503 + {"phone_connected": false, "error": "no phone connected"}` until a phone has paired and pushed a status envelope.
- Shell shims installed:
``bash command -v hermes-pair && command -v hermes-status ` Expect: both resolve to ~/.local/bin/`.
- Plugin loaded by hermes-agent:
``bash ~/.hermes/hermes-agent/venv/bin/python -c "import plugin.pair; import plugin.status; print('plugin OK')" ` Expect: plugin OK with no ModuleNotFoundError`.
- Systemd service running (if installed as a user service):
``bash systemctl --user is-active hermes-relay.service ` Expect: active`.
If any check fails, jump to the relevant entry in the Troubleshooting section below.
D. Pair the phone
Once the install verifies green, pair the user's Android device:
Or, from any Hermes chat session:
Both invoke the hermes-relay-pair skill which generates a single QR code that configures both the chat (API server) and bridge/terminal (relay) channels. Tell the user to open the Hermes-Relay Android app → Settings → Connection → Scan Pairing QR (or the Connect page during onboarding).
If you can't scan a QR
If the user is SSH'd in from the same phone they want to pair, the host has no display attached, or there's otherwise no second camera-equipped device available, fall back to the manual code flow instead of the QR:
- Have the user open the Hermes-Relay app →
Settings→Connection→Manual pairing code (fallback). The card displays a locally-generated 6-char code (A-Z / 0-9). Ask them to read it back. - On the host, run:
``bash hermes-pair --register-code ABCD12 ` Replace ABCD12 with the code from the phone. The command pre-registers it with the relay over the same loopback /pairing/register endpoint the QR flow uses and prints a confirmation block. Same TTL / grants flags compose: hermes-pair --register-code ABCD12 --ttl 30d --grants chat:never,bridge:7d`.
- Tell the user to tap Connect in that same Manual pairing code card. The relay accepts the code, the phone is paired.
The full procedure lives in the hermes-relay-pair skill under "Manual fallback (--register-code)" — defer to that for the canonical recipe.
After scan (or after manual --register-code + Connect), verify with:
Expect: phone_connected: yes with device name, battery, granted permissions, and safety state populated.
E. Update vs. fresh install — same command
Both are the same one-liner. The user does not need to know which mode they're in; the installer figures it out.
F. Uninstall
Or, if the clone is gone:
The uninstaller is idempotent and never touches shared state (~/.hermes/.env, state.db, the hermes-agent venv core). Useful flags:
--dry-run— preview without changing anything--keep-clone— leave the git tree in place for later--remove-secret— also wipe the QR signing identity (only do this if explicitly requested)
Troubleshooting
hermes-agent not found at ~/.hermes/hermes-agent
The user hasn't installed hermes-agent yet. Hermes-Relay is a plugin — it requires hermes-agent as a host. Direct them to the upstream installer at <https://github.com/NousResearch/hermes-agent> (or the user's preferred fork) and stop until they confirm it's installed.
pip install -e ... failed
Either the venv Python is broken or the venv is missing build tools. Try:
Surface any error to the user — do not try to "fix" venv internals.
hermes-status says phone_connected: false after pairing
The relay's status cache is wiped on every restart (in-memory only). The phone re-pushes its status envelope every 30 seconds. Either wait, or have the user toggle Bridge off + on in the Android app — that triggers an immediate pushNow().
Bridge commands return 403 "Bridge is disabled"
The user has the bridge master toggle off. They need to open the Hermes-Relay app → Bridge tab → flip "Allow Agent Control" on. This is a deliberate gate; do not bypass it.
android_phone_status tool not found by the agent
hermes-gateway hasn't re-imported the plugin since git pull. Restart it:
Or re-run the installer with HERMES_RELAY_RESTART_GATEWAY=1 to do this automatically.
Pairing rate-limited
The relay clears all rate-limit blocks on /pairing/register. Re-run hermes-pair and the previous block lifts.
Relay won't start as a systemd service
Check the journal:
Most common cause: another python -m plugin.relay instance is holding port 8767. Fix:
phone_connected: false plus last_seen_seconds_ago: null
No phone has ever pushed a status envelope to this relay process. This is the normal pre-pairing state — pair a phone first.
Phone is paired but the agent's android_* tool calls fail
Check that the bridge is enabled AND the relevant permission is granted. Use hermes-status to see what's actually granted. If screen_capture_granted is false, the user needs to tap the Screen Capture row in the Bridge tab to launch the system consent dialog. If accessibility_granted is false, they need to enable Hermes-Bridge in Android Settings → Accessibility.
Verification (final)
After install + pair, confirm all of the following before declaring the setup complete:
curl -s http://localhost:8767/healthreturns200+ valid JSONhermes-statusreturnsphone_connected: yeswith the user's device name- The user can send a test chat message from the Android app and receive a streaming response
- The agent can successfully call
android_phone_status()from a Hermes chat and receive a structured payload (this verifies the gateway has re-imported the plugin tools)
If all four pass, the install is healthy. If any fail, return to the matching Troubleshooting entry.
Safety
- Always confirm before running install commands. Do not run them silently.
- Never restart `hermes-gateway` without asking. It interrupts active chat sessions.
- Do not modify `~/.hermes/.env` or
~/.hermes/config.yamloutside what the installer does. Those are user-owned config. - Do not bypass the bridge master toggle, the destructive-verb confirmation modal, or the blocklist. Those are deliberate safety features.
- Do not push to origin for the user. Updates go through the installer; code changes go through their own workflow.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/devops/hermes-relay-self-setup/SKILL.md
Popularity
- Repository stars
- 197
- Repository forks
- 44
- 7-day trend score
- 26
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/codename-11/hermes-relay/hermes-relay-self-setup)