paperclipai/paperclip · warning

No Tailscale address was detected during setup. The saved co

Error message

No Tailscale address was detected during setup. The saved config will stay on loopback until Tailscale is available or PAPERCLIP_TAILNET_BIND_HOST is set.

What it means

Same TAILNET_BIND_WARNING constant, hit through `paperclipai configure`'s interactive promptServer: when the user selects the 'Tailnet' reachability preset, buildPresetServerConfig('tailnet') tries to auto-detect the machine's Tailscale address. If the preset's server.host comes back loopback (no address detected), the prompt warns that the saved config will remain on loopback until Tailscale is available or PAPERCLIP_TAILNET_BIND_HOST is set.

Source

Thrown at cli/src/prompts/server.ts:103

      validate: (val) => {
        try {
          parseHostnameCsv(val ?? "");
          return;
        } catch (err) {
          return err instanceof Error ? err.message : "Invalid hostname list";
        }
      },
    });

    if (p.isCancel(allowedHostnamesInput)) cancelled();

    const preset = buildPresetServerConfig(bind, {
      port,
      allowedHostnames: parseHostnameCsv(allowedHostnamesInput),
      serveUi,
    });
    if (bind === "tailnet" && isLoopbackHost(preset.server.host)) {
      p.log.warn(TAILNET_BIND_WARNING);
    }
    return preset;
  }

  const deploymentModeSelection = await p.select({
    message: "Auth mode",
    options: [
      {
        value: "local_trusted",
        label: "Local trusted",
        hint: "No login required; only safe with loopback-only or similarly trusted access",
      },
      {
        value: "authenticated",
        label: "Authenticated",
        hint: "Login required; supports both private-network and public deployments",
      },
    ],

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Start and authenticate Tailscale (tailscale up), confirm `tailscale ip -4` prints an address, re-run paperclipai configure and pick Tailnet again.
  2. Or export PAPERCLIP_TAILNET_BIND_HOST=<tailscale-ip> before configure so the preset uses it.
  3. Accept loopback for now and reconfigure later once the machine is on the tailnet.

Example fix

# before
$ paperclipai configure   # Reachability: Tailnet
! No Tailscale address was detected during setup. ...

# after
$ tailscale up && tailscale ip -4
100.64.0.5
$ paperclipai configure   # Tailnet preset now binds 100.64.0.5
Defensive patterns

Strategy: validation

Validate before calling

let host: string | null = null;
try { host = execFileSync("tailscale", ["ip", "-4"], { encoding: "utf8" }).trim(); } catch {}
const effectiveHost = host ?? process.env.PAPERCLIP_TAILNET_BIND_HOST ?? null;
if (!effectiveHost) {
  // defer the Tailnet preset; choosing it now yields a loopback fallback
}

Type guard

const isLoopback = (h: string | undefined | null): boolean =>
  !!h && (h === "127.0.0.1" || h === "localhost" || h.startsWith("127."));
// post-check: if (bind === "tailnet" && isLoopback(preset.server.host)) -> warn user

Prevention

When it happens

Trigger: In promptServer: choosing 'Tailnet' under Reachability while `tailscale ip -4` yields no address and PAPERCLIP_TAILNET_BIND_HOST is unset.

Common situations: Configuring on a machine where tailscaled is installed but logged out; corporate VMs without Tailscale; running configure before onboarding Tailscale itself.

Related errors


AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18). Data as JSON: /api/errors/a7472096af6505e6. Report an issue: GitHub.