Skip to content

Repository files navigation

AgentSlate app icon

AgentSlate

Your Herdr agents, within thumb's reach.

An iPhone remote keypad for supervising coding agents running in Herdr on your Mac.

Join the TestFlight beta

Note

TestFlight build 0.2.0 (5) is awaiting Apple Beta App Review. The public link still offers the previously approved 0.1.0 beta; the new dictation release will appear there after Apple approves it.

AgentSlate offline demo showing five coding agents and the remote keypad

See every agent at a glance, switch targets, and respond with tactile controls.

Warning

AgentSlate is beta software. Use it only with agents you can see, and review every permission prompt on the Mac before accepting it from the phone.

Why AgentSlate

AgentSlate is for the moment when your coding agents are already visible on a monitor, but the keyboard is out of reach. Instead of opening a full remote desktop or terminal client, tap the agent you are watching and send the next key, approval shortcut, or short instruction from your iPhone.

The terminal stays on the Mac. The phone shows agent status and acts as the control surface.

Highlights

  • Live agent dashboard — see Herdr sessions, workspaces, and agent states, with blocked agents brought forward.
  • Focused remote controls — send arrows, Enter, Escape, Tab, Shift+Tab, Space, or short text to the selected agent.
  • Watched-screen actions — use Accept and Deny shortcuts only when a supported agent is visibly blocked.
  • Choose your voice pipeline — use Apple's on-device transcription by default, OpenRouter-routed Whisper for recorded speech, or Soniox v5 for live transcription, with optional cleanup and automatic Apple fallback.
  • Direct and private — connect over Tailscale with a single-use pairing code and a revocable per-device credential.
  • Offline Demo Mode — explore the complete keypad with fixed sample agents and no bridge connection.

AgentSlate does not stream terminal output, provide a general shell API, use analytics, or require a cloud account. Optional cloud dictation uses provider API keys that you supply—OpenRouter for Whisper and cleanup, and Soniox for real-time transcription—and stores them in the iOS Keychain. It can still type into a terminal, so treat every key as if you pressed it on the Mac.

How it works

  1. The Rust bridge discovers the Herdr sessions and agents running on your Mac.
  2. The iPhone pairs directly with the bridge over your private Tailscale network.
  3. Tapping an agent focuses its existing Herdr pane.
  4. Key presses, approval shortcuts, and dictated text go only to the selected agent.

Voice input defaults to Apple's on-device speech recognition. Settings also offers user-funded OpenRouter Whisper and Soniox v5 Real-Time engines with separate API keys stored in Keychain. Soniox shows provisional text while you speak; both cloud engines can optionally pass the finished transcript through OpenRouter cleanup. If cloud transcription fails, the app retries the protected temporary recording with Apple's on-device speech framework. If Soniox finalization and Apple fallback both fail after live text arrived, the app puts that latest live transcript in the review editor and never sends it automatically. If cleanup fails or is disabled, it uses the raw transcript.

Requirements

To build and explore AgentSlate:

  • A Mac running a version of macOS supported by Xcode 26
  • Xcode 26 or newer
  • An iPhone running iOS 26 or newer, or an iOS 26 simulator
  • An Apple ID selected as the Xcode development team when installing on a physical iPhone

For live Herdr control, you also need:

  • Herdr 0.8.0 or newer on the Mac
  • Tailscale on the Mac and iPhone, signed into the same private network

To update an older Herdr installation while preserving running sessions, run herdr update --handoff from a terminal outside Herdr.

Try it

1. Start the Mac bridge

brew install DanielOu1208/agentslate/agentslate
agentslate doctor
brew services start agentslate

AgentSlate listens only on loopback or Tailscale addresses. It does not offer a public or general-LAN listening mode.

2. Run the iPhone app

Open ios/AgentSlate.xcodeproj in Xcode, select an iPhone running iOS 26 or newer, and run the AgentSlate scheme. For a physical iPhone, select your Apple Development team so Xcode can sign and install the app.

3. Pair the iPhone

With the bridge running, create a pairing code:

agentslate pair

In the iPhone app, enter the Mac's Tailscale IPv4 address and the six-digit code. You can find the address with tailscale ip -4; AgentSlate uses port 8765 automatically.

AgentSlate setup screen with Tailscale host, pairing code, and offline demo options

The code expires after ten minutes, works once, and locks after five failed attempts. A successful pairing creates a separate device credential for that iPhone.

Manage paired phones with:

agentslate devices list
agentslate devices revoke DEVICE_ID

Use Forget Bridge in the iPhone app to revoke that phone and remove its local credentials. If the Mac is offline, AgentSlate clears the phone and explains how to revoke the remaining Mac record later.

Offline preview

After running the app from Xcode, no Herdr or bridge setup is needed to explore the interface. Choose Start Offline Demo to use fixed sample agents; buttons respond locally but send nothing to a Mac.

Development

The repository has three small layers:

Path Purpose
src/ Rust bridge and command-line tool
swift-client/ Reusable Swift protocol client
ios/ Native SwiftUI iPhone app

Build the reusable Swift package:

swift build --package-path swift-client
swift test --package-path swift-client

Build and test the iPhone app with full Xcode:

xcodebuild test \
  -project ios/AgentSlate.xcodeproj \
  -scheme AgentSlate \
  -destination 'platform=iOS Simulator,name=iPhone 17 Pro Max,OS=latest'

Do not send test input to an agent doing valuable work. Live input acceptance should use a disposable Herdr pane.

Privacy, support, and security

Public support belongs in GitHub Issues. Report security problems privately through GitHub Security Advisories.

Project documents

Non-affiliation

AgentSlate is an independent project. It is not affiliated with, endorsed by, or sponsored by Herdr, Tailscale, Apple, or the makers of the coding agents whose names and marks appear in the app. Those names and marks belong to their respective owners.

This project is also unrelated to the existing pathupally/AgentSlate repository and Random Labs' Slate coding agent.

License

AgentSlate is available under the MIT License.

About

iPhone remote keypad for supervising Herdr coding agents over Tailscale.

Topics

Resources

Contributing

Security policy

Stars

21 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages