Skip to main content

Add a Remote Host

Add a Mac or Linux machine as a Daintree host: SSH prerequisites, the Find, Check, Install, Enable and Advise steps, SSH targets and discovery, and managing, updating and removing hosts.

Updated
Reviewed

Before You Start

Daintree connects to a host with the system ssh, non-interactively. If ssh can reach the machine with a key and no prompt, Daintree can reach it the same way, through one of the target forms below. Check that first, from the machine you will work on:

ssh you@studio-01.local 'echo ok'

If that prints ok without asking for anything, you are ready. If it asks for a password, a passphrase or to confirm a host key, sort that out in a terminal first:

  • No key on the host yet: ssh-copy-id you@studio-01.local copies your public key into the host's ~/.ssh/authorized_keys.
  • A passphrase on your key: add it to your ssh agent (ssh-add, or your Keychain, 1Password or another agent) so ssh never has to ask.
  • A new host key: connect once by hand and accept it, so it lands in ~/.ssh/known_hosts.
  • A Mac host: turn on Remote Login in System Settings → General → Sharing. See Set Up a Mac as a Host.
  • A Linux host: install and start openssh-server. See Set Up a Linux Host.

Your ~/.ssh/config applies: HostName, User, Port, IdentityFile, ProxyJump and the rest. Daintree adds its own connection-sharing options, turns agent and X11 forwarding off, and leaves out port forwards your config sets up, adding only its own. A host on a non-standard port or behind a jump host works through a config alias.

Open the Add Host Dialog

Open Settings → Hosts (in the Integrations group) and click Add host. The same dialog opens from Add host… in the command palette, which is always listed, and from Add host… in the host menu once you have one host.

The dialog walks five steps, shown across the top: Find, Check, Install, Enable and Advise. Steps that have nothing to do are skipped: a host that already runs your build goes straight from Check to Enable.

1. Find

Under Machines found, Daintree lists machines it can see without asking you anything:

  • Tailnet: online macOS and Linux peers from tailscale status, when Tailscale is installed. The target is the peer's MagicDNS name, or its Tailscale IP address when it has none.
  • Local network: Bonjour adverts on your network. That covers machines already running Daintree in Host mode, Macs with Remote Login turned on, and Linux machines that publish ssh through Avahi. Daintree's own adverts carry the platform; a plain ssh advert shows Platform not seen yet.
  • Added: a machine already in your host list. It stays listed but can't be picked again.

Local-network adverts for a port other than 22 are left out, and so is this machine. Discovery shows only that a machine answered; whether Daintree is ready there is what the next step checks. Click a row to fill in its SSH target and name.

Machines advertising on the local network. studio-03 advertises only ssh, so its platform is unknown until checked

Or fill in the fields yourself:

  • SSH target: user@host, a host name, an IP address, or an ~/.ssh/config alias.
  • Name: how the host appears in Daintree: in the chip, the menu, panel titles and banners. Left blank, it defaults to the first part of the target, so you@studio-01.local becomes studio-01. You can rename it later; the host's own name never changes.
You enterMeans
you@studio-01.localA machine on your local network, by its Bonjour name
you@devbox.tail1234.ts.netA Tailscale MagicDNS name
devboxAn alias from ~/.ssh/config, with its port, user, key and jump host
you@192.168.1.20An IP address
Note
The SSH target can't carry a :port suffix or an IPv6 address. Put either in an ~/.ssh/config alias and enter the alias. Discovered machines usually carry no user name, so ssh uses your User setting or your local user name; edit the target to you@studio-01.local if the accounts differ.

2. Check

Check host connects over ssh and reports what it finds, line by line:

LineWhat it says
SSHWorks, or Didn't connect with ssh's own last lines of error underneath
PlatformFor example macOS · Apple silicon or Linux · x64
InstalledDaintree isn't installed, or the version and commit found there
Matches this machineSame build, Different build or Can't tell
Host modeListening, or Off
A Mac on a different build with Host mode off: plan an update, or continue with it as it is

What you can do next depends on the result:

  • Same build: Continue goes to Enable.
  • Nothing installed: Plan install goes to Install.
  • A different build: Plan update goes to Install, or Continue anyway uses the host as it is. A different build still connects, best effort, with a warning.
  • SSH failed: fix what ssh reported, then Check again. If ssh couldn't resolve a bare name such as you@studio, the dialog offers Try you@studio.local: on a local network a machine usually answers by its .local name.

3. Install

Install puts the exact build this machine runs onto the host, version and commit, so the two match. The plan says how it will get there before anything runs.

  • A Mac host: when the host has the same architecture as this Mac, Daintree copies this Mac's own app across. Otherwise the host downloads the matching build from the Daintree release feed, or this machine downloads it and copies it over if the host can't reach the feed. It lands in /Applications/Daintree.app, with the previous copy kept until the host is confirmed back.
  • A Linux host: a Package choice of AppImage or .deb. The AppImage is the default: it installs without root, to ~/Applications/Daintree.AppImage. Without FUSE on the host it still runs, unpacked each time it starts, which makes starting slower.

Every download is checked against the release feed's published checksum before it is used, and a downloaded Mac app must also pass the signature checks. Then Install on host (or Update host) runs it; Stop cancels it. Daintree stages and checks the new build on the host before it stops anything. Stopping a running Daintree ends its terminals; from there, the installer either finishes or tries to put the previous build back, and says whether it could.

Note
The release feed publishes checksums only for its current release, so a download only works when this machine runs the current release. The feed doesn't list a checksum for the .deb, so the dialog won't install one; choose the AppImage, or install the .deb on the host yourself and Check again. See AppImage or .deb.

Updating a Host That Is Working

Updating a host where Daintree is running restarts it there, and that ends its terminals. Daintree says so first: Daintree is running there. Updating restarts it, which ends its terminals. If the host reports agents working, nothing changes until you choose:

  • Update when idle waits until the host reports no working agents, then updates. It checks again right before stopping, in case work started meanwhile.
  • Update now and end its terminals asks once more, Update 'studio-01' now?, because every terminal there ends and the agents in them stop mid-task.

After installing, Daintree reads the build back on the host, waits for Host mode to come back if it was on, and, for a host already in your list, reconnects to confirm the same build answers. A build that reads back wrong is rolled back. If the host doesn't answer the reconnect, the new build stays in place with the previous one kept beside it, and Daintree says so.

4. Enable

Enable turns on Host mode on the host and sets it to start at login, which is what makes the machine available to your windows.

  • A Mac host: Daintree turns Host mode on in the logged-in session and sets it to start at login. If Daintree has never run on that Mac, open it once at the machine first: macOS asks to approve a first launch.
  • A Linux host: Daintree installs its Host mode service (a systemd user unit), starts it if Daintree isn't already running there, turns Host mode on with start at login, and asks the host to keep the service running after you log out (linger). See The Service Daintree Installs.

Click Turn on Host mode, or Skip to leave the host as it is. If Host mode is already on and starts at login there, the step says Host mode is on at studio-01 and starts at login there. This machine can connect. and you just Continue.

When something fails here, the message names it. On Linux that includes the service's own first error, for example Daintree's Host mode service on you@server keeps exiting as it starts: …, so you rarely need to log in to find out why. Troubleshooting Remote Hosts lists the common ones.

5. Advise

The last step lists what Daintree observed about the host that affects how reliably it serves:

  • Sleep: whether the host sleeps when idle. A sleeping host drops its connection.
  • Keychain: whether plugins can store secrets there. Credentials aren't copied between machines; each host signs in for itself.
  • Running after logout (Linux): whether the service keeps running with nobody logged in, and the host's own words if it refused linger.
  • Local network (Macs): the macOS Local Network permission, on this Mac and on a Mac host. See Local Network Permission.

Where there is a fix, the step shows the command with Copy command: Keep this Mac awake (sudo pmset -a sleep 0 disksleep 0), Keep this machine awake on Linux, or Let Host mode run without a login session (loginctl enable-linger $USER). Daintree never runs sudo itself.

Advise reports what Daintree saw on the host, with the command to fix it

Add host saves it and, if the host is listening, connects. If the first connection fails, the host stays in the list (studio-01 was added to your hosts.) and you can Connect now or later from Settings → Hosts.

Manage Your Hosts

Settings → Hosts lists every host under Remote hosts: its name, its SSH target and platform, and its connection state, with Details and a Remove host button on each row. Below the list is This machine as a host, which controls whether this machine serves others; see This Machine as a Host.

Settings → Hosts: your hosts above, this machine's own Host mode below

Details opens the host's page:

SectionWhat it holds
ConnectionName (what this device calls it), SSH target, Status with Connect or Retry (or Set up… when Host mode is off there), and Daintree build with Check for update. A connected host on a different build says Differs from this machine.
NotificationsNotify me about this host: agents observed waiting there notify you even while your windows show another machine. Off by default.
Agent CLIsWhat the host reports having installed, with versions. Observe only: Daintree never installs agent CLIs on a host.
AccountsThe host's forge connections, such as Signed in as … on studio-01 or GitHub isn't connected on studio-01.
PluginsThis machine's plugins compared with the host's, with Install on studio-01 and Update on studio-01. See Plugins Across Machines.
Plugin views and Clipboard accessYour answers when a plugin from the host asked to run its view or use this computer's clipboard, each with Reset.
Remove hostTakes the host out of your list.
A host's details page, from Details in the list

Changing the SSH target clears what Daintree had recorded about the old one (platform, build, last seen) until it next connects.

Removing a Host

Remove host asks Remove 'studio-01' from this device? and then closes its connection here, returns any windows attached to it to this machine, and closes its ssh connection. Nothing on the host changes: its projects keep running, and Host mode and its start-at-login item stay as they were. To stop a machine from serving altogether, turn Host mode off on the machine itself.

Update a Host

Keeping every machine on the same release is the safe default. When you update this machine, update your hosts to match:

  • Check for update on the host's details page opens the same dialog titled Update studio-01. Press Check host, then Plan update.
  • When a host connects on a different build, Daintree shows one warning, Different build on studio-01, with an Update studio-01 button. If the host is the newer one, the button reads Update this machine instead.
  • A host whose link protocol differs can't connect at all. Its row in the host menu reads Can't connect, and the menu offers the update.

On Linux you can also update by hand. See Updating a Linux Host.