Known issues & connectivity

Current known issues with workarounds, and a step-by-step guide for when a device can't connect to your Neumann daemon.

On this page

Current known issues

Issues we know about, what you'll see, and what to do meanwhile. Last reviewed September 2026.

SymptomAffectsWorkaround
A session started with neumann run sometimes doesn't show in neumann ls for a moment.CLI, local daemonRun neumann ls again after a second, or open it by id with neumann attach <id>.
curl …/install.sh | sh says there's no CLI build for your platform.Linux, Intel macOSPrebuilt CLI binaries are rolling out per platform. Use the desktop app, or build from source (see the install docs).
After a desktop update the window shows the previous version's UI.macOS desktop ≤ 0.1.39Fixed in 0.1.40+. On older builds quit fully (⌘Q) and relaunch.
The composer shows no usage meter for Claude Code / Codex.AllPer-provider rate windows come from CodexBar's local snapshot; install it, or check usage in Settings → Providers.
A warning says the CLI or web UI version differs from the daemon.Remote / always-on hostsUpgrade the older side. For a service install, upgrade the binary then restart the service.
Phone notifications only arrive for “Needs you” and “Done”.Mobile companionBy design — open the Agents dashboard for Working / Blocked states.
Note

On Linux, credentials are stored in private files under ~/.neumann/credentials rather than the desktop keyring. This is intentional; keep that directory private.

1. Run neumann doctor

Most connection problems show up in one command. It makes no model or cloud calls and every warning comes with a fix.

Terminal
neumann doctor
neumann doctor --host my-server   # a remote daemon

Exit code 3 means the daemon could not be reached; 1 means a check failed. Fix the ✗ lines first, then the ! lines.

2. Is the daemon running?

On the host
curl -s http://127.0.0.1:8421/api/health/live
curl -s http://127.0.0.1:8421/api/health/ready
ResultWhat it meansDo this
Connection refusedNothing is listeningStart neumann daemon, or check the service: systemctl --user status neumann-daemon (Linux) / launchctl list | grep neumann (macOS).
ready → degradedServing, something is offRead the check with a warning — usually the web UI build or git missing.
ready → HTTP 503Not readyThe engine or datadir check failed; follow its remediation, then restart.

3. Can another device reach it?

  1. 1
    It must listen on the network

    neumann daemon binds 0.0.0.0:8421 by default; neumann ui and the desktop app bind loopback only.

  2. 2
    Allow the port

    macOS: accept the firewall prompt (System Settings → Network → Firewall). Linux: sudo ufw allow 8421/tcp or your cloud security group.

  3. 3
    Same network or a VPN

    Both devices on the same LAN, or both on the same Tailscale / WireGuard network.

  4. 4
    Hostnames need allowing

    Using a name like mini.local or a Tailscale name and getting HTTP 403 “forbidden host”? Add it: NEUMANN_ALLOWED_HOSTS=mini.local,*.ts.net in the daemon's environment, then restart.

Warning

Pairing controls who can connect; it doesn't encrypt traffic. Over untrusted networks use a VPN, an SSH tunnel, or neumann daemon --relay.

4. Pairing fails

SymptomFix
“check the code” / HTTP 401Pairing codes change every time the daemon starts. Get the current one from its log: journalctl --user -u neumann-daemon | grep -E 'auth.token=|pairing code'.
A phone that used to work is refusedIt may have been revoked in Settings → Mobile devices. Pair it again.
“protocol version mismatch”Client and daemon speak different protocol versions. Upgrade the side the message names.

5. The page is blank

If /api/health/ready reports web_ui: warn, the daemon has no web UI build to serve. The CLI and phone still work; for the browser UI install with the one-line installer (it bundles the UI) or build it and set NEUMANN_WEB_DIST_DIR.

Still stuck? Share a doctor report

Terminal
neumann doctor --share

This prints a report with tokens, cookies, keys, IP addresses, emails, and your home path removed, ready to paste into Discord or a GitHub issue. Skim it before posting.