SwiftUI iOS client for Warp's /remote-control shared-session protocol.
Built as a proof of concept for warpdotdev/warp#6391.
Unofficial. This project is not affiliated with, endorsed by, or supported by Warp (@warpdotdev). It's an independent client built against the relay protocol used by desktop Warp's Remote Share feature, in the spirit of the linked issue. "Warp" and related marks belong to their respective owners.
The app authenticates to the Warp relay over a WebSocket upgrade with
Authorization: Bearer <JWT>. There's no OAuth flow yet — you bring your own
token by exporting it from the desktop Warp app's Keychain entry.
On the Mac where desktop Warp is signed in, run this in Terminal — it pulls the JWT out of the Keychain blob and copies it to your clipboard:
security find-generic-password -s dev.warp.Warp-Stable -a User -w \
| jq -r '.id_token.id_token' \
| pbcopyThen on the iOS app: Settings → Bearer token → paste → Save.
Requires
jq(brew install jq). The first time you run thesecuritycommand, macOS will prompt you to allow Keychain access — click Always Allow if you'll re-run it.
If you don't have jq, just dump the whole Keychain blob and paste it as-is —
the app recognizes Warp's nested JSON shape and extracts the JWT for you:
security find-generic-password -s dev.warp.Warp-Stable -a User -w | pbcopyA bare JWT (already extracted) also works.
You can wrap the one-liner in a Shortcut on your Mac so refreshing the token is one click. Create a Shortcut named "Copy Warp Token" with a single Run Shell Script action:
security find-generic-password -s dev.warp.Warp-Stable -a User -w \
| jq -r '.id_token.id_token'Set the action's Pass Input to none and Output to the clipboard. Then from any shell:
shortcuts run "Copy Warp Token"- Tokens are stored in the iOS Keychain on the device only —
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. They don't sync to iCloud and don't survive an encrypted backup restore to a different device. - Warp's id_token is short-lived. When it expires the WebSocket upgrade will return 401 and the app surfaces an "unauthorized" error — re-run the one-liner and paste a fresh token.
- On desktop Warp: open a session and copy its share link
(
https://app.warp.dev/sessions/<uuid>). - On iOS: paste the link into the Join a shared session field and tap Connect. The app opens a WebSocket to the relay and starts streaming blocks.