Appearance
OpenClaw — Development Notes
Current State (2026-02-16)
Platform: WSL Ubuntu (native install) — migrated from Docker to solve browser dashboard pairing issue.
| Component | Status | Details |
|---|---|---|
| OpenClaw | v2026.2.15 | npm install -g openclaw in WSL |
| Node.js | v22.22.0 | via nodesource |
| gogcli | v0.11.0 | /usr/local/bin/gog |
| LLM | anthropic/claude-sonnet-4-5 | API key via env var |
| Gateway | Running (systemd) | port 18789, loopback, auto-starts on WSL boot |
| Dashboard | Working | http://localhost:18789/#token=<token> |
| TUI | Working | openclaw tui |
| Gmail (gogcli) | Working via agent | richard@salesfield.net, keyring password persisted in systemd |
| Web fetch | Working | Tested: HN headline scrape via dashboard |
| Brave Search | NOT configured | Only set in old Docker image |
| Messaging channels | None connected | Telegram/WhatsApp pending |
| Agent identity | Not personalized | SOUL.md / IDENTITY.md exist but uncustomized |
Resume Checklist (Pick Up Here)
The gateway runs as a systemd service and auto-starts. No manual startup needed.
To verify it's running:
bash
systemctl --user status openclaw-gateway.serviceTo open the dashboard:
http://localhost:18789/#token=be91558ddb97799b89cbf67db3199f14f97efc704140675eOr run openclaw dashboard --no-open for a fresh tokenized URL.
TUI (optional): openclaw tui in any WSL terminal.
If gateway is stopped for any reason:
bash
systemctl --user start openclaw-gateway.serviceWhat's Done
- [x] Gateway running as systemd service (auto-starts, survives terminal close)
- [x] GOG_KEYRING_PASSWORD persisted in systemd override (
~/.config/systemd/user/openclaw-gateway.service.d/override.conf) - [x] Gmail working through agent — agent knows to use
gogcommands (configured in TOOLS.md) - [x] User lingering enabled (
loginctl enable-linger ic0s) — services persist without login session - [x] WSL set as default distro
- [x] Dashboard, TUI, web fetch all confirmed working
TODO (Next Session)
- [ ] Personalize agent identity — edit SOUL.md / IDENTITY.md in
~/.openclaw/workspace/ - [ ] Set Brave Search API key in WSL OpenClaw config
- [ ] Connect a messaging channel (Telegram or WhatsApp)
- [ ] Persist ANTHROPIC_API_KEY — currently in systemd service, verify it survives updates
- [ ] Set up persistent volume / backup for
~/.openclaw/data
Key Gotchas
Docker NAT breaks device pairing (why we moved to WSL)
Docker Desktop on Windows routes through NAT (172.17.0.x). OpenClaw rejects non-loopback WebSocket connections. Config bypasses are broken in v2026.2.14. WSL native install fixes this — browser connects via true 127.0.0.1.
gogcli keyring passphrase
gogcli encrypts tokens with a keyring passphrase. For the agent to use gogcli non-interactively, GOG_KEYRING_PASSWORD must be set in the gateway's environment. This is now handled via systemd override.
gogcli is not on npm
OpenClaw docs say npm install -g gog-cli — that package doesn't exist. Install binary from GitHub releases: https://github.com/steipete/gogcli. Binary name is gog.
gogcli auth requires --manual in WSL
gog auth add email@domain.com --manual --services gmail — gives URL to visit, paste back the FULL redirect URL (not just the auth code).
gogcli credentials setup
Must run gog auth credentials set <path-to-client_secret.json> before gog auth add. Credentials stored at ~/.config/gogcli/credentials.json.
OpenClaw command names
- Gateway:
openclaw gateway(notopenclaw run) - Chat:
openclaw tui(nochatcommand) - Plugins:
openclaw plugins install(notadd),openclaw plugins list(notsearch)
Browser token caching
Browser caches device tokens in localStorage per origin. When switching installs or regenerating tokens, use the tokenized URL (#token=...) or clear localStorage.
WSL sudo password
If forgotten: wsl -d Ubuntu -u root passwd <username> from Windows cmd.
Systemd service management
bash
systemctl --user start openclaw-gateway.service
systemctl --user stop openclaw-gateway.service
systemctl --user restart openclaw-gateway.service
systemctl --user status openclaw-gateway.serviceEditing systemd overrides without nano
bash
# Create/edit override (avoids nano):
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
echo -e '[Service]\nEnvironment="KEY=value"' > ~/.config/systemd/user/openclaw-gateway.service.d/override.conf
systemctl --user daemon-reload
systemctl --user restart openclaw-gateway.serviceArchitecture
WSL Ubuntu (native)
├── OpenClaw Gateway (:18789, loopback, systemd managed)
│ ├── LLM: Anthropic Claude Sonnet 4.5
│ ├── gogcli (Gmail for richard@salesfield.net) — keyring password via systemd env
│ ├── Skills (configurable via clawhub)
│ └── Channels (none connected yet)
├── Browser dashboard: http://localhost:18789
└── TUI: openclaw tuiKey Files
| File | Location | Purpose |
|---|---|---|
| OpenClaw config | ~/.openclaw/openclaw.json | Main config |
| Workspace files | ~/.openclaw/workspace/ | SOUL.md, IDENTITY.md, TOOLS.md, etc. |
| TOOLS.md | ~/.openclaw/workspace/TOOLS.md | Agent tool config (gogcli setup is here) |
| Systemd service | ~/.config/systemd/user/openclaw-gateway.service | Auto-start service |
| Systemd override | ~/.config/systemd/user/openclaw-gateway.service.d/override.conf | GOG_KEYRING_PASSWORD env var |
| gogcli credentials | ~/.config/gogcli/credentials.json | Google OAuth client |
| gogcli keyring | ~/.config/gogcli/keyring | Encrypted tokens |
| Google OAuth creds | d:\_open-claw\client_secret_*.json | Source file — DO NOT commit |
| This file | d:\_open-claw\_TEMP\CLAUDE.md | Dev session notes |
| Project CLAUDE.md | d:\_open-claw\CLAUDE.md | Repo-level instructions |
| Cheat sheet | d:\_open-claw\_TEMP\cheat_sheet.png | Community reference |
Docker Reference (archived — fallback only)
bash
# Image: my-openclaw-agent:configured (has gogcli Gmail auth + Brave Search)
docker run -it -e ANTHROPIC_API_KEY="sk-ant-..." -p 8080:8080 --name openclaw my-openclaw-agent:configured sh
docker exec -it openclaw /app/openclaw.mjs tui
docker commit openclaw my-openclaw-agent:configuredSecurity
- WSL is less sandboxed than Docker — OpenClaw has full WSL filesystem access
- Never expose gateway port to the internet (bind stays
loopback) - Google OAuth: revoke at https://myaccount.google.com/permissions
- Community skills: check VirusTotal on ClawHub before installing
GOG_KEYRING_PASSWORDis in systemd override — don't share that file
Links
- Docs: https://docs.openclaw.ai/cli
- GitHub: https://github.com/openclaw/openclaw
- gogcli: https://github.com/steipete/gogcli
- Google Cloud Console: https://console.cloud.google.com (project: hardy-order-487602-n6)
- Revoke Google access: https://myaccount.google.com/permissions