Skip to content

Repository files navigation

Heeler logo

Heeler

A native iOS companion app for herdr — an agent-first terminal runtime.

CI License: AGPL v3 GitHub stars Swift iOS TestFlight

Join the beta on TestFlight

English | 简体中文


Heeler is an agent console: a native dashboard of every coding agent running on your machines, sorted by who needs you. Open an Agent to read and steer its live terminal, draft with the full iOS keyboard in a native Composer, and Send the complete message once — all over plain SSH.

Screenshots

Agent Console Live terminal Composer + tools keyboard
Agent Console on iPhone Agent's live terminal with Direct Input on iPhone Agent terminal with the tools keyboard on iPhone
Terminal Skills Live Activity
Plain Terminal with Text and Keys on iPhone Composer Skills suggestions on iPhone Lock-screen Live Activity tracking Agents on iPhone

Features

  • Console — every Agent on every machine in one status-sorted list (Blocked first), filterable by Host, updated live.
  • Attach — the Agent's real terminal rendered by libghostty: native scrollback, momentum touch scrolling that also drives full-screen TUIs, long-press selection, takeover of a stale terminal owner, and quietly collected web links to open later.
  • Composer — draft locally with the full iOS keyboard (autocorrect, IME, dictation), then Send once; the tools keyboard adds Agent control keys, Agent Skills, reusable Snippets, and terminal appearance.
  • Terminal — open a plain shell in the Agent's directory, with Text and Keys modes and one reused tab per Workspace.
  • Attachments — stage a photo or a file up to 64 MiB onto the Host over SFTP and insert its path into the draft.
  • QR pairing — scan a Pairing Code to add a machine; keys are generated on device, private keys stay in the Keychain, and the code pins the host key fingerprint.
  • Notifications + Live Activities — end-to-end encrypted pushes when an Agent goes Blocked or Done, and a lock-screen / Dynamic Island banner tracking Agents in real time; the relay can never read the content (PRIVACY.md).
  • Worktrees — start an Agent on a clean checkout of the workspace's repo.
  • Appearance — System, Light, or Dark; 30 terminal themes with separate Light and Dark slots; bundled JetBrains Mono and IBM Plex Mono; pinch to zoom.
  • Jump Host — reach unroutable machines through an SSH jump, with keys verified at both hops.

How it connects

Heeler speaks herdr's JSON API over SSH: each request opens a direct-streamlocal channel onto herdr.sock, one long-lived channel carries the event stream, and interactive terminals run herdr agent attach --takeover on an SSH PTY. The only prerequisites are SSH access and a running herdr — no server changes, no extra packages. The SSH server must allow stream-local forwarding (the OpenSSH default); onboarding calls it out when it's disabled.

Unroutable machines can sit behind an SSH Jump Host:

Adding a machine

On the machine running herdr (Node >= 20, herdr >= 0.7.5, OpenSSH server on — macOS: System Settings > General > Sharing > Remote Login):

herdr plugin install ZingerLittleBee/Heeler/plugin --ref main --yes
herdr plugin action invoke heeler.pair

Scan the Pairing Code QR it shows and the machine is added as a Host — the code carries the addresses, the host key fingerprint, and SSH key enrollment. The same plugin delivers the encrypted notifications once you enable them for the Host in the app.

Stack

  • SwiftUI, iOS 18+, iPhone today (iPad planned)
  • The repository-local Packages/HeelerSSH (libssh2 + OpenSSL) for SSH
  • libghostty-spm for terminal emulation and Metal rendering

See docs/adr/ for why — the transport story in particular is not obvious.

Contributing

Issues and PRs are welcome — see CONTRIBUTING.md for layout, build/test, and conventions.

Status

Beta, on TestFlight. Built for personal use first and shaped by daily driving, so expect rough edges and fast iteration. Not affiliated with the herdr project.

About

Native iOS agent console for herdr — watch and drive the coding agents on your machines over SSH, with a real libghostty terminal, QR pairing, and push notifications when an agent needs you

Topics

Resources

Contributing

Stars

175 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages