Approve new channels, and connections to openclaw ui and terminal
by @dr1nnas
Web dashboard to approve OpenClaw device and channel pairings, manage connections, and access a live terminal from your browser.
clawhub install approvals-uiπ About This Skill
Approvals UI
A web dashboard for managing OpenClaw device pairings, channel approvals, and a live terminal β all from your browser.
Install
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
Requirements
Install Python dependencies:
pip install flask flask-socketio
β οΈ Important β Change These Before Running
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.
Credential Explanation
There are two separate auth layers:
1. Dashboard login (ADMIN_USERNAME / ADMIN_PASSWORD) β protects the web UI pages (dashboard, device pairings, channel approvals, terminal).
2. API password (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.
Usage
Start the server:
cd ~/.openclaw/workspace/projects/p1
python3 server.py
Then open http://127.0.0.1:9100 in your browser.
Features
How It Works
~/.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.Security Notes
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.Configuration
| 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 |
Tags
ui dashboard pairings approvals terminal web
π‘ Examples
Start the server:
cd ~/.openclaw/workspace/projects/p1
python3 server.py
Then open http://127.0.0.1:9100 in your browser.
βοΈ Configuration
| 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 |