Tools
Wsl Onboarding
Claude Code plugin: WSL2-only OpenClaw onboarding from npm install to a running Gateway + Control UI dashboard
Install
npm install -g
Configuration Example
{"ts":"2026-04-19T14:36:35Z","status":"success","duration_s":380,"model":"openai/gpt-5.4-mini","steps":{"install":"ok","path_fix":"appended","onboard":"ok","gateway":"listening"},"warnings":["stale gateway killed"]}
{"ts":"2026-04-19T15:13:10Z","status":"failure","duration_s":67,"phase":"onboard","error":"--xai-api-key flag not recognized; run openclaw onboard --help","warnings":[]}
README
# openclaw-wsl-onboarding-plugin
Claude Code์ฉ ํ๋ฌ๊ทธ์ธ์
๋๋ค. WSL2 ์์์ [OpenClaw](https://openclaw.ai)๋ฅผ **npm ์ค์น๋ถํฐ Gateway ์คํ + Control UI ๋์๋ณด๋ ์คํ๊น์ง** ํ ๋ฒ์ ๋๋ด์ค๋๋ค.
---
## Why โ ์ ๋ง๋ค์๋
OpenClaw ์ฒ์ ๊น์๋ณด๋ฉด ๋ค์ ์ง์ ์์ ์์ฃผ ๋งํ๋๋ค.
- **๋ค์ดํฐ๋ธ Windows ์ค์น ๊ฒฝ๋ก์ ๋ง์ฐฐ**: Gateway๋ฅผ ์๋น์ค๋ก ๋ฑ๋กํ๋ ค๋ฉด Scheduled Task ๊ถํ์ด ํ์ํ๊ณ , ๋ค๋ฅธ OpenClaw ์ธ์คํด์ค(WSL์ชฝ ๋ฑ)์ Bonjour/mDNS ์ด๋ฆ ์ถฉ๋๋ก `(2)`, `(3)`์ด ๋ถ์ผ๋ฉฐ ๋ก๊ทธ๊ฐ ๋๋ฐฐ๋ฉ๋๋ค.
- **๋น๋ํํ onboarding์ ์จ๊ฒจ์ง ํ๋๊ทธ๋ค**: `--accept-risk`๊ฐ ๋น ์ง๋ฉด ์ฆ์ ๊ฑฐ๋ถ๋๊ณ , `--skip-daemon`์ ์ ์ฐ๋ฉด ์๋น์ค ์ค์น ๋จ๊ณ์์ ์คํจํ๋ฉฐ, `--skip-health`๊ฐ ์์ผ๋ฉด ์์ง ๋จ์ง๋ ์์ Gateway๋ฅผ health checkํ๋ฌ ๊ฐ๋ค ํฐ์ง๋๋ค.
- **API ํค ์ ์ฅ ๋ชจ๋์ ํจ์ **: `--secret-input-mode ref`๋ก ์จ๋ณด๋ฉํ๋ฉด TUI๊ฐ ์คํ๋ ๋๋ง๋ค `No API key found for provider "<provider>". Auth store: ~/.openclaw/agents/main/agent/auth-profiles.json` ์๋ฌ๋ก ์คํจํฉ๋๋ค. env var๊ฐ ํด๋น ์์ export๋ผ์์ด์ผ๋ง ๋์ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
- **PATH๊ฐ ์คํฌ๋ฆฝํธ์์๋ง ์ ๋จนํ๋ ๋ฌธ์ **: Ubuntu ๊ธฐ๋ณธ `~/.bashrc`๋ ํ์ผ ์ฒซ ๋ถ๋ถ์์ ๋น๋ํํ ์์ด๋ฉด ์ฆ์ `return`ํ๊ธฐ ๋๋ฌธ์, ๊ทธ ๋ค์ ์ถ๊ฐํ PATH export๊ฐ `bash -lc`๋ก ๋ค์ด์จ ๋ช
๋ น์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก `openclaw: command not found`๊ฐ ์คํฌ๋ฆฝํธ์์๋ง ๋ฉ๋๋ค.
- **์ค์ ํค ์ด๋ฆ์ ๋น์๋ช
ํจ**: mDNS๋ฅผ ๋๊ณ ์ถ์ด์ `gateway.advertise.mdns = false`๋ผ๊ณ ์ฐ๋ฉด `Unrecognized key`๋ก ํ๊น๋๋ค. ์ค์ ํค๋ `gateway.discovery.mdns.mode`์ด๊ณ ๊ฐ์ `off | minimal | full`์
๋๋ค.
์ด ํ๋ฌ๊ทธ์ธ์ ์ ์ง์ ๋ค์ **ํ ๋ฒ ๊ฒช์ ์ฌ๋์ด ์ ๋ต๋ง ์ถ๋ ค์** ์คํฌ๋ฆฝํธ ๊ฐ๋ฅํ ํํ๋ก ๋ฌถ์ ๊ฒ์
๋๋ค. ๋๋ฃ๊ฐ OpenClaw๋ฅผ ์ WSL์ ์ฒ์ ๊น ๋ ๊ฐ์ ํจ์ ์ ๋ค์ ๋ฐ์ง ์๊ฒ ํ๋ ๊ฒ์ด ๋ชฉ์ ์
๋๋ค.
---
## What โ ๋ฌด์์ด ๋ค์ด์๋
```
.
โโโ .claude-plugin/plugin.json # ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ
โโโ skills/openclaw-onboarding/SKILL.md # ์ค์น~๋์๋ณด๋ ์คํ + ์คํ ๋ก๊ทธ ์์ฑ๊น์ง ์ ๋ถ
```
๋จ ํ๋์ ์คํฌ์ด ์ ์ฒด ํ๋ก์ฐ๋ฅผ ์ํํฉ๋๋ค. ์๋ธ์์ด์ ํธ๋ ํ
์ ๋ฃ์ง ์์์ต๋๋ค โ ํ ์ฐจ๋ก ๋ฃ์ด๋ดค์ง๋ง, ๋ก๊ทธ ์์ฑ ์ฃผ์ฒด๊ฐ ์คํฌ ๋ณธ์ธ์ผ๋ก ์ถฉ๋ถํด์ง๋ ์๊ฐ ๋ณ๋ ์ปดํฌ๋ํธ๋ ์ค๋ฒ์์ง๋์ด๋ง์ด ๋์์ต๋๋ค.
**์คํฌ์ด ํ๋ ์ผ** (ํธ์ถ๋๋ฉด ์์๋๋ก)
1. `AskUserQuestion` ํผ์ผ๋ก LLM provider์ (์ ํ) ๋ชจ๋ธ ID๋ฅผ ์์งํ๋ค
2. ์ฌ์ฉ์์๊ฒ **`C:\Users\<username>\Downloads\api.txt`** ํ์ผ์ API ํค๋ฅผ ํ๋ฌธ ํ ์ค๋ก ์ ์ฅํด๋ฌ๋ผ๊ณ ์๋ดํ๋ค. ํค๋ ๋ํ์ฐฝ์ ์ ๋ ๋ฐ์ง ์๋๋ค
3. WSL2 ์์์ Node ๋ฒ์ ์ ํ์ธํ๋ค
4. `npm install -g openclaw` ๋ก ์ค์นํ๋ค
5. `~/.profile` ์ `~/.npm-global/bin` PATH ๋ธ๋ก์ด ์์ผ๋ฉด ์ถ๊ฐํ๋ค (๋น๋ํํ ์์์ `openclaw` ํด์ ๋ณด์ฅ)
6. `openclaw onboard --non-interactive --accept-risk --<provider>-api-key "$(cat /mnt/c/Users/<win_user>/Downloads/api.txt)" --skip-daemon --skip-channels --skip-health --secret-input-mode plaintext` ๋ก ์จ๋ณด๋ฉ. `$(cat โฆ)` ์นํ์ WSL ์ ์์์๋ง ํ๊ฐ๋๋ฏ๋ก ํค ๋ฐ์ดํธ๋ Claude ์ปจํ
์คํธ์ ๋ค์ด์ค์ง ์๋๋ค
7. ์จ๋ณด๋ฉ์ด ์ธ์ฆ ํ๋กํ ํ์ผ์ ์ ์ ์์ฑํ๋ฉด `Downloads/api.txt` ๋ฅผ ์ญ์ ํด ๊ฐ์ ํค๊ฐ ๋์คํฌ์ ๋ ๋ฒ ๋จ์ง ์๊ฒ ํ๋ค
8. ์ฌ์ฉ์๊ฐ ๋ชจ๋ธ์ ์ง์ ํ์ผ๋ฉด `~/.openclaw/openclaw.json` ์ ํ์ด์ฌ์ผ๋ก ํธ์งํด `agents.defaults.model.primary` ๋ฅผ ์ ๋ชจ๋ธ ID๋ก ๋ฐ๊พธ๊ณ , `agents.defaults.models` ์๋ ํด๋น ํญ๋ชฉ์ ์ถ๊ฐํ๋ค
9. ์ข๋น Gateway ๊ฐ ์์ผ๋ฉด `pkill -9 -f openclaw-gateway` ๋ก ์ ๋ฆฌ
10. `nohup openclaw gateway run` ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ธฐ๋ ํ `127.0.0.1:18789` LISTEN ์ํ๋ฅผ ์ต๋ 10์ด๊น์ง ํด๋ง
11. ์ค์ ํ์ผ์์ Gateway ์ธ์ฆ ํ ํฐ์ ์ถ์ถํด ๋์๋ณด๋ URL + ํ ํฐ + ๊ฒฝ๊ณ ์ฌํญ์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ
12. `~/.claude/logs/openclaw-onboarding.log` ์ ์ด๋ฒ ์คํ ์์ฝ JSONL ํ ์ค์ append (์ฑ๊ณต/์คํจ ๋ชจ๋)
**์ค๊ณ์ ํ๊ณ (์๋๋ ์ ์ฝ)**
- **WSL2 ์ ์ฉ**: ๋ค์ดํฐ๋ธ Windows ๊ฒฝ๋ก๋ ์๋์ ์ผ๋ก ๋ค๋ฃจ์ง ์์ต๋๋ค. ๊ทธ์ชฝ์ ํจ์ ์ด ๋ง์ ์ ์ง๋ณด์ ๋น์ฉ์ด ํจ์ฌ ํฝ๋๋ค.
- **๋ก์ปฌ ๋ฃจํ๋ฐฑ ์ฑ๊ธ ์ ์ **: Gateway๋ `127.0.0.1:18789` ์ ๋ฐ์ธ๋ํฉ๋๋ค. LAN ๋
ธ์ถ์ ๋ฒ์ ๋ฐ์
๋๋ค.
- **API ํค ํ๋ฌธ ์ ์ฅ**: ์จ๋ณด๋ฉ ํ ํค๋ `~/.openclaw/agents/main/agent/auth-profiles.json` ์ ํ์ผ ๊ถํ 600์ผ๋ก ํ๋ฌธ ์ ์ฅ๋ฉ๋๋ค. `ref` ๋ชจ๋์ ๋ฐํ์ env ์์กด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํ ์๋์ ์ ํ์ด๋ฉฐ, ๊ณต์ ๋จธ์ ์๋ ๊ถ์ฅํ์ง ์์ต๋๋ค.
- **ํค ์ ๋ฌ ๊ฒฝ๋ก**: ์ฌ์ฉ์๋ ํค๋ฅผ ๋ํ์ฐฝ์ ๋ถ์ฌ๋ฃ์ง ์๊ณ `Downloads/api.txt` ํ์ผ์ ์ ์ฅํ๋ฉฐ, ์คํฌ์ WSL ์์ shell substitution์ผ๋ก๋ง ์ฝ์ต๋๋ค. ์ด ๊ฒฝ๋ก ๋์ ํค ์๋ฌธ์ Claude Code ๋ํ ์ ์ฌ, ํด ํธ์ถ ์ธ์, ํด ๊ฒฐ๊ณผ ์ค ์ด๋์๋ ๋จ์ง ์์ต๋๋ค. ์จ๋ณด๋ฉ์ด ์ฑ๊ณตํ๋ฉด `api.txt` ๋ ์ฆ์ ์ญ์ ๋ฉ๋๋ค.
---
## How โ ์ด๋ป๊ฒ ์ฐ๋
### ์ค์น
Claude Code ์ธ์
์์:
```
/plugin install https://github.com/OpenClaw-Korea/openclaw-wsl-onboarding-plugin
```
๋๋ ๋ก์ปฌ ํด๋ก ํ ๊ฒฝ๋ก๋ก ์ค์น:
```bash
git clone https://github.com/OpenClaw-Korea/openclaw-wsl-onboarding-plugin \
~/.claude/local-plugins/openclaw-onboarding
```
```
/plugin install ~/.claude/local-plugins/openclaw-onboarding
```
### ์ฌ์ ์กฐ๊ฑด
ํธ์คํธ(Windows):
- Windows 10 ์ด์ + WSL2 ํ์ฑํ
- WSL์ Ubuntu(๋๋ ํธํ ๋ฐฐํฌํ) ์ค์น
WSL ๋ด๋ถ:
- Node 24 ๊ถ์ฅ (22.14+ ํ์ฉ)
- `npm`, `python3`, `jq` โ Ubuntu ๊ธฐ๋ณธ ์
์ ํฌํจ๋จ
### ์คํ
Claude Code ๋ํ ์ค์ ์๋ ๋น์ทํ๊ฒ ๋งํ๋ฉด ์คํฌ์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
- "openclaw WSL์ ๊น์์ค"
- "openclaw ์ฒ์๋ถํฐ ์ค์ "
- "install openclaw"
- "get the openclaw dashboard running"
์คํฌ์ด provider์ API ํค๋ฅผ ๋ฌป๊ณ , ์ํ๋ ๋ชจ๋ธ ID(์ ํ)๊น์ง ๋ฐ์ ๋ค subagent์ ์ผ์ ๋๊น๋๋ค. subagent๋ WSL ์์์ ์ ์ฒด ํ๋ก์ฐ๋ฅผ ๋๋ฆฐ ๋ค ๋ค์์ ๋ฆฌํฌํธํฉ๋๋ค.
- ๋์๋ณด๋ URL (๋ณดํต `http://127.0.0.1:18789/`)
- Gateway ์ธ์ฆ ํ ํฐ
- ์ฌ์ฉ๋ primary ๋ชจ๋ธ
- ๊ฒฝ๊ณ ์ฌํญ(๊ธฐ์กด ์ค์น ๋ฆฌ์
, PATH ์์ , ์ข๋น Gateway ์ ๋ฆฌ ๋ฑ)
- ๋ค์ ์ก์
(๋์๋ณด๋ ์ด๊ธฐ / `openclaw tui` ์คํ)
### ๋ก๊ทธ ํ์ธ
๋งค ์คํ๋ง๋ค `~/.claude/logs/openclaw-onboarding.log` ์ JSONL ํ ์ค์ด ๋จ์ต๋๋ค.
```bash
wsl -e bash -c "tail -f ~/.claude/logs/openclaw-onboarding.log"
```
์์:
```json
{"ts":"2026-04-19T14:36:35Z","status":"success","duration_s":380,"model":"openai/gpt-5.4-mini","steps":{"install":"ok","path_fix":"appended","onboard":"ok","gateway":"listening"},"warnings":["stale gateway killed"]}
{"ts":"2026-04-19T15:13:10Z","status":"failure","duration_s":67,"phase":"onboard","error":"--xai-api-key flag not recognized; run openclaw onboard --help","warnings":[]}
```
jq๋ก ๋ฐ๋ก ๋ถ์ํ ์ ์์ต๋๋ค.
```bash
# ์ต๊ทผ ์คํจ๋ง
jq -c 'select(.status=="failure")' ~/.claude/logs/openclaw-onboarding.log
# ์์ฃผ ๋จ๋ warning ์ง๊ณ
jq -r '.warnings[]?' ~/.claude/logs/openclaw-onboarding.log | sort | uniq -c | sort -rn
# ํ๊ท ์ฑ๊ณต duration (์ด)
jq -s '[.[] | select(.status=="success") | .duration_s] | add/length' ~/.claude/logs/openclaw-onboarding.log
```
---
## ๋ณด์ ๊ถ๊ณ
- ๊ฐ๋ฅํ๋ฉด API ํค๋ฅผ Claude Code ์ฑํ
์ ์ง์ ๋ถ์ฌ๋ฃ์ง ๋ง์ธ์. ์ฑํ
์ ์ฌ์ ๋จ์ต๋๋ค. ์ด๋ฏธ ๋ถ์ฌ๋ฃ์๋ค๋ฉด ์จ๋ณด๋ฉ์ด ๋๋๋ ์ฆ์ provider์ ํค ๊ด๋ฆฌ ํ์ด์ง์์ **rotate**ํ์ธ์.
- ์ด ํ๋ฌ๊ทธ์ธ์ ํค๋ฅผ ์ธ๋ถ๋ก ์ ์กํ์ง ์์ต๋๋ค. WSL ์์์ `openclaw onboard`๋ฅผ ๋ก์ปฌ๋ก ํธ์ถํ ๋ฟ์ด๋ฉฐ, ํค๋ OpenClaw๊ฐ ์์ฒด ํ์ผ(`~/.openclaw/agents/main/agent/auth-profiles.json`)์ ์ ์ฅํฉ๋๋ค.
- Gateway๋ loopback ๋ฐ์ธ๋๊ฐ ๊ธฐ๋ณธ์
๋๋ค. `gateway.bind`๋ฅผ `lan` ๋๋ `auto`๋ก ๋ฐ๊พธ๊ธฐ ์ ์ ํด๋น ๋คํธ์ํฌ์ ์ ๊ทผ ์ฃผ์ฒด๋ฅผ ๋ฐ๋์ ์ ๊ฒํ๊ณ ๊ฐ๋ ฅํ ํ ํฐ์ ์ค์ ํ์ธ์.
---
## ๋ผ์ด์ ์ค
MIT
tools
Comments
Sign in to leave a comment