1Password Web UI
by @maverick-software
1Password UI tab for OpenClaw dashboard. Manage secrets, credential mappings, and auth state from the Control UI.
clawhub install 1password-uiπ About This Skill
name: 1password-ui description: 1Password UI tab for OpenClaw dashboard. Manage secrets, credential mappings, and auth state from the Control UI. version: 1.1.0 author: OpenClaw Community metadata: {"clawdbot":{"emoji":"π","requires":{"clawdbot":">=2026.1.0"},"category":"tools"}}
1Password UI Extension
Adds a 1Password tab to the OpenClaw Control dashboard under the Tools group. Browse vaults, manage credential mappings for skills, and handle authentication β all from the web UI.
Features
| Feature | Description | |---------|-------------| | Dashboard Tab | "1Password" under Tools in sidebar | | Connection Status | See signed-in account, CLI/Connect mode | | Sign In Flow | Authenticate directly from the UI | | Docker Support | Works with 1Password Connect for containers | | Credential Mappings | Map 1Password items to skill configs |
Agent Installation Prompt
To install this skill, give your agent this prompt:
Install the 1password-ui skill from ClawHub.The skill is at: ~/clawd/skills/1password-ui/
Follow INSTALL_INSTRUCTIONS.md step by step.
Summary of changes needed:
1. Copy 1password-backend.ts to src/gateway/server-methods/1password.ts
2. Register handlers in server-methods.ts
3. Add "1password" tab to navigation.ts (TAB_GROUPS, Tab type, TAB_PATHS, icon, title, subtitle)
4. Add state variables to app.ts
5. Copy 1password-views.ts to ui/src/ui/views/1password.ts
6. Add view rendering to app-render.ts
7. Add tab loading to app-settings.ts
8. Build and restart: pnpm build && pnpm ui:build && clawdbot gateway restart
Prerequisites
For Local Installations (Ubuntu/Windows/macOS)
1. 1Password CLI (op):
# macOS/Linux
brew install 1password-cli
# Or from https://1password.com/downloads/command-line/
2. CLI Integration enabled in 1Password app: - Settings β Developer β "Integrate with 1Password CLI" β
For Docker Installations
See Docker Setup below.
Usage
Sign In
1. Open OpenClaw Dashboard β Tools β 1Password
2. Click Sign In with 1Password
3. Authorize in the 1Password app popup (or run op signin in terminal)
4. Status shows "Connected" with your account
Credential Mappings
Once signed in, you can map 1Password items to skills:
1. Skills like Pipedream can read credentials from 1Password
2. Mappings are stored in ~/clawd/config/1password-mappings.json
3. Format: { "skillId": { "item": "Item Name", "vault": "Private", "fields": {...} } }
Example: Pipedream with 1Password
# Store Pipedream credentials in 1Password
op item create --category="API Credential" --title="Pipedream Connect" \
--vault="Private" \
"client_id[text]=your_client_id" \
"client_secret[password]=your_client_secret" \
"project_id[text]=proj_xxxxx"Use in token refresh
PIPEDREAM_1PASSWORD_ITEM="Pipedream Connect" python3 ~/clawd/scripts/pipedream-token-refresh.py
Gateway RPC Methods
| Method | Description |
|--------|-------------|
| 1password.status | Get CLI/Connect status, signed-in account |
| 1password.signin | Trigger sign-in flow |
| 1password.signout | Sign out of current session |
| 1password.vaults | List available vaults |
| 1password.items | List items in a vault |
| 1password.getItem | Get item field structure (not values) |
| 1password.readSecret | Read a secret (backend only) |
| 1password.mappings.list | Get skill β 1Password mappings |
| 1password.mappings.set | Create/update a mapping |
| 1password.mappings.delete | Remove a mapping |
| 1password.mappings.test | Test if a mapping works |
Docker Setup (1Password Connect)
For Docker-based OpenClaw installations, use 1Password Connect instead of the CLI.
Step 1: Deploy 1Password Connect
# docker-compose.yml
services:
op-connect-api:
image: 1password/connect-api:latest
ports:
- "8080:8080"
volumes:
- ./1password-credentials.json:/home/opuser/.op/1password-credentials.json:ro
- op-data:/home/opuser/.op/data op-connect-sync:
image: 1password/connect-sync:latest
volumes:
- ./1password-credentials.json:/home/opuser/.op/1password-credentials.json:ro
- op-data:/home/opuser/.op/data
volumes:
op-data:
Step 2: Get Credentials
1. Go to my.1password.com β Integrations β Secrets Automation
2. Create a Connect server
3. Download 1password-credentials.json
4. Create an access token
Step 3: Configure OpenClaw
services:
clawdbot:
environment:
- OP_CONNECT_HOST=http://op-connect-api:8080
- OP_CONNECT_TOKEN=your-access-token
The UI automatically detects Connect mode.
Files Included
1password-ui/
βββ SKILL.md # This file
βββ INSTALL_INSTRUCTIONS.md # Step-by-step installation
βββ CHANGELOG.md # Version history
βββ package.json # Skill metadata
βββ reference/
β βββ 1password-backend.ts # Gateway RPC handlers
β βββ 1password-views.ts # UI view (Lit template)
β βββ 1password-settings.ts # Tab loading logic
β βββ 1password-plugin.ts # Plugin registration (optional)
βββ scripts/
βββ op-helper.py # CLI/Connect bridge for skills
Security Considerations
β Safe by Design
| Aspect | Implementation |
|--------|----------------|
| Secrets not in UI | getItem and items return field names only, never values |
| No network installers | No curl \| sh or remote scripts β all code is local |
| Manual installation | Requires explicit code edits, no automated patching |
| Mapping file perms | 1password-mappings.json should be 0600 (contains references, not secrets) |
| CLI auth | Uses 1Password app integration for biometric auth when available |
β οΈ Documented Risks
| Risk | Mitigation |
|------|------------|
| readSecret RPC available | The 1password.readSecret method IS exposed via gateway RPC. This is intentional β skills need to read secrets. Security relies on: (1) 1Password requiring user auth, (2) gateway access control (loopback-only by default). |
| Gateway exposure | All 1password.* methods are RPC calls. If you expose your gateway to the network, protect it with authentication. |
| Connect token | In Docker mode, OP_CONNECT_TOKEN grants vault access. Keep it secure like any API key. |
File Security
# Recommended permissions for mapping file
chmod 600 ~/clawd/config/1password-mappings.json
Troubleshooting
"1Password CLI Not Found"
brew install 1password-cli
or download from 1password.com/downloads/command-line/
"Not signed in"
op signin
op whoami # verify
Sign-in fails / "authorization denied"
Docker: "connection refused"
docker ps | grep op-connect # check containers running
Docker: "401 unauthorized"
OP_CONNECT_TOKEN is set correctlySupport
Changelog
v1.1.0 (2025-02-11)
v1.0.0 (2025-02-11)
π‘ Examples
Sign In
1. Open OpenClaw Dashboard β Tools β 1Password
2. Click Sign In with 1Password
3. Authorize in the 1Password app popup (or run op signin in terminal)
4. Status shows "Connected" with your account
Credential Mappings
Once signed in, you can map 1Password items to skills:
1. Skills like Pipedream can read credentials from 1Password
2. Mappings are stored in ~/clawd/config/1password-mappings.json
3. Format: { "skillId": { "item": "Item Name", "vault": "Private", "fields": {...} } }
Example: Pipedream with 1Password
# Store Pipedream credentials in 1Password
op item create --category="API Credential" --title="Pipedream Connect" \
--vault="Private" \
"client_id[text]=your_client_id" \
"client_secret[password]=your_client_secret" \
"project_id[text]=proj_xxxxx"Use in token refresh
PIPEDREAM_1PASSWORD_ITEM="Pipedream Connect" python3 ~/clawd/scripts/pipedream-token-refresh.py
βοΈ Configuration
For Local Installations (Ubuntu/Windows/macOS)
1. 1Password CLI (op):
# macOS/Linux
brew install 1password-cli
# Or from https://1password.com/downloads/command-line/
2. CLI Integration enabled in 1Password app: - Settings β Developer β "Integrate with 1Password CLI" β
For Docker Installations
See Docker Setup below.
π Tips & Best Practices
"1Password CLI Not Found"
brew install 1password-cli
or download from 1password.com/downloads/command-line/
"Not signed in"
op signin
op whoami # verify
Sign-in fails / "authorization denied"
Docker: "connection refused"
docker ps | grep op-connect # check containers running
Docker: "401 unauthorized"
OP_CONNECT_TOKEN is set correctly