Files
clawdbot/docs/platforms/mac/child-process.md

2.3 KiB
Raw Blame History

summary, read_when
summary read_when
Gateway lifecycle on macOS (launchd + attach-only)
Integrating the mac app with the gateway lifecycle

Gateway lifecycle on macOS

The macOS app manages the Gateway via launchd by default. This gives you reliable autostart at login and restart on crashes.

Childprocess mode (Gateway spawned directly by the app) is not in use today. If you need tighter coupling to the UI, use Attachonly and run the Gateway manually in a terminal.

Default behavior (launchd)

  • The app installs a peruser LaunchAgent labeled com.clawdbot.gateway (or com.clawdbot.<profile> when using --profile/CLAWDBOT_PROFILE).
  • When Local mode is enabled, the app ensures the LaunchAgent is loaded and starts the Gateway if needed.
  • Logs are written to the launchd gateway log path (visible in Debug Settings).

Common commands:

launchctl kickstart -k gui/$UID/com.clawdbot.gateway
launchctl bootout gui/$UID/com.clawdbot.gateway

Replace the label with com.clawdbot.<profile> when running a named profile.

Attachonly (developer mode)

Attachonly tells the app to connect to an existing Gateway without spawning one. This is ideal for local dev (hotreload, custom flags).

Steps:

  1. Start the Gateway yourself:
    pnpm gateway:watch
    
  2. In the macOS app: Debug Settings → Gateway → Attach only.

The UI should show “Using existing gateway …” once connected.

Unsigned dev builds

scripts/restart-mac.sh --no-sign is for fast local builds when you dont have signing keys. To prevent launchd from pointing at an unsigned relay binary, it:

  • Writes ~/.clawdbot/disable-launchagent.
  • Sets clawdbot.gateway.attachExistingOnly=true in the macOS app defaults.

Signed runs of scripts/restart-mac.sh clear these overrides if the marker is present. To reset manually:

rm ~/.clawdbot/disable-launchagent
defaults write com.clawdbot.mac clawdbot.gateway.attachExistingOnly -bool NO

Remote mode

Remote mode never starts a local Gateway. The app uses an SSH tunnel to the remote host and connects over that tunnel.

Why we prefer launchd

  • Autostart at login.
  • Builtin restart/KeepAlive semantics.
  • Predictable logs and supervision.

If a true childprocess mode is ever needed again, it should be documented as a separate, explicit devonly mode.