NordVPN
by @maciekish
Control NordVPN on Linux via the `nordvpn` CLI (connect/disconnect, choose country/city/group, read status, tweak settings, manage allowlist). Use for automation that needs region routing or temporary VPN tunneling.
clawhub install nordvpn📖 About This Skill
name: nordvpn description: Control NordVPN on Linux via the
nordvpn CLI (connect/disconnect, choose country/city/group, read status, tweak settings, manage allowlist). Use for automation that needs region routing or temporary VPN tunneling.
homepage: https://nordvpn.com/
NordVPN CLI Skill (Linux)
A ClawBot skill for controlling the NordVPN Linux CLI (nordvpn) to connect/disconnect, select locations, verify status, and adjust settings from automations and workflows.
Assumptions / Compatibility
* Works with the official nordvpn CLI (example shown: 4.3.1 [snap]).
* Requires the NordVPN daemon running (usually nordvpnd) and sufficient permissions.
* Some commands may require elevated privileges depending on distro + install method (snap vs deb).
Installation
Option A: Snap (common on Ubuntu)
sudo snap install nordvpn
nordvpn --version
Option B: Distro package / repo (varies)
If you installed via Nord’s repo or a package manager, just verify:
which nordvpn
nordvpn --version
Verify daemon is running
# systemd installs usually
systemctl status nordvpnd --no-pager || truesnap installs may not expose systemd unit the same way
nordvpn status || trueor may require the full patch to be specified like so
/snap/bin/nordvpn status || true
Authentication / Login
NordVPN CLI typically requires logging in once per machine/user session.
nordvpn login
If the environment is headless, the CLI will guide you through the login flow (often via a browser link / code). After login, confirm:
nordvpn account
nordvpn status
ClawBot guidance: treat login as a manual prerequisite unless you explicitly automate the browser-based login flow.
Quick Reference
Status
nordvpn status
Connect (best available)
nordvpn connect
alias:
nordvpn c
Connect to a country / city / group
# country
nordvpn connect Swedencity (must exist in nordvpn cities )
nordvpn connect "Stockholm"group (must exist in nordvpn groups)
nordvpn connect P2P
Disconnect
nordvpn disconnect
alias:
nordvpn d
List locations
nordvpn countries
nordvpn cities Sweden
nordvpn groups
Settings (read + change)
nordvpn settingsexamples (options differ by version)
nordvpn set autoconnect on
nordvpn set killswitch on
nordvpn set threatprotectionlite on # if supported
nordvpn set protocol nordlynx # if supported
Allowlist (bypass VPN for certain traffic)
# view help
nordvpn allowlist --helpexamples (subcommands differ by version)
nordvpn allowlist add port 22
nordvpn allowlist add subnet 192.168.0.0/16
nordvpn allowlist remove port 22
Skill Design
What this skill should do well
1. Idempotent connection actions
* If already connected to the requested target, do nothing (or return “already connected”). * If connected elsewhere, optionally disconnect then connect to target. 2. Reliable verification
* After connect/disconnect, always run nordvpn status and parse the result.
3. Safe fallbacks
* If a requested city/country/group is invalid, provide closest alternatives by listing:
* nordvpn countries
* nordvpn cities
* nordvpn groups
4. Human-in-the-loop login
* If nordvpn reports not logged in, return a structured response instructing to run nordvpn login.
Recommended “actions” (API surface)
Implement these as the skill’s callable intents/tools:
* status() → returns parsed connection status
* connect_best() → connects to best available
* connect_country(country)
* connect_city(city) (optionally with country for disambiguation)
* connect_group(group)
* disconnect()
* list_countries()
* list_cities(country)
* list_groups()
* get_settings()
* set_setting(key, value)
* allowlist_add(type, value)
* allowlist_remove(type, value)
Suggested Implementation Pattern (CLI orchestration)
1) Always start with status
nordvpn status
Parse fields commonly returned by the CLI, such as:
* Connection state (Connected/Disconnected) * Current server / country / city * IP, protocol, technology
2) Connect flow
Goal: connect to a target (country/city/group) with verification.
Pseudo-logic:
* Run nordvpn status
* If disconnected → connect directly
* If connected to different target → nordvpn disconnect then connect
* Run nordvpn status again and confirm connected
Commands:
nordvpn connect ""
nordvpn status
3) Disconnect flow
nordvpn disconnect
nordvpn status
4) Resolve targets safely
If user asks for a city:
* Prefer nordvpn cities when country is known
* Otherwise attempt connect; if it fails, list countries and search-like suggestions.
nordvpn countries
nordvpn cities ""
nordvpn groups
Common Errors & Handling
Not logged in
Symptoms:
* CLI complains about authentication/account/login.
Handling:
* Return: “Login required. Run nordvpn login and repeat.”
* Optionally: run nordvpn account to confirm.
Daemon not running / permission denied
Symptoms:
* Can’t connect, service errors, permission errors.
Handling:
* Check systemctl status nordvpnd (systemd installs)
* Confirm snap service health (snap installs vary)
* Ensure user belongs to the right group (some installs use a nordvpn group):
groups
getent group nordvpn || true
Invalid location/group
Symptoms:
* “Unknown country/city/group” or connect fails immediately.
Handling:
* Provide available options:
nordvpn countries
nordvpn groups
nordvpn cities ""
Practical Automation Recipes
Ensure VPN is connected (any server)
nordvpn status | sed -n '1,10p'
nordvpn connect
nordvpn status | sed -n '1,15p'
Reconnect to a specific country
nordvpn disconnect
nordvpn connect Sweden
nordvpn status
Toggle killswitch (example)
nordvpn set killswitch on
nordvpn settings
Notes
* Command options and setting keys can differ by NordVPN CLI version. Always rely on:
nordvpn help
nordvpn set --help
nordvpn allowlist --help
* If you need stable machine-readable output, the NordVPN CLI does not consistently provide JSON; plan to parse human-readable status text defensively (line-based key/value extraction, tolerate missing fields).
📋 Tips & Best Practices
* Command options and setting keys can differ by NordVPN CLI version. Always rely on:
nordvpn help
nordvpn set --help
nordvpn allowlist --help
* If you need stable machine-readable output, the NordVPN CLI does not consistently provide JSON; plan to parse human-readable status text defensively (line-based key/value extraction, tolerate missing fields).