Install
openclaw skills install approvals-uiWeb dashboard to approve OpenClaw device and channel pairings, manage connections, and access a live terminal from your browser.
openclaw skills install approvals-uiA web dashboard for managing OpenClaw device pairings, channel approvals, and a live terminal — all from your browser.
Place this folder at:
~/.openclaw/workspace/projects/p1
Your file structure should look like:
~/.openclaw/workspace/projects/p1/
├── SKILL.md
├── server.py
└── templates/
├── channel_approvals.html
├── dashboard.html
├── device_pairings.html
├── index.html
├── login.html
└── terminal.html
Install Python dependencies:
pip install flask flask-socketio
This skill ships with placeholder credentials that you must change before using:
Open server.py and update the following values near the top of the file:
| What | Variable | Default | Action |
|---|---|---|---|
| Dashboard login username | ADMIN_USERNAME | Drinnas | Change to your own username |
| Dashboard login password | ADMIN_PASSWORD | admin | Change to a strong password |
| API auth password | AUTH_PASSWORD / env SERVER_AUTH_PASSWORD | Bb7766!server | Change to a strong password or set the env var |
| Flask secret key | env FLASK_SECRET_KEY | dev placeholder | Set to a random string in your environment |
Example:
export FLASK_SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
export SERVER_AUTH_PASSWORD="your-strong-api-password-here"
Do not run with the defaults. Anyone who knows the defaults can log in and access your terminal and gateway token.
There are two separate auth layers:
ADMIN_USERNAME / ADMIN_PASSWORD) — protects the web UI pages (dashboard, device pairings, channel approvals, terminal).AUTH_PASSWORD / env SERVER_AUTH_PASSWORD) — protects the backend API endpoints (/pair, /sync, /approve) used for programmatic access. These endpoints are not exposed in the web UI but exist for automation/scripting.Both should be set to strong, unique values.
Start the server:
cd ~/.openclaw/workspace/projects/p1
python3 server.py
Then open http://127.0.0.1:9100 in your browser.
~/.openclaw/devices/pending.json and ~/.openclaw/devices/paired.json.~/.openclaw/credentials/*-pairing.json.~/.openclaw/openclaw.json → gateway.auth.token.openclaw devices approve and openclaw devices reject CLI commands.127.0.0.1 by default. Do not change this to 0.0.0.0 unless you put it behind a reverse proxy with TLS and strong auth./terminal route and terminal.html template.openclaw.json (gateway token), device pairing files, and credential pairing files. Anyone who can access the web UI can see this data.POST /pair, POST /sync, and POST /approve accept JSON with a password field. These are protected by AUTH_PASSWORD and are intended for scripting/automation, not the web UI.| Setting | Location | Default |
|---|---|---|
| Server port | server.py bottom | 9100 |
| Dashboard login | server.py ADMIN_USERNAME / ADMIN_PASSWORD | Drinnas / admin |
| API password | server.py AUTH_PASSWORD / env SERVER_AUTH_PASSWORD | Bb7766!server |
| Flask secret key | env FLASK_SECRET_KEY | dev placeholder |
| OpenClaw state dir | env OPENCLAW_STATE_DIR | ~/.openclaw |
ui dashboard pairings approvals terminal web