Skip to content
ColliePWA

Your terminal agents, on your phone.

ColliePWA is a Herdr mobile app for iOS and Android. It also drives the new Herdr app, tmux and zellij. It displays your agent panes on your phone. See who is waiting, read the chat or the screen, and reply from anywhere, by typing or by voice.

  • Multiplexer backend:
  • Herdr
  • Herdr core
  • tmux
  • Zellij

Herdr is the primary backend. The new Herdr app works through its core, herdr-core, without rename and focus for now. tmux and zellij support is experimental. Details in Terminals

$ curl -fsSL https://colliepwa.dev/install.sh | sh

Open source, MIT license. Runs as a self-hosted single-user binary. Tailscale or custom ingress.

Static interface capture with mock sessions. The demo interface is non-interactive.

In short

What ColliePWA does.

See every agent at once.
View every pane in Herdr, the Herdr app, tmux or zellij in one list, grouped by workspace. Panes that need you sit on top.
Answer from your phone.
Read the agent's chat or its terminal, reply, send keystrokes or pick a plan option.
Speak instead of typing.
Dictate a reply. Whistle can turn speech into text on the phone itself, so the audio stays on it.
Know when to act.
Get a push notification when an agent asks a question, finishes, or its prompt cache is about to go cold.
Start agents from your phone.
Tap + New, pick the machine, the agent and the folder, then tap Start. A new branch can open in its own folder.
Run several machines as one crew.
The lead shows every machine's panes, load and disks. A deputy you named can take over if the lead goes down.
Let your agents message each other.
One agent session messages another on any machine in your crew. You can message any session from your phone.
Private by design.
Binds to loopback, needs a paired device for every request, and masks known secret shapes in pane text. The app sends no telemetry. No cloud intermediary.

On your phone

Is there an iPhone or Android app?

No app store app, on purpose. ColliePWA is a progressive web app (PWA): your own machine serves it, and your phone's browser installs it on the home screen.

  • Its own icon and full screen, like any app.
  • Push notifications when an agent waits on you. On iPhone they work from the home screen icon.
  • Updates arrive with your server. No store review, no account.

On your phone, ColliePWA lives on the home screen. This is how you put it there:

Open the page in Safari and tap ⋯ next to the address. If Share sits on the bar, tap it instead.

See it

Watch it, then drive it.

Interactive demo.

This is the production ColliePWA client. Agents, terminals, and responses use mock data replayed locally in your browser. Nothing runs on a server and no network traffic is sent.

  1. 01Select the blocked agent at the top of the list.
  2. 02Read the conversation in Chat. Tap Screen for the raw terminal.
  3. 03Tap a response to resume execution.
  4. 04Select Keys to access modifiers and navigation: Esc, Tab, arrows, and Ctrl.
Open full-screen demo

The demo is not wired up in this build. Set VITE_DEMO_ORIGIN to the deployed demo, or read DEMO.md.

ColliePWA on GitHub

Read and answer

Read the agent. Answer in a tap.

while it works

Read the agent's conversation

Chat shows the agent's session, turn by turn: your messages, its replies and its thinking behind a fold, with each tool call folded into one line. It is the default view of an agent pane. If the bridge drops, the phone shows a read-only copy of recent turns.

Chat view of a Claude Code session: two files read, one edit, a test run, and the answer. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

on input required

Single-tap input responses

Interactive permission prompts render as discrete action buttons. Input is validated against current terminal state before dispatch to prevent desynced submissions.

Pane blocked awaiting user confirmation on a permission prompt. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

when you want the raw screen

The exact screen, one tap away

The terminal view shows the pane byte for byte, with ANSI color. Tap Screen below the reply box to open it, and tap again to return to Chat. You can set it as default in the pane menu.

The same pane in the terminal view: raw rows from the agent in ANSI color. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

Type less

Sent

Each machine saves the shell lines you send through ColliePWA. The strip above the box offers them again on shell panes. Lines that start with a space are not saved, and neither are lines that look like secrets. Agent prompts are never saved. The Suggestions from Sent switch in Settings, Device, turns the strip off on shell panes. COLLIE_SENT=off saves nothing on the machine.

Slash suggestions

Type / in an agent pane, or $ for Codex skills. The strip lists matching commands. A tap fills the box without sending.

Skills in the palette

In Claude Code panes, the Agent palette also lists skills and commands from your ~/.claude and project .claude folders. It also lists the skills and commands of installed plugins, with their plugin: prefix. It omits disabled plugins. Tap an item to fill the box without sending.

Web Push on state change

Optional Web Push delivers notifications when an agent blocks on input or finishes. Selecting a notification opens that agent. Transition filters and do-not-disturb periods are bridge-wide across every device. Requires HTTPS and collie push-keys.

Details in Voice input and Web Push

One New button, one New page

The + New button on the dashboard opens the New page. In a crew, select the machine first, choose Agent or Shell, then tap Start. Uninstalled agents appear greyed out with the reason in brackets. Under the Folder field, a Browse row steps through your home folder one level per tap. It marks each folder that is a repository. On Herdr, New worktree puts a new branch in its own folder. Every start uses an id, so dropped replies never create duplicate panes.

Details in Configure

The New page on a crew: host, Agent or Shell, folder and the New worktree switch. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

Mark up a photo before you send it

Pick or paste a photo and a preview opens. Attach sends the original. Edit opens Crop, Draw, Circle and Arrow, so you can point at the problem. The agent reads the marked photo from its path.

Details in Configure

Attach a photo and tap Edit. Circle the Pay button and draw an arrow. Tap Use this image, type, and Send. The agent sees your marks.

Files, diffs and line comments

See what an agent changed before you trust it. Files marks altered files in the workspace. Changes groups them by repository, filtered by path or status. Tap a file to view a mobile-friendly diff, or preview Markdown, JSON, HTML and images. Tap lines in a diff to leave a comment on each. Then bring all of them into your agent's draft at once. The view is read-only: git runs without hooks, filters or network access, and nothing edits, stages or commits.

The Changes view, open on a workspace with a member repo nested inside it and five changed files across both. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

Voice

Speak your reply. Whistle can make the words on your phone.

Tap the microphone in the reply box and speak. Whistle, a small speech model, turns your voice into text inside the phone's browser. With Whistle on the phone, the audio is never uploaded, and dictation works offline once the model is there.

A 16.9 MB model, no account, no key
Whistle is a model by Cactus Compute, under the Apache-2.0 licence. It knows English, German, French, Spanish, Italian, Dutch and Polish, and finds the language itself. A clip takes about a second on a recent phone. Chrome on Android is tested. Safari on an iPhone is not verified on a device yet.
One tap to set it up
Open Settings, Voice and tap Set up speech on this phone. Your host, the machine that runs ColliePWA, downloads the model once from Hugging Face. The phone copies it from the host, never from the internet. The tap needs a paired device, and the microphone needs HTTPS.
Or on your host, for an older phone
Choose On your host, and the phone sends each clip there. Whistle makes the words on the host, so the audio stays on your machines. This also works where a browser cannot run Whistle itself.
Hands-free voice
Once you have spoken, two seconds of quiet finish the clip. Hands-free is off by default. Turn it on, and the text is sent for you, through the same checks a typed reply goes through.

You can also use your own command, such as whisper-cli, any OpenAI-compatible endpoint, or your ChatGPT subscription through Codex. Nothing is on until you set it up.

Details in Voice input and Web Push

Settings, Voice, after the one tap: Whistle runs on this phone. ColliePWA running disconnected. Tap interactions are disabled without an active backend.

Themes

Four looks for the same app.

ColliePWA ships with four themes: Collie, Nightwatch, Daylight and Harbour. A theme carries colours, type, shape, look and a terminal palette. Every value is a closed word or a checked colour, and every theme has a light half and a dark half.

Collie

Typeface: Aldrich

The look you know: neutral greys, with Aldrich for the type.

Nightwatch

Typeface: IBM Plex Sans

flat · bold · strong · band · heavy

For the phone on call at night. A true black dark half, flat and square, with heavy lines, a dim amber accent and a dim amber band behind the header and the bars.

Terminal palette

Daylight

Typeface: Geist

Titles: Atkinson Hyperlegible Next

round · lifted · roomy · gradient · cards · sentence

For bright sun and low vision. Body text at AAA contrast, round roomy cards, a page that shifts toward the foot, and status colours that run from blue to orange, not from red to green.

Terminal palette

Harbour

Typeface: Atkinson Hyperlegible Next

Titles: Space Grotesk

soft · lifted · grain · thin

For people who come from the terminal. Cool blue-grey with one teal accent, soft corners, a fine grain and thin icons, and a Solarized-based terminal palette on a near-black blue.

Terminal palette

How themes work

Reach

How your phone reaches your agents.

A multiplexer keeps every agent running on your machine after you close the terminal or lose connection. ColliePWA puts those panes on your phone so you can check in and answer from anywhere.

your machinephoneTailscaleyour front door127.0.0.1 onlycollieherdr / tmux / zellijagentagentagentkeeps agents runninginternetnothinglistens here
Your phone comes in through one front door. Collie listens on 127.0.0.1 only.
Runs on what you have
Use a desktop, a home server, a spare mini PC, or a cloud VM. Any Linux or macOS machine that stays on can host your agents, and so can Windows 11 (experimental). No new hardware, no subscription.
The multiplexer holds the sessions
Herdr, the Herdr core, tmux or zellij owns each session instead of your terminal window. Agents keep working through dropped connections, closed terminals, and nights of sleep.
Set it up in five minutes

Tailscale, Herdr (the TUI or the new app) and ColliePWA on your computer, then your phone. One guide, five steps.

Protected by your front door.

ColliePWA listens only on loopback, so nothing on the network reaches it directly. Your phone comes in through one front door that you already trust. Pick the one you run.

  • Tailscale

    The default. collie start runs tailscale serve for you, with HTTPS on your tailnet name. Turn on HTTPS certificates in the Tailscale admin console once.

Other front doors
  • Cloudflare Tunnel

    A public hostname without an open port. Put a Cloudflare Access login in front of it, because the tunnel alone lets the whole internet in.

  • Nginx Proxy Manager

    A reverse proxy with a web UI and Let's Encrypt. It runs in Docker, so give the container host networking to reach loopback.

  • NetBird

    A WireGuard mesh, like a tailnet. Add a reverse proxy on the host for HTTPS, with a DNS challenge certificate for a private name.

  • Caddy

    A reverse proxy that gets and renews HTTPS certificates on its own. It is the shortest setup if you have your own domain.

  • Anything else

    Traefik, plain nginx, ZeroTier or any other proxy works. It must forward to 127.0.0.1 and serve HTTPS on one fixed hostname.

Push and voice need HTTPS
Browsers allow Web Push, the microphone and the home screen install only on a secure origin. Your front door must serve HTTPS with a certificate that your phone trusts. Over plain HTTP you can still read and reply in a browser tab, but those three stay off.

Set up each front door, step by step

What a paired phone can do

ColliePWA writes to your interactive terminal sessions with your current user permissions. A client that holds a pairing token can read terminal output and execute arbitrary commands.

Runs on the local agent host
Mirrors your local multiplexer sessions. Runs without cloud backends, remote servers, or external accounts.
Loopback-only binding
It binds to loopback and never to 0.0.0.0. Exactly one hardened front door is published: tailscale serve, or a reverse proxy you configure. Never funnel.
Paired devices only
Every request needs the token of a device you paired on the host, reads included. There are no user accounts. A paired device has full shell access.
Local system access boundary
Multiplexer unix domain sockets enforce local filesystem permissions. ColliePWA's TCP port is accessible to other local users. Enforce isolation using ingress filters and COLLIE_TRUSTED_USER.

MIT licensed source. Review the security note for detailed access controls and trust boundaries.

Crew

Many agents, many machines.

One lead, every machine

A crew runs ColliePWA on every machine. Your phone connects to all of them through the lead. A deputy you named can take over if the lead fails. The Machines screen charts CPU, memory, disks and network use over the last 24 hours.

Details in Crews

phoneleaddeputystandby doorarmed by thelead's silencespent by yourpairing credential
If the lead goes offline, the deputy's standby door opens for your phone.

Agents that message each other.

One agent session sends a short signed message to another, in any coding agent across your crew. You can message any session from your phone too. It is on by default. COLLIE_WALKY=off turns it off for one machine.

Three machines join one crew. An agent on desk messages an agent on laptop. The message waits while you type. Your phone shows the message card.
laptopmemberclaude$ collie walky send desk/w1:p2 "Tests pass."crew linkdeskleadcodex[walky-talky wt_k3f9x2m8q1a0]from agent laptop/w2:p1collie walky inbox wt_k3f9…phonesigned
One agent messages another through the lead, signed by the sending machine.
Agents message each other
One agent asks another to check a branch. The receiving agent reads the message as command output, never as your prompt. It replies with a command.
You message any session
Send messages from your phone to any session. Your text appears in full in the terminal. The phone displays a card and a receipt, and the Messages sheet lists what each pane sent and received. The Crew page can message all agents after you confirm the count.
Signed by the machine
The sending machine signs each message with its key. The lead checks that key, then signs the message again for the machine that receives it. The phone trusts only the bridge's own log, so agent output cannot pose as a message.
One skill, kept current
ColliePWA adds a short skill to the instruction files of every agent it finds. Each update, rollback or switch refreshes the skill with collie skill sync. Run collie skill uninstall to remove it from one agent.

The commands, the inbox, and how signing works.

More

Everything else it does.

Task list pill
A pill on the actions belt shows session progress, like "Tasks 3/5", from the session log. It works with Claude Code, Codex, OpenCode and Grok. A tap opens the list without sending.
Effort beside the model
The tag above the belt displays values like "Opus 5.5 · high". The word after the model shows the harness's effort level.
Stretchtext replies
Chat shows cc-stretch replies in short form. Tap a phrase to see the full text. It is off by default: enable it in Settings, Display.
Subagent transcripts
Tap a Claude subagent card to view its prompt, tool steps, and report in a bottom sheet. A background subagent card shows that it is running until its report arrives. An Agents pill beside Tasks lists running subagents with their model, task, and run time. Tap a subagent to open its transcript.
Prompt cache countdown
Each pane shows how long its prompt cache stays warm. An optional push notification warns you before a watched pane's cache goes cold.

Details in Configure

Stable or Edge
Each machine follows Stable or Edge, set in Settings, Updates. Stable takes final releases only. Edge also takes pre-release builds, published a few days before each final release. A crew follows its lead's line. Roll back returns to the stored build, and a rollback off an Edge build puts the machine back on Stable. On Stable with an Edge build ahead, choose Go back now or Wait for Stable.

Details in Manage & update

A Keys pad you arrange
Arrange the pad on a board, using wide and tall keys, chords, sequences of up to four steps, and five presets.

Details in Configure

Add your own agent or command from the phone
Create custom launchers from recipes on the phone. Launchers that bypass permission prompts show a No prompts badge.

Details in Configure

One-off commands
Run a single command from the New page. Sent saves the line, as it does on a shell pane.
Git worktrees and branches
On Herdr, the pane menu starts a second agent in a new worktree. Every pane displays its active branch.
Secrets are masked on the bridge
The bridge masks known secret formats, such as API keys, JWTs and PEM keys, before text reaches your phone. This is a mitigation, not a guarantee.

Details in Security

Twelve interface languages
Select a language in Settings. Translation applies only to the interface; agent terminal output remains byte-exact.

Details in Configure

Zen mode
An optional pane menu toggle hides all navigation bars and shows only the terminal.

Details in Configure

Full scrollback retention
ColliePWA streams complete agent session logs, preserving historical scrollback beyond the current terminal viewport.
Multi-session multiplexing
Exposes all configured Herdr sessions from a single gateway, and you switch between them in the web interface.

Durable agents

Your own agent, on your phone.

Built a long-running agent with Pi Durable or your own code? ColliePWA gives it approval prompts, history and a chat view, with no UI code of your own.

Experimental: the wire may change in any minor.

Connect a durable agent

MIT licensed. Come and contribute.

The source is on GitHub under the MIT license. Bug reports from Herdr core, tmux and zellij setups are welcome, including reports of setups that work.

Complete list from ColliePWA's README

Installation

Install via shell script or build from source.

ColliePWA runs next to your agents, on the machine that already has them. The script downloads a release for your platform and verifies it. Building from source needs git and Bun, and is the route for a machine the releases do not cover. Both end with collie on your PATH, and neither one starts anything.

What you need

ColliePWA serves one operator running multiple coding agents on one host. It does not replace your terminal.

A machine that stays on
Linux, macOS, or Windows 11 (experimental). Runs on desktops, home servers, mini PCs, or cloud VMs.
A multiplexer
Herdr is fully supported. The new Herdr app works through its core, herdr-core. tmux and zellij are experimental.
A coding agent
Claude Code, Codex, OpenCode, pi, Hermes Agent, or any agent running in a terminal pane. Cursor CLI support is provisional.
A front door
Requires private ingress. ColliePWA binds strictly to loopback interfaces. Tailscale is configured by default: collie start runs tailscale serve on your MagicDNS hostname. Custom reverse proxies, meshes, and SSH tunnels are documented in the deployment guide. Single-user architecture only.
$ curl -fsSL https://colliepwa.dev/install.sh | sh

A short POSIX sh installer. It skips sudo, starts no system services, and isolates files to ~/.local/share/collie and ~/.local/bin. It fetches the latest release, validates the published sha256 hash, writes the binary, and links it into ~/.local/bin. If that folder is not on your PATH, it prints the line to add. Requires curl, tar, and sha256 tools.

Served locally from this origin. Canonical source is located at scripts/install.sh in the repository. Inspect the script before running:

$ curl -fsSL https://raw.githubusercontent.com/AltanS/collie/main/scripts/install.sh | less
$ curl -fsSL https://raw.githubusercontent.com/AltanS/collie/main/scripts/install.sh | sh

Run collie update to fetch, verify, and switch to newer releases. Previous versions remain cached for collie update --rollback. Source builds update git revisions directly without release rollback targets.

Sourced from scripts/install.sh at 5cb4204, 2026-10-27.

Two steps left: start it, then pair your phone.

# name the multiplexer to mirror: herdr, herdr-core, tmux or zellij.
# start writes it to ~/.config/collie/.env, so a bare collie start
# is enough next time.
$ COLLIE_MUX=herdr collie start
# then pair your phone: it prints a code for Collie's Settings
$ collie pair

Configuration is optional and lives in ~/.config/collie/.env, the file start creates. Set COLLIE_TRUSTED_USER there, and the port or the front door if the defaults do not fit.

Open the URL on your phone over your tailnet, with the Tailscale app signed in. Add ColliePWA to the home screen, then pair it with the code that collie pair prints. See how to add it to the home screen

Prerequisites, build guides, and initial output

FAQ

Questions people ask.

Is ColliePWA free?

Yes. It is MIT licensed. There is no paid tier, no account and no cloud service behind it.

Can I try it before I install it?

Yes. The interactive demo runs the real app in your browser, with made-up agents and panes. Nothing is installed and nothing is sent to a server.

Do I need an app from the App Store or Google Play?

No. ColliePWA is a web app served by your own machine. Open its address on your phone and add it to your home screen. On Android, Chrome offers an Install button for that. On an iPhone or iPad, use Safari's share sheet.

Is there a Herdr mobile app for iOS or Android?

Yes. ColliePWA is a mobile client for Herdr on iOS and Android for both the Herdr TUI and the new Herdr app. Your own machine serves the web app. Open it in your mobile browser and add it to your home screen. There is nothing to install from an app store. You can also connect to Herdr through an SSH app. An experimental ColliePWA panel for the Herdr app can pair a phone from inside the app. You copy that panel into place by hand. Read how the Herdr mobile app works.

Is ColliePWA an alternative to Termius or Moshi?

Termius and Moshi are terminal apps from the App Store or Google Play that connect over SSH. ColliePWA is a web app served by your machine and opened in your phone's browser. It lists the agents in your multiplexer, puts the ones waiting on you at the top, and includes a Keys tray with Esc, Tab, arrows and modifiers, so the phone keyboard is not your only input. Read the full comparison with Moshi.

How is this different from Claude Code Remote Control?

Remote Control connects the Claude app or claude.ai/code to a Claude Code session on your machine, routing traffic through the Anthropic API. ColliePWA mirrors terminal panes. It works with whatever agent runs in them: Claude Code, Codex, OpenCode, pi and others, in every pane of your Herdr, Herdr app, tmux or zellij setup. It runs on your hardware. Your phone reaches it through a front door you run, Tailscale by default.

Why not just SSH in from Termux or Termius?

You can. That is how ColliePWA started. Driving a terminal UI through on-screen controls is clumsy: special keys are fiddly, Ctrl, Esc and arrows need awkward chords, and plain text input fights the soft keyboard. ColliePWA lets you tap the agent waiting on you, type normally, and hit Esc or Ctrl+C with one thumb.

Which agents does it work with?

Any agent that runs in a terminal pane. ColliePWA mirrors the pane itself and requires no agent API. The prompt cache timer on each pane supports Claude Code, Codex, OpenCode and pi. Questions and approvals from Hermes Agent become buttons. Messages from your phone reach the Cursor CLI input box, and ColliePWA checks every send to it while support remains provisional.

Which terminal multiplexer do I need?

Herdr, the new Herdr app, tmux or zellij. Herdr is the primary backend. On the Herdr app, ColliePWA drives its core, herdr-core. A machine with both keeps the Herdr TUI unless you name herdr-core. In a crew, one machine can run two ColliePWA instances, one per multiplexer, and the phone shows them as one machine. tmux and zellij work, but are experimental. tuios and Tern also work as experimental backends. collie start finds the ones you have and asks which one to mirror.

Which operating systems does it run on?

The host runs Linux or macOS. On Windows 11 x64, it runs against Herdr 0.9.3 or newer, and that support is experimental. A Windows machine cannot join a crew yet. On the phone, any current browser works.

Do I need Tailscale?

No. Tailscale is the default, because collie start sets it up for you. A reverse proxy, Cloudflare Tunnel, NetBird or another mesh works too. The deployment guide shows each one.

Why can't I turn on notifications?

Web Push needs two things: an HTTPS address and a key pair from collie push-keys. Over plain HTTP, the browser does not allow push, and the switch stays off. On an iPhone, add ColliePWA to the home screen first. Safari allows push only for a web app on the home screen.

Do notifications work on an iPhone?

Yes, on iOS 16.4 or newer, once ColliePWA is on the home screen and you open it from its icon. The home screen app is separate from Safari, so pair it and turn on alerts there. The Web Push notes cover the rest.

Is it safe?

ColliePWA gives remote shell access to your machine. That is what it is for. Every request needs the token of a device you paired, but anyone who pairs a device can read your panes and type into them. It listens only on loopback, so keep exactly one private front door in front of it, and pair your phone with collie pair. Never make it public with tailscale funnel. Read the security note before you run it.

Does anything leave my machine?

No telemetry, no analytics and no crash reports. The only call it makes on its own is an anonymous update check against GitHub's public tags. Push goes through your browser's push service, and only after you turn it on. Voice input uses a cloud service only if you pick one over a local engine. The Whistle speech model downloads once from Hugging Face, and only when you tap to set it up.

Can my team share one ColliePWA?

No. ColliePWA is for one operator. It has no user accounts and no per-person permissions. If you run agents on several machines, a crew puts all of them behind one address, for you alone.

How do I update it?

Tap update in Settings on your phone, or run collie update on the host. Older versions stay on disk, so collie update --rollback takes you back.