OpenClaw macOS Web UI 토큰 오류 해결법 (unauthorized / token mismatch)

2026-02-19

OpenClaw 업데이트나 설정 변경 후 Web UI가 계속 끊기는 문제가 있었다. macOS launchd 서비스와 Control UI의 Gateway Token이 어긋나면 발생하는 증상이다. 이 글에서는 토큰을 찾아 두 곳에 동일하게 맞추는 방법을 순서대로 정리한다.

증상#

설치/업데이트 후 Dashboard URL은 뜨지만 Web UI가 안 열리거나, 열려도 계속 끊긴다.

disconnected (1008): unauthorized: device token mismatch (rotate/reissue device token)
disconnected (1008): unauthorized: gateway token missing (open the dashboard URL and paste the token in Control UI settings)
Cron failed: gateway closed (1008): unauthorized: device token mismatch

openclaw gateway restart가 성공 메시지를 띄워도 Web UI 에러가 사라지지 않는다면 토큰 불일치가 원인이다.

왜 이런 문제가 생기나#

OpenClaw가 업데이트·설정 변경·doctor fix 실행 등의 특정 상황에서 Gateway Token을 새로 생성/회전(rotate) 시킨다. 이때 launchd 서비스 파일(LaunchAgent plist) 또는 Control UI 설정이 변경을 따라가지 못하면 인증이 깨진다.

  • 게이트웨이는 정상 실행 중 (포트 LISTEN)
  • UI는 "토큰이 없거나 틀리다"고 판단해서 연결을 끊음

단계별 해결 방법#

1단계 — 게이트웨이가 실제로 떠있는지 확인#

lsof -nP -iTCP:18789 -sTCP:LISTEN

아래처럼 IPv4/IPv6 두 줄이 보이면 게이트웨이 프로세스는 살아있는 것이다.

node ... TCP 127.0.0.1:18789 (LISTEN)
node ... TCP [::1]:18789 (LISTEN)

2단계 — launchd 서비스 방식으로 통일#

openclaw gateway start/stop을 쳤을 때 "service not loaded"가 나오면서도 포트가 열려 있다면, launchd 서비스와 수동 실행이 혼재하는 상태다.

서비스 방식(LaunchAgent) 하나로 통일하는 것이 가장 깔끔하다.

# 이미 떠있는 프로세스가 있다면 PID로 종료
kill <PID>
# 안 꺼지면
kill -9 <PID>

# launchd 방식으로 재로드
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist

3단계 — openclaw.json에서 Gateway Token 찾기#

올바른 Gateway Token은 ~/.openclaw/openclaw.json에 저장돼 있다. 키 이름이 대소문자·camelCase로 다를 수 있으니 아래처럼 넓게 검색한다.

head -n 30 ~/.openclaw/openclaw.json
grep -ni "token" ~/.openclaw/openclaw.json
grep -ni "gateway" ~/.openclaw/openclaw.json

팁: ~/.openclaw 폴더가 Finder에 보이지 않는다면 ⌘ + Shift + . 를 눌러 숨김 파일을 표시하거나, Finder → 이동 → 폴더로 이동(~/.openclaw)을 사용한다.

4단계 — launchd plist에 토큰 반영#

LaunchAgent plist를 열고 OPENCLAW_GATEWAY_TOKEN 값을 3단계에서 찾은 토큰으로 수정한다.

nano ~/Library/LaunchAgents/ai.openclaw.gateway.plist
  • 저장: Ctrl + O → Enter
  • 종료: Ctrl + X

수정 후 서비스를 재로드한다.

launchctl unload ~/Library/LaunchAgents/ai.openclaw.gateway.plist
launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist

5단계 — Control UI에 Gateway Token 붙여넣기#

Dashboard의 Control UI → Settings 화면에서 아래 값을 입력하고 Connect를 누른다.

OpenClaw Control UI Settings 화면 - WebSocket URL과 Gateway Token 입력란

항목
WebSocket URLws://127.0.0.1:18789
Gateway Token(3단계에서 찾은 값)

주의: 여기에는 "디바이스 토큰"이 아니라 Gateway Token(OPENCLAW_GATEWAY_TOKEN) 을 넣어야 한다.

6단계 — 정상 동작 확인#

openclaw gateway status

RPC probe가 ok로 나오고 Web UI가 정상 동작하면 완료다.

트러블슈팅 / FAQ#

Q. kill <PID> 후에도 포트가 계속 열려있어요.

A. kill -9 <PID>로 강제 종료한 뒤 launchctl bootstrap으로 새로 띄운다.

Q. openclaw.json에서 gateway 관련 키를 못 찾겠어요.

A. cat ~/.openclaw/openclaw.json | python3 -m json.tool로 전체 구조를 보기 좋게 출력한다. gateway 블록 안의 token 필드를 찾는다.

Q. plist를 수정했는데 launchctl load가 실패해요.

A. XML 문법 오류일 수 있다. plutil -lint ~/Library/LaunchAgents/ai.openclaw.gateway.plist로 검증 후 수정한다.

Q. 업데이트마다 반복해야 하나요?

A. OpenClaw가 토큰을 자동 회전시키는 버전이라면 반복될 수 있다. 업데이트 후 Web UI가 끊기면 3~5단계만 다시 진행한다.

다음 단계#

OpenClaw 최초 설치부터 Dashboard/텔레그램 연동까지의 전체 과정은 OpenClaw macOS 설치 방법 (텔레그램 연동 + Dashboard)에서 확인할 수 있다.

공식 문서 및 이슈 트래커: OpenClaw GitHub