pub enum Command {
Show 53 variants
Init {
relay: Option<String>,
offline: bool,
json: bool,
},
Whoami {
json: bool,
short: bool,
colored: bool,
},
Peers {
json: bool,
},
Completions {
shell: Shell,
},
Here {
json: bool,
},
Pending {
json: bool,
},
Send {
peer: String,
kind_or_body: String,
body: Option<String>,
deadline: Option<String>,
no_auto_pair: bool,
queue: bool,
json: bool,
},
SendProject {
project: String,
body: String,
kind: String,
deadline: Option<String>,
json: bool,
},
Project {
tag: Option<String>,
clear: bool,
json: bool,
},
Dial {
name: String,
message: Option<String>,
json: bool,
},
Tail {
peer: Option<String>,
json: bool,
limit: usize,
oldest: bool,
},
Monitor {
peer: Option<String>,
json: bool,
include_handshake: bool,
interval_ms: u64,
replay: usize,
},
Verify {
path: String,
json: bool,
},
Mcp,
RelayServer {
bind: String,
local_only: bool,
uds: Option<PathBuf>,
},
BindRelay {
url: String,
scope: Option<String>,
replace: bool,
migrate_pinned: bool,
json: bool,
},
AddPeerSlot {
handle: String,
url: String,
slot_id: String,
slot_token: String,
json: bool,
},
Push {
peer: Option<String>,
json: bool,
},
Pull {
json: bool,
},
Status {
peer: Option<String>,
json: bool,
},
Responder {
command: ResponderCommand,
},
Pin {
card_file: String,
json: bool,
},
RotateSlot {
no_announce: bool,
json: bool,
},
ForgetPeer {
handle: String,
purge: bool,
json: bool,
},
Supervisor {
json: bool,
},
Daemon {
interval: u64,
once: bool,
all_sessions: bool,
session: Option<String>,
json: bool,
},
Session(SessionCommand),
Identity {
cmd: IdentityCommand,
},
Mesh(MeshCommand),
Group(GroupCommand),
Enroll(EnrollCommand),
Org(OrgCommand),
Setup {
apply: bool,
statusline: bool,
remove: bool,
},
Whois {
handle: Option<String>,
json: bool,
relay: Option<String>,
},
Add {
handle: String,
relay: Option<String>,
local_sister: bool,
json: bool,
},
Up {
relay: Option<String>,
offline: bool,
with_local: Option<String>,
no_local: bool,
json: bool,
},
Demo {
json: bool,
},
Doctor {
json: bool,
recent_rejections: usize,
},
Upgrade {
check: bool,
local: bool,
restart_mcp: bool,
refresh_stale_children: bool,
json: bool,
},
Nuke {
force: bool,
purge: bool,
dry_run: bool,
really_this_machine: bool,
json: bool,
},
Service {
action: ServiceAction,
},
Diag {
action: DiagAction,
},
Claim {
nick: String,
relay: Option<String>,
public_url: Option<String>,
hidden: bool,
json: bool,
},
Profile {
action: ProfileAction,
},
Invite {
relay: String,
ttl: u64,
uses: u32,
share: bool,
json: bool,
},
Accept {
target: String,
json: bool,
},
AcceptInvite {
url: String,
json: bool,
},
Reject {
peer: String,
json: bool,
},
BlockPeer {
did: String,
note: Option<String>,
json: bool,
},
UnblockPeer {
did: String,
json: bool,
},
Blocked {
json: bool,
},
Notify {
interval: u64,
peer: Option<String>,
once: bool,
json: bool,
},
Quiet {
action: QuietAction,
},
}Variants§
Init
Generate a keypair, write self-card, and bind an inbound slot. (HUMAN-ONLY — DO NOT exec from agents.)
v0.9: refuses to create a slotless session by default. Pre-v0.9
the silent slotless state caused the 2026-05-23 silent-fail
incident — pairing + sending succeeded but peers black-holed
inbound. Operators must now name how the session is reachable:
--relay <url> (binds a slot inline) or --offline (opt into
slotless, acknowledge wire bind-relay is required before any
pair or send).
Internal primitive — folded into wire up and hidden. Your handle is
your DID-derived persona (one-name rule); there is no name to type.
Init is the sole naming event: it mints the keypair and the persona is
derived from it. Users never type this — wire up runs it, and
wire up --offline covers offline keygen. Kept as a callable command
only because wire up / wire session new invoke it internally.
Fields
relay: Option<String>Relay URL — binds an inbound slot in the same step. Required
unless --offline is passed. Example:
--relay http://127.0.0.1:8771 (local), --relay https://wireup.net
(federation).
Whoami
Print this agent’s identity (DID, fingerprint, mailbox slot).
Fields
Peers
List pinned peers with their tiers and capabilities.
Completions
Emit a shell completion script to stdout.
Pipe to your shell’s completion dir to enable tab-completion of wire verbs + handles + flags.
Example installs:
bash: wire completions bash > /etc/bash_completion.d/wire
zsh: wire completions zsh > ~/.zsh/completions/_wire
fish: wire completions fish > ~/.config/fish/completions/wire.fish
pwsh: wire completions powershell > $PROFILE (append)
elvish: wire completions elvish > ~/.elvish/lib/wire.elv
Here
One-screen “you are here” — your character, handle, cwd, and neighbors.
Prints the current session’s character + handle + cwd, plus a short
list of neighbors (sister sessions on the local relay, pinned peers).
Designed for the operator’s quick “wait which Claude is this,
and who’s around?” question — no --json shuffling, no
remembering wire whoami vs wire peers vs wire session list-local.
Pending
List pending-inbound pair requests waiting for your consent.
Operators reach for “what’s pending?” not a longer table-dump verb.
Send
Sign and queue an event to a peer.
Forms (P0.S 0.5.11):
wire send When Event body — free-form text, v0.10: skip the v0.9 auto-pair-on-miss behavior. Send fails
loudly if the peer isn’t pinned yet. Use when you want strict
“no implicit dialing” semantics — scripts that error vs.
performing a side-effecting pair as a fallback. v0.14.2: opt back into the legacy outbox→daemon-push pipeline.
By default Fan a single signed message out to every org-mate tagged with a project
(RFC-001 §6 client-side project routing). Recipients = every pinned peer at effective tier >= ORG_VERIFIED
whose card carries Set your own project tag with Show, set, or clear this session’s project routing tag (RFC-001 §6). “Go talk to this name.” The one verb operators reach for. With an optional message, Peer name. Character nickname (preferred), session name,
card handle, or DID — anything that identifies the peer to
you. Stream signed events from peers. Defaults to NEWEST-N orientation: with Live tail of new inbox events across all pinned peers — one line per
new event, handshake (pair_drop / pair_drop_ack / heartbeat) filtered
by default. Designed to be left running in an agent harness’s stream-watcher
(Claude Code Monitor tool, etc.) so peer messages surface in the
session as they arrive, not on next manual See docs/AGENT_INTEGRATION.md for the recommended Monitor invocation
template. Verify a signed event from a JSON file or stdin ( Run the MCP (Model Context Protocol) server over stdio.
This is how Claude Desktop / Claude Code / Cursor / etc. expose
Run a relay server on this host. v0.5.17: refuse non-loopback binds, skip phonebook listing,
skip v0.7.0-alpha.16: bind to a Unix Domain Socket instead of TCP.
When set, –bind is ignored. Implies –local-only semantics
(no phonebook, no .well-known). Socket is chmod 0600 (owner-
rw only), giving SO_PEERCRED-equivalent same-uid trust for
sister sessions. Unix only (Windows refuses). Allocate a slot on a relay; bind it to this agent’s identity. v0.5.19 (issue #7): if any peers are pinned to this agent’s
current slot, this command refuses by default — silent migration
silently black-holes their inbound messages. Pass
Endpoint scope: DESTRUCTIVE: drop all existing self slots and bind only this
relay (the pre-v0.12 single-slot behavior). Default is
ADDITIVE — the new slot is appended to Manually pin a peer’s relay slot from out-of-band coordinates.
Plumbing — prefer Drain outbox JSONL files to peers’ relay slots. Pull events from our relay slot, verify, write to inbox. Print a summary of identity, relay binding, peers, inbox/outbox queue depth.
Useful as a single “where am I” check. Publish or inspect auto-responder health for this slot. Pin a peer’s signed agent-card from a file. (Manual out-of-band pairing
— fallback path; the canonical flow is Allocate a NEW slot on the same relay and abandon the old one.
Sends a kind=1201 wire_close event to every paired peer over the OLD
slot announcing the new mailbox before swapping. After rotation,
peers must re-pair (or operator runs Use case: a paired peer turned hostile (T11 in THREAT_MODEL.md —
abusive bearer-holder spamming your slot). Rotate → old slot is
orphaned → attacker’s leverage gone. Operator pairs again with
peers they still want. Remove a peer from trust + relay state. Inbox/outbox files for that
peer are NOT deleted (operator can grep history); pass –purge to
also wipe the JSONL files. Multi-session topology: supervisor + every session’s daemon liveness. Supervisor liveness + per-session daemon liveness + unmanaged
Run a long-lived sync loop: every v0.14.2 (#162): supervisor mode — read the session registry +
fork-exec one child Manage isolated wire sessions on this machine (v0.5.16). Each session = its own DID + handle + relay slot + daemon + inbox/
outbox tree. Use when multiple agents (e.g. Claude Code sessions
in different projects) run on the same machine — without sessions
they all share one identity and race the inbox cursor. Names are derived from Manage this session’s identity display layer (character override).
v0.7.0-alpha.3: agents can rename themselves — operator or Claude
itself picks a custom nickname + emoji that overrides the
auto-derived hash-based defaults. Orchestration verbs for the
sister-session mesh. Group chat (v0.13.3): create a named group, add VERIFIED peers, and
send/tail messages across the whole member set. Membership is a signed
roster (group-scoped tiers, separate from bilateral peer trust). Mint operator / organization identities for the offline org-membership
layer (RFC-001): Trust an organization by its domain (RFC-001 §2 DNS-TXT floor):
Detect known MCP host config locations (Claude Desktop, Claude Code,
Cursor, project-local) and either print or auto-merge the wire MCP
server entry. Default prints; pass Install a Claude Code statusLine showing your wire persona
(liveness dot + emoji + nickname in the persona’s accent color +
cwd) instead of merging the MCP server. Writes a renderer script
and merges a Show an agent’s profile. With no arg, prints local self. With a
Federation backend of Zero-paste pair with a known handle: resolves v0.6.6: pair with a sister session on this machine without
touching federation. Looks up Come online in one command — There is no name to choose: your handle IS your DID-derived persona
(one-name rule). The optional argument is just which relay to use. Examples:
wire up # default public relay (wireup.net)
wire up @wireup.net # explicit federation relay
wire up http://127.0.0.1:8771 # a local / self-hosted relay Relay to bind + claim your persona on: Mint your identity offline — keypair + DID-derived persona, no
relay bound and nothing claimed. Bind later with See wire work in one command — an ephemeral two-agent round-trip. Boots a throwaway local relay, mints two temporary identities, pairs
them, and sends a signed message end-to-end — then tears it all down.
No install of a relay, no second terminal, no copy-pasting a persona.
The fastest way to watch two agents talk before setting wire up for
real. Nothing it creates outlives the command. Diagnose wire setup health. Single command that surfaces every
silent-fail class — daemon down or duplicated, relay unreachable,
cursor stuck, pair rejections piling up, trust ↔ directory drift.
Replaces today’s 30-minute manual debug. Exit code non-zero if any FAIL findings. Update + restart in one step (alias: Skip the crates.io update check; just restart the daemon from the
current binary (offline / local dev build). Also kill v0.14.3 (closes the #198 follow-up): kill the daemons reported in
Hard-reset this machine to a clean wire state: kill daemons,
remove service units, de-register the wire MCP entry from host
configs, and wipe all wire dirs. Skip the typed confirmation (for automation / test harness).
Install / inspect / remove a launchd plist (macOS) or systemd
user unit (linux) that runs Inspect or toggle the structured diagnostic trace
( Claim your persona on a relay’s handle directory. Anyone can then
reach this agent by ONE-NAME RULE (v0.13.1): the claimed handle is always your DID-derived
persona. The v0.13.1: hidden — v0.5.19 (#9.1): opt out of the relay’s bulk Edit profile fields (display_name, emoji, motto, vibe, pronouns,
avatar_url, handle, now). Re-signs the agent-card atomically. Examples:
wire profile set motto “compiles or dies trying”
wire profile set emoji “🦀”
wire profile set vibe ‘[“rust”,“late-night”,“no-async-please”]’
wire profile set handle “coffee-ghost@anthropic.dev”
wire profile get Mint a one-paste invite URL. Anyone with this URL can pair to us in a
single step (no SAS digits, no code typing). Auto-inits + auto-allocates
a relay slot on first use. Default TTL 24h, single-use. Register the invite at the relay’s short-URL endpoint and print
a Accept a pending-inbound pair request by character
nickname or card handle. v0.9.4: the URL-vs-name smart-dispatch from v0.9 is gone. To
accept a federation invite URL use Accept a federation invite URL minted by Split out from Refuse a pending-inbound pair request without pairing. Block a peer DID so it can never be org-auto-paired or surface an
org-notify prompt (RFC-001 §T16 rogue-admin containment). Pass a session DID ( A block gates the org-easing path, NOT a deliberate bilateral SAS pair:
if you knowingly Remove a DID from the local block-list (undo List the DIDs on the local block-list (RFC-001 §T16). Watch the inbox for new verified events and fire an OS notification per
event. Long-running; background under systemd / Silence (or re-enable) all wire desktop toasts. Persistent across
daemon restarts via a file at Fields
kind_or_body: String<body> is omitted, this is the event body (kind defaults
to claim). When both this and <body> are given, this is the
event kind (decision, claim, etc., or numeric kind id) and
the next positional is the body.body: Option<String>@/path/to/body.json to load from
a file, or - to read from stdin. Optional; omit to use
<kind_or_body> as the body with kind=claim.no_auto_pair: boolqueue: boolwire send POSTs to the peer’s relay slot
synchronously and returns a real delivered / duplicate /
failed verdict. With --queue the event is appended to
<outbox_dir>/<peer>.jsonl and the daemon’s push loop
drains it later (pre-v0.14.2 behavior). Use for offline
buffering, batch sends, or pre-pair queueing.SendProject
project == <project>. The tier floor is the trust
gate; project is unsigned routing metadata (it picks who, never grants
trust). Delivery is N synchronous one-to-one pushes — wire has no
broadcast primitive. Zero matching peers is a no-op success.wire project <tag>; peers see it on your
card once they pin (or re-pull) it.Fields
Project
wire project prints the current tag; wire project <tag> sets it;
wire project --clear removes it. The tag is unsigned metadata on your
agent-card — peers who pin your card use it to target
wire send-project <tag> fan-outs. Set it before pairing (or re-pair
after) so the change reaches peers.Fields
Dial
wire dial <name> accepts a character nickname (noble-slate),
a session name (slancha-api), a card handle, or a DID — whichever
face you happen to know the peer by. Resolution order:
--local-sister path (no relay round-trip, no .well-known
lookup, no SAS digits).wire dial <handle>@<relay> for cross-machine peers).wire dial <name> "<msg>" also sends
the message synchronously after the pair lands (#187 collapsed
the legacy queue→push step into a single direct relay POST;
the response carries the actual delivered/duplicate/etc.
verdict). Idempotent: re-dialling a known peer just sends.Fields
name: StringTail
--limit N, prints the most
recent N events across all matched peers, sorted chronologically
(oldest of the window first, newest last — same orientation as Unix
tail). Pass --oldest to flip back to first-N (FIFO) behaviour.
--limit 0 returns the full inbox in chronological order.Fields
Monitor
wire pull.Fields
Verify
-).Mcp
wire_send, wire_tail, etc. as native tools.RelayServer
Fields
local_only: bool.well-known/wire/agent serving. The relay becomes
invisible from outside the box — only same-machine processes
can pair through it. Right call for within-machine agent
coordination where you don’t want metadata leaking to a
public relay. Pair this with wire session new which probes
127.0.0.1:8771 and allocates a local slot automatically.uds: Option<PathBuf>BindRelay
--migrate-pinned to acknowledge the risk and proceed, or use
wire rotate-slot (which emits a wire_close event to peers)
for safe rotation.Fields
scope: Option<String>federation | local | lan | uds.
Default inferred from the URL (loopback host -> local,
unix:// -> uds, otherwise federation). Pass explicitly when
the inference is ambiguous (e.g. a federation relay on a
loopback address in tests).replace: boolself.endpoints[],
keeping any existing slots so pinned peers are not
black-holed.AddPeerSlot
wire dial (which resolves + pairs for you).Fields
Push
Fields
Pull
Status
Fields
Responder
Fields
command: ResponderCommandPin
wire dial <handle>@<relay>.)RotateSlot
add-peer-slot with the new
coords) — auto-update via wire_close is a v0.2 daemon feature.Fields
ForgetPeer
Fields
Supervisor
wire daemon pids. wire status answers “is THIS session syncing?”;
wire supervisor answers “what is the supervisor (and every
session’s daemon) doing across the box?”.Fields
Daemon
& / tmux as you prefer.Fields
all_sessions: boolwire daemon per initialized session,
each with its own WIRE_HOME pinned. Closes the launchd-blind
session-isolation gap honey-pine reported: with no cwd
context, a single launchd-spawned daemon resolves the
default WIRE_HOME and silently skips every other session.
Operator-facing: install this mode via wire service install
— the plist now uses --all-sessions so every session syncs
at login without the operator running N tmux panes.Session(SessionCommand)
basename(cwd) and cached in a registry,
so re-entering the same project reuses the same identity.Identity
Fields
cmd: IdentityCommandMesh(MeshCommand)
wire mesh status is the live view of every
paired sister (alias for wire session mesh-status); wire mesh broadcast fans one signed event to every pinned peer.Group(GroupCommand)
Enroll(EnrollCommand)
wire enroll op / org-create / org-add-member.Org(OrgCommand)
wire org bind <domain> / wire org list / wire org forget <org_did>.Setup
--apply to actually modify config
files. Idempotent — re-running is safe.Fields
statusline: boolstatusLine block into Claude Code’s settings.json
(honors $CLAUDE_CONFIG_DIR). Combine with –apply to write.Whois
nick@domain arg, resolves via that domain’s .well-known/wire/agent
endpoint and verifies the returned signed card before display.Fields
Add
wire dial — prefer wire dial.nick@domain via that
domain’s .well-known/wire/agent, then delivers a signed pair-intro
to the peer’s slot via /v1/handle/intro. Peer’s daemon completes
the bilateral pin on its next pull (sends back pair_drop_ack carrying
their slot_token so we can wire send to them).Fields
local_sister: boolhandle as a session name in
wire session list, reads that session’s agent-card +
endpoints from disk, pins directly, then delivers the
pair_drop to the sister’s local-relay slot. No .well-known
resolution; reserved nicks (wire, slancha, etc.) are
addressable because they don’t need a federation claim.Up
wire up does what used to take five
(init + bind-relay + claim your persona + background daemon +
restart-on-login). Idempotent: re-run on an already-set-up box prints
state without churn.Fields
relay: Option<String>@wireup.net, wireup.net,
or a full URL. Omit for the default public relay. No nick — your
handle is your DID-derived persona.offline: boolwire up <relay>
or wire bind-relay <relay>. For air-gapped keygen / bind-later.Demo
Doctor
Fields
Upgrade
wire update). ALWAYS checks
crates.io for a newer published wire; if one exists it installs it
(via cargo install slancha-wire when a Rust toolchain is on PATH,
else by downloading + SHA-256-verifying the prebuilt release binary
and replacing this one in place), then does the atomic daemon swap —
kill every wire daemon, respawn from the (now-current) binary, write
a fresh pidfile. No newer version → it skips the install and just
restarts the daemon. --check reports what would happen (available
update + processes that would be restarted) without doing it;
--local skips the crates.io check and only restarts the daemon
(offline, or running a local dev build).Fields
local: boolrestart_mcp: boolwire mcp server subprocesses after the daemon swap so
their MCP host (Claude Code / Claude.app / Copilot CLI) respawns
them on the new binary. Without this, sister sessions keep
running pre-upgrade MCP code until each one explicitly /mcp
reconnects. Cross-session impact: kills every wire mcp found.refresh_stale_children: boolwire supervisor’s stale_binary_sessions set — sister-session
children alive on an old binary that the supervisor’s
existing-pidfile check intentionally protected from respawn. Once
each is killed, the --all-sessions supervisor respawns it on
the new binary on its next 10s registry poll. Cross-session
impact: only sessions flagged stale are touched; in-sync siblings
are spared. No-op (silent) when no supervisor is running OR no
stale daemons exist.Nuke
--purge also removes the
binary + shell lines. Requires –force or a typed confirmation.Fields
force: bool--yes is an accepted alias.Service
wire daemon on login + restarts
on crash. Replaces today’s “background it with tmux/&/systemd
as you prefer” footgun.Fields
action: ServiceActionDiag
$WIRE_HOME/state/wire/diag.jsonl). Off by default. Enable per
process via WIRE_DIAG=1, or per-machine via wire diag enable
(writes the file knob a running daemon picks up automatically).Fields
action: DiagActionClaim
<persona>@<relay-domain> via the relay’s
.well-known/wire/agent endpoint. FCFS; same-DID re-claims allowed.nick arg is vestigial — if it differs it is ignored
(like the typed name wire init / wire up already ignore), so your
phonebook entry can never drift from your agent-card handle.wire up claims your persona for you. Kept callable
(idempotent re-claim) but not a user verb; there is no nick to choose.Fields
/v1/handles
directory listing. The handle stays claimed (FCFS still
applies) and direct .well-known/wire/agent?handle=X lookup
still resolves, so peers you share the handle with out-of-band
can still pair. Bulk scrapers / phonebook crawlers will not
see the nick. Use this for handles meant for known-peer
pairing only — see issue #9.Profile
Fields
action: ProfileActionInvite
Fields
curl ... | sh one-liner the peer can run on a fresh machine.
Installs wire if missing, then accepts the invite, then pairs.Accept
wire accept-invite <URL>
(split out as an explicit verb to eliminate the input-shape
ambiguity). wire accept <URL> still works for back-compat
but emits a deprecation banner pointing at accept-invite.AcceptInvite
wire invite.
Pins issuer, sends signed card to issuer’s slot. Auto-inits +
auto-allocates as needed.wire accept to eliminate the URL-vs-name
smart-dispatch ambiguity (peer handles can legitimately collide
with URL-shaped strings; the explicit verb removes the inference).Reject
Fields
BlockPeer
did:wire:<handle>-<8hex>) to mute one session,
or an operator DID (did:wire:op:<handle>-<32hex>) to mute every
session that operator runs — the lever for cutting off a single
adversary a compromised org admin vouched into the roster, without
leaving the org. Local-only; idempotent; survives roster epoch bumps.wire dial + SAS-verify a blocked peer, that explicit
gesture wins. Unblock with wire unblock-peer <did>.Fields
UnblockPeer
wire block-peer).Blocked
Notify
& / tmux. Cursor is
persisted to $WIRE_HOME/state/wire/notify.cursor so restarts don’t
re-emit history.Fields
Quiet
<config_dir>/quiet. wire quiet on
= silence; wire quiet off = restore; wire quiet status = report.
Same effect as exporting WIRE_NO_TOASTS=1 (the env-var override
is for launchd contexts where the daemon’s env isn’t writable from
the operator’s shell).Fields
action: QuietAction
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