macOS에서의 Gateway 라이프사이클

macOS 앱은 기본적으로 launchd를 통해 Gateway를 관리하며, Gateway를 자식 프로세스로 생성하지 않습니다. 먼저 설정된 포트에서 이미 실행 중인 Gateway에 연결을 시도하고, 연결할 수 없으면 외부 openclaw CLI를 통해 launchd 서비스를 활성화합니다 (내장 런타임 없음). 이를 통해 로그인 시 자동 시작 및 크래시 시 재시작이 안정적으로 작동합니다.

자식 프로세스 모드 (앱이 직접 Gateway를 생성)는 현재 사용되지 않습니다. UI와 더 긴밀한 연결이 필요하면, 터미널에서 Gateway를 수동으로 실행하세요.

기본 동작 (launchd)

  • 앱은 bot.molt.gateway 레이블의 사용자별 LaunchAgent를 설치합니다 (--profile/OPENCLAW_PROFILE 사용 시 bot.molt.<profile>; 레거시 com.openclaw.* 지원).
  • 로컬 모드가 활성화되면, 앱은 LaunchAgent가 로드되었는지 확인하고 필요 시 Gateway를 시작합니다.
  • 로그는 launchd gateway 로그 경로에 기록됩니다 (Debug Settings에서 확인 가능).

일반적인 명령:

launchctl kickstart -k gui/$UID/bot.molt.gateway
launchctl bootout gui/$UID/bot.molt.gateway

네임드 프로필 실행 시 레이블을 bot.molt.<profile>로 교체하세요.

서명되지 않은 개발 빌드

scripts/restart-mac.sh --no-sign은 서명 키가 없을 때 빠른 로컬 빌드를 위한 것입니다. launchd가 서명되지 않은 릴레이 바이너리를 가리키는 것을 방지하기 위해:

  • ~/.openclaw/disable-launchagent를 작성합니다.

서명된 scripts/restart-mac.sh 실행은 마커가 있으면 이 오버라이드를 제거합니다. 수동으로 재설정하려면:

rm ~/.openclaw/disable-launchagent

연결 전용 모드

macOS 앱이 launchd를 설치하거나 관리하지 않도록 강제하려면, --attach-only (또는 --no-launchd)로 시작하세요. 이는 ~/.openclaw/disable-launchagent를 설정하므로, 앱은 이미 실행 중인 Gateway에만 연결합니다. Debug Settings에서 동일한 동작을 토글할 수 있습니다.

Remote 모드

Remote 모드는 로컬 Gateway를 시작하지 않습니다. 앱은 원격 호스트로의 SSH 터널을 사용하고 해당 터널을 통해 연결합니다.

launchd를 선호하는 이유

  • 로그인 시 자동 시작.
  • 내장된 재시작/KeepAlive 의미론.
  • 예측 가능한 로그 및 감독.

진정한 자식 프로세스 모드가 다시 필요해지면, 별도의 명시적인 개발 전용 모드로 문서화되어야 합니다.