AltanS/collie: a phone interface for terminal AI agents over Tailscale
PWA to manage 🐑 herdr on the go. Tailnet accessible, push notifications, quick actions and more.
At a glance
- What is it?
- Collie is a TypeScript PWA that puts a touch interface in front of Herdr, tmux or zellij sessions so you can answer a blocked agent from your phone. It is single-user by design and hands out remote shell access, so the deployment model matters more than the feature list.
- Who is it for?
- Adopt Collie if you already run Herdr agents on a machine that shares a tailnet with your phone and you accept that the URL is equivalent to a login on that host. Do not adopt it for shared access, for public exposure, or if your multiplexer is tmux or zellij and you are not willing to be the tester, since the README calls both experimental with testing limited to a single operator on one machine.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem Collie addresses: TUI agents are hostile to touchscreens
The README states the motivation directly. The usual way to check on a terminal agent from a phone is Termux, SSH, and attaching to the multiplexer session. Driving a full TUI through on-screen controls is awkward: the author calls special keys fiddly, notes that Ctrl, Esc and arrows require awkward chords, and says plain text input fights the soft keyboard. Collie replaces the terminal emulation with a purpose-built mobile interface. You tap the agent that needs input, type normally, and send Esc or Ctrl+C with one thumb. The target user is a developer running AI agents inside a terminal multiplexer who wants to resume sessions from a phone. Herdr is the primary supported target; tmux and zellij are supported but the README labels them experimental. The setup assumes the phone and host share a Tailscale tailnet, and the project is explicitly single-user: one operator, one tailnet, no multi-tenant authentication.
Dashboard ordering and the Herdr session model
The dashboard is ordered by pending user input rather than recent output, which is the design decision that separates Collie from a terminal in a browser tab. Agents that need you float to the top, so the first screen answers the question you actually opened the app to ask. From there you can inspect spaces, tabs and panes, and the README notes that a space's tabs and panes are deep-linkable. Long-pressing a pane pill or tab chip renames or closes it, and Claude panes reflect names set via /rename. The README says the dashboard surfaces a Needs you group alongside Recent and Spaces. Herdr session switching is managed from the web interface, so you are not dropping to a shell to move between herds. The Ask view is the other half of the model: an agent's own prompts, such as a Claude permission prompt or an AskUserQuestion, are up-levelled into tappable buttons instead of raw TUI text. That is a parsing problem, not a rendering problem, and it is the kind of thing that breaks quietly when an agent changes its prompt format.
What the install script does and what it leaves to you
The documented install path is a single command run on the host, not the phone, requiring curl, tar and a sha256 utility, with no compiler toolchain and no sudo. The script downloads the latest release for your platform, verifies the sha256 checksum, installs the files, and puts collie on your PATH. It then prints the remaining manual steps: seed a config, then run collie start. You do not declare a multiplexer up front. According to the README, on its first run collie start detects Herdr, tmux and zellij and prompts for your choice. The README also points to docs/install.md for the manual build, Herdr routes, a requirements table, and a description of what the initial run writes. Two config surfaces are named in the material: quick-replies.toml supplies the one-tap replies shown in the Quick dock, and COLLIE_TRUSTED_USER is an environment variable used to constrain who the service trusts. Voice input is documented as built in but disabled until explicitly configured, and the input box itself is a standard text field, so system voice dictation works without that feature. There is a browser demo at colliepwa.dev/demo that runs the web client against faked data, which is the only way to see the UI without installing anything.
The security model is the product, not a footnote
The README is unusually blunt here, and it should be taken literally. Collie provides remote shell access to your machine by design. A single API call sends arbitrary keystrokes into a live terminal pane. Anyone with access to the URL can read pane output, including source code, secrets, environment variables and agent output, and can execute arbitrary commands with your full user privileges. There is no sandbox and no command allow-list, and the README says adding them would defeat the core workflow. The guidance is to treat the URL as a root login, bind it strictly to your tailnet, set COLLIE_TRUSTED_USER, and pair only the physical phone you are using. Device pairing is the write credential: once a device is paired, every write requires its token. The README also warns against tailscale funnel in explicit terms, because funnel exposes the port to the public internet while serve limits access to your private tailnet. If you cannot accept the root-login equivalence, Collie is the wrong tool regardless of how good the dashboard is.
Where Collie breaks down, and what to use instead
The clearest limitation is multiplexer coverage. Herdr is the primary supported target. tmux and zellij run, but the README says testing is limited to a single operator on one machine and asks for bug reports, including reports of working setups. That is a candid admission that the compatibility surface is thin. The second limitation is the single-user assumption: one operator, one tailnet, no multi-tenant authentication, and an explicit instruction not to use it for shared or public access. The third is structural. Any feature that interprets agent output, such as turning a permission prompt into buttons or reflecting /rename names on Claude panes, depends on the agent's output format staying stable. The README does not describe a fallback when parsing fails, so assume the terminal view is your escape hatch. If your need is a browser terminal rather than an agent-aware dashboard, ttyd or wetty over the same tailnet gives you a real terminal and no interpretation layer, at the cost of the touch ergonomics Collie was built to fix. If your need is orchestration across many users, Collie is not that product and the README says so.
Crews, failover and the operational surface
Collie supports crews: several machines' Collies behind one URL, with operator-triggered failover. The README does not describe automatic health checking or quorum, so read failover as a manual switch you perform when a host is unreachable, not as a self-healing arrangement. The rest of the feature list is the day-to-day surface: push notifications when an agent blocks on user input, quick actions and slash commands configured per agent, a keypad for Esc, Ctrl+C, arrows and modifier combinations, output search, conversation history beyond standard terminal scrollback, and file attachments covering camera-roll images plus markdown, text and code files. Six UI languages and a per-device typeface setting are noted, as is PWA support running locally on loopback with no external accounts or cloud dependencies. That last point is worth weighing against the push notification feature, since notifications imply a delivery path the README does not detail.
Licence, maintenance and what a fork costs you
Collie is MIT-licensed, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are preserved. That is a permissive baseline, not legal advice, and if you plan to redistribute a modified build you should read the licence text rather than this summary. The repository is active rather than archived, with a last push in September 2026 and three releases in the days before it: v1.6.0, v1.7.0 and v1.8.0. The install script pulls the latest release, so upgrading is a re-run of the same command plus whatever the initial-run notes say about config; the README does not document a migration step between minor versions, which is the thing to check before you let a script overwrite a working install. The stack is React Router with Vite, TypeScript, Tailwind, shadcn and a Bun bridge, so a team that wants to patch the Ask-prompt parsing or add a multiplexer adapter is working in a conventional frontend codebase rather than a bespoke one. The maintenance cost that actually matters is not the code. It is the security posture: you are running a service that grants shell access, and every decision about tailnet membership, pairing and trusted-user configuration is yours to keep correct.
Editorial conclusion
Adopt Collie if you already run Herdr agents on a machine that shares a tailnet with your phone and you accept that the URL is equivalent to a login on that host. Do not adopt it for shared access, for public exposure, or if your multiplexer is tmux or zellij and you are not willing to be the tester, since the README calls both experimental with testing limited to a single operator on one machine. Before running it, read docs/security.md, set COLLIE_TRUSTED_USER, confirm you are using tailscale serve rather than funnel, and check whether your platform is covered by the install script or needs the manual build in docs/install.md.
Community notes