cli: adopt the subcommand etiquette of the established VPN clis #180
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The cli works (as of #178) but its interface is an upstream-inherited flag soup with interactive traps. Comparing against the established VPN clis (Mullvad, ProtonVPN, Tailscale, NordVPN) shows a consistent etiquette worth adopting.
What the peers converged on:
mullvad connect/disconnect/status/relay set location se mma;protonvpn-cli c/d/s;tailscale up/down/status. Nobody ships-c/-t/-vflag combos as the primary interface.statuscommand. Every peer has one; it is the single most-used verb.mullvad statuseven shows the multihop chain ("Connected Relay: se-got via dk-cph"). aqomui-cli has nothing —-odumps settings, not connection state.mullvad relay set location se,protonvpn-cli c --cc US -f), with exact server names as the power-user form. aqomui-cli demands the exact server key and drops into an interactive readline retry loop on a typo — which also makes it script-hostile.mullvad relay set entry location <country>), not a separate flag that silently changes what-cdoes.Current warts, concretely:
-e/-dwith an invalid option prints the literal"{}" is not a valid option— the.format(o)call is missing at both sites.-lmatching is exact-lowercase against all field values; no output for "show me what I can pass to -c" beyond the full dump.[autoconnect] [firewall] ...) instead of deriving fromconfig.default_settings.Suggested direction (after #125, which gives the cli the catalog's query/selection layer — profile resolution, fastest/random, favourites — instead of hand-rolled lookups):
connect [--via HOP] SERVER,disconnect,status,list [FILTERS],protocol PROVIDER,import PROVIDER,remove PROVIDER,set OPTION VALUE/options. Keep the old flags as hidden aliases or drop them — the fork owes upstream's cli nothing.statusreads the service's tunnel state (the state it already tracks per role) and shows main/hop/bypass..formatbugs and typos ahead of the restructure — they're one-line.The peer conventions above are from documentation, not exhaustive local testing — re-check details if mirroring a specific tool's syntax.