/install approvals-ui
Approvals UI\r
\r A web dashboard for managing OpenClaw device pairings, channel approvals, and a live terminal — all from your browser.\r \r
Install\r
\r Place this folder at:\r \r
~/.openclaw/workspace/projects/p1\r
```\r
\r
Your file structure should look like:\r
\r
```\r
~/.openclaw/workspace/projects/p1/\r
├── SKILL.md\r
├── server.py\r
└── templates/\r
├── channel_approvals.html\r
├── dashboard.html\r
├── device_pairings.html\r
├── index.html\r
├── login.html\r
└── terminal.html\r
```\r
\r
## Requirements\r
\r
Install Python dependencies:\r
\r
```bash\r
pip install flask flask-socketio\r
```\r
\r
## ⚠️ Important — Change These Before Running\r
\r
This skill ships with **placeholder credentials** that you **must** change before using:\r
\r
Open `server.py` and update the following values near the top of the file:\r
\r
| What | Variable | Default | Action |\r
|---|---|---|---|\r
| Dashboard login username | `ADMIN_USERNAME` | `Drinnas` | Change to your own username |\r
| Dashboard login password | `ADMIN_PASSWORD` | `admin` | Change to a strong password |\r
| API auth password | `AUTH_PASSWORD` / env `SERVER_AUTH_PASSWORD` | `Bb7766!server` | Change to a strong password or set the env var |\r
| Flask secret key | env `FLASK_SECRET_KEY` | dev placeholder | Set to a random string in your environment |\r
\r
**Example:**\r
\r
```bash\r
export FLASK_SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"\r
export SERVER_AUTH_PASSWORD="your-strong-api-password-here"\r
```\r
\r
> **Do not run with the defaults.** Anyone who knows the defaults can log in and access your terminal and gateway token.\r
\r
### Credential Explanation\r
\r
There are **two separate auth layers**:\r
\r
1. **Dashboard login** (`ADMIN_USERNAME` / `ADMIN_PASSWORD`) — protects the web UI pages (dashboard, device pairings, channel approvals, terminal).\r
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.\r
\r
Both should be set to strong, unique values.\r
\r
## Usage\r
\r
Start the server:\r
\r
```bash\r
cd ~/.openclaw/workspace/projects/p1\r
python3 server.py\r
```\r
\r
Then open **http://127.0.0.1:9100** in your browser.\r
\r
## Features\r
\r
- **Dashboard** — Landing page with quick navigation to all sections.\r
- **Device Pairings** — View pending and paired browser/device connections. Approve or reject pairing requests. Copy your gateway token to clipboard.\r
- **Channel Approvals** — Review and approve pending channel pairing requests (Telegram, Discord, WhatsApp, etc). Real-time updates via Socket.IO.\r
- **Terminal** — Full interactive terminal session in the browser using xterm.js.\r
\r
## How It Works\r
\r
- Reads device pairings directly from `~/.openclaw/devices/pending.json` and `~/.openclaw/devices/paired.json`.\r
- Reads channel pairing requests from `~/.openclaw/credentials/*-pairing.json`.\r
- Reads the gateway token from `~/.openclaw/openclaw.json` → `gateway.auth.token`.\r
- Approve/reject actions use the `openclaw devices approve` and `openclaw devices reject` CLI commands.\r
- No external database needed — everything reads from OpenClaw's own state files.\r
\r
## Security Notes\r
\r
- **Localhost only** — The server binds to `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.\r
- **Terminal access** — The terminal feature gives full shell access to your machine. If you don't need it, you can remove the `/terminal` route and `terminal.html` template.\r
- **Sensitive files** — The app reads your `openclaw.json` (gateway token), device pairing files, and credential pairing files. Anyone who can access the web UI can see this data.\r
- **API endpoints** — `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.\r
\r
## Configuration\r
\r
| Setting | Location | Default |\r
|---|---|---|\r
| Server port | `server.py` bottom | `9100` |\r
| Dashboard login | `server.py` `ADMIN_USERNAME` / `ADMIN_PASSWORD` | `Drinnas` / `admin` |\r
| API password | `server.py` `AUTH_PASSWORD` / env `SERVER_AUTH_PASSWORD` | `Bb7766!server` |\r
| Flask secret key | env `FLASK_SECRET_KEY` | dev placeholder |\r
| OpenClaw state dir | env `OPENCLAW_STATE_DIR` | `~/.openclaw` |\r
\r
## Tags\r
\r
`ui` `dashboard` `pairings` `approvals` `terminal` `web`\r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install approvals-ui - After installation, invoke the skill by name or use
/approvals-ui - Provide required inputs per the skill's parameter spec and get structured output
What is Approve new channels, and connections to openclaw ui and terminal?
Web dashboard to approve OpenClaw device and channel pairings, manage connections, and access a live terminal from your browser. It is an AI Agent Skill for Claude Code / OpenClaw, with 675 downloads so far.
How do I install Approve new channels, and connections to openclaw ui and terminal?
Run "/install approvals-ui" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Approve new channels, and connections to openclaw ui and terminal free?
Yes, Approve new channels, and connections to openclaw ui and terminal is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Approve new channels, and connections to openclaw ui and terminal support?
Approve new channels, and connections to openclaw ui and terminal is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Approve new channels, and connections to openclaw ui and terminal?
It is built and maintained by Dr1nnas (@dr1nnas); the current version is v1.0.1.