CLI Reference
The cc-deck command-line tool manages the plugin, sessions, snapshots, and workspace builds.
Global Flags
| Flag | Short | Description |
|---|---|---|
|
Config file path (default: |
|
|
Path to kubeconfig (default: |
|
|
|
Target Kubernetes namespace |
|
|
Output format: |
|
|
Credential profile to use |
|
|
Verbose output |
Command Groups
Help output organizes commands into four groups by usage frequency.
- Daily
-
attach,ls,exec. These commands are available both at the top level and underws. - Session
-
snapshot - Workspace
-
ws(full lifecycle management) - Config
-
config(plugin, profile, domains, completion) - Build
-
build
Daily Commands
Three high-frequency workspace commands are available directly at the top level.
They behave identically to their ws subcommand counterparts.
attach
Attach to a running workspace.
For container workspaces, this opens a Zellij session inside the container.
Stopped containers are auto-started before attaching.
When no name is provided, resolves from .cc-deck/environment.yaml in the project.
cc-deck attach mydev
cc-deck attach # resolves from project config
cc-deck attach --branch feature # land in a specific worktree
| Flag | Description |
|---|---|
|
Attach and land in a specific worktree directory inside the container |
Build Commands
plugin
Manage the Zellij plugin installation.
plugin install
Install the WASM plugin, layouts, and Claude Code hooks.
cc-deck config plugin install
cc-deck config plugin install --layout minimal
cc-deck config plugin install --force
cc-deck config plugin install --install-zellij
| Flag | Description |
|---|---|
|
Overwrite without prompting |
|
Skip creating backup of |
|
Default layout variant: |
|
Download and install matching Zellij binary |
snapshot
Manage session state snapshots.
build
Unified setup lifecycle commands for provisioning container images and SSH hosts from a declarative manifest.
The --target flag selects which provisioning targets to operate on.
Valid targets are container, ssh, or both as container,ssh.
build init
Scaffold a setup directory with manifest and AI commands.
When no directory is specified and the project has .cc-deck/, defaults to .cc-deck/setup/.
cc-deck build init my-team-setup
cc-deck build init # defaults to .cc-deck/setup/
cc-deck build init my-team-setup --force
cc-deck build init --target container
cc-deck build init --target ssh
cc-deck build init --target container,ssh
| Flag | Description |
|---|---|
|
Overwrite existing setup directory |
|
Provisioning targets to generate: |
build run
Execute pre-generated build artifacts directly from the CLI. Auto-detects whether to run a container build (via podman or docker) or SSH provisioning (via ansible-playbook) based on the artifacts present in the setup directory.
cc-deck build run
cc-deck build run .cc-deck/setup/
cc-deck build run --target container
cc-deck build run --target ssh
cc-deck build run --push
| Flag | Description |
|---|---|
|
Force target type: |
|
Push container image after successful build (container targets only, requires |
Exit codes from the underlying build tool (podman, ansible-playbook) are passed through.
build verify
Smoke-test a provisioned target. For container targets, starts a container and checks tool availability, Claude Code startup, and cc-deck version. For SSH targets, connects to the remote host and validates installed tools. Reports pass/fail for each check.
cc-deck build verify my-team-setup --target container
cc-deck build verify my-team-setup --target ssh
| Flag | Description |
|---|---|
|
Target to verify: |
build diff
Show manifest drift between the declared setup and the generated artifacts.
When --target is omitted, auto-detects available targets in the setup directory.
cc-deck build diff my-team-setup
cc-deck build diff my-team-setup --target container
cc-deck build diff my-team-setup --target ssh
| Flag | Description |
|---|---|
|
Target to diff: |
Reports tools, plugins, MCP servers, and other components that are in the manifest but not reflected in the generated provisioning artifacts.
profile
Manage credential profiles for AI backends.
domains
Manage domain groups for network filtering in containerized sessions.
Domain groups are named collections of domain patterns (e.g., python includes pypi.org and related hosts).
Groups can be built-in, user-defined, or extended from built-in definitions.
domains init
Seed ~/.config/cc-deck/domains.yaml with commented built-in group definitions as a starting point for customization.
cc-deck config domains init
cc-deck config domains init --force
| Flag | Description |
|---|---|
|
Overwrite existing |
domains list
List all available domain groups with their source and domain count.
Sources include builtin (shipped with cc-deck), user (defined in domains.yaml), and extended (user config that extends a built-in group).
cc-deck config domains list
domains show
Display the expanded domain patterns for a specific group.
cc-deck config domains show python
cc-deck config domains show github
domains blocked
Show blocked requests from the tinyproxy logs of a running Podman session. This command requires Podman and a session deployed with network filtering enabled.
cc-deck config domains blocked my-session
cc-deck config domains blocked my-session --since 30m
| Flag | Description |
|---|---|
|
Show blocks from the last duration (default: |
Workspace Commands
ws
Manage workspaces across all supported backends (local, container, compose).
When run inside a project with .cc-deck/environment.yaml, workspace names are resolved automatically.
The commands attach, ls, and exec are also available at the top level (see Daily Commands).
|
ws new
Create a new workspace.
When run inside a project with .cc-deck/environment.yaml, name and settings are read from the definition.
In a git repository without a definition, one is scaffolded from CLI flags before provisioning.
cc-deck ws new # reads from .cc-deck/environment.yaml
cc-deck ws new mydev --type local
cc-deck ws new --type compose --image quay.io/cc-deck/cc-deck-demo:latest
cc-deck ws new --variant auth # separate container instance
cc-deck ws new mydev --type container --port 8080:80
cc-deck ws new mydev --type ssh --host user@dev.example.com --repo https://github.com/org/repo.git
cc-deck ws new mydev --type ssh --repo https://github.com/org/repo.git --branch develop
| Flag | Short | Description |
|---|---|---|
|
|
Workspace type: |
|
Container image to use (container, compose) |
|
|
|
Port mapping (host:container), repeatable (container, compose) |
|
Expose all container ports (container) |
|
|
Storage type: |
|
|
Project directory (compose: defaults to cwd) |
|
|
Credential as |
|
|
Bind mount as |
|
|
Auth mode: |
|
|
Domain groups for network filtering, repeatable (compose only) |
|
|
Variant name for multiple container instances from the same definition |
|
|
SSH target host as |
|
|
SSH port (ssh only, default: 22) |
|
|
Path to SSH private key (ssh only) |
|
|
SSH jump/bastion host (ssh only) |
|
|
Custom SSH config file path (ssh only) |
|
|
Remote workspace directory (ssh only, default: |
|
|
Force resolution from global definition store (mutually exclusive with |
|
|
Force resolution from project-local definition (mutually exclusive with |
|
|
|
Kubernetes namespace (k8s-deploy) |
|
Path to kubeconfig file (k8s-deploy) |
|
|
Kubeconfig context name (k8s-deploy) |
|
|
PVC storage size, e.g. |
|
|
Kubernetes StorageClass name (k8s-deploy) |
|
|
Reference to pre-existing K8s Secret for credentials (k8s-deploy) |
|
|
External Secrets Operator SecretStore type (k8s-deploy) |
|
|
External Secrets Operator SecretStore name (k8s-deploy) |
|
|
External Secrets Operator secret path (k8s-deploy) |
|
|
Build directory containing |
|
|
Skip NetworkPolicy creation (k8s-deploy) |
|
|
Additional allowed domain for NetworkPolicy, repeatable (k8s-deploy) |
|
|
Domain group for NetworkPolicy, repeatable (k8s-deploy) |
|
|
Preserve PVCs when deleting (k8s-deploy) |
|
|
Pod readiness timeout, e.g. |
|
|
Git repository URL to clone into workspace, repeatable (ssh, container, compose, k8s-deploy). When run inside a git repo, the current project is auto-detected and included. |
|
|
Branch for the most recent |
ws attach
Attach to a workspace. Creates a Zellij session with the cc-deck layout if no session exists, or reattaches to an existing session. For infrastructure-managed workspaces (container, compose, k8s-deploy), stopped infrastructure is auto-started before session creation. When no name is provided, resolves from workspace definitions in the central store.
cc-deck ws attach mydev
cc-deck ws attach # resolves from project config
cc-deck ws attach --branch feature # land in a specific worktree
| Flag | Short | Description |
|---|---|---|
|
Attach and land in a specific worktree directory inside the container |
ws kill-session
Kill the Zellij session without affecting infrastructure.
The underlying container or pod remains running.
The next ws attach creates a fresh session with the cc-deck layout.
Works with all workspace types.
cc-deck ws kill-session mydev
cc-deck ws kill-session # resolves from workspace definitions
ws delete
Delete a workspace and its resources.
For project-local workspaces, removes runtime state (status.yaml, run/) but preserves the committed definition (environment.yaml).
cc-deck ws delete mydev
cc-deck ws delete # resolves from project config
cc-deck ws delete --force --keep-volumes
| Flag | Short | Description |
|---|---|---|
|
|
Force delete a running workspace |
|
Preserve data volumes when deleting container workspaces |
ws list
List all workspaces with their current status.
Shows both global and project-local workspaces in a unified view.
Each entry includes a SOURCE column indicating the definition origin (global, project, or empty for orphan instances).
cc-deck ws list
cc-deck ws ls # alias
cc-deck ws list --type container
cc-deck ws list --worktrees
cc-deck ws list -o json
| Flag | Short | Description |
|---|---|---|
|
|
Filter by workspace type |
|
|
Show git worktrees within each project |
ws status
Display detailed status information for a workspace. For project-local workspaces, the output includes the project directory path.
cc-deck ws status mydev
cc-deck ws status # resolves from project config
cc-deck ws status -o json
ws start
Start infrastructure for a stopped workspace.
Only applies to workspace types that manage infrastructure (container, compose, k8s-deploy).
For local and SSH workspaces, prints a suggestion to use ws attach instead.
Does not create a Zellij session; use ws attach after starting.
cc-deck ws start mydev
cc-deck ws start # resolves from workspace definitions
ws stop
Stop infrastructure and kill the Zellij session.
Only applies to workspace types that manage infrastructure (container, compose, k8s-deploy).
For local and SSH workspaces, prints a suggestion to use ws kill-session instead.
The session is killed first, then the infrastructure is stopped.
cc-deck ws stop mydev
cc-deck ws stop # resolves from workspace definitions
ws refresh-creds
Push fresh credentials to a remote SSH workspace without attaching. This is useful for keeping long-running sessions alive when local credentials rotate. Only applicable to SSH workspaces.
cc-deck ws refresh-creds remote-dev
cc-deck ws refresh-creds # resolves from project config
ws prune
Remove stale entries from the global project registry. Entries whose directories no longer exist are removed.
cc-deck ws prune
ws exec
Run a command inside a container workspace.
cc-deck ws exec mydev -- ls /workspace
cc-deck ws exec mydev -- npm install
ws push
Copy local files into a workspace. Works with all workspace types: local (filesystem copy), container (podman cp), SSH (rsync), and Kubernetes (tar-over-exec).
cc-deck ws push mydev ./src /workspace/src
cc-deck ws push mydev ./config.yaml
ws pull
Copy files from a workspace to the local machine. Works with all workspace types: local (filesystem copy), container (podman cp), SSH (rsync), and Kubernetes (tar-over-exec).
cc-deck ws pull mydev /workspace/output ./output
cc-deck ws pull mydev /workspace/results
ws harvest
Fetch git commits from a remote workspace into the local repository. Works with SSH, Kubernetes, container, and compose workspace types.
cc-deck ws harvest mydev
cc-deck ws harvest mydev --branch feature-x
cc-deck ws harvest mydev --branch feature-x --create-pr
| Flag | Description |
|---|---|
|
Create a local branch with this name from fetched commits |
|
Push branch and create a GitHub pull request |
ws voice
Start voice relay for hands-free dictation into a workspace’s attended agent session. Captures audio from the local microphone, transcribes locally via whisper.cpp, and relays text into the attended pane. Uses voice activity detection (VAD) with mute/unmute toggle.
When connected, a ♫ indicator appears in the sidebar header (bright green when listening, dim when muted).
Mute can be toggled from the sidebar (Alt+m, m in navigation mode, or clicking ♫) or from the voice TUI (m).
cc-deck ws voice mydev
cc-deck ws voice mydev --model small.en --verbose
cc-deck ws voice --setup
cc-deck ws voice --list-devices
| Flag | Description |
|---|---|
|
Whisper model name: |
|
Whisper-server port (default: |
|
VAD sensitivity (0-100, logarithmic scale). Overrides the config file value. |
|
Enable detailed logging to |
|
Check dependencies and download the whisper model |
|
List available audio input devices and exit |