LINK ESTABLISHED · TAILSCALE

Your Mac terminal.
On your phone.

Stax Link turns your iPhone into a real remote shell on your Mac — live PTY, project bookmarks, and Grok chat — over your private Tailscale network.

iOS + macOS host Token-gated APIs Shared terminal rooms
stax-link · session main · zsh
# phone → Mac over Tailscale
$ stax-link status
host: online · port 8787 · token: ok
network: tailscale · mesh encrypted
session: main · cwd: ~/Documents/Apps
$ cd Terminal-App && git status -sb
## main...origin/main
M host/server/terminal.go
?? mobile/lib/screens/chat_screen.dart
$ echo "shell from your pocket"
shell from your pocket
$
01 · TERMINAL Real zsh/bash PTY over WebSocket
02 · PROJECTS Saved paths, commands, bookmarks
03 · CHAT Grok on the host — key stays on Mac

Built for builders who live in a shell.

In-house we call it Terminal-App. Shipping name: Stax Link — phone client, Mac host, one private link.

[ TERM ]

Live remote terminal

Interactive PTY on your Mac. Type on your phone, resize columns/rows, run real shell sessions over a token-gated WebSocket.

[ PROJ ]

Projects that stick

Name a project, pin the host folder, save command snippets and file bookmarks. Open in terminal sets cwd and reconnects the shell.

[ CHAT ]

Grok chat from the host

Phone Chat hits the Mac host. By default it resumes a linked Grok Build session — same thread as your desktop, key never leaves the machine.

[ MESH ]

Tailscale network edge

No public hole-punching for the terminal. Your phone and Mac join the same tailnet. The mesh is the boundary.

[ HOST ]

Menu bar host

Start/stop host, simple QR setup, copy URL/token, pick screenshot inbox, set listen address — all from the Mac menu bar.

[ SHOT ]

Screenshot → Mac inbox

Grab a shot on the phone, push it over Tailscale into a Mac folder. Perfect for “look at this UI” loops with Grok on the host.

Three pieces. One private link.

Host on Mac. Client on phone. Same tailnet. Scan a QR and you’re in.

  1. 01

    Run the Mac host

    Install Stax Link Host (menu bar). It opens a local control plane for shell, chat, and screenshots — token-gated on every request.

  2. 02

    Join the same Tailscale network

    Mac + iPhone on one tailnet. Use MagicDNS or the 100.x address. That private path is how the phone reaches the host.

  3. 03

    Scan Simple Setup QR

    Menu bar → Simple Setup (QR). Phone scans, receives host URL + token, saves and tests. Shared session id keeps phone and desktop on the same shell room.

Terminal aesthetic. Built in.

Matrix greens, monospace UI, dark surfaces — the app matches the site.

Stax Link terminal on iPhone
// terminal · live PTY
Stax Link projects screen
// projects · paths & commands
Stax Link desktop
// desktop · shared room

Private by network design.

v1 security is simple and intentional: your mesh, your token, your host keys.

// Tailscale boundary

Terminal traffic stays on your tailnet. No public terminal port exposed for the happy path — the phone reaches the Mac as a private node.

// HOST_TOKEN on every call

Terminal and chat endpoints require a host token with constant-time compare. QR setup delivers URL + token in one scan.

// Chat key stays on Mac

xAI / Grok credentials live on the host only. The phone never needs your API key — it talks to the local host proxy.

// Hardening roadmap

Optional Rust security core later: keychain-backed secrets, stronger device binding, and tighter session controls.

NOTE: Stax Link is a remote shell into your machine. Treat the host token like a password. Only devices you trust should join the tailnet and hold the token.

What ships under the hood.

Phone client · Mac host · private mesh.

Piece Stack Role
Mobile Flutter · iOS first Terminal, projects, chat, setup QR
Host Go + menu bar app PTY shell, chat proxy, screenshots
Network Tailscale Private path phone ↔ Mac
Chat Grok via host Linked session or API backend
Security core Rust (later) Optional hardened secrets path

> init stax-link --access early

Building in the open for people who want a real shell in their pocket — not a toy terminal skin.