herdrm README

The project's README from github.com/missuo/herdrm. As one markdown file: README.md.

herdrm — every coding agent, every machine, one native terminal

The native macOS console for herdr — see Claude Code, Codex, Gemini, Grok and OpenCode across your Mac and every SSH box you own, and jump into any one of them at full-TUI fidelity.

Latest release macOS 14+ Downloads Status: early stage PRs welcome

What it does · Why herdrm? · Install · Quick Start · Architecture


herdrm — device switcher and a live claude terminal

✨ What it does

herdr is the runtime your coding agents live on — a background server that owns their terminals and knows which one is working, blocked, or done. herdrm is a native macOS window on top of it, and it's grown well past "attach to a terminal":

🖥️ Every device Local + remote over SSH — keys, Tailscale, or a Keychain password — with auto-reconnect
🧭 Live status Spaces, Agents & Terminals across every connected device
⌨️ Real terminal Full PTY attach, not a chat wrapper — native selection, legible fonts, resilient sessions
📎 Paste anything Files and images land straight in the agent's pane, locally or over SSH
📁 Move files Browse Local + SSH files side by side and copy in either direction
🔔 Notifications A system alert the moment an agent needs you — click it to jump right there
🔍 ⌘K search Every agent, on every device, one keystroke away
See the full feature list

Every machine, one sidebar

  • All your devices, in parallel — remote sockets forwarded over ssh -L, each on its own reconnect loop (1s → 30s backoff). The sidebar aggregates every device with a tinted OS badge; the bottom-left switcher filters by device.
  • Flexible SSH targets — user@host, user@host:port, ssh:// URIs, and ~/.ssh/config aliases. Auth falls back OpenSSH keys/agent → Tailscale SSH (1.98.0+) → an in-app password prompt stored in the macOS login Keychain, never in a file.
  • Diagnosable failures — "herdr isn't running on <host>", a misconfigured AllowStreamLocalForwarding, or why a disconnected device is unreachable — never a bare "not connected".

Spaces, Agents & Terminals, always current

  • Spaces, Agents & Terminals sidebar — every workspace, coding agent (claude, codex, gemini, grok, opencode, …), and ordinary Herdr shell pane, across local and SSH devices.
  • New Agent / New Terminal / New Space — New Terminal creates a persistent shell tab in any device and space. Locally the agent picker only lists advertised CLIs found on the login-shell PATH (captured once from a real interactive + login shell, not by grepping rc files or trusting LaunchServices); SSH devices follow the remote server's manifest catalog and validate on start. Each agent's bypass-permissions flag is on by default. ⌘N for a new agent, ⌘T for a new terminal, ⇧⌘N for a new space. New Space includes an inline directory browser that works over SSH. Settings → Agents accepts a per-kind binary path when detection is wrong.
  • Spaces rename straight from the sidebar's context menu.

A real terminal, not a chat wrapper

  • Live terminal — attaches directly to an agent or shell PTY (herdr agent attach / herdr terminal attach); grabs keyboard focus the moment you jump in from ⌘K, the sidebar, or a notification.
  • Standalone terminals — open a local login shell or choose any configured SSH device; remote shells reuse the same OpenSSH config, agent, host-key, and Keychain password flow.
  • Native text selection — drag to select, no Shift needed; right-click for Copy/Paste/Select All plus link actions (⌘-click opens a URL).
  • Legibility controls — Thin strokes, font Weight, and Line spacing settings.
  • Shift+Enter inserts a line break instead of submitting; colors adapt correctly in Light mode instead of washing out.
  • Resilient sessions — a dropped connection or a takeover shows a Reconnect button instead of freezing on the last frame; mixed-version herdr binaries no longer break attach.

Files, search, and staying in the loop

  • Two-pane file manager — browse Local and any configured SSH device side by side, then upload or download regular files with progress, cancellation, and explicit Replace / Keep Both conflict handling. Transfers use the same OpenSSH config, agent, host-key, and Keychain password flow as terminals.
  • Paste files and images into Claude Code, Codex, Copilot, Cursor, Gemini, Grok, OpenCode, or pi. Local pastes forward as Ctrl+V so the agent reads the clipboard itself; remote pastes stream over SSH into a self-pruning cache (7-day retention, 50 MB cap) and paste the path.
  • Search — ⌘K across every device, ordered by urgency, scrolling to follow your selection.
  • Notifications — a sound and a system alert when any agent finishes or needs input; clicking jumps straight to it. Agents you're already watching stay quiet.

Built like a native Mac app

  • Universal binary — Apple Silicon and Intel, one download.
  • Light & dark, auto-updates via Sparkle, signed and notarized.
  • HerdrKit — the socket-RPC/SSH/device layer ships as its own, independently testable Swift package (Packages/HerdrKit).

🤔 Why herdrm?

You already run agents through herdr because the model is right — spaces, live status, real PTYs, not a chat window pretending to be one. But living in herdr attach and a wall of terminal panes is its own skill, and not everyone wants to be a tmux person to get the benefit. herdrm is the same model, built for people who'd rather click:

📋 Requirements

📦 Install

Homebrew

brew install owo-network/brew/herdrm

Manual — download herdrm-x.y.z.zip from Releases, unzip, drag herdrm.app into /Applications. Either way it self-updates from then on — HerdrM → Check for Updates…, or HerdrM → About HerdrM for the version you're running.

⚡ Quick Start

1. Launch herdrm            → no local herdr running? herdrm starts it for you
2. Add a device (optional)  → you@dev-box · you@dev-box:2222 · a Tailscale machine
3. ⌘N                       → pick a device + a CLI, you're attached to its live terminal
4. ⌘K                       → jump to any agent on any device, any time

🏗️ Architecture

flowchart LR
    A(["🖥️ herdr<br/>background server, owns the PTYs"]) -->|"Unix-socket RPC +<br/>herdr agent attach"| B[["Packages/HerdrKit<br/>RPC client · SSH tunnel · device store"]]
    B -->|SwiftUI bindings| C(["Sources/HerdrM<br/>sidebar · terminal · search · notifications"])
    style A fill:#161b22,stroke:#E2795B,color:#e6edf3
    style B fill:#1f2630,stroke:#3B82F6,color:#e6edf3
    style C fill:#161b22,stroke:#2FA35F,color:#e6edf3

🔨 Build from source

brew install xcodegen
make build   # xcodegen + xcodebuild → build/Build/Products/Debug/herdrm.app
make run
make kit-test  # HerdrKit integration tests (needs a running local herdr)

🤝 Contributing

Early-stage software, PRs genuinely welcome — small and single-purpose lands fastest.

🙏 Credits

📄 License

PolyForm Noncommercial 1.0.0 — free to use, modify, and share for any noncommercial purpose. Commercial use requires a separate license from the maintainer. Contributions are accepted under the same terms.

⚠️ Status

Early stage, without full test coverage — expect bugs. Issues and PRs are very welcome.

⭐ Star History

Star History Chart for missuo/herdrm

herdrm (missuo/herdrm)

Searching Database…

761 ·GitHub
这是什么?herdrm 是一个原生 macOS 控制台应用,构建在 herdr 之上(herdr 是一个掌管你编码智能体终端的后台守护进程),让你通过一个侧边栏查看实时状态,并接入本地和远程(SSH)设备上的任意智能体或 shell 终端。
这是 GUI 应用,还是像 tmux 那样的终端复用器?它是一个完全原生的 SwiftUI macOS 应用,不是 Electron 套壳,也不是聊天界面 —— 它通过可点击的侧边栏提供真实的 PTY 终端,而不需要 tmux 式的键盘导航。
怎么安装 herdrm?通过 Homebrew 安装,或者从 Releases 页面下载 herdrm-x.y.z.zip,解压后把 herdrm.app 拖入 /Applications。之后它会通过 Sparkle 自动更新。
我需要单独安装 herdr 吗?需要 —— herdr 本身必须安装在本地(如果它没有运行,herdrm 会自动启动它),也要安装在你想要连接的任何远程机器上。远程设备需要 OpenSSH 访问、Tailscale SSH 1.98.0+ 或存储在钥匙串中的密码。
herdrm 稳定到可以日常使用了吗?它明确处于早期阶段,没有完整的测试覆盖,因此出现 bug 属于预期之内;目前还没有 CI 门禁,贡献者被要求手动运行 make build 和 make kit-test。
它在 Intel Mac 上能用吗,还是只支持 Apple Silicon?它以通用二进制(universal binary)发布,要求 macOS 14 或更高版本,因此在 Apple Silicon 和 Intel Mac 上都能运行。
远程设备的 SSH 密码存储在哪里?当基于密钥的身份验证不可用时,herdrm 会退回到应用内密码输入框,其值存储在 macOS 登录钥匙串(Keychain)中,绝不会写入文件。
我可以免费使用 herdrm 吗,包括商业用途?它采用 PolyForm Noncommercial 1.0.0 许可:任何非商业目的都可免费使用、修改和分享,但商业使用需要向维护者获取单独许可。
herdrm 可以接入哪些编码智能体?它会列出在登录 shell 的 PATH 中发现的已登记 CLI,包括 claude、codex、gemini、grok、opencode 和 pi,另外还有作为「普通 Herdr shell 窗格」的纯 shell 终端。
我可以在 Mac 和远程 SSH 主机之间移动文件吗?可以 —— 一个双窗格文件管理器可以并排浏览本地和任何已配置的 SSH 设备,支持上传/下载、进度显示、取消操作,以及明确的「替换/两者保留」冲突处理。
为什么要用 herdrm,而不是直接通过 SSH 用 tmux 接入?你可以通过一个带通知和 Cmd+K 搜索的原生可点击侧边栏获得同样的 herdr 模型(空间、实时状态、真实 PTY),不必一直待在终端复用器里也能跨机器跟踪多个智能体。
HerdrKit 是什么?HerdrKit 是 socket-RPC/SSH/设备传输与领域层,作为独立可测试的 Swift 包发布,与 SwiftUI 界面代码分开。
Creator
missuo
Size
44.6 MB
Stars
761
Age
1mo
Commits · 90 Days