also looking at this
docs: the documentation the README points at
#63
9 files
+509
-10
| @@ -0,0 +1,81 @@ | ||
| 1 | # Install | |
| 2 | ||
| 3 | Two ways, and you should run only one of them. They share the launchd label | |
| 4 | `com.stacksjs.uplink`, and the downloaded app stops the source service when it starts. | |
| 5 | ||
| 6 | ## The app | |
| 7 | ||
| 8 | [Download Uplink for Mac](https://github.com/stacksjs/uplink/releases/latest/download/Uplink.dmg). | |
| 9 | It is signed with a Developer ID and notarized by Apple, so it opens like any other app. | |
| 10 | ||
| 11 | To check what you downloaded against the digest on the release page: | |
| 12 | ||
| 13 | ```bash | |
| 14 | shasum -a 256 ~/Downloads/Uplink.dmg | |
| 15 | ``` | |
| 16 | ||
| 17 | Drag it to Applications and open it. The menubar walks you through three things: | |
| 18 | ||
| 19 | 1. **Full Disk Access**, which it opens System Settings for. See [Permissions](./permissions.md). | |
| 20 | 2. **Signing in to the agent you chose.** Claude Code opens your browser and keeps the token in | |
| 21 | your Keychain; Codex signs in once with `codex login` and keeps its own credentials. | |
| 22 | 3. **Permission to control Messages**, which macOS asks for the first time it tries to reply. | |
| 23 | ||
| 24 | Then text yourself `ping`. The answer starts with a satellite. | |
| 25 | ||
| 26 | Uplink answers texts once it is activated. A licence is | |
| 27 | [$1.99 a month, $19.99 a year, or $29.99 once](https://uplink.stacksjs.com/pricing). The thank-you | |
| 28 | page has an **Activate Uplink** button that opens the app with the key filled in, and a licensed | |
| 29 | Mac keeps answering for two weeks without reaching the licence server, so it works off-grid. | |
| 30 | ||
| 31 | ## From source | |
| 32 | ||
| 33 | The same app, run from a clone as a launchd service. Its bundle id is | |
| 34 | `com.stacksjs.uplink.source`, so its Full Disk Access grant is separate from the downloaded app's. | |
| 35 | ||
| 36 | ```bash | |
| 37 | git clone https://github.com/stacksjs/uplink && cd uplink | |
| 38 | ``` | |
| 39 | ||
| 40 | ```bash | |
| 41 | bun install && ./buddy uplink:install | |
| 42 | ``` | |
| 43 | ||
| 44 | That creates `.env` and the database if they are missing, builds | |
| 45 | `storage/uplink/Uplink.app` and starts it at login. | |
| 46 | ||
| 47 | Then grant **Full Disk Access to Uplink (source)** in System Settings, and sign in to the agent you | |
| 48 | want: | |
| 49 | ||
| 50 | ```bash | |
| 51 | claude setup-token | |
| 52 | ``` | |
| 53 | ||
| 54 | ```bash | |
| 55 | ./buddy env:set CLAUDE_CODE_OAUTH_TOKEN "$(pbpaste | tr -d '[:space:]')" | |
| 56 | ``` | |
| 57 | ||
| 58 | A long-lived token, because a background service cannot answer a browser prompt. For Codex instead: | |
| 59 | ||
| 60 | ```bash | |
| 61 | codex login # or: codex login --device-auth, over SSH | |
| 62 | ``` | |
| 63 | ||
| 64 | ```bash | |
| 65 | ./buddy env:set UPLINK_ENGINE codex | |
| 66 | ``` | |
| 67 | ||
| 68 | Check it, then text yourself `ping`: | |
| 69 | ||
| 70 | ```bash | |
| 71 | ./buddy uplink:doctor | |
| 72 | ``` | |
| 73 | ||
| 74 | ## Texting yourself over satellite | |
| 75 | ||
| 76 | Test this once before relying on it. A text to your own number can be delivered to your other | |
| 77 | devices without going through the satellite link at all, so confirm the Mac receives a self-text | |
| 78 | sent while in satellite mode. | |
| 79 | ||
| 80 | If it does not, use a second Apple ID: sign Messages on the Mac into it, and set the allow list to | |
| 81 | your own phone number. | |