Rediacc CLI Reference
Overview
The **Rediacc CLI** (`rdc`) is a command-line interface for managing self-hosted infrastructure — machines, repositories, storage, backups, and more.
Installation
Download the latest binary for your platform from the [Rediacc releases page](https://www.rediacc.com) or install via your package manager:
# macOS / Linux
curl -fsSL https://www.rediacc.com | sh
# Or use the packaged binary directly
./rdc --help
Global Options
Every command supports these global flags:
| Flag | Description |
|---|---|
--output | Output format (table|json|yaml|csv). Override default with REDIACC_DEFAULT_OUTPUT. |
--config | Use specific config for this command |
--lang | Language override ({{languages}}) |
--force | Skip confirmation prompts |
1. Config Management
Manage configuration files: create, switch, edit, reconcile state, and cross-cutting facilities (fields, audit, SSH keys, remote sync).
Config files store connection details (API URL, credentials, default team/region/bridge) so you can switch between environments quickly.
1.1 prune
Remove dead weight from the local config file at ~/.config/rediacc/<config>.json. Three buckets are cleaned, all pure-local (no SSH/renet calls): (1) ACME cert-cache entries whose anchor GUID/repo/machine is no longer in the active config; (2) archived repositories whose grace period has expired (default 7 days, see defaults.pruneGraceDays); (3) dangling cross-references (machine→strategy, strategy→repo). Resources still in use, credentials, storage tokens, and known-hosts are never touched. Default behavior is to apply changes; pass --dry-run to preview only.
rdc config prune [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--dry-run | Preview what would be removed without modifying the config file. Mirrors the default-off semantics of the other prune commands. | No | - |
--certs-only | Restrict to the ACME cert-cache bucket. Skips archive purging and cross-reference cleanup. Mutually exclusive with --archives-only and --refs-only. | No | - |
--archives-only | Restrict to expired-archive purging. Skips cert-cache and cross-reference cleanup. Mutually exclusive with --certs-only and --refs-only. | No | - |
--refs-only | Restrict to dangling cross-references (machine→strategy, strategy→repo excludes/includes). Skips cert-cache and archives. Mutually exclusive with --certs-only and --archives-only. | No | - |
--purge-archived | Drop ALL archived repositories regardless of age, not just those past grace. Equivalent to running 'rdc repo admin archive purge' for every archived repo. Use only when you're sure you don't need any of the stashed credentials for restore. | No | - |
--orphan-repos | Remove repository entries that are placed on no machine. Each entry holds that repo's credential and SSH key, so this is unrecoverable — run 'rdc config reconcile' first so placement reflects the machines. | No | - |
--grace-days <days> | Override the archive grace window (in days) for this invocation. Falls back to defaults.pruneGraceDays in the config, then to 7 if neither is set. | No | - |
1.2 init
Create a new named config file
You can add machines directly:
rdc config init [name] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--ssh-key <path> | Path to SSH private key (e.g., ~/.ssh/id_rsa) | No | - |
--renet-path <path> | Path to renet binary (default: renet in PATH) | No | - |
--master-password <password> | Encrypt resources with a master password | No | - |
--server <url> | Account server URL | No | - |
1.3 list
List all config files
rdc config list
1.4 show
Show current config details
rdc config show [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--reveal | Show plaintext for sensitive values (interactive only) | No | - |
1.5 current
Show the active config: name, file, resolved server and channel, token state
rdc config current
1.6 delete
Delete a config file
rdc config delete <name>
1.7 set
Set a default value (team, region, bridge)
rdc config set <key> <value>
1.8 clear
Clear defaults (all or specific key)
rdc config clear [key]
1.9 recover
Restore config from backup (.bak) file
rdc config recover [name] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
1.10 ssh
Manage SSH key configuration
set
Set SSH key for the current config
rdc config ssh set [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--key <path> | Path to SSH private key file | Yes | - |
--embed | Embed key content in config instead of storing path | No | - |
show
Show current SSH key configuration
rdc config ssh show
remove
Remove SSH key from the current config
rdc config ssh remove
1.11 remote
Manage remote config storage connection
enable
Link this config to remote encrypted storage
rdc config remote enable [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--headless | Use device code flow (for headless servers) | No | - |
--password | Enroll headlessly with a pre-provisioned password slot (no browser) | No | - |
--api-url <url> | Account server URL | No | - |
--force | Replace differing local content with the server copy without confirmation | No | - |
disable
Disconnect from remote storage and save config locally
rdc config remote disable
status
Show remote connection status
rdc config remote status
refresh
Force re-fetch config from remote storage
rdc config remote refresh
1.12 field
Pointer-addressed config field operations (get/set/unset/rotate/list). JSON Pointers (RFC 6901) like /credentials/cfDnsApiToken.
get
Read a single config value by JSON Pointer. Sensitive fields redact unless --reveal (humans only).
rdc config field get [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--pointer <pointer> | JSON Pointer to the field (e.g. /credentials/cfDnsApiToken) | Yes | - |
--reveal | Show plaintext for sensitive values (interactive TTY only; audited) | No | - |
--digest | Print the SHA-256 digest instead of the value (safe to share with agents) | No | - |
set
Write a config value at a JSON Pointer. Sensitive paths require --current (knowledge-gate).
rdc config field set [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--pointer <pointer> | JSON Pointer to the field (e.g. /credentials/cfDnsApiToken) | Yes | - |
--new <value> | New value (parsed as JSON if it looks like JSON: {, [, ", true/false/null/number) | Yes | - |
--current <value> | Current plaintext value — required for sensitive-path mutations (knowledge-gate proof) | No | - |
unset
Delete a config value at a JSON Pointer. Sensitive paths require --current.
rdc config field unset [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--pointer <pointer> | JSON Pointer to the field (e.g. /credentials/cfDnsApiToken) | Yes | - |
--current <value> | Current plaintext value — required for sensitive-path deletions | No | - |
rotate
Rotate a sensitive value without --current. Interactive TTY only; loudly audited.
rdc config field rotate [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--pointer <pointer> | JSON Pointer to the sensitive field (e.g. /credentials/cfDnsApiToken) | Yes | - |
--new <value> | New value | Yes | - |
list
List every registered sensitivity pointer template with its kind and commit/encrypt policy.
rdc config field list [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--sensitive | Show only sensitive (non-public) templates | No | - |
1.13 edit
Open the active config in $EDITOR as a redacted JSONC projection. Humans only; agents refused.
rdc config edit [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--reveal | Show plaintext for sensitive values (interactive TTY only; audited) | No | - |
--dump | Print current config as JSONC to stdout (read-only; safe for agents when redacted) | No | - |
--apply <file> | Apply an edited JSONC file (skips $EDITOR launch) | No | - |
--current-secrets <file> | JSON file mapping pointer→old plaintext for knowledge-gate on --apply | No | - |
--editor <cmd> | Editor command override (follows git precedence: flag > $GIT_EDITOR > git config core.editor > $VISUAL > $EDITOR) | No | - |
1.14 audit
Inspect the config audit log (hash-chained JSONL at ~/.config/rediacc/audit.log.jsonl)
log
Print recent audit entries as JSON
rdc config audit log [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--since <spec> | Only show entries newer than (e.g., '24h', '7d', ISO timestamp) | No | - |
--path <glob> | Filter by JSON Pointer glob (e.g., /credentials/*) | No | - |
--actor <kind> | Filter by actor kind (human|agent) | No | - |
tail
Stream new audit entries as they are written (Ctrl+C to stop)
rdc config audit tail
verify
Verify the integrity of the SHA-256 hash chain across all audit entries
rdc config audit verify
1.15 reconcile
Rebuild runtime state from machine truth. Fixes stale attach and routing data.
rdc config reconcile [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--machine <m...> | Limit the reconcile to these machines | No | - |
--dry-run | Show what would be done without making changes | No | - |
--accept-observed | Rewrite a declared placement to match where the image actually is, but only when that is unambiguous (observed on exactly one machine). Duplicates stay conflicts. | No | - |
1.16 rotate-cek
Rotate the organization config-encryption key
rdc config rotate-cek [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--api-url <url> | Account server URL | No | - |
2. Datastore Management
Named storage pools that hold repositories. A datastore is mobile (attach it to a machine, move it to another) and single-mounter (exactly one machine holds it at a time). The implicit default datastore on each machine is not managed here.
2.1 resize
Grow or shrink a datastore. This is an offline operation: the repositories inside it must be stopped.
rdc datastore resize <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--size <size> | New size (for example 200G) | Yes | - |
--debug | Enable debug output | No | - |
2.2 fork
Fork a datastore copy-on-write. The fork is instant and its cost does not grow with the size of the pool. Needs the rbd backend: a local datastore has no block-level clone, so repositories inside it fork one at a time by reflink instead (rdc repo fork).
rdc datastore fork <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--tag <tag> | Tag for the fork (the result is name:tag) | Yes | - |
--attach-to <machine> | Attach the fork to this machine right away (needs --writes) | No | - |
--writes <disposition> | Where the fork's writes go: local (instant, ephemeral) or ceph (durable clone) | No | - |
--cow-size <size> | Overlay size for --writes local | No | - |
--debug | Enable debug output | No | - |
2.3 status
Show one datastore: its backend, attachment, usage, repositories and snapshots. A detached datastore still reports its record.
rdc datastore status <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
2.4 create
Create an additional named datastore on a machine. A local backend is a file-backed pool on that machine and stays there. An rbd backend lives in Ceph, so it can move to any machine that reaches the same cluster. Pass --cluster to make it a kubernetes-world datastore; that backref is fixed at creation.
rdc datastore create <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine to create the datastore on | Yes | - |
--size <size> | Datastore size (for example 100G) | Yes | - |
--backend <type> | Storage backend: local (file-backed, stays on this machine) or rbd (Ceph, movable) | No | local |
--pool <name> | Ceph pool for the rbd backend (default: rbd) | No | - |
--image <name> | RBD image name for the rbd backend (default: the datastore name) | No | - |
--cluster <name> | Kubernetes cluster this datastore belongs to. Set means kubernetes repositories only; unset means docker repositories only. Fixed at creation. | No | - |
--debug | Enable debug output | No | - |
2.5 list
List named datastores, where they are attached, and what they hold.
rdc datastore list [place]
2.6 attach
Attach a datastore to a machine. Exactly one machine holds a datastore at a time, so attaching it somewhere else moves it: the old holder gives it up first, and a failed hand-off leaves the original attachment intact. A fork must say where its writes go.
rdc datastore attach <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--to <machine> | Machine to attach the datastore to | Yes | - |
--writes <disposition> | Where a fork's writes go: local (instant, ephemeral, lost on detach) or ceph (durable clone in the pool). Required for a fork. | No | - |
--cow-size <size> | Overlay size for --writes local | No | - |
--no-auto | Do not re-attach this datastore automatically on boot | No | - |
--force | Fence a stale holder that did not give the datastore up cleanly | No | - |
--debug | Enable debug output | No | - |
2.7 detach
Detach a datastore from its machine. Repositories inside it stop first. A fork attached with --writes local has nowhere to write its overlay back to, so detaching it throws the overlay away and needs --discard.
rdc datastore detach <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--discard | Throw away a local-writes fork and its overlay. The data is not recoverable. | No | - |
-y, --yes | Skip confirmation prompt | No | - |
--debug | Enable debug output | No | - |
2.8 snapshot
Take and list point-in-time snapshots of a datastore. A snapshot costs nothing at rest and is what a fork clones from.
create
Take a point-in-time snapshot of a datastore. Nothing stops. The instant is crash-consistent, not application-consistent: if you need a specific write to be IN the snapshot, sync it first.
rdc datastore snapshot create <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--snapshot <label> | Snapshot label (default: a UTC timestamp) | No | - |
--debug | Enable debug output | No | - |
list
List a datastore's snapshots.
rdc datastore snapshot list <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
2.9 delete
Destroy a datastore and everything in it. It detaches first; if it will not detach cleanly, the delete fails rather than orphaning a mounted pool.
rdc datastore delete <datastore> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
--force | Delete even though repositories still point at it. Their data goes with it. | No | - |
--debug | Enable debug output | No | - |
3. Machine Management
Inspect remote machine state: system resources, running containers, systemd services, deployed repositories, and health diagnostics. Read-only queries; to modify repos use `repo`. Key subcommands: status (full state, narrowed with --system, --containers, --repositories, --services), health, list, add, remove, setup, prune, provision, deprovision.
3.1 list
List machines
rdc machine list [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--search <text> | Search in {{field}} | No | - |
--sort <field> | Sort by field | No | - |
--desc | Sort in descending order | No | - |
3.2 health
Check machine health for CI/CD pipelines
The health command outputs system metrics, container status, service stability, and storage information — useful for CI/CD pipeline checks.
rdc machine health <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-t, --team <name> | Team name | No | - |
3.3 provision
Provision a new machine on a cloud provider using OpenTofu
rdc machine provision <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--provider <name> | Cloud provider name (from machine provider add) | Yes | - |
--region <region> | Override default region | No | - |
--type <type> | Override default instance type | No | - |
--image <image> | Override default OS image | No | - |
--ssh-user <user> | SSH username for the new VM (default: root) | No | - |
--base-domain <domain> | Base domain for infrastructure (e.g., example.com). Implies --infra | No | - |
--no-infra | Skip infrastructure configuration (proxy + DNS) | No | - |
--debug | Enable debug output | No | - |
3.4 deprovision
Destroy a cloud-provisioned machine and remove from config
rdc machine deprovision <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--force | Skip confirmation prompt | No | - |
--debug | Enable debug output | No | - |
3.5 prune
Remove orphaned datastore resources and stale snapshots from a machine. The base run cleans renet-internal datastore artifacts (BTRFS subvolumes, lock files, tmpfiles). The optional flags below enable progressively narrower repo cleanups: --orphaned-repos uses the local CLI config as the only signal, while --prune-unknown additionally consults the renet .interim/state mirror so legitimate forks created by other tools survive even when missing from your local config. Both deletion paths run a mount-safety preflight; pass --force-delete-mounted to override.
rdc machine prune <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--dry-run | Show what would be removed without making changes | No | - |
--orphaned-repos | Delete every repo image on the machine that is not in your local CLI config. Coarse — also removes forks created by other tools that have no local config entry, even when their renet mirror correctly identifies them as forks. Use --prune-unknown for the narrower behavior that respects the mirror. | No | - |
--prune-unknown | Delete only repos the renet .interim/state mirror cannot classify (not in local config AND no fork-marked mirror). Strictly narrower than --orphaned-repos: forks-without-config are preserved when the mirror identifies them. Pre-mirror legacy orphans and stale grands whose config entry was deleted both fall in this bucket. | No | - |
--force-delete-mounted | Override the mount-safety preflight and delete repos even if they are currently mounted or have running Docker containers. Distinct from --force (which only overrides the archive grace period). Applies to both --orphaned-repos and --prune-unknown. | No | - |
--force | Skip confirmation prompts | No | - |
--grace-days <days> | Grace period in days for recently archived repos (default: 7) | No | - |
--debug | Enable debug output | No | - |
3.6 add
Register an existing machine you can reach over SSH.
rdc machine add <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--ip <address> | Machine IP address or hostname | Yes | - |
--user <username> | SSH username | Yes | - |
--port <port> | SSH port | No | 22 |
3.7 infra
Manage infrastructure configuration (proxy, DNS, certificates)
cert
Manage cached TLS certificates
Remove the certificate cache
rdc machine infra cert clear
Download and cache TLS certificates from a machine
rdc machine infra cert pull <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--no-prune | Skip pruning stale network-ID certificates | No | - |
--debug | Enable debug output | No | - |
Upload cached TLS certificates to a machine
rdc machine infra cert push <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
Show cached certificate inventory
rdc machine infra cert status
push
Push infrastructure config to machine (Traefik proxy, router, Cloudflare DNS). Run 'machine infra set <machine>' first
rdc machine infra push <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
set
Set infrastructure configuration for a machine (machine-specific: IPs, domain, ports; shared: cert email, CF DNS token)
rdc machine infra set <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--public-ipv4 <ip> | Public IPv4 address (per-machine) | No | - |
--public-ipv6 <ip> | Public IPv6 address (per-machine) | No | - |
--base-domain <domain> | Base domain for applications (per-machine) | No | - |
--cert-email <email> | Email for TLS certificate notifications (shared across machines) | No | - |
--cf-dns-token <token> | Cloudflare DNS API token for ACME DNS-01 challenge (shared across machines) | No | - |
--tcp-ports <ports> | TCP ports to forward (comma-separated, e.g., 25,143,465) | No | - |
--udp-ports <ports> | UDP ports to forward (comma-separated, e.g., 53) | No | - |
show
Show infrastructure configuration for a machine
rdc machine infra show <machine>
3.8 provider
Manage cloud providers for automated machine provisioning
add
Add a cloud provider
rdc machine provider add <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--provider <source> | Known provider source (e.g., linode/linode, hetznercloud/hcloud) | No | - |
--source <source> | Custom OpenTofu provider source (e.g., vultr/vultr) | No | - |
--token <token> | API token for the cloud provider | Yes | - |
--region <region> | Default region for new machines | No | - |
--type <type> | Default instance type/size | No | - |
--image <image> | Default OS image | No | - |
--ssh-user <user> | SSH username for new VMs (default: root) | No | - |
--resource <type> | Custom: OpenTofu resource type for VM | No | - |
--label-attr <attr> | Custom: attribute name for VM label | No | - |
--region-attr <attr> | Custom: attribute name for region | No | - |
--size-attr <attr> | Custom: attribute name for instance type | No | - |
--image-attr <attr> | Custom: attribute name for OS image | No | - |
--ipv4-output <attr> | Custom: output attribute for IPv4 address | No | - |
--ipv6-output <attr> | Custom: output attribute for IPv6 address | No | - |
--ssh-key-attr <attr> | Custom: attribute name for SSH keys | No | - |
--ssh-key-format <format> | Custom: SSH key format (inline_list or resource_id) | No | - |
--ssh-key-resource <type> | Custom: OpenTofu resource type for SSH keys | No | - |
list
List configured cloud providers
rdc machine provider list
remove
Remove a cloud provider configuration
rdc machine provider remove <name>
3.9 remove
Remove a machine from the config. Does not touch the machine itself.
rdc machine remove <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
--force | Remove the machine even if repositories are still placed on it, leaving those placements dangling. | No | - |
3.10 scan-keys
Scan SSH host keys for machines in the current config
rdc machine scan-keys [name]
3.11 setup
Install renet and prepare a registered machine for repositories.
rdc machine setup <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--datastore-path <path> | Datastore path on remote machine | No | /mnt/rediacc |
--datastore-size <size> | Datastore size (e.g., 95%, 100G) | No | 95% |
--debug | Enable debug output | No | - |
3.12 status
Show a machine's system, repositories, containers, and services.
rdc machine status [name] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
--system | Include system info only | No | - |
--repositories | Include repositories only | No | - |
--containers | Include containers only | No | - |
--services | Include services only | No | - |
--network | Include network interfaces only | No | - |
--block-devices | Include block devices only | No | - |
--licenses | Include repository license statuses | No | - |
--storage-health | Show BTRFS reflink savings and (informational) image fragmentation per repository | No | - |
--datastores | Show attached datastores (mount, attach, usage) | No | - |
--health-check | Health check mode - exits with code 2 if any unhealthy | No | - |
--stability-check | Stability check mode - exits with code 2 if any failed/restarting | No | - |
--search <text> | Filter repositories by name | No | - |
--sync-certs | Also pull the ACME cert cache from the machine after querying | No | - |
--strict | Exit non-zero (code 2) if any container has crossed the health-drift threshold | No | - |
4. Cluster Management
Provision and manage clusters: named sets of node pools (ceph, k8s-server, k8s-agent, hyperconverged) on a private network. Pool members materialize into machines, so every -m command works on them.
4.1 create
Declare and provision a cluster: machines, Ceph pools, and Kubernetes. Pass --provider and --pool to declare in one step; a bare create provisions a cluster already declared.
rdc cluster create <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--provider <provider> | Provider: a cloudProviders key, or 'kvm' | No | - |
--pool <spec...> | Pool spec name:role:count[:size] (role: ceph|k8s-server|k8s-agent|hyperconverged) | No | - |
--declare-only | Record the cluster in config without provisioning it | No | - |
--network-cidr <cidr> | Private network CIDR (e.g. 10.0.0.0/24) | No | - |
--network-primitive <primitive> | Network primitive (e.g. vlan, vpc, network) | No | - |
--control-node <machine> | Explicit control-node machine (default: first k8s-server member) | No | - |
--net-name <name> | KVM: libvirt network for this cluster (e.g. renet12) | No | - |
--net-base <prefix> | KVM: network prefix, the first three octets (e.g. 192.168.112) | No | - |
--net-offset <n> | KVM: offset added to each VM id when deriving its address | No | - |
--control-id <n> | KVM: VM id of the control and registry node (default: 1) | No | - |
--docker-registry <endpoint> | KVM: in-VM Docker registry endpoint for this cluster | No | - |
--ssh-user <user> | SSH user for provisioned members | No | - |
--base-domain <domain> | Base domain for cluster public DNS (else inherited from a sibling machine) | No | - |
--control-ds-size <size> | Anchor control datastore size (default 10G) | No | - |
--control-ds-backend <backend> | Anchor control datastore backend: local | ceph (default: ceph if the cluster has ceph, else local) | No | - |
--control-ds-pool <pool> | Ceph rbd pool for the anchor control datastore (ceph backend) | No | - |
--debug | Enable debug output | No | - |
4.2 status
List all clusters, or pass a cluster name to show that cluster's full config.
rdc cluster status [cluster]
4.3 scale
Change a pool's member count (adds/removes machines and joins/drains nodes). k8s-agent pools scale in place; ceph pool growth is done via cephadm directly.
rdc cluster scale <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--pool <pool> | Pool name | Yes | - |
--count <n> | Desired member count | Yes | - |
--debug | Enable debug output | No | - |
4.4 destroy
Tear down the provisioned members and remove the cluster and its machines from config.
rdc cluster destroy <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--force | Skip confirmation and continue past teardown errors | No | - |
--debug | Enable debug output | No | - |
4.5 kubeconfig
Fetch the kubeconfig from the cluster control node over SSH and cache it locally (0600) for kubectl.
rdc cluster kubeconfig <cluster>
4.6 fork
Clone an entire cluster, including its repos' data, into a new cluster: coordinated copy-on-write of the cluster and PV images, then node-identity rewrite so the fork comes up on new addresses. The parent keeps running.
rdc cluster fork <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--tag <tag> | Fork tag | Yes | - |
--to <dest-cluster> | Destination cluster whose nodes host the fork (its control node and agents; a cluster cannot fork onto its own machines, since two k3s cannot share a host network namespace) | Yes | - |
--writes <disposition> | Fork write disposition: local (ephemeral dm-COW overlay, zero Ceph footprint) | ceph (durable clone). Default local | No | - |
--up | Bring the forked repos up and gate on cluster health after the fork boots | No | - |
--debug | Enable debug output | No | - |
4.7 migrate
Move an entire cluster, including its repos' data, to another machine or datacenter with a short cutover (hot pre-copy, then stop-and-restart on the destination).
rdc cluster migrate <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--to <dest-cluster> | Destination | Yes | - |
--debug | Enable debug output | No | - |
4.8 join
Adopt an existing registered machine as a Kubernetes agent node of a cluster, using the same CA-derived join token as anchor and rejoin.
rdc cluster join <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--cluster <name> | Cluster to join the machine to | Yes | - |
--debug | Enable debug output | No | - |
4.9 evict
Drain the node, delete its Node object, and clear its cluster membership. The cluster is derived from the machine; a machine that still mounts a datastore is refused.
rdc cluster evict <machine> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--force | Skip the drain when the node is already dead | No | - |
--debug | Enable debug output | No | - |
4.10 rehearse
Rehearse a release/upgrade: fork the cluster onto a destination as an ephemeral throwaway (writes=local, secretless role=rehearsal), bring it up, gate on health, then discard it. The parent is never touched.
rdc cluster rehearse <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--on <dest-cluster> | Destination cluster to boot the throwaway rehearsal on | Yes | - |
--tag <tag> | Optional tag for the rehearsal fork (default: timestamped) | No | - |
--debug | Enable debug output | No | - |
4.11 snapshot
Point-in-time snapshots of the whole cluster. One crash-consistent instant across every rbd-backed datastore the cluster owns, taken through Ceph's group snapshot: nothing stops and the cluster never notices. Local-backend datastores have no block-level group primitive, so they fall outside the instant and are reported as such. The instant is crash-consistent, not application-consistent: if you need a specific write to be IN the snapshot, sync it first.
create
Snapshot every rbd-backed datastore in the cluster at ONE instant. Nothing is stopped. Any local-backend datastore in the cluster is listed as outside the instant: it is not part of the snapshot. The instant is crash-consistent, not application-consistent: if you need a specific write to be IN the snapshot, sync it first.
rdc cluster snapshot create <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--snapshot <label> | Snapshot label (default: a UTC timestamp) | No | - |
--debug | Enable debug output | No | - |
list
List the cluster's group snapshots.
rdc cluster snapshot list <cluster> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
5. MCP Server
Expose the CLI as a Model Context Protocol (MCP) server for integration with AI agents. The server wraps CLI commands as MCP tools with structured JSON input/output. Key subcommand: serve (start stdio-based MCP server).
5.1 serve
Start MCP server (stdio transport)
rdc mcp serve [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--config <name> | Config name to use for all commands | No | - |
--timeout <ms> | Default command timeout in milliseconds | No | 120000 |
6. Repository Lifecycle
Deploy and manage encrypted repositories on machines. Key subcommands: create, up (deploy), down (stop), fork (instant CoW clone), delete, push/pull (backup), sync (file transfer). Lifecycle: repo create → repo up → repo down. See Key Concepts in rdc --help for architecture, routing, and environment variable details.
6.1 up
Deploy or update a repository (mount, run Rediaccfile up which calls renet compose). The machine is derived from the ref placement. Proxy routes take ~3s to become active after deploy. Prints the URL pattern for HTTP-exposed services (rediacc.service_port label) on completion. First deploy and forks are mounted automatically. CRIU checkpoint restore is auto-detected; use --skip-checkpoint to force fresh start. Use --all --machine <m> to deploy every repository on a machine.
rdc repo up [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--no-start | Mount and prepare the repository without running its up() steps (folds the retired 'repo mount'; LUKS open and, for cluster repos, PV generation). | No | - |
--skip-checkpoint | Skip CRIU checkpoint restore even if checkpoint data exists (force fresh start) | No | - |
--tls | Request dedicated TLS cert for this repo (forks use shared machine cert by default) | No | - |
--no-wait | Return once containers are started; health checks continue in the background | No | - |
--all | Deploy every repository whose home is --machine (batch form) | No | - |
-m, --machine <name> | With --all: the machine whose repositories to run the batch against | No | - |
--include-forks | Also mount/start forked repositories | No | - |
--parallel | Start repositories concurrently | No | - |
--concurrency <n> | Max concurrent repositories (default: 3) | No | 3 |
-y, --yes | Skip confirmation for batch operations | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
--dry-run | Show what would be done without making changes | No | - |
6.2 down
Stop repository Docker containers (runs Rediaccfile down via renet compose). The machine is derived from the ref placement. Does NOT unmount the encrypted volume -- the repo stays mounted and can be restarted with 'repo up'. Use --unmount to also close the LUKS container after stopping (folds the retired 'repo unmount'). Use --checkpoint to save CRIU process state before stopping (next 'repo up' auto-restores). Use --all --machine <m> to stop every repository on a machine.
rdc repo down [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--unmount | Also unmount (close the LUKS container) after stopping. Required before 'repo resize' or to fully secure the volume | No | - |
--checkpoint | Create CRIU checkpoint before stopping (save process memory state for later restore via 'repo up') | No | - |
--all | Stop every repository whose home is --machine (batch form) | No | - |
-m, --machine <name> | With --all: the machine whose repositories to run the batch against | No | - |
--parallel | Start repositories concurrently | No | - |
--concurrency <n> | Max concurrent repositories (default: 3) | No | 3 |
-y, --yes | Skip confirmation for batch operations | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
--dry-run | Show what would be done without making changes | No | - |
6.3 status
Get repository status (mount state, Docker daemon running, container count, disk usage)
rdc repo status <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.4 cat
Read a bounded window of a file in a repository to stdout (diagnostics go to stderr).
rdc repo cat <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--remote-file <path> | File path to read, relative to the repository mount root | Yes | - |
--max-bytes <n> | Maximum bytes to read and print (default 1 MiB, hard ceiling 50 MiB) | No | - |
--offset <n> | Byte offset to start reading from | No | - |
--head <lines> | Print only the first N lines (cannot combine with byte range) | No | - |
--tail <lines> | Print only the last N lines (cannot combine with byte range) | No | - |
--stat | Print only size, type, and modification time; read no content | No | - |
--force-binary | Allow reading binary (NUL-containing) content | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.5 diff
Git-style file-level diff between two copy-on-write forked repositories. Reports Added, Modified, Deleted, and Renamed files. Diffs the repository given by the positional <ref> (the target / new side) against its parent, resolved from local config, or against an explicit --base repository (the base / old side). Metadata-only and size-independent: it diffs the encrypted LUKS images at the block level without decrypting them, so a 1 GB repo and a 100 GB repo diff in the same milliseconds.
rdc repo diff <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--base <ref> | Repository to diff against (the base / old side); defaults to the parent of <ref> | No | - |
--name-only | Print only changed file paths, one per line (no status letters) | No | - |
--stat | Show per-file change magnitude (byte and block deltas) and totals | No | - |
--content [path] | Show a unified text diff for a single file (requires a file path) | No | - |
--fast | Trust the block filter; skip content-hash confirmation (may over-report Modified) | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.6 list
List repositories on a machine
rdc repo list [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | No | - |
--datastore <name> | List the repositories in this datastore (resolved to whichever machine currently holds it) | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.7 create
Create a new repository. State its home once: a machine or a datastore.
rdc repo create <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | No | - |
--datastore <name> | Named datastore that holds the repo (docker tiering, or the cluster form) | No | - |
--size <size> | Repository size (e.g., 10G, 100G, 1T) | No | - |
--no-docker | Skip starting Docker daemon after creation | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.8 delete
Delete a repository and its data. Config entry is preserved; use --archive-config to move credentials to deletedRepositories for recovery via 'repo admin archive restore'. Takes a positional <ref>; a bare name resolves to the grand line and is refused when several repos share the base name, so pass name:tag to target a fork.
rdc repo delete <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--archive-config | Move config entry to deletedRepositories for later recovery | No | - |
-y, --yes | Skip confirmation prompt | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
--dry-run | Show what would be done without making changes | No | - |
6.9 commit
Freeze the current state of a mounted working fork into a new immutable commit (git-like). The commit records its message, author, timestamp, and parent in-volume (so it travels on push) and is marked read-only — it refuses to mount. The working fork continues unchanged, like git leaving the working tree intact. Check a commit out with 'rdc repo checkout' to get a writable copy.
rdc repo commit <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--message <msg> | Commit message | Yes | - |
--author <author> | Commit author | No | - |
--debug | Enable debug output | No | - |
6.10 branch
Create a named branch ref pointing at the working fork's current commit (its tip). Branch refs live in the CLI config (machine = object store, config = ref store).
rdc repo branch <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--branch <branch> | Name of the new branch | Yes | - |
6.11 checkout
Reflink-clone an immutable commit (or a branch tip) into a fresh writable working fork and point HEAD at it. Near-instant and constant-time (BTRFS reflink).
rdc repo checkout <commit-or-branch-ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--tag <name> | Name for the new writable working fork | Yes | - |
--from <workingFork> | Resolve the positional <commit-or-branch-ref> as a branch name on this working fork | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.12 log
Print the commit history reachable from a working fork's current commit (or a commit reference), walking the parent chain recorded by 'rdc repo commit'. Reads the out-of-volume mirror, so no commit is unlocked.
rdc repo log <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
6.13 merge
Merge a source commit or fork into a target working fork. The live target is never mutated in place: the result is built in a reflink clone and atomically swapped in. A mounted or running target is refused unless --force, which cleanly quiesces it first. Without --resolve it is a whole-image take-theirs (the target becomes the source); with --resolve ours|theirs it is a per-file three-way merge against the common ancestor, taking each side's unique changes and resolving two-sided conflicts per the flag.
rdc repo merge <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--from <source> | Source commit or fork to merge from | Yes | - |
--force | Quiesce a mounted/running target first, then merge (never mutates a live mount) | No | - |
| `—resolve <ours | theirs>` | Per-file conflict resolution for a three-way merge: 'ours' keeps the target's version, 'theirs' takes the source's. Omit for whole-image fast-forward (take-theirs). | No |
--base <guid> | Common-ancestor commit GUID for a three-way merge (used with --resolve). Defaults to the source commit's parent or the target's current commit. | No | - |
--debug | Enable debug output | No | - |
6.14 gc
Delete immutable commit objects on a machine that no branch or HEAD reaches (reachability GC). The machine is the object store; the CLI config is the ref store. Dry-run by default: pass --apply to delete. Never touches a mounted object or a working fork.
rdc repo gc [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
--apply | Actually delete the unreachable commits (default is a dry-run preview) | No | - |
--debug | Enable debug output | No | - |
6.15 fork
Create a CoW (Copy-on-Write) fork of a repository. FORK IS NEAR-INSTANT AND CONSTANT-TIME regardless of repo size, BTRFS reflink clones the underlying image so a 100 GB repo and a 1 GB repo fork in the same ~seconds. The fork gets a NEW GUID, networkId, IP range, and auto-route domain ({service}-fork-{tag}.{repo}.{machine}.{baseDomain}) and is a fully independent copy. Online forking is supported, the parent can remain running. Fork inherits the parent's encryption credentials automatically. Use --checkpoint to capture CRIU process state before forking, the fork will auto-restore on first 'repo up' (in-memory state preserved). CROSS-MACHINE FORK: fork locally first, then transfer: (1) rdc repo fork <parent-ref> --tag <name>, (2) rdc repo push <fork-ref> --to <target-machine>, (3) rdc backup restore <fork-ref> --as <fork-name> -m <target-machine> --up. WARNING: do NOT use "repo push" alone to fork, it creates a raw copy with the SAME GUID (not an independent fork). Always fork first to get a new identity. Auto-routes use the repo name, so each fork gets a unique domain automatically.
rdc repo fork <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--tag <name> | Tag for the fork (creates name:tag) | Yes | - |
--checkpoint | Create CRIU checkpoint on source before forking (capture process memory state for restore on fork) | No | - |
--immutable | Mark the fork read-only: it refuses to mount, keeping its image byte-stable forever (a frozen commit/base for cross-machine delta push) | No | - |
--up | Mount and start services after forking (fork + mount + up in one command) | No | - |
--no-wait | With --up: return once containers are started; health checks continue in the background (ideal for throwaway forks) | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.16 replicate
Create N read replicas of a repository in seconds, regardless of database size. Takes ONE datastore snapshot, then makes N constant-time fork-attaches (copy-on-write, throwaway local writes) spread across the cluster's nodes, and applies a generated overlay: one pinned PersistentVolume per replica, a StatefulSet, and two Services ({repo}-rw to the primary, {repo}-ro across the replicas). Replicas are POINT-IN-TIME copies: no replication stream, no read-your-writes; each replica runs one crash-recovery pass before serving. Refresh them with 'repo replicate refresh'. Replica sets are managed state: see 'repo replicate status' and remove with 'repo replicate remove'.
status
Show managed replica sets: replicas, hosting nodes, fork datastores, snapshot, and refresh timestamps.
rdc repo replicate status <ref>
remove
Remove a replica set: delete its generated k8s objects (label-scoped), discard its fork datastores, drop its snapshot, and forget the state. Infra steps are best-effort so removal converges even on a partially-gone cluster.
rdc repo replicate remove <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
refresh
Roll every replica onto a fresh point-in-time snapshot, ONE at a time: bounce the replica pod, discard and re-fork its datastore under the same path, and let readiness re-admit it. N-1 replicas keep serving throughout.
rdc repo replicate refresh <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
6.17 canary
Run a NEW image next to the stable one and split live traffic between them by percentage (release ladder rung 2). Creates one canary Deployment + Service on the SAME live data (no fork: canary users on forked data would read stale data and write into a doomed copy) and tells the Rediacc proxy to route the given percent of the stable hostname's traffic to it. Weight 0 keeps the canary dark; weight 100 is the blue/green flip. Before every canary change, an automatic group snapshot of the cluster's datastores is taken (release ladder rung 0) as the universal undo. Schema compatibility between the two versions (expand-contract) is the application's responsibility. For schema-BREAKING releases, use blue/green instead: fork the repo (instant, includes data), point the fork's Service here with weight 100, and roll back by restarting the untouched parent; writes made after the flip exist only in the new copy, so the rollback window is a policy decision.
status
Show managed canary sets: weight, images, stable service, and the latest release-undo snapshot.
rdc repo canary status <ref>
weight
Change the percent of traffic routed to a canary. Takes a fresh release-undo group snapshot first, then re-applies the overlay; the proxy picks up the new split on its refresh tick. Weight 100 sends all traffic to the new version (the blue/green flip).
rdc repo canary weight <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--weight <percent> | Percent of traffic routed to the canary (integer 0-100; 0 = dark, 100 = full flip) | Yes | - |
--debug | Enable debug output | No | - |
remove
Remove a canary's Deployment and Service (label-scoped); the stable Service serves 100% again. Release-undo snapshots are retained; prune them with the datastore snapshot commands.
rdc repo canary remove <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
create
Run a NEW image next to the stable one and send it a percentage of live traffic. The canary shares the repository's live data (no fork), so schema compatibility between the two versions is the application's responsibility. A group snapshot of the cluster's datastores is taken first, as the undo.
rdc repo canary create <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--image <image> | New image the canary Deployment runs (against shared live data) | Yes | - |
--port <port> | Port the app serves on (must match the stable Service) | Yes | - |
--weight <percent> | Percent of traffic routed to the canary (integer 0-100; 0 = dark, 100 = full flip) | Yes | - |
--service <name> | Stable Service to split traffic with (default: the repo name) | No | - |
--replicas <n> | Canary Deployment replica count (default: 1) | No | - |
--debug | Enable debug output | No | - |
6.18 resize
Resize a repository offline (supports both grow and shrink). Repo must be unmounted first ('repo down --unmount'). For zero-downtime growth without stopping, use 'repo expand' instead
rdc repo resize <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--size <size> | New repository size (e.g., 10G, 100G, 1T) | Yes | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.19 expand
Expand a mounted repository online (zero downtime, grow-only). Grows the LUKS container and filesystem while containers keep running. Cannot shrink -- use 'repo resize' for that (requires unmount)
rdc repo expand <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--size <size> | New repository size (e.g., 10G, 100G, 1T) | Yes | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.20 trim
Reclaim datastore pool space from mounted repositories (online, zero downtime). Frees blocks deleted inside repositories back to the pool via fstrim. Without a ref, trims every mounted repository on -m plus the datastore itself. fstrim is skipped for repositories under an active backup; --docker reclaim still runs
rdc repo trim [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--docker | Reclaim Docker space (stopped containers, dangling images, build cache); runs even while a backup snapshot is active | No | - |
--docker-volumes | Additionally prune unused Docker volumes | No | - |
--report-only | Show discard state and reclaimable estimate without trimming | No | - |
-m, --machine <name> | Target machine name | No | - |
--debug | Enable debug output | No | - |
6.21 policy
Manage the automatic size policy applied by the machine's storage maintainer: grow a repository's quota online when it fills up (never past max-quota, never when the pool is low) and run scheduled trims. There is no automatic shrink; use 'repo resize' for that. Without a ref, the machine-wide default policy on -m is addressed
set
Set size policy fields. Only the flags you pass are changed; other stored fields keep their values. Enabling auto-grow requires --max-quota: the ceiling is your explicit consent to over-provision the pool
rdc repo policy set [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--auto-grow <bool> | Enable automatic online quota growth (true/false) | No | - |
--max-quota <size> | Auto-grow ceiling (e.g. 200G); required for auto-grow | No | - |
--grow-threshold <percent> | Filesystem used % that triggers a grow (default 85) | No | - |
--grow-step <step> | Growth per step: absolute (10G) or percent of quota (20%) | No | - |
--auto-trim <bool> | Enable scheduled trim (true/false) | No | - |
--trim-interval <hours> | Minimum hours between automatic trims (default 24) | No | - |
-m, --machine <name> | Target machine name | No | - |
--debug | Enable debug output | No | - |
get
Show the stored machine default, the repository override (with a ref), and the effective merged policy the maintainer acts on
rdc repo policy get [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | No | - |
--debug | Enable debug output | No | - |
6.22 push
Push repository to a remote (machine or storage). The target type is auto-detected from config. For machine-to-machine transfer, the encrypted repo image is copied with the SAME GUID — this is a backup/migration, not a fork. To create an independent fork, use 'repo fork' first, then push. A pushed copy lands as a backup ARTIFACT: boot it on the target with 'backup restore <ref> --as <name> -m <target> --up'
rdc repo push <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--to <remote> | Destination machine or storage name (auto-detected from config) | No | - |
--to-machine <machine> | — | No | - |
--provision <provider> | Auto-provision target machine via cloud provider if it doesn't exist | No | - |
--checkpoint | Create CRIU checkpoint before backup (captures process memory state for live migration) | No | - |
--force | Force overwrite existing backup | No | - |
-w, --watch | Watch for changes | No | - |
--bwlimit <limit> | Bandwidth limit for rsync transfer (e.g., "6M", "10M") | No | - |
--delta-base <guid> | Immutable base GUID present byte-identical on both machines; transfer only changed blocks (machine target). Omit for hands-free auto-base | No | - |
--strategy <strategy> | Block-delta strategy when using a delta base: auto, physical, or shared | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.23 pull
Pull repository from a remote (machine or storage). Omit name to pull all repos. The source type is auto-detected from config. Use --up to deploy after pull
rdc repo pull <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--from <remote> | Source machine or storage name (auto-detected from config) | No | - |
--from-machine <machine> | — | No | - |
--force | Force overwrite existing repository | No | - |
--up | After pull, mount and deploy repository on this machine | No | - |
-w, --watch | Watch for changes | No | - |
--bwlimit <limit> | Bandwidth limit for rsync transfer (e.g., "6M", "10M") | No | - |
--delta-base <guid> | Immutable base GUID present byte-identical on both machines; receive only changed blocks (machine source) | No | - |
--strategy <strategy> | Block-delta strategy when using a delta base: auto, physical, or shared | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.24 migrate
Live-migrate a repository from one machine to another with minimal downtime. Two-phase rsync: bulk transfer while running, then brief stop for delta sync. Moves the whole repository (routing is repointed at the new home) and, once the move succeeds, deletes the source images (use --keep-source to retain them). Supports CRIU checkpoint for process memory migration and auto-provisioning of target machines
rdc repo migrate <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--to <place> | Destination machine or cluster | Yes | - |
--provision <provider> | Auto-provision target via cloud provider (e.g., hetzner, linode) | No | - |
--bwlimit <limit> | Bandwidth limit for rsync transfer (e.g., 10M) | No | - |
--checkpoint | CRIU live migration: capture and restore process memory state | No | - |
--delta-base <guid> | Immutable base GUID for the cutover delta (advanced; defaults to the Phase-1 base) | No | - |
--strategy <strategy> | Block-delta strategy for the cutover: auto, physical, or shared | No | - |
--skip-dns | Skip DNS record switching after migration | No | - |
--keep-source | Keep the source images after a successful move (by default they are deleted; leftover copies are not addressable by any config record and reconcile flags them as strays) | No | - |
--debug | Enable debug output | No | - |
6.25 sync
Sync repositories and files (bulk push/pull, file transfer)
upload
Upload files to a repository via rsync over SSH (delta transfer). Use --mirror to delete extra remote files, --dry-run to preview, --exclude to skip patterns
rdc repo sync upload <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--local <paths...> | One or more local file or directory paths (default: current directory) | No | - |
--remote <path> | Remote subdirectory path within repository | No | - |
--remote-file <path> | Single remote file path (relative to repo root) to upload to. Mutually exclusive with --remote. | No | - |
--mirror | Mirror mode - delete remote files not present locally | No | - |
--verify | Verify files using checksums after sync | No | - |
--confirm | Preview changes and ask for confirmation before syncing | No | - |
--exclude <patterns...> | Patterns to exclude from sync | No | - |
--dry-run | Show what would be done without making changes | No | - |
download
Download files from a repository via rsync over SSH (delta transfer). Use --mirror to delete extra local files, --dry-run to preview, --exclude to skip patterns
rdc repo sync download <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--local <path> | Local directory path (default: current directory) | No | - |
--remote <path> | Remote subdirectory path within repository | No | - |
--remote-file <path> | Remote file path within repository (alternative to --remote for single-file transfers) | No | - |
--mirror | Mirror mode - delete local files not present on remote | No | - |
--verify | Verify files using checksums after sync | No | - |
--confirm | Preview changes and ask for confirmation before syncing | No | - |
--exclude <patterns...> | Patterns to exclude from sync | No | - |
--dry-run | Show what would be done without making changes | No | - |
status
Dry-run comparison of local and remote files (shows what would be transferred without actually transferring)
rdc repo sync status <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--local <path> | Local directory path (default: current directory) | No | - |
--remote <path> | Remote subdirectory path within repository | No | - |
--remote-file <path> | Remote file path within repository (alternative to --remote for single-file transfers) | No | - |
6.26 tunnel
Create an SSH port-forward tunnel to a container's port on a remote machine. Auto-detects container and port when unambiguous. The tunnel stays open until you press Ctrl+C
rdc repo tunnel <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-c, --container <name> | Container name (auto-detected if only one running) | No | - |
--port <port> | Remote container port to forward | No | - |
--local <port> | Local port (defaults to same as remote port) | No | - |
--url-only | Print only the local URL once the tunnel is ready (machine-readable) | No | - |
6.27 secret
Manage per-repo secrets injected at deploy time. Write-only: get returns digest only (never plaintext), set/unset require --current digest match or --rotate-secret. Two delivery modes: env (REDIACC_SECRET_<KEY>) and file (tmpfs at /var/run/rediacc/secrets/<networkId>/<KEY> via compose `secrets:`). Secrets never enter the encrypted LUKS image; forks inherit none.
get
Show the SHA-256 digest of a secret. The plaintext value is never returned by design (write-only). Use --current on a subsequent set/unset to verify a value you already know, or rotate via `set --rotate-secret`.
rdc repo secret get <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--key <KEY> | Secret key in UPPER_SNAKE_CASE (max 64 chars). Will be exposed as REDIACC_SECRET_<KEY> for env-mode or /run/secrets/<key> in containers for file-mode. | Yes | - |
list
List secret keys and modes (never values, never digests).
rdc repo secret list <ref>
set
Set or overwrite a secret. Forks do not inherit; set on the fork explicitly. Under agent context, requires --current digest match (passwd-style).
rdc repo secret set <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--key <KEY> | Secret key in UPPER_SNAKE_CASE (max 64 chars). Will be exposed as REDIACC_SECRET_<KEY> for env-mode or /run/secrets/<key> in containers for file-mode. | Yes | - |
--value <value> | Secret value. Pass `-` to read from stdin (avoids shell-history exposure). | Yes | - |
--mode <mode> | Delivery mode: 'env' (visible in container env, docker inspect) or 'file' (tmpfs file, never in env). Default: file. | No | file |
--current <value> | Previous plaintext value (passwd-style precondition). Required for overwrite/unset; mutually exclusive with --rotate-secret. | No | - |
--rotate-secret | Acknowledge rotation; skip --current precondition (audited as rotation). Use when intentionally rotating without verifying the prior value. | No | - |
unset
Delete a secret. Under agent context, requires --current digest match.
rdc repo secret unset <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--key <KEY> | Secret key in UPPER_SNAKE_CASE (max 64 chars). Will be exposed as REDIACC_SECRET_<KEY> for env-mode or /run/secrets/<key> in containers for file-mode. | Yes | - |
--current <value> | Previous plaintext value (passwd-style precondition). Required for overwrite/unset; mutually exclusive with --rotate-secret. | No | - |
--rotate-secret | Acknowledge rotation; skip --current precondition (audited as rotation). Use when intentionally rotating without verifying the prior value. | No | - |
6.28 admin
Repository administration and maintenance verbs.
archive
Archived repository record bookkeeping.
List archived repository records.
rdc repo admin archive list
Permanently delete archived records.
rdc repo admin archive purge [name] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
Restore an archived record into the config.
rdc repo admin archive restore <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--new-name <name> | New resource name | No | - |
validate
Validate repository integrity (LUKS container, filesystem consistency, configuration). Use after unexpected shutdowns or to verify backup health
rdc repo admin validate <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
fsck
Validate the CLI config refs (branches, HEAD) against the objects actually present on a machine. Reports dangling refs (a ref pointing at a missing object) and orphan commits (an immutable commit no ref reaches). Read-only.
rdc repo admin fsck [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
ownership
Change repository directory ownership UID on the mounted volume (default: 7111). Use when containers need a specific UID to access repo files
rdc repo admin ownership <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--uid <uid> | Owner UID (default: 7111) | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
autostart
Manage automatic repository startup on boot
Enable autostart for a repository (omit name to enable all)
rdc repo admin autostart enable [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
Disable autostart for a repository (omit name to disable all)
rdc repo admin autostart disable [ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
List repositories with autostart enabled
rdc repo admin autostart list [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
template
Manage and apply deployment templates (writes docker-compose.yml, Rediaccfile, and additional files). Rediaccfile must use 'renet compose' (not 'docker compose'). Restart policies are safe (auto-managed by renet watchdog). Renet auto-injects network_mode:host, CRIU capabilities, and rediacc labels. Dangerous settings (privileged, pid:host) are blocked. Use 'list' to see available built-in templates, 'apply' to deploy one to a repository
List all embedded deployment templates shipped with the CLI
rdc repo admin template list
Apply a template to a repository. Use a built-in template name (e.g. app-postgres) or --file for a custom JSON template. Rediaccfile lifecycle: up() starts containers (pull images, generate configs here), down() stops. Minimal Rediaccfile: up() { renet compose -- pull; renet compose -- up -d; } down() { renet compose -- down; }. IMPORTANT: Rediaccfile MUST use 'renet compose': 'docker compose' is rejected. ENV VARS: two levels: (a) Rediaccfile shell: ${SVCNAME_IP} (e.g. APP_IP), ${REDIACC_WORKING_DIR}, ${REDIACC_NETWORK_ID}. (b) Inside containers: renet auto-injects SERVICE_IP and REDIACC_NETWORK_ID env vars. eBPF bind rewriting handles IP isolation transparently, so apps can bind to 0.0.0.0 and the kernel rewrites it to the correct loopback IP. Health checks can use localhost. network_mode:host is injected and ports: are ignored. STORAGE: Both ${REDIACC_WORKING_DIR}/... bind mounts and Docker named volumes are safe: Docker data-root is inside the encrypted LUKS mount. RESTART POLICY: Restart policies are safe: renet auto-strips them for CRIU compatibility and the watchdog handles recovery. Compose: do NOT add network_mode or rediacc.* labels (renet injects them). Multi-project: place each sub-project in its own subdirectory with its own Rediaccfile: renet auto-discovers and runs them in order. HTTPS routing: (A) Auto-route (fork-friendly, recommended): do NOT add traefik.enable. Renet auto-generates https://{serviceName}.{repoName}.{machineName}.{baseDomain}. Add rediacc.service_port=<port> label for non-80 ports. Each fork gets a unique domain. (B) Traefik labels (custom domain, NOT fork-friendly): traefik.enable=true, traefik.http.routers.<n>.rule=Host(`domain`), traefik.http.routers.<n>.entrypoints=websecure,websecure-v6, traefik.http.routers.<n>.tls.certresolver=letsencrypt, traefik.http.services.<n>.loadbalancer.server.port=<port>. For TCP/UDP: rediacc.tcp_ports=3306 / rediacc.udp_ports=53
rdc repo admin template apply <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--template <name> | Template to apply | Yes | - |
--file <path> | Path to custom template JSON file ({"version":"2","files":{"Rediaccfile":"...","docker-compose.yml":"..."}}): overrides the built-in template name | No | - |
--grand <name> | Parent credential repository (auto-resolves name to GUID). Only for repos sharing secrets with a parent | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.29 promote
Make a validated fork the production repository under its parent name. The parent keeps its identity (GUID, networkId, domains, autostart, backup chain) and receives the fork's data; the old production data is preserved as a backup fork. Use it to test an upgrade on a fork, verify it, then promote. Pass an explicit <name>:<tag> for the fork; a bare ref resolves to the parent and is rejected with "not a fork". Promote never fetches bytes: use 'repo push' or 'backup restore' for that.
rdc repo promote <fork-ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
6.30 logs
Show application logs from a repository's containers. Docker repositories read from the repository's own Docker daemon; kubernetes repositories read the pod logs in the repository's namespace. If the repository runs more than one container, name the one you want with --container.
rdc repo logs <ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-c, --container <name> | Container to read (only needed when the repository runs more than one) | No | - |
-f, --follow | Keep streaming new lines until interrupted | No | - |
--lines <n> | How many lines of history to show (default: 100) | No | 100 |
--timestamps | Prefix each line with its timestamp | No | - |
--debug | Enable debug output | No | - |
6.31 exec
Run a command inside a repository container. The command's own exit code is passed straight through, so this works in scripts and conditionals. Docker repositories run it through the repository's Docker daemon; kubernetes repositories run it in the repository's namespace.
rdc repo exec <ref> <cmd...> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-c, --container <name> | Container to run in (only needed when the repository runs more than one) | No | - |
-i, --interactive | Allocate a terminal (for a command that expects one) | No | - |
-u, --user <user> | User to run the command as | No | - |
--debug | Enable debug output | No | - |
7. Detached Jobs
Manage detached jobs on a machine: list them, check status, replay or follow their event logs, cancel one, or garbage-collect finished ones. A detached job runs under systemd on the machine, so it survives a dropped connection and can be re-attached to later.
7.1 list
List detached jobs on a machine, newest first
rdc job list [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
7.2 status
Show a detached job's status
rdc job status <job-id> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
7.3 logs
Replay or follow a detached job's event log
rdc job logs <job-id> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
-f, --follow | Stream until the job finishes | No | - |
--since-line <n> | Resume after this many lines (the count you already received) | No | - |
--debug | Enable debug output | No | - |
7.4 cancel
Cancel a running detached job
rdc job cancel <job-id> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
-y, --yes | Skip confirmation prompt | No | - |
7.5 gc
Remove finished jobs and their logs
rdc job gc [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
--older-than <duration> | Collect jobs that finished longer ago than this, in hours (default: 168) | No | - |
-y, --yes | Skip confirmation prompt | No | - |
8. Backup & Restore
Manage backup strategies, their scheduled runs, and the artifacts they produce: declare a strategy for a repository, run or restore it on demand, and inspect the archives it wrote to a storage endpoint.
8.1 schedule
Deploy backup schedule to a remote machine (systemd timers)
rdc backup schedule [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | Yes | - |
--dry-run | Preview generated units without deploying | No | - |
--force | Proceed even if a backup is currently running (new unit applies on next tick; running invocation keeps its old unit) | No | - |
--reset-failed | Clear failed state on touched services after a successful deploy (off by default, preserves failure signal) | No | - |
--debug | Enable debug output | No | - |
8.2 cancel
Cancel a running backup on a remote machine
rdc backup cancel [strategy] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | Yes | - |
--debug | Enable debug output | No | - |
8.3 list
List backup artifacts on a machine or storage.
rdc backup list [artifact-ref] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | No | - |
--storage <name> | List artifacts on this storage endpoint | No | - |
--path <subdir> | Subdirectory within the storage root. When omitted, hot/ and cold/ are listed and merged. | No | - |
-w, --watch | Watch for changes | No | - |
--debug | Enable debug output | No | - |
8.4 restore
Turn a backup artifact into a live repository. Placement is stated here.
rdc backup restore <artifact-ref> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--as <name> | Name for the restored repository (defaults to the artifact name) | No | - |
-m, --machine <name> | Machine name | No | - |
--datastore <name> | Restore into this named datastore (its attached machine hosts it) | No | - |
--up | Deploy the restored repository after the transfer | No | - |
--health-window <seconds> | Total health-gate window in seconds (default 300) | No | - |
--health-timeout <seconds> | Per-attempt health-check timeout in seconds (default 30) | No | - |
-y, --yes | Skip confirmation prompt | No | - |
--debug | Enable debug output | No | - |
8.5 run
Run a backup now.
rdc backup run [strategy] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | Yes | - |
-w, --watch | Watch for changes | No | - |
--debug | Enable debug output | No | - |
8.6 status
Show backup status and timer state on a remote machine
rdc backup status [strategy] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | Yes | - |
--debug | Enable debug output | No | - |
8.7 strategy
Manage named backup strategies (hot/cold modes, destinations, scheduling)
set
Create or update a backup strategy
rdc backup strategy set <strategy> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--destination <name> | Destination name within the strategy | No | - |
--storage <name> | Storage config name (rclone credentials) | No | - |
--cron <expression> | Cron schedule (e.g., "0 * * * *" for hourly) | No | - |
--mode <mode> | Backup mode: "hot" (zero downtime) or "cold" (stop, snapshot, restart) | No | - |
--bwlimit <limit> | Rclone bandwidth limit (e.g., "6M", "10M:off", "08:00,3M;22:00,10M") | No | - |
--include <repos> | Only back up these repos (comma-separated names) | No | - |
--exclude <repos> | Exclude these repos from backup (comma-separated names) | No | - |
--folder <path> | Subfolder under the storage bucket for this destination (e.g. hot, cold) | No | - |
--enable | Enable the strategy or destination | No | - |
--disable | Disable the strategy or destination | No | - |
bind
Bind a backup strategy to a machine so its schedule is deployed there
rdc backup strategy bind <strategy> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
unbind
Unbind a backup strategy from a machine
rdc backup strategy unbind <strategy> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Target machine name | Yes | - |
remove
Remove a backup strategy or destination
rdc backup strategy remove <strategy> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--destination <name> | Remove only this destination (keeps other destinations) | No | - |
list
List all backup strategies
rdc backup strategy list
show
Show backup strategy details
rdc backup strategy show [strategy]
9. Storage Management
Manage external backup storage endpoints (S3 and other rclone-compatible targets): register and remove them, list what is registered, browse the artifacts they hold, and prune orphaned backups.
9.1 list
List storage endpoints. Give a name for full detail.
rdc storage list [name] [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--reveal | Reveal the storage configuration in plaintext (interactive TTY only; audited) | No | - |
9.2 browse
Browse files in a storage system
rdc storage browse <storage> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--path <subpath> | Subdirectory path to list | No | “ |
9.3 prune
Delete orphaned backups from storage that are no longer in any config. Multi-config safe with grace period protection. The rclone calls run on --machine (the executor), not on your laptop, so clients don't need rclone installed locally; --machine is the executor, not the source of truth.
rdc storage prune <storage> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Executor machine — runs the rclone list/delete calls against the storage. Required because clients aren't expected to have rclone installed locally; storage credentials still come from your local config. | Yes | - |
--dry-run | Show what would be done without making changes | No | - |
--force | Skip confirmation prompts | No | - |
--force-delete-mounted | Override the mount-safety check and delete cloud backups even if the source GUID is currently mounted or has a running container on the executor machine. Distinct from --force (which only overrides the grace period for archived repos). | No | - |
--grace-days <days> | Grace period in days for recently archived repos (default: 7) | No | - |
--debug | Enable debug output | No | - |
--skip-router-restart | Skip restarting the route server after binary update | No | - |
9.4 add
Register a storage endpoint.
rdc storage add <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--vault <json> | Vault content as JSON string | Yes | - |
9.5 import
Import a storage endpoint from a definition file.
rdc storage import <file> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--name <name> | Import only this named section | No | - |
9.6 remove
Remove a storage endpoint from the config.
rdc storage remove <name> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-y, --yes | Skip confirmation prompt | No | - |
--dry-run | Show what would be done without making changes | No | - |
10. VS Code Integration
Open VS Code with Remote SSH to a machine or repository with sandboxed per-repo environment. Same SSH connection as `term` but launches VS Code instead. Key subcommands: connect (or positional shorthand), list (show configured connections), cleanup (remove SSH config entries), check (verify VS Code installation).
10.1 connect
Open VS Code on a machine or inside a repository.
rdc vscode connect <target> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-f, --folder <path> | Remote folder path to open | No | - |
--url-only | Print the VS Code URI instead of launching | No | - |
-n, --new-window | Open in new VS Code window | No | - |
--skip-env-setup | Skip remote environment setup | No | - |
--insiders | Use VS Code Insiders settings | No | - |
--browser | Serve browser VS Code from inside the repo sandbox (no local VS Code needed) | No | - |
--no-open | Print the URL without launching the local browser | No | - |
--local <port> | Local port (defaults to same as remote port) | No | - |
--server-provider <id> | Browser VS Code server implementation (openvscode, code-server) | No | - |
--server-archive <file> | Pre-staged server tarball path on the machine (airgapped installs) | No | - |
10.2 list
List configured VS Code SSH connections
rdc vscode list
10.3 cleanup
Remove VS Code SSH configurations
rdc vscode cleanup [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--all | Remove all rediacc SSH configurations | No | - |
-c, --connection <name> | Remove specific connection | No | - |
10.4 check
Check VS Code installation and configuration
rdc vscode check [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--insiders | Use VS Code Insiders settings | No | - |
10.5 serve
Manage the in-sandbox browser VS Code server
status
Show whether the browser VS Code server is running
rdc vscode serve status <target> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--server-provider <id> | Browser VS Code server implementation (openvscode, code-server) | No | - |
stop
Stop the browser VS Code server
rdc vscode serve stop <target> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--server-provider <id> | Browser VS Code server implementation (openvscode, code-server) | No | - |
11. SSH Terminal Access
Open an SSH terminal to a machine or a repository. The target is a machine name or a repo ref, and the repository context (DOCKER_HOST, working directory, environment) is set up automatically. Use `-c` to run a single command non-interactively. For container logs or a one-shot command in a container, use `repo logs` and `repo exec`. For VS Code, use `vscode`.
11.1 connect
Open a shell on a machine, or inside a repository with its Docker set up.
rdc term connect <target> [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-c, --command <cmd> | Execute a command instead of interactive shell | No | - |
--external | Force launching in external terminal window | No | - |
--reset-home | Reset per-repo home overlay for a fresh start | No | - |
12. Quick Commands (Shortcuts)
12.1 run
WARNING: Low-level command for debugging and experimentation only. Not for production use. Use higher-level commands (repo up, repo down, etc.) instead. Runs a raw bridge function on a machine.
rdc run
12.2 trace
Trace a task (shortcut for: queue trace)
rdc trace
12.3 cancel
Cancel a task (shortcut for: queue cancel)
rdc cancel
12.4 retry
Retry a failed task (shortcut for: queue retry)
rdc retry
13. Subscription Management
Manage licensing and subscription tokens. Sign in with login, inspect with status, reissue licenses with refresh.
13.1 login
Authenticate via browser or API token
rdc subscription login [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-t, --token <token> | API token (rdt_...) | No | - |
--server <url> | Account server URL | No | - |
13.2 logout
Clear stored subscription token
rdc subscription logout
13.3 status
Show subscription, and license state for a machine.
rdc subscription status [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | No | - |
13.4 refresh
Refresh licenses from the account server.
rdc subscription refresh [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-m, --machine <name> | Machine name | No | - |
--repo <ref> | Repository ref: name, or name:tag, optionally with @machine (for example shop or shop:test) | No | - |
14. CLI Updates
Check for new CLI versions and apply updates. Supports --check-only to check without installing, and --force to update even if already on the latest version.
rdc update [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--force | Force update even if already up-to-date | No | - |
--check-only | Only check for updates without downloading | No | - |
--rollback | Rollback to the previous version | No | - |
--status | Show auto-update status and diagnostics | No | - |
--channel <channel> | Set release channel (stable or edge) | No | - |
15. Third-Party Credits
Print the third-party components bundled with rdc: the binaries renet embeds and conveys (CRIU, rsync, rclone), the embedded Node.js runtime, and the bundled npm dependencies. Shows versions, SPDX license identifiers, and the exact-version source archive URLs required for GPL compliance. Use --licenses to print the full THIRD_PARTY_LICENSES text bundled with release builds.
rdc credits [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--licenses | Print the full THIRD_PARTY_LICENSES text bundled with release builds | No | - |
16. System Diagnostics
Run diagnostic checks on the CLI environment: Node.js version, renet binary availability, config file validity, SSH key status, and network connectivity. Outputs a structured health report with pass/fail indicators.
rdc doctor
17. Local VM Operations
Local VM provisioning and management using KVM/QEMU/Hyper-V (platform auto-detected). Not for remote machines — use `machine` for those. Key subcommands: up (start VMs), down (stop), status (list running VMs), ssh (connect to VM), setup (install prerequisites), check (verify host readiness).
17.1 up
Provision VM cluster locally
rdc ops up [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--force | Force restart all VMs | No | - |
--parallel | Create VMs in parallel | No | - |
--basic | Minimal cluster (bridge + 1 worker) | No | - |
--lite | Skip VM provisioning (status only) | No | - |
--skip-orchestration | Skip cluster orchestration | No | - |
--backend <backend> | Virtualization backend (kvm|qemu, auto-detected) | No | - |
--os <name> | VM operating system (e.g., ubuntu-24.04, debian-13) | No | - |
--debug | Enable debug output | No | - |
17.2 down
Destroy VM cluster
rdc ops down [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--backend <backend> | Virtualization backend (kvm|qemu, auto-detected) | No | - |
--debug | Enable debug output | No | - |
17.3 status
Show VM cluster status
rdc ops status [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--backend <backend> | Virtualization backend (kvm|qemu, auto-detected) | No | - |
17.4 ssh
SSH into a VM
rdc ops ssh [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--vm-id <id> | Virtual machine ID | Yes | - |
-c, --command <cmd> | Execute a command instead of interactive shell | No | - |
--backend <backend> | Virtualization backend (kvm|qemu, auto-detected) | No | - |
--user <user> | SSH username for VM connection | No | - |
17.5 setup
Install virtualization prerequisites
rdc ops setup [options]
| Flag | Description | Required | Default |
|---|---|---|---|
--debug | Enable debug output | No | - |
17.6 check
Verify virtualization prerequisites
rdc ops check
18. Executor Service
Run this process as an executor so clients can run commands through it instead of connecting over SSH themselves
rdc serve [options]
| Flag | Description | Required | Default |
|---|---|---|---|
-p, --port <port> | Port to listen on | No | 8080 |
--host <host> | Address to bind | No | 0.0.0.0 |
--mode <mode> | Placement: daemon (customer host) or container | No | daemon |
Common Error Messages
When something goes wrong, the CLI provides clear error messages:
| Error | Meaning |
|---|---|
| Authentication required. Run: rdc subscription login | You need to log in first |
| No active config. Create one with: rdc config init <name> | No config is active — create one with `rdc config init` |
| Permission denied | Your account lacks the required permissions |
| Machine name required. Use --machine <name> | Specify a machine with `--machine` or set a config default |
| Team name required. Use --team or set default with: rdc config set team <name> | Specify a team with `--team` or set a config default |
| Region name required. Use --region or set default with: rdc config set region <name> | Specify a region with `--region` or set a config default |
Output Formats
All list/get commands support multiple output formats via `--output`:
rdc machine list --output json
rdc machine list --output yaml
rdc machine list --output csv
rdc machine list --output table # default
This makes it easy to integrate Rediacc CLI into scripts, CI/CD pipelines, and automation workflows.