Repository navigation
Ateam Go: SSH onboarding with a provider step, provider links and a Paste button - #558
Merged
Merged
Conversation
… needed, credential cleanup - A server set up over SSH (or any box with no coding agent) opens Finish setting up instead of Add a project. With no agent on the box, it offers Install Claude Code / Install Codex: the box terminal installs it, then signs in from a fresh login shell. Codex's installer runs with CODEX_NON_INTERACTIVE=1 so it doesn't stop to ask to start Codex. - Get started no longer opens with a Tailscale warning: the Tailscale state sits on Pair with Ateam for Mac, the one way in that needs it. - Create a box picks SSH when the phone isn't on a tailnet. The SSH form starts at root, with where its password comes from; setup turns root into the ateam user and then deletes root's password from the Keychain. - A box's SSH key and password leave the Keychain with it (removed, or edited onto a new identity), once the list without it is saved. Removing a key-login box asks first, since that key may be the only way in. - PRIVACY.md and the provider docs describe the SSH path. Checked on a fresh boxd server: after the phone's install the engine reports no agents; both install commands install and start sign-in; the running engine then reports claude and codex on the next connect.
pallaoro
force-pushed
the
ssh-onboarding-followups
branch
from
November 9, 2026 19:10
39922f5 to
114e1fa
Compare
pallaoro
changed the base branch from
termius-apparently-is-able-to-provide
to
main
November 9, 2026 19:10
… say when Tailscale is off - Box settings opens with a Connection row: SSH (user@host:port, key or password on this phone) or Tailscale (address, needs Tailscale on this phone). Tapping it opens Edit box, which works while the box is away. - A Tailscale box that isn't connected, on a phone with Tailscale off, shows why under its card with a Turn on Tailscale button, ahead of the steps and provider trays. - Root setup skips removing the root password on a dev build that predates removePassword, instead of failing.
- First step: Hetzner (the app creates it, as before), boxd, or another server. Providers are entries of facts in src/provider-setup.ts (login, host and port hints, what the password is called and where to get it), not flows of their own. - boxd: its two steps at the provider with links (create a machine, then a token on its phone page), then the Add a box form over SSH as user boxd, the password field named boxd token, and the port left empty with where to find it, since each machine has its own. - Another server: straight to the form over SSH as root. - Connection on Hetzner's page is two cards with why (Tailscale recommended for security, SSH needs no Tailscale account) instead of a row that read as plain text. - Hetzner's mark joins the phone's provider logos; docs/providers describe the step.
Side by side, boxd's two steps read as two options. Now Step 1 of 2 shows alone, with its link as a button, then Next; the last step's button is Connect over SSH, with Previous step under it.
…h link - ateamgo://ssh?host=&port=&user=&provider= opens Add a box over SSH with the machine filled in and a note to check the host, the way boxd's phone page opens Termius. It never carries a password or token: the provider copies that to the clipboard and the user pastes it. Parsed strictly (src/ssh-link.ts, sharing pair-link's query parser and host rule); nothing connects until Connect, and the first connection still asks to trust the host key. - docs/providers/README.md documents the format for providers. - boxd's steps and docs follow its phone sheet as it is now: Another SSH app, Copy token (there is no Create token button there).
…s its wake - boxd's provider definition says an SSH connection wakes its machines (sshWakes): its gateway wakes a machine in standby on the first packet. - For such a box (boxes.ts dialWakes) a tap no longer opens Edit box asking for a boxd API key, an org-wide credential the SSH path never needs; the dial wakes it. A failed dial reads as a failure, not sleep. - Background tries (start-up, foreground, retries) don't dial it, since that would wake it: it rests asleep on its card until something on it is opened, like a Tailscale box that sleeps. - provider-setup.ts notes where boxd's SSH facts should move once a second provider is reached over SSH.
iOS's own paste control (expo-clipboard's ClipboardPasteButton, UIPasteControl, iOS 16+) pastes in one tap what a provider copied, such as boxd's token, with no Allow Paste prompt. expo-clipboard loads its native side on import, so it's required only once that side is known to be there: a build made before it starts as before, without the button. A trailing line break from the copy is dropped.
This was referenced Nov 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #556 (merged): Ateam Go's onboarding for boxes reached over SSH, from Get started to a box that can run its first task.
What changes
Create a box asks where the box runs. Hetzner (the app creates it, as before), boxd, or another server. Providers are entries of facts in
src/provider-setup.ts(login, host and port hints, what the password is called and where it comes from), not flows of their own. boxd shows its steps one at a time with links (create a machine, then its phone page: Another SSH app, Copy token), then opens Add a box over SSH asboxd, the password field named "boxd token", the port left empty since each machine has its own. Another server goes straight to the form asroot, with where its password comes from. On Hetzner's page, Connection is two cards with why: Tailscale (recommended for security) or SSH (no Tailscale account); SSH is the default when the phone isn't on a tailnet.Providers can open Ateam Go filled in.
ateamgo://ssh?host=&port=&user=&provider=opens Add a box with the machine filled in and a note to check the host, the way boxd's phone page opens Termius (host, port and user in the link, the token on the clipboard). The link never carries a password; a Paste button beside the password field (iOS's own UIPasteControl via expo-clipboard, iOS 16+, no Allow Paste prompt) takes what the provider copied in one tap. The format is indocs/providers/README.md.A new box can run a task. A server Ateam Go installs over SSH (or any box with no coding agent) opens Finish setting up, which offers Install Claude Code / Install Codex: the box terminal installs it, then signs in (Codex's installer runs with
CODEX_NON_INTERACTIVE=1).boxd over SSH needs no boxd key. boxd's provider definition says an SSH connection wakes its machines (
sshWakes), so a tap connects instead of asking for an org-wide boxd API key, and background tries don't dial such a box (the dial would wake it).Tailscale only where it's needed. Get started no longer opens with an amber Tailscale warning: its state sits on Pair with Ateam for Mac. A Tailscale box that isn't connected says when Tailscale is off on the phone, with Turn on. Box settings opens with a Connection row (SSH user@host:port and what it logs in with, or the tailnet address) that edits it.
SSH credentials don't outlive their box. The Keychain follows the saved list (
commitBoxes): a box's key and password go once the list without it is stored; root's password goes after setup switches to theateamuser. Removing a box that logs in by key asks first.Docs.
PRIVACY.mdcovers SSH (credentials on the phone, what Create a box sends with SSH). The provider docs cover the provider step, boxd over SSH, and the link format.Checked
tsc --noEmit(apps/mobile and packages/protocol),bun test(138 mobile, 164 protocol), Biome on the changed files.agents: []; both install commands installed their agent and went straight to sign-in (no "Start Codex now?" prompt); the running engine then reportedagents: ["claude","codex"].Not checked
ateamgo://sshlink on screen: they need a native build of this branch (the simulator build has neither expo-clipboard nor theateamgoscheme).