pub enum Command {
Show 16 variants
Vps {
action: VpsAction,
},
Connect {
name: String,
},
Exec {
all: bool,
hosts: Option<String>,
tags: Option<String>,
use_active: bool,
target: Vec<String>,
steps: Vec<String>,
json: bool,
auth: SshAuthArgs,
timeout: Option<u64>,
description: Option<String>,
},
SudoExec {
all: bool,
hosts: Option<String>,
tags: Option<String>,
use_active: bool,
target: Vec<String>,
steps: Vec<String>,
json: bool,
auth: SshAuthArgs,
sudo_password: Option<String>,
sudo_password_stdin: bool,
timeout: Option<u64>,
description: Option<String>,
},
SuExec {
all: bool,
hosts: Option<String>,
tags: Option<String>,
use_active: bool,
target: Vec<String>,
steps: Vec<String>,
json: bool,
auth: SshAuthArgs,
su_password: Option<String>,
su_password_stdin: bool,
timeout: Option<u64>,
description: Option<String>,
},
Scp {
action: ScpAction,
},
Sftp {
action: SftpAction,
},
Tunnel {
vps_name: String,
local_port: u16,
remote_host: Option<String>,
remote_port: Option<u16>,
socks5: bool,
remote_socket: Option<String>,
reverse: bool,
timeout_ms: u64,
auth: SshAuthArgs,
json: bool,
bind: IpAddr,
i_accept_network_exposure: bool,
},
HealthCheck {
vps_name: Option<String>,
all: bool,
hosts: Option<String>,
use_active: bool,
json: bool,
auth: SshAuthArgs,
timeout: Option<u64>,
},
Secrets {
action: SecretsAction,
},
Completions {
shell: Shell,
},
Commands {
json: bool,
},
Schema {
name: Option<String>,
json: bool,
},
Doctor {
json: bool,
probe_ssh: bool,
hosts: Option<String>,
},
Locale {
json: bool,
action: Option<LocaleAction>,
},
Tls {
json: bool,
action: TlsAction,
},
}Expand description
Top-level subcommands.
Variants§
Vps
Manages registered VPS hosts.
Connect
Sets the active VPS (writes sibling active file in the config directory).
Exec
Runs a command on the VPS over SSH (stdout/stderr captured).
The target is always designated explicitly, in one of three ways: two
positionals VPS COMMAND; a selector with one positional
(--all/--hosts <LIST>/--tags <LIST> COMMAND); or the active marker
under the deliberate opt-in (--use-active COMMAND). A lone positional with
no selector is a usage error, never a command aimed at whatever connect
last wrote (GAP-SSH-EXEC-ARGC-001).
Extra steps on the same SSH session: --step cmd2 --step cmd3 (G-O3).
Exit 127 on the first step aborts the batch, because that code there is the
signature of a host name having been read as a command.
Fields
all: boolRun on every registered host (bounded concurrency). When set, pass only the shell command as the single positional.
Select hosts that have any of these tags (OR). Batch JSON (G-O2).
use_active: boolRun against the host recorded by connect, deliberately (GAP-SSH-EXEC-ARGC-001).
Inheriting the target from on-disk state is ambient authority, so it must be
asked for. Without this flag a lone positional is a usage error, never a
command aimed at whatever host connect last wrote.
target: Vec<String>VPS COMMAND, or COMMAND alone with --all/--hosts/--tags/--use-active.
Kept as a vector rather than two named positional slots on purpose: clap
fills positionals by order and cannot know which selector is active, so
exec --all uptime would bind uptime to a VPS slot and leave the
command empty — silently accepting a shape worse than the one being fixed.
The arity rule therefore lives in parse_exec_target, which can see the
flags. See GAP-SSH-EXEC-ARGC-001.
auth: SshAuthArgsSSH authentication overrides (password/key/passphrase).
SudoExec
Runs a command with sudo (safe sh -c packing).
Same target rules as exec: VPS COMMAND, or one positional with a selector
(--all/--hosts/--tags), or --use-active COMMAND. Elevation makes an
undesignated target worse, not better, so nothing here is inferred.
Fields
Select hosts by tag (OR). Batch JSON (G-O2).
use_active: boolRun against the host recorded by connect, deliberately (GAP-SSH-EXEC-ARGC-001).
Elevation makes ambient authority worse, not better: a misdirected sudo
step writes root-owned state on a host the caller never named.
target: Vec<String>VPS COMMAND, or COMMAND alone with a selector or --use-active.
See the note on Exec::target for why this stays a vector.
auth: SshAuthArgsSSH authentication overrides (password/key/passphrase).
SuExec
Runs a command with one-shot su - elevation.
Same target rules as exec: VPS COMMAND, or one positional with a selector
(--all/--hosts/--tags), or --use-active COMMAND.
Fields
Select hosts by tag (OR). Batch JSON (G-O2).
use_active: boolRun against the host recorded by connect, deliberately (GAP-SSH-EXEC-ARGC-001).
Elevation makes ambient authority worse, not better: a misdirected su -
step writes root-owned state on a host the caller never named.
target: Vec<String>VPS COMMAND, or COMMAND alone with a selector or --use-active.
See the note on Exec::target for why this stays a vector.
auth: SshAuthArgsSSH authentication overrides (password/key/passphrase).
Scp
SCP file transfer (upload/download).
Sftp
SFTP subsystem transfer and remote filesystem ops (G-SFTP).
Fields
action: SftpActionSpecific SFTP action.
Tunnel
SSH tunnel with mandatory deadline (bounded one-shot).
Contract: one local bind + one SSH session per invocation (G-PAR-30).
Multi-host tunnels = N one-shots with distinct --bind/ports. Forward
accepts still use JoinSet + Semaphore (--max-concurrency).
Fields
remote_host: Option<String>Remote host — with --reverse, the address the server binds.
Optional since 0.5.4: --socks5 chooses a destination per connection
and --remote-socket names a Unix socket, so neither has one.
remote_port: Option<u16>Remote port — with --reverse, the server port (0 = server allocates).
Reverse accepts 0 because the server then reports the port it bound;
a local forward cannot, since there is nothing to connect to.
auth: SshAuthArgsSSH authentication overrides (password/key/passphrase).
bind: IpAddrLocal bind address (default loopback for security).
G-TUN-R08: validated by clap as an IP address, so a typo like
127.0.0..1 fails at parse time (exit 2) instead of after resolving the
host, opening the SSH session and authenticating — which on a host with
MFA or slow auth meant paying a full handshake to learn about a typo.
i_accept_network_exposure: boolAcknowledge that a non-loopback bind exposes the forwarded service.
G-TUN-R13: required for any routable bind. Without it, --bind 0.0.0.0
silently published the remote service to the local network. Under
--reverse it guards the server’s bind address instead, which is
the end that is exposed in that direction.
HealthCheck
Checks SSH connectivity to a VPS (--all / --hosts / --use-active).
The target must be designated: a name, a selector, or the explicit opt-in.
Omitting all three is a usage error rather than a probe against whatever
connect last wrote (GAP-SSH-EXEC-ARGC-001).
Fields
use_active: boolProbe the host recorded by connect, deliberately.
This surface used to inherit the marker with no opt-in, defended as safe
because a probe is an idempotent read. The probe is safe; the habit is
not. An operator who learns that a target is optional here carries the
expectation to exec, where the same shortcut sent a day of work to the
wrong machine. The cheap half of the asymmetry is the one to make strict.
auth: SshAuthArgsSSH authentication overrides (password/key/passphrase).
Secrets
Manages the primary key and at-rest secret encryption (one-shot).
Fields
action: SecretsActionSecrets action.
Completions
Generates shell completions.
Commands
Emits the full command tree as JSON (agent discovery / rules mycli commands).
Schema
Emits embedded JSON Schema catalog or one schema body (G-E2E-02).
Fields
Doctor
Root alias for vps doctor (XDG / schema diagnostics; G-E2E-03).
Fields
Locale
Diagnoses and manages UI language (locale resolution / XDG preference).
Fields
action: Option<LocaleAction>Optional locale action (default: show status).
Tls
TLS stack: provider status, mTLS identities, ACME certs (XDG; rustls only).
Trait Implementations§
Source§impl FromArgMatches for Command
impl FromArgMatches for Command
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut<'b>(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl Subcommand for Command
impl Subcommand for Command
Source§fn augment_subcommands<'b>(__clap_app: Command) -> Command
fn augment_subcommands<'b>(__clap_app: Command) -> Command
Source§fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§fn has_subcommand(__clap_name: &str) -> bool
fn has_subcommand(__clap_name: &str) -> bool
Self can parse a specific subcommand