Register a self-owned computer
Connect your own laptop, desktop, or homelab as a Manyfold runtime.
A self-owned computer lets Manyfold route work to a machine you control instead of a cloud sandbox. The mf CLI runs a local daemon in the background on that machine, advertises which coding agents are installed (Claude Code, Codex, Gemini CLI), and handles agent sessions on demand.
Use a self-owned computer when you need:
- Direct access to local repositories or filesystem.
- CLI tooling already installed on the machine.
- Your own GPU, network, or compute environment.
Before you start
- Install the
mfCLI on the machine you want to register. See Install the CLI. - Choose the CLI profile that should own this registration.
- Sign in:
mf login. On a headless machine you reach over SSH, usemf login --no-launch-browserand approve from a browser on any other machine.
The shortest path is mf setup, which signs in, issues a machine token,
registers the host, installs autostart, and waits for the daemon to become
healthy. Use mf setup --no-launch-browser over SSH. The manual token flow
below is useful when an administrator issues the registration token for you.
Step 1: Issue a token
Open Settings → Self-owned computers in the web app. Under Register a new machine, give the machine a name (for example laptop or homelab-1) and click Issue token.
The page shows a ready-to-paste command:
mf daemon register --token ldt_xxxxxxxxxxxxxxxxxxxxxxxxxx
The token is shown only once. Copy the full command immediately. If you lose it, revoke the token and issue a new one.
Step 2: Run the command on the target machine
Paste the command into a terminal on the machine you are registering. The CLI:
- Generates a stable daemon UUID at
~/.manyfold/profiles/<profile>/daemon/daemon.id. - Detects installed coding frameworks (Claude Code, Codex, Gemini CLI).
- Registers the machine with the API.
- Saves daemon config to
~/.manyfold/profiles/<profile>/daemon/config.json.
The registration belongs to the selected profile. Run mf profile show to
see the active profile and exact paths.
The output looks like:
✓ daemon registered
daemonId: dmh_…
apiUrl: https://api.manyfold.ai/api
detected: claude-code 1.2.3
Start the daemon now? It will auto-start on login. [Y/n]
Press Enter (or y) to start the daemon. mf daemon start installs an autostart unit (macOS launchd LaunchAgent / Linux systemd user unit) so the daemon comes back automatically every time you log in and is restarted by the OS if it crashes — you don’t need to keep a terminal open.
For headless or scripted setups, pass -y to skip the prompt and start the daemon in one step:
mf daemon register --token ldt_xxxxxxxx -y
Step 3: Verify the machine is online
Go back to Settings → Self-owned computers in the web app. The machine appears under Connected machines with a green dot. The dot turns gray if the daemon has not sent a heartbeat in the last 45 seconds.
Each connected machine also shows the CLI version it’s running and how it was started — for example cli 0.7.0 · autostart · login (launchd) for a Mac that started via the LaunchAgent, or cli 0.7.0 · manual if the daemon was launched directly from a terminal without autostart.
You can also check from the same machine:
mf daemon status
mf daemon logs
Step 4: Create an agent on the machine
From the Connected machines list, click + Create agent → next to an online machine. The new-agent flow opens with the daemon preselected as the runtime.
You can also open New agent, pick a framework, and choose Self-owned computer as the runtime.
Manage the daemon
mf daemon status # process + heartbeat state, plus autostart status
mf daemon logs # tail the local log file
mf daemon start # install autostart unit and start (default: login scope)
mf daemon stop # stop the daemon and remove its autostart unit
mf daemon doctor # diagnose registration / framework detection issues
The daemon log lives at
~/.manyfold/profiles/<profile>/daemon/daemon.log. mf daemon logs resolves
the path for the selected profile automatically.
On macOS and Linux the web terminal gets a full interactive terminal (resize and job control included). On Windows it runs in a limited mode without resize or job control. If mf daemon doctor reports terminal limited on macOS or Linux, run mf update and restart the daemon.
mf daemon start and mf daemon stop both accept scope selectors:
--system— install at the system scope so the daemon starts at boot (no login required). Requiressudobecause the unit goes into/Library/LaunchDaemons(macOS) or/etc/systemd/system(Linux).--user— install or remove the per-login user unit explicitly.
mf daemon start additionally accepts --foreground. It runs the daemon
inline without touching an autostart unit. The process exits when you close
the terminal; use it for debugging, Windows, or environments without launchd
or systemd such as WSL1 and minimal containers. Automatic daemon installation
is supported on macOS and Linux; Windows requires a foreground process or your
own service manager.
After updating the CLI with mf update, run mf daemon stop then mf daemon start so the autostart unit is rewritten with the new binary path. Launchd / systemd otherwise keeps using the previous path until you restart the unit explicitly.
Autostart scope
The default mf daemon start registers the daemon at user scope:
| OS | Path | When it starts |
|---|---|---|
| macOS | ~/Library/LaunchAgents/ai.manyfold.daemon.<profile>.plist | On login |
| Linux | ~/.config/systemd/user/mf-daemon-<profile>.service | On login |
mf daemon start --system installs at system scope and starts the daemon at boot, before any user logs in:
| OS | Path | When it starts |
|---|---|---|
| macOS | /Library/LaunchDaemons/ai.manyfold.daemon.<profile>.plist | At boot |
| Linux | /etc/systemd/system/mf-daemon-<profile>.service | At boot |
Because unit names include the profile, production and staging daemons can coexist on one machine:
mf --profile default daemon status
mf --profile staging daemon status
The OS only restarts the daemon when it crashes (non-zero exit). A clean mf daemon stop leaves it stopped. If you want the daemon to come back automatically after a stop, run mf daemon start again.
On Linux user scope, the daemon starts when you log in. To run it at boot without an active login, enable lingering for your user once: loginctl enable-linger $USER.
Workspace and skill storage
Profiles isolate the daemon control plane, not agent data. By default every profile shares:
~/.manyfold/workspaces
~/.manyfold/skills
To give a host isolated roots, declare them when registering:
mf daemon register --token - \
--workspace-root /srv/manyfold/workspaces \
--skills-dir /srv/manyfold/skills
The declared roots belong to that host registration and are reported to Manyfold; changing profiles alone does not move existing agent data.
Automatic updates
An init-managed standalone daemon connected to the official API checks its
release channel every six hours and updates only while idle. Busy daemons retry
later rather than interrupting sessions. Set MF_DAEMON_AUTO_UPDATE=0 in the
daemon environment to disable this, or 1 to force it for a custom deployment.
Manual mf update still requires restarting the daemon so the init unit loads
the new binary.
Troubleshooting
daemon register requires --token <token>— the command was run without a token. Re-copy the full command from the web UI.token must start with ldt_— the token was truncated during copy. Re-copy it.- Machine stays offline — confirm the daemon process is alive (
mf daemon status) and that outbound HTTPS toapi.manyfold.aiis reachable from the machine. - Token already bound — each token can register exactly one machine. Issue a new token for additional machines.
- Revoking a machine — open Settings → Self-owned computers and click Revoke. Agents bound to that machine are marked stopped; workspace files on the machine itself are kept.
systemd not availableon Linux — your environment doesn’t have a usable user systemd session (common in WSL1 and minimal containers). Runmf daemon start --foregroundin a long-lived shell, or use--system(requires sudo and a system-level systemd).- Daemon shows
manualin Connected machines — the daemon was started withoutmf daemon start(for example via--foregroundor by an old version of the CLI). Runmf daemon stop && mf daemon startto register an autostart unit. - Connected machines shows an old CLI version after
mf update— the OS is still running the previously-loaded binary. Runmf daemon stop && mf daemon startto relaunch under the new binary. - Upgraded from CLI 0.21 or earlier and the machine is unregistered — CLI 0.22 removed the pre-profile config and daemon fallbacks. Run
mf login, issue a fresh machine token, and runmf daemon registeragain in the intended profile. Existing agent workspaces under~/.manyfold/workspacesare not deleted.