soulctl
The operator’s client CLI — a thin wrapper over Keeper’s Operator API. The primary operator interface is OpenAPI and MCP; soulctl is a convenient CLI over the same HTTP endpoints, not a separate protocol.
Authentication
Section titled “Authentication”soulctl acts on behalf of an operator (Archon) via JWT. Credentials are stored in ~/.config/soul-stack/credentials.yaml (two fields: keeper_url and the operator token):
soulctl archon login # save keeper_url + JWT (validated with a ping)soulctl archon whoami # current AID + permissions from the token claimssoulctl archon logout # remove credentials.yamlkeeper_url points at Keeper’s Operator API (the HTTP listener, port 8080 by default). Global flags: --output table|json|yaml (-o) and --config (path to an alternative credentials file).
Command groups
Section titled “Command groups”soulctl is built from seven top-level groups:
| Group | Purpose |
|---|---|
incarnation | operations on incarnations (runtime instances of services) |
souls | operations on the managed souls |
soul | single actions on a specific agent |
errand | the registry of one-off tasks (Errand): list / get / cancel |
archon | operator authentication and identity |
push-providers | managing the parameters of push-mode SSH plugins |
run | run a scenario / ad-hoc cmd / push with universal targeting |
incarnation
Section titled “incarnation”soulctl incarnation list # list incarnationssoulctl incarnation get <name> # spec / state / status / covenssoulctl incarnation run <name> <scenario> # run a scenario on the incarnationsoulctl incarnation history <name> # state change historysoulctl incarnation check-drift <name> # check the incarnation's driftsouls / soul
Section titled “souls / soul”soulctl souls list # list registered agentssoulctl souls get <sid> # show an agent by SIDsoulctl souls ssh-target set <sid> ... # per-host push-mode SSH credentialssoulctl souls ssh-target bulk-set ... # bulk-bind an SSH provider across a Covensoulctl soul exec <sid> ... # a single module on a specific agent (Errand)errand
Section titled “errand”soulctl errand list # list Errands with filterssoulctl errand get <errand_id> # the Errand's statesoulctl errand cancel <errand_id> # cancel an in-flight Errandpush-providers
Section titled “push-providers”soulctl push-providers create <name> ... # create a Push-Provider recordsoulctl push-providers list # listsoulctl push-providers get <name> # readsoulctl push-providers update <name> ... # replace params (replace semantics)soulctl push-providers delete <name> # deleteAn umbrella for batch runs with unified targeting:
soulctl run scenario <service>/<scenario> # batch scenario run over incarnationssoulctl run cmd '<command>' # ad-hoc shell command across N hostssoulctl run push <destiny@ref> # push-apply destiny through an SSH providerError handling
Section titled “Error handling”soulctl maps Operator API HTTP errors into a clear form: 401 → a soulctl archon login hint, 403 → a missing permission, 404 → not found, 5xx → keeper error.
Installation
Section titled “Installation”soulctl does not ship as a deb/rpm package. Get it from a release binary or a source build (make build). See From binary releases and From source.