41 lines
2.1 KiB
Markdown
41 lines
2.1 KiB
Markdown
# NordVPN Client Skill Design
|
|
|
|
## Goal
|
|
Create a `nordvpn-client` skill that works on macOS and Linux gateway hosts. It should detect whether NordVPN is already installed, bootstrap it if missing, handle login/auth setup, connect to a requested country or city, verify the VPN state and public IP location, disconnect when requested, and then be usable alongside other skills like `web-automation`.
|
|
|
|
## Architecture
|
|
The skill exposes one logical interface with platform-specific backends. Linux uses the official NordVPN CLI path. macOS probes for a usable CLI first, but falls back to the official app workflow when needed. The skill is responsible only for VPN lifecycle and verification, not for wrapping arbitrary commands inside a VPN session.
|
|
|
|
## Interface
|
|
Single script entrypoint:
|
|
- `node scripts/nordvpn-client.js install`
|
|
- `node scripts/nordvpn-client.js login`
|
|
- `node scripts/nordvpn-client.js connect --country "Italy"`
|
|
- `node scripts/nordvpn-client.js connect --city "Milan"`
|
|
- `node scripts/nordvpn-client.js disconnect`
|
|
- `node scripts/nordvpn-client.js status`
|
|
|
|
## Platform Model
|
|
### Linux
|
|
- Probe for `nordvpn`
|
|
- If missing, bootstrap official NordVPN package/CLI
|
|
- Prefer token-based login for non-interactive auth
|
|
- Connect/disconnect/status through official CLI
|
|
|
|
### macOS
|
|
- Probe for `nordvpn` CLI if available
|
|
- Otherwise probe/install the official app
|
|
- Use CLI when present, otherwise automate the app/login flow
|
|
- Verify connection using app/CLI state plus external IP/geolocation
|
|
|
|
## Auth and Safety
|
|
- Do not store raw NordVPN secrets in skill docs
|
|
- Read token/credentials from env vars or a local credential file path
|
|
- Keep the skill focused on install/login/connect/disconnect/status
|
|
- After `connect`, verify both local VPN state and external IP/location before the agent proceeds to tasks like `web-automation`
|
|
|
|
## Verification
|
|
- `status` reports platform, install state, auth state, connection state, and public IP/location check
|
|
- `connect` verifies the requested target as closely as available data allows
|
|
- Local validation happens first in the OpenClaw workspace, then the proven skill is copied into `stef-openclaw-skills`, documented, committed, and pushed
|