Getting to a first answered text takes too many manual steps, and each one can fail quietly.
What it takes today
The DMG path is the good one and still asks for three things after opening the app: Full Disk Access, a token from claude setup-token kept in the Keychain, and who is allowed to text it.
The build-from-source path in the README is longer:
git cloneandbun install./buddy uplink:install- grant Full Disk Access to Uplink (source) in System Settings
claude setup-token./buddy env:set CLAUDE_CODE_OAUTH_TOKEN "$(pbpaste | tr -d '[:space:]')"./buddy uplink:doctor- text yourself
ping
Step 5 in particular is a person piping their clipboard through tr into an env setter, which is the kind of step that goes wrong silently.
Signals that setup already produces bad state
app/Uplink/engine.ts#L89-L92 deletes CLAUDE_CODE_OAUTH_TOKEN from the child environment when it is empty, with the comment that a .env copied from .env.example carries an empty one. That is a guard against setup having written something unusable. Worth fixing where it originates rather than only where it is survived.
Goal
A person who has never run any of this gets from download to an answered text without editing a file by hand, and any failure names itself.
Concretely:
- The menubar walkthrough (
app/Uplink/menubar.html,app/Uplink/desktop-agent.ts) owns all three prerequisites end to end, including capturing the token, rather than handing the person a shell command. uplink:doctor(app/Uplink/doctor.ts) checks every prerequisite: Full Disk Access, the Messages database being readable, the engine CLI being present, auth being valid, allowed handles being non-empty, and the service actually running. Each failure prints the one command or click that fixes it.uplink:installleaves an installation that either works or explains itself, never one that looks installed and silently ignores every text.
Acceptance
- Fresh Mac, no prior Claude Code install: download, open, follow the menubar, text
ping, get a reply. - Every prerequisite failure is reported by
uplink:doctorwith its fix, and the exit code is non-zero. - No step requires editing
.envby hand.