Install
Install pulls binaries from this project's official instance at https://pairfob.com/dl. curl is required. macOS and Linux. Windows is rejected.
curl -fsSL https://remote.tmts.ca/install.sh | sh -s -- --origin https://remote.tmts.caThe same command on a second computer. Then pair it from the phone: Settings → Switch computer → Add a computer. Do not set PAIRFOB_JOIN_TOKEN.
Herdr checks and installation
Before replacing Remote, enrolling, or installing its service, the installer checks Herdr. It reuses a ready server, starts an installed server when needed, and waits for its API. If Herdr is missing, it automatically installs the latest stable release into ~/.local/bin/herdr, verifies SHA-256 and records its source. Existing installations are preserved.
For unattended installation, explicitly allow the missing dependency:
curl -fsSL https://remote.tmts.ca/install.sh | sh -s -- --origin https://remote.tmts.ca --non-interactive--non-interactive never prompts and still installs missing Herdr by default. Use --no-install-herdr to fail instead when Herdr is missing. --skip-herdr-check installs Remote without claiming session readiness. --no-service still checks Herdr; for offline preparation use --no-service --no-enroll --skip-herdr-check.
Later, run remote setup to check and start Herdr, or remote setup --install-herdr to install a missing dependency. remote doctor only diagnoses; it never installs or starts anything. Incompatible protocols, startup failures, and invalid HERDR_BIN or socket settings must be resolved before continuing. Existing Herdr sessions are never automatically upgraded or restarted. Remote starts only the default server; with PAIRFOB_HERDR_AUTOSTART=0, start the configured Herdr server yourself. See Named Herdr sessions for the autostart limits.
What the script does
- Downloads the
pairfobbinary for this OS - Verifies the checksum and refuses to overwrite on mismatch
- Checks Herdr, optionally installs it with consent, starts it if needed, and verifies its API
- Enrolls
- Unless
--no-service, installs a user-level login service
Flags
| Flag | Role |
|---|---|
--prefix DIR | Install directory. A writable /usr/local/bin uses that; otherwise ~/.local/bin |
--no-service | Binary and enroll only; no login service |
--no-enroll | Skip enrollment; service and Herdr checks still apply |
--no-install-herdr | Fail instead of installing missing Herdr |
--install-herdr | Compatibility alias: install missing Herdr (the default) |
--non-interactive | Never prompt; install missing Herdr unless explicitly disabled |
--skip-herdr-check | Skip Herdr checks without claiming session readiness |
Also valid:
curl -fsSL https://remote.tmts.ca/install.sh | sh -s -- --origin https://remote.tmts.ca --prefix "$HOME/bin"Machines that already enrolled: rerunning the installer refreshes the binary and leaves existing pairings alone.
The service retains the checked Herdr executable, socket, configuration paths, and startup options so a different login PATH does not break the connection.
The installer checks and starts Herdr from the home directory, matching the login service. Relative Herdr configuration paths are also interpreted from home.
Where it lands
| Condition | Binary |
|---|---|
Writable /usr/local/bin | Default /usr/local/bin/pairfob |
| Ordinary user | Default ~/.local/bin/pairfob |
pairfob is the command shown in this documentation. The installer also creates pairfobd → pairfob in the same directory as a compatibility alias.
If ~/.local/bin is not on PATH, the script tells you to add it. For zsh:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcAfter install
After a login, the service starts on its own. It is a login service, not a boot daemon: sleep and logout stop it; coming back to the same graphical session starts it again. In a terminal, pairfob shows status and suggests the appropriate recovery command. Use remote run for foreground use. To inspect or restart the installed service:
remote service status
remote service restartDay to day you should not need those. remote update replaces the binary and restarts an installed user service.
Update
remote updateReplaces the binary and restarts the user service. Do not rerun the installer as an “update”.
Uninstall
remote service uninstall
prefix="$(dirname "$(command -v pairfob)")"
rm -f "$prefix/pairfob" "$prefix/pairfobd"Uninstalling the service does not delete the state directory. To drop pairings too, remove ~/.config/pairfob after you are sure you do not need those device credentials.
From source
Clone the repository for local comparison. Run setup once to prepare Herdr automatically. Everyday use still follows the install command above.
go run ./cmd/pairfob setup
go run ./cmd/pairfobLocal pairing and checks are in the repository README.
Update the Herdr runtime
remote update and Update to v… in the browser update Remote only. For Herdr installed and still managed by Remote, run:
remote setup --update-herdrWith running sessions, this only downloads and verifies the update. Exit code 2 means prepared but not active; tasks keep running. When tasks can be interrupted, run on that computer:
remote setup --update-herdr --restart-herdrThe command describes the target and impact and asks in the terminal before stopping the default service, updating and verifying. Stopping terminates terminal processes; agents may need recovery. Restoring a binary cannot restore those processes. Named sessions, custom sockets and externally supervised servers need local maintenance using their original setup. Non-interactive mode cannot authorize a restart.
Update Homebrew, mise, Nix or unknown installations through their original installer. Older Remote installs without provenance are not adopted automatically. remote doctor reports installed and running versions and pending updates. Uninstalling Remote keeps Herdr, sessions and projects.