01 · Local-network remote for your Mac

Your Mac. Six taps away.

Six fixed tiles on your iPhone launch or foreground the apps you live in. One tap, one request, straight across your own Wi-Fi — no cloud, no accounts, no remote screen to stare at.

companion ready · _vatsaremote._tcp · port 3040

Shrivatsa’s Mac
Frontmost
Cursor since 09:41 idle
Verified · 6 of 6
_vatsaremote._tcp :3040

Connected to

Shrivatsa’s Mac

ready
cursor activated 138 ms
in your hand · tap a tile in the other room
Six tiles

One deliberate layout. No editor, no custom list.

One QR pair

Approve once on the Mac. Credential stays in the Keychain.

LAN only

Bonjour on your network. Nothing leaves the house.

Native Swift

iOS 17+ · macOS 14+. No Electron, no Node, no daemon.

02 · The tap path

One tap. Five honest steps.

Leagot does not paste commands, drive your keyboard or poke at windows. It asks macOS to bring one allowlisted application forward, then waits to see it happen before it answers the phone.

wire · _vatsaremote._tcp :3040/v1
·browse _vatsaremote._tcp.local1 mac found
GET/v1/healthbearer ok
200{"serviceStatus":"ready"}18 ms
waiting for a tap
01 Tile tap

The phone sends an AppId. Never a path, a command or a keystroke.

02 Over the LAN

One authenticated request to the Mac found over Bonjour.

03 Bearer check

A per-phone token, compared in constant time. Revoked means gone.

04 Allowlist

The AppId resolves to one of six compiled bundle identifiers.

05 Verified front

It reports back only after the app is observed frontmost.

Leagot — Mac companion
Verified applications
Ghostty ghostty
Cursor cursor
Dia dia
Zed zed
Obsidian obsidian
WhatsApp whatsapp
activation is serialised · four queued at most · eight second ceiling

03 · The fixed catalogue

Six apps. Verified by bundle ID.

The phone never names an application. It sends one of six identifiers, and the Mac resolves it against a compiled allowlist of bundle IDs read from the real installs — never guessed from a product name.

01

Ghostty

Terminal

The terminal you actually live in, already up when you sit down.

com.mitchellh.ghostty row 1 · col 1
02

Cursor

Editor

Straight back to the file you were mid-thought inside.

com.todesktop.230313mzl4w4u92 row 1 · col 2
03

Dia

Browser

The browser back on screen the second the link matters.

company.thebrowser.dia row 2 · col 1
04

Zed

Editor

Cold start or warm window — one tap and it is frontmost.

dev.zed.Zed row 2 · col 2
05

Obsidian

Notes

Your vault, front and centre before the thought evaporates.

md.obsidian row 3 · col 1
06

WhatsApp

Messages

Up and readable when the message is the reason you looked.

net.whatsapp.WhatsApp row 3 · col 2
Portrait · 2 columns × 3 rows Landscape · 3 × 2, same row-major order Artwork · bundled, drawn locally, never fetched No editor · the list is the product boundary

04 · Why it is this small

The expensive part was never the app. It was getting back to it.

A remote that can do anything needs a manual. Leagot does one thing on purpose: it puts the app you were thinking about in front of you before you reach the keyboard.

A

Walk to the desk

The Mac is awake and three rooms away. The app you want is not the app that is up.

Interrupted
B

Hunt the window

Command-tab, Mission Control, six Ghostty windows and the one you meant is behind Slack.

Interrupted
C

Lose the thread

By the time the right window is front, the reason you came over has gone quiet.

Interrupted

Or: one tap, from where you are sitting.

Launched, activated, or already frontmost — and it tells you which.

Leagot

05 · Setup, once

One QR. No account anywhere.

There is nothing to sign up for, because there is no one to sign up with. Pairing is a conversation between two devices on the same network, approved by the person holding both.

01

Open the companion

The Mac app lives in the menu bar. Choose Pair a Phone… and a window opens with a fresh session secret behind a QR code.

02

Scan, then approve on the Mac

The phone submits a pairing request. Nothing is trusted until you approve it on the Mac itself — there is no endpoint that can approve for you.

03

The credential goes to the Keychain

A per-phone token, 32 random bytes, stored on both ends. Revoke a phone from the Mac and it stops working on the next request.

Pair a Phone awaiting scan
sessionexpires in 02:00
secretsingle use · never in TXT
approvalon this Mac only
resulttoken → Keychain, both ends
servers in the path

Nothing sits in the middle.

Your phone finds your Mac over Bonjour and talks to it directly. That is the entire diagram — there is no service to go down, no region to pick, and no account to delete later.

0 accounts0 relays0 telemetry0 background daemons0 remote screen

07 · The boundary

A remote is only trustworthy if it cannot do much.

The interesting question about a phone that can touch your Mac is not what it does — it is what it is structurally unable to do. Here is the whole line, on both sides.

What a tile can ask for
Six application identifiersghostty · cursor · dia · zed · obsidian · whatsapp
Launch or foreground, nothing elseNSWorkspace open · NSRunningApplication activate
One authenticated request at a timeserialised · 4 queued max · 8s ceiling
A health check every fifteen secondsGET /v1/health · 3s timeout
Its own revocationDELETE /v1/pairing/self → 204
What no tile can ask for
Shell commands, scripts, AppleScriptnot used anywhere in the activation path
Keystrokes or pointer injectionno Accessibility or Input Monitoring permission
Your screen, your files, your clipboardno Screen Recording permission, no file access
Arbitrary bundle IDs or pathsUNSUPPORTED_APP · the allowlist is compiled in
Window moving, resizing, or Spaces tricksmacOS keeps owning your windows
v1 transport note: v1 speaks plain HTTP across your trusted local network; pinned TLS and a split bootstrap-versus-issued token land in v2. Treat the Wi-Fi you pair on as trusted until then — this page would rather say that than imply otherwise.

08 · Where it goes

Shipping, hardening, and holding the line.

Shipping · v1.0

The six-tile remote

Pair once by QR, approve on the Mac, then use it like a purpose-built launcher that lives on your own Wi-Fi.

  • tag v1.0.0
  • menu-bar companion
  • iOS 17+ / macOS 14+
  • verified outcomes on every tap
In progress · v2

Hardening the wire

Pinned TLS between phone and Mac, a disposable pairing token separate from the issued credential, and credential writes that cannot lose a working pairing.

  • pinned TLS + Mac identity
  • bootstrap ≠ issued token
  • credential bound to one Mac
  • atomic Keychain replace
Out of scope · always

The things it will not become

The boundary is the product. A tile list you can edit, a shell, or a cloud relay would each make Leagot something worth being careful about.

  • no remote screen
  • no typing or scripting
  • no custom tiles
  • no cloud relay

09 · Take it home

Put it on your Mac. Tell me what breaks.

Two downloads, one pairing

Grab the latest Mac companion from the download page and build the phone app from source. If a tile misbehaves on your machine, the bundle IDs and the activation path are both in the open — an issue with the outcome string is enough to go on.

iOS 17+ · macOS 14+ · built natively in Swift · no Node in the app