herdr-mobile-relay

Introduction: Approve and monitor Herdr agents remotely from your phone, a mobile web app for Android/iOS smartphones with push notifications, QR setup, and multi-computer relays.
More: Author   ReportBugs   
Tags:

check

Control agents from the Herdr TUI, herdr-app or herdr-core from your phone. Each Linux or macOS computer runs its own relay; the phone connects to them and merges every agent into one installable web app.

Current version: 0.25.1 · Changelog

[!IMPORTANT] Native Windows is not supported. WSL2 may work but is not tested.

[!WARNING] 0.20.0 replaces the shared relay key with per-device credentials and a new encrypted transport. It cannot be installed through the phone updater: upgrade the relay manually and pair every phone again.

Get started in two minutes

For the TUI relay: Herdr 0.7.5 or newer, Git, and curl. Herdr 0.9.0 is recommended for the complete live JSON inventory and workspace-management surface; the relay does not treat that recommendation as a new minimum.

The relay reports the installed Herdr client version separately from the running local server version and protocol. A server upgrade can enable or disable individual actions without changing the relay release.

herdr plugin install 0cv/herdr-mobile-relay

The setup menu opens automatically after installation and asks how your phone should reach this computer:

Choose a path:

  1. Cloudflare
  2. WebRTC
  3. Tailscale
  q. Exit, change nothing

Each path then lists only its own actions; b goes back.

On a computer that also runs herdr-app, the menu first asks whether the phone should control the Herdr TUI, herdr-app (core), or both, and shows each relay's status. Core setup →

To reopen the main setup menu later:

herdr plugin pane open \
  --plugin herdr-mobile-relay.events \
  --entrypoint setup \
  --placement zoomed \
  --focus

Open WebRTC → Community WebRTC Gateway. It is the recommended path: as fast to set up as the temporary tunnel, with stable relay connectivity and no Cloudflare account, domain, cloudflared, or tunnel configuration. If prompted, choose the installed Herdr app that should host the phone UI. The relay starts and prints a QR code.

Cloudflare → Temporary Cloudflare Tunnel is the fastest getting-started option for a one-computer trial. It installs any missing user-level tools with confirmation, starts the relay and bundled app, and prints a QR code.

If you already use Tailscale on your phone and computer, choose Tailscale → Always on Tailscale for private HTTPS inside your tailnet, without a Cloudflare account or gateway. Tailscale keeps the connection up in the background, so the app reconnects quickly (setup steps).

Scan the QR with your phone. A relay started in the pane stops with Ctrl-C; an installed background service keeps running.

The relay setup does not run sudo or need a Python, Node.js, or Go toolchain. Treat the QR and its setup link as secrets: they contain a one-use device invitation.

QUICKSTART.md has pairing detail and troubleshooting for all three paths.

Core compatibility — new in 0.25.0

Control herdr-app and herdr-core (hc) agents from your phone through a second relay, shown as <hostname> (core) beside the Herdr TUI relay. Tested with herdr-core 0.1.18 and herdr-app 0.1.13 (also 0.1.12).

  • Available: agents, status, screens, prompts, keys, secrets, start/stop/clear/restart, tab and workspace rename and reorder, and Resize Session.
  • Conversation supports Pi, Claude Code, Codex, Cursor, Omp, OpenCode, Hermes, Qoder, agy, Grok and Kimi, with the session setup described in the guide.
  • Cursor and Hermes need a newer Herdr core/app to report status; they appear once Herdr recognises them.
  • Not yet: colour, creating/closing workspaces and tabs, worktrees, or phone-driven updates.

If you use the Herdr TUI, the setup menu above sets up the TUI relay, the core relay, or both, and each QR says which computer it adds. Without the TUI, download install.sh from this repository at tag v0.25.1 and run sh install.sh 0.25.1; it downloads and verifies the release bundle and prints the command that opens the same menu. Core pairs over Tailscale or Cloudflare; see the core guide.

What you get

Agents Terminal Pairing
Agents grouped by workspace and worktree across computers Mobile terminal with Copy, Speak, attachments, and terminal keys One-use device invitation shown as a QR code
  • Monitor and control agents across several computers, grouped by status and Herdr workspace, with agents that need input pinned on top.
  • Answer approvals and structured plan questions from Codex, Claude Code, Hermes, Qoder, OpenCode, Oh My Pi, and Pi.
  • Send prompts, terminal keys, and slash commands, including discovered Cursor commands and skills; attach screenshots, photos, and documents in cancellable batches. Optionally discover live Pi extension commands, skills, and templates by enabling Settings → Pi Integration for that computer, then reloading Pi (CLI alternative).
  • Read and search native conversations for agents with a native history reader, including Hermes, OpenCode, Antigravity CLI, Grok, Oh My OpenCode plans and native Kimi Code journals. Kimi imports and human-engine-only histories use the Terminal fallback. Inspect workspace files, images, and Git diffs read-only.
  • Manage workspaces and Git worktrees; start, rename, clear, and stop agents.
  • Have the relay read responses aloud, even with the screen off.
  • Pair every phone as its own named device — controller or read-only reader — each with its own notification rules, and revoke any of them.

With Codex 0.160 or later, start Codex with codex --no-daemon in Herdr panes. Otherwise, Codex's shared background server runs Herdr's hooks outside the pane, and Codex's Conversation is missing or shows another pane's session. See docs/herdr-core.md for the zsh snippet.

New in 0.24.0: Connect through Tailscale. The setup menu groups Cloudflare, WebRTC and Tailscale; an open Conversation refreshes after a reconnect.

Full feature tour →

Mobile onboarding

https://github.com/user-attachments/assets/e52c4fd0-ef77-4852-bb43-078a7154eae8

The walkthrough follows setup from scanning the QR through the agent list, terminal controls, and notification settings.

Choosing how your phone connects

The setup menu starts with Cloudflare, WebRTC, and Tailscale. Select a path to see only its actions; use Back to choose another path.

Choice Needs Best for
Community gateway no account, domain, or tunnel configuration; an installed app origin the recommended stable, no-configuration relay path
Cloudflare tunnel nothing for a temporary URL; a Cloudflare account and domain for a permanent hostname the fastest one-computer trial or a permanent background service
Tailscale Serve Tailscale on phone and computer, in the same tailnet private HTTPS without Cloudflare or a gateway; fast reconnects
Your own gateway a small VPS dedicated bandwidth and control of the transport logs

All four use end-to-end relay encryption. On either gateway the phone and the computer then negotiate a direct peer-to-peer connection, leaving the gateway with the fallback; Cloudflare tunnel traffic stays on Cloudflare. Tailscale Serve is available only inside your tailnet. Set up Tailscale →.

Agents with a non-default config directory

The relay runs as a background service and does not see a pane's CLAUDE_CONFIG_DIR, PI_CODING_AGENT_DIR, or similar. If an agent's conversation shows as unavailable or a profile's slash commands are missing, point the relay at that profile with HERDR_*_CONFIG_DIRS: Agent directories →

Documentation

Page What is in it
QUICKSTART.md The fast path, start to paired phone
docs/mobile-app.md Every feature: agent list, terminal, devices, speech, notifications
docs/transports.md Cloudflare, Tailscale, gateways, direct WebRTC
docs/herdr-core.md A second relay for herdr-core (herdr-app) beside the TUI relay
docs/cloudflare-tunnel.md The stable tunnel wizard, DNS, and teardown
docs/gateway-self-hosting.md Deploying and operating a gateway
docs/agent-directories.md Agents that use a non-default config or profile directory
docs/slash-command-discovery.md Bounded slash-command discovery and incomplete-catalog guidance
docs/updates.md Verified releases, phone-driven upgrades, upgrading from 0.19.1
docs/security.md What is encrypted, device pairing, what an intermediary sees
docs/development.md Building, testing, and contributing

Security in one paragraph

Prompts, terminal output, uploads, and push details are encrypted end to end between the phone and the relay. Whatever carries the traffic — a Cloudflare tunnel, a gateway, or Tailscale Serve — observes connection metadata only, never plaintext; on the direct path no application data reaches it at all, though a gateway still answers address discovery. Paired credentials distinguish controller and reader devices, mutations default to controller-only, attachment references stay bound to the terminal and agent session that created them, and the app can require device verification before it reconnects. Details →

License

GNU Affero General Public License v3.0 or later.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest