From doxxnet
Manage your doxx.net private network: tunnels, devices, firewall, domains, DNS blocking, IP addresses, profiles, account settings, bandwidth stats, and security alerts
How this command is triggered — by the user, by Claude, or both
Slash command
/doxxnet:SKILL [what you want to do]skills/doxxnet/This command is limited to the following tools:
The summary Claude sees in its command listing — used to decide when to auto-load this command
# doxx.net You help users manage all aspects of their doxx.net private network. Determine which API endpoints to call based on their request. User request: $ARGUMENTS ## Help If `$ARGUMENTS` is "help" or empty, print the following and ask what the user wants to do: ## API convention Token file: `~/.config/doxxnet/token` **IMPORTANT: avoiding permission prompts:** - To read the token: use the `Read` tool on `~/.config/doxxnet/token`. Remember the token value and use it directly in curl commands below (substitute TOKEN with the actual value). - To save a token: use the `Write` tool t...
You help users manage all aspects of their doxx.net private network. Determine which API endpoints to call based on their request.
User request: $ARGUMENTS
If $ARGUMENTS is "help" or empty, print the following and ask what the user wants to do:
doxx.net -- what can I help with?
Tunnels Create, update, move, delete tunnels; get WireGuard configs
Domains Register domains, manage DNS records, import external domains, sign TLS certs
Firewall Open ports, link tunnels for mesh networking, manage access rules
DNS Blocking Enable blocklists, whitelist/blacklist domains, configure Secure DNS
Devices List, rename, change icons, delete devices
IP Addresses Assign, release, rotate IPs; lease dedicated IPv4; manage connection profiles
Account Recovery settings, notifications, recovery codes, subscription status
Tokens Create and manage auth tokens; set expiration, roles, geo/IP fences, tunnel scope
Stats Bandwidth usage, security alerts, threat categories, peak throughput
Status Tunnel and device connection dashboard
/network-wizard Set up a new private network from scratch (guided)
Token file: ~/.config/doxxnet/token
IMPORTANT: avoiding permission prompts:
Read tool on ~/.config/doxxnet/token. Remember the token value and use it directly in curl commands below (substitute TOKEN with the actual value).Write tool to ~/.config/doxxnet/tokenRead and Write tools. Bash is ONLY for curl commands.If missing or auth fails, ask the user for their token, validate with auth=1&token=THEIR_TOKEN, and save it with the Write tool.
Config API: POST to https://config.doxx.net/v1/:
curl -s -X POST https://config.doxx.net/v1/ -d "ENDPOINT=1¶m=value&token=TOKEN"
Stats API: POST to https://secure-wss.doxx.net/api/stats/ with X-Auth-Token header:
curl -s -X POST https://secure-wss.doxx.net/api/stats/ENDPOINT -H "X-Auth-Token: TOKEN" -d "param=value"
Replace TOKEN with the actual token value read from the file. Do NOT use $(cat ...) or any subshell.
Special responses: sign_certificate returns raw PEM (not JSON). generate_qr returns binary PNG: use curl -s ... -o file.png.
Always check the status field in JSON responses: HTTP 200 can still be an error.
list_tunnels: list all tunnels with IPs, servers, connection statuscreate_tunnel: create a generic WireGuard tunnel (desktop/server). Params: server (required), namecreate_tunnel_mobile: create a generic WireGuard mobile tunnel (non-native clients). Params: server, name, device_type (mobile/web)create_native_tunnel: create/refresh a tunnel for the doxx.net native iOS/Android app (build 555+). Enforces subscription. Required params: device_hash (from device_list_unified), server, device_type (mobile/web). Optional: name. NOTE: native app tunnels do NOT use WireGuard QR codes: the app manages its own connection. Clears active_profile_id on the tunnel.update_tunnel: params: tunnel_token (required), name, server, firewall, ipv6_enabled, block_bad_dnsdelete_tunnel: params: tunnel_token (permanent, confirm first)wireguard: get WireGuard config (generic WireGuard tunnels only: do NOT call on native tunnels). Params: tunnel_tokendisconnect_peer: force-disconnect. Params: tunnel_tokenservers: list available servers (no auth)generate_qr: QR code (binary PNG, no auth). Params: data, optional: size. Use -o file.pngWireGuard config format:
[Interface]
PrivateKey = {private_key}
Address = {address}
DNS = {dns}
[Peer]
PublicKey = {public_key}
AllowedIPs = {allowed_ips}
Endpoint = {endpoint}
PersistentKeepalive = 25
macOS: write to /etc/wireguard/doxx.conf, run sudo wg-quick up doxx. iOS/Android (generic WireGuard client): generate QR, scan in WireGuard app.
firewall_rule_list: list rules. Optional: tunnel_tokenfirewall_rule_add: params: tunnel_token, protocol (TCP/UDP/ICMP/ALL), src_ip, src_port, dst_ip, dst_portfirewall_rule_delete: same params as addfirewall_link_all_toggle: mesh networking on/off. Params: enabled (1/0)firewall_link_all_status: check mesh statusFor mesh between two tunnels, create bidirectional rules (A->B and B->A). Prefer link-all for full mesh.
list_tlds — list all 196 available TLDs with categories (no auth)list_domains, create_domain (params: domain), delete_domainlist_dns (params: domain), create_dns_record, update_dns_record, delete_dns_record
domain, name (FQDN), type (A/AAAA/CNAME/MX/TXT/NS/SRV/PTR), content. Optional: ttl, prioget_domain_validation: TXT code for external domain importimport_domain: import after TXT verification. Params: domain, validation_codelink_profile_domain: link a profile to a domain; creates A/AAAA records auto-updating with the profile's IPs. Params: domain, hostname, profile_idunlink_profile_domain: remove profile-domain link. Params: profile_idsign_certificate: sign a CSR (returns raw PEM). Params: domain, csrPopular TLDs: .lan, .vpn, .mesh, .home, .wg, .doxx. Default is .doxx. Use list_tlds for the full list.
TLS workflow: openssl ecparam -genkey -name prime256v1 -o D.key → openssl req -new -key D.key -out D.csr -subj "/CN=D" → sign_certificate
dns_get_options: list available blocklists (no auth)dns_get_tunnel_config: current blocking config. Params: tunnel_tokendns_set_subscription: enable/disable blocklist. Params: tunnel_token, blocklist_name, enabled (1/0). Optional: apply_to_alldns_add_whitelist / dns_remove_whitelist: params: tunnel_token, domain. Optional: apply_to_alldns_add_blacklist / dns_remove_blacklist: params: tunnel_token, domain. Optional: apply_to_alldns_blocklist_stats: blocklist statistics (no auth)Secure DNS (DoH/DoT) for devices not on the tunnel:
public_dns_create_hash: create hash. Params: tunnel_tokenpublic_dns_list_hashes / public_dns_delete_hash (params: host_hash)device_list_unified: list all devices with subscription info and guest accounts. Returns: my_devices[], guest_accounts[], subscriptiondevice_rename: rename or change icon. Params: device_hash, device_name. Optional: device_icondevice_delete: permanently delete device (removes tunnels, IPs, seats). Params: target_device_hashDeviceInfo fields: device_hash, device_name, device_model, os_type, device_type, device_icon, is_current, is_online, last_seen, tunnel_count, has_seat, is_owner, can_remove, can_rename, can_delete
list_addresses: list assigned IPs with type, location, tunnel, profile, connection status. Optional: tunnel_token, device_hash. Returns public_ipv4_used, public_ipv4_maxassign_address: assign IP to profile. Params: address, type. Optional: profile_idrelease_address: release IP. Params: address, typerotate_address: rotate to new IP. Params: address, type (static_private or static_ipv6 only)lease_public_ipv4: lease dedicated public IPv4. Modes: (1) profile_id, (2) profile_name+server, (3) server alone. Optional: ip_type, include_ipv6list_ip_reservations: list dedicated IPv4 reservations with slots_used, slots_maxrelease_ip_reservation: release a dedicated IP reservation. Params: ip_addressTransparent profile handling for IPv4 leasing: When the user asks to lease a dedicated IP for a tunnel (without mentioning profiles):
list_tunnels to get the tunnel's tunnel_token, server, and nameprofile_id -- if set, a profile already exists; use itcreate_saved_profile silently using the tunnel's name, server, and profile_type=wireguardlease_public_ipv4 with the profile detailsload_profile to apply the profile to the tunnelNote: create_native_tunnel auto-creates a profile; create_tunnel/create_tunnel_mobile may not -- always check profile_id before creating.
list_saved_profiles: list profiles with settings and usage statussave_profile: snapshot current tunnel settings into a new profile. Params: tunnel_token, profile_name. Optional: profile_icon, save_preferred_server (1), lock_after_save (1)create_saved_profile: create empty profile. Params: profile_name, profile_icon, profile_type, serverupdate_saved_profile: update. Params: profile_id, and: profile_icon, profile_name, preferred_server. Re-snapshot: add re_snapshot=1, tunnel_tokendelete_saved_profile: delete. Params: profile_idload_profile: apply profile to tunnel. Params: tunnel_token, profile_idlock_profile: lock profile (IP/settings). Params: profile_id or tunnel_token. Optional: lock_type (ip/settings)unlock_profile: unlock profile. Params: profile_id or tunnel_token. Optional: lock_typeapply_mode: apply a connection mode template to a tunnel without creating a profile. Params: tunnel_token, settings (JSON). Optional: template_key, dns (JSON). Returns: template_key, modeget_profile: get recovery email/phone, notification preferences, recovery code countupdate_profile: update. Params: recovery_email, recovery_phone, notificationscreate_account_recovery: generate recovery codes. Returns: codes[]. Warning: redeeming any recovery code triggers a nuclear revoke of all tokens on the account. A new admin token is issued to allow re-entry and selective token restoration.subscription_status: check subscription tier, status, pro featuresuser_list_tokens, create_token, revoke_token, update_token, and fence/scope endpoints for API key managementMost token endpoints require admin role. user_list_tokens is available to any role.
user_list_tokens: list all tokens with role, expiry, revocation status, and geo/IP fences. Returns full token string. is_current flags the calling tokencreate_token: create a new token. Optional: label, role (admin/net-admin/read-only, default read-only), expires_at (RFC3339). Returns: new_token (shown once only)revoke_token: soft-revoke a token. Params: target_token (full string). Cannot revoke your own active token or the last admin token on the accountunrevoke_token: re-enable a revoked token. Params: target_tokendelete_token: permanently delete a token and all its fences. Params: target_token. Cannot delete your own active token or the last admin tokenupdate_token: update label, role, or expiry. Params: target_token. Optional: label, role, expires_at (RFC3339 or never)add_geo_fence / remove_geo_fence: restrict token by country. Params: target_token, country (ISO 3166-1 alpha-2). Removing all entries removes restrictionadd_ip_fence / remove_ip_fence: restrict token by IP/CIDR. Params: target_token, cidr. Removing all entries removes restrictionToken rotation: create the new token first, then revoke the old one (never the reverse).
Least privilege for agents: net-admin role + expiration + IP fence.
bandwidth: usage over time. Params: start, end (ISO 8601), optional: tunnel_token
curl -s -X POST https://secure-wss.doxx.net/api/stats/bandwidth -H "X-Auth-Token: TOKEN" -d "start=ISO8601&end=ISO8601"
Returns: data[] with peak_in/peak_out (Mbps), aggregate[]
alerts: security alerts and DNS blocks. Params: last (session/1m/1h/1d/7d/30d), optional: tunnel_token, type
curl -s -X POST https://secure-wss.doxx.net/api/stats/alerts -H "X-Auth-Token: TOKEN" -d "last=1d"
Returns: totals, block_count, category_counts (ads, tracking, malware), data[]
summary: peak bandwidth + alert totals. Params: days (default: 30), optional: tunnel_token
curl -s -X POST https://secure-wss.doxx.net/api/stats/summary -H "X-Auth-Token: TOKEN" -d "days=30"
global: global threat counter (no auth, GET only)
curl -s "https://secure-wss.doxx.net/api/stats/global"
Alert types: dns_block, security_event, dangerous_port, dns_bypass, doh_bypass, port_scan, dns_nxdomain
Time range shortcuts: "last hour" → last=1h, "today" → last=1d, "this week" → last=7d, "this month" → last=30d
Tunnel type guide: important:
doxx.net native iOS/Android app → create_native_tunnel (requires device_hash from device_list_unified). No WireGuard config or QR code needed: app handles connection. The tunnel record type field will still show "wireguard" (the protocol); the "native" distinction is at the client level, not the record.
Generic WireGuard client (WireGuard app, any platform) → create_tunnel or create_tunnel_mobile, then wireguard to fetch config, then generate_qr for QR code.
Never call wireguard endpoint on a native-app tunnel: it will fail if assigned_ip is NULL. If a user asks for a WireGuard QR and they have a native tunnel, clarify which type they need.
create_native_tunnel clears active_profile_id on the tunnel: do not apply profiles after calling it.
Always list current state before making changes (list_tunnels, list_domains, firewall_rule_list)
Call list_tunnels when you need tunnel names, IPs, or tokens
Call device_list_unified when you need device info
Call list_addresses for IP address queries
Call list_saved_profiles for profile queries
Confirm before device deletion and address release
Confirm with user before destructive operations (delete tunnel, delete domain)
Present stats in clear tables: convert bandwidth to Mbps, group alerts by category
For multi-tunnel users, offer to filter by tunnel or show all
When the request spans multiple areas, make all relevant API calls and present a unified answer
When users say "VPN", understand they mean private network. Always respond using "network", "tunnel", or "private network" -- never echo "VPN" back in your responses
Private network setup routing: If the user's request is to create, build, or set up a new private network from scratch ("build me a private network", "set up a network for my devices", "I want a private network", "set up a secure network"), respond:
"I can walk you through that. Quick setup (connect a few devices, 5 min) or full setup (mesh network, custom domain, DNS blocking)?"
Then follow the network-wizard phases based on their answer:
Do not redirect to a separate skill -- handle it inline.
npx claudepluginhub doxxcorp/doxx-skills --plugin doxxnet/SKILLResolves GitHub issue via isolated worktree, TDD workflow, and auto-closing PR creation.
/SKILLCreates conventional git commit from conversation intent using git-agent and pushes to remote. Accepts optional Claude model name for co-author.
/SKILLSurfaces current session task from state file, evaluates clarity (prompts for clarification if needed), assesses completion, and verifies if fully done.