Skip to content
Docs

CLI Reference

Put crate commands on PATH. This is a shell function that modifies the current shell’s PATH.

bulker activate <crate> [-s] [--strict-env] [--echo] [--hide-prompt] [-f] [-n <name>] [-c <path>]
FlagDescription
<crate>Registry path (namespace/name:tag), comma-separated list, or local file path
-sStrict mode: only crate commands on PATH (no host commands)
--strict-envClean container environment: only pass envvars allowlist (config + manifest)
--echoPrint export commands instead of launching a shell
--hide-promptDo not modify the shell prompt
-f, --forceRe-fetch manifests from registry even if cached
-n, --nameOverride crate identity for local manifests (e.g., myorg/mytool:1.0)
-c <path>Config file path

Auto-fetches the manifest from the registry if not already cached. No separate install step needed.

Restore the original PATH, removing all crate commands.

bulker deactivate

Run a single command in a crate environment without modifying the current shell. Preferred for scripts and AI agents.

bulker exec <crate> [-s] [--strict-env] [-p] [-n <name>] [-c <path>] -- <command> [args...]
FlagDescription
<crate>Registry path, comma-separated list, or local file path
-sStrict mode
--strict-envClean container environment: only pass envvars allowlist
-pPrint the container command instead of running it
-n, --nameOverride crate identity for local manifests (e.g., myorg/mytool:1.0)
-c <path>Config file path

Print the shell function definition for activate/deactivate. Add to your shell RC file.

bulker init-shell bash|zsh

The install script runs this automatically. If you need to add it manually:

# Add to ~/.bashrc
eval "$(bulker init-shell bash)"
# Add to ~/.zshrc
eval "$(bulker init-shell zsh)"

Generate shell completion scripts.

bulker completions bash|zsh|fish

See Shell Completions for setup instructions.

Pre-cache a manifest from the registry, a URL, or a local file. Optional — activate auto-fetches.

bulker crate install <crate> [-b] [-n <name>] [--no-overwrite] [-c <path>]
FlagDescription
<crate>Registry path or local file path
-bAlso pull/build all container images
-n, --nameOverride crate identity for local manifests (e.g., myorg/mytool:1.0)
--no-overwriteDon’t overwrite locally modified cached manifests

List cached crates.

bulker crate list [--versions] [--simple]
FlagDescription
--versionsShow all installed tags
--simpleSpace-separated output for scripting

Show the commands available in a crate.

bulker crate inspect [<crate>]

If <crate> is omitted, inspects the currently active crate (from $BULKERCRATE).

Remove a cached crate.

bulker crate clean <crate> [--all]
FlagDescription
--allClear entire cache

Show a content-addressable digest for a cached crate. Useful for reproducibility verification.

bulker crate digest <crate> [--verbose] [--resolve]
FlagDescription
--verboseShow per-command digest details
--resolveResolve image tags to digests (requires network)

Compare two cached crates, showing added, removed, and changed commands.

bulker crate compare <crate_a> <crate_b> [--json]
FlagDescription
--jsonOutput as JSON

Create or reset the config file with auto-detected defaults. Not required for normal use — bulker auto-generates a config on first use.

bulker config init [-c <path>] [-e docker|apptainer] [-f]
FlagDescription
-c <path>Config file path (default: ~/.config/bulker/bulker_config.yaml)
-e <engine>Container engine: docker or apptainer (auto-detected if omitted)
-f, --forceOverwrite existing config file

Display the config file, or the effective config (file merged with built-in defaults).

bulker config show [--effective] [-c <path>]
FlagDescription
--effectiveShow the effective config (all defaults filled in), even if no config file exists

Get a specific config value.

bulker config get <key> [-c <path>]

Set a config value.

bulker config set <key>=<value> [-c <path>]

For list values, use commas: bulker config set volumes=$HOME,/data,/scratch

Append an entry to a list config field.

bulker config add <key>=<value> [-c <path>]

Remove an entry from a list config field.

bulker config remove <key>=<value> [-c <path>]

Record real container outputs for mock replay. Runs the given command with recording shims that capture stdout, stderr, return codes, and new files for each crate command invocation.

bulker mock record <crate> <outputs.json> [-c <path>] -- <command> [args...]
FlagDescription
<crate>Registry path, comma-separated list, or local file path
<outputs.json>Path to write/append recorded outputs (created if absent)
-c <path>Config file path
-- <command>The pipeline command to run under recording

Replay recorded outputs without containers. Creates Python shims for each crate command that return pre-recorded stdout/stderr/returncode and recreate files.

bulker mock run <crate> <outputs.json> [-s] [--echo] [-c <path>]
FlagDescription
<crate>Registry path, comma-separated list, or local file path
<outputs.json>Path to the recorded outputs file
-sStrict mode: only mock commands on PATH
--echoPrint export commands instead of launching a shell
-c <path>Config file path
FlagDescription
-v, --verboseEnable debug logging (RUST_LOG=debug)
-c <path>Path to config file
--versionShow version
-h, --helpShow help
VariableDescription
BULKERCFGPath to config file (overridden by -c flag)
BULKERCRATECurrently active crate (set by activate)
BULKERPATHOriginal PATH before activation (set by activate)
BULKERPROMPTShell prompt format for active crates
BULKERSHELLRCPath to shell RC file
BULKER_ORIG_PATHSaved original PATH for restore on deactivate
BULKER_SHIMDIRPath to the ephemeral shimlink directory (used by deactivate for cleanup)
BULKER_STRICT_ENVIf set to 1, containers use a clean environment with only the envvars allowlist. Set by --strict-env flag.
BULKER_PRINT_COMMANDIf set, shimlinks print the container command instead of running it
BULKER_EXTRA_DOCKER_ARGSAdditional Docker flags applied to all containers
BULKER_EXTRA_ENVVARSAdditional env var names added to the --strict-env allowlist
BULKER_MOCK_OUTPUTSPath to the outputs.json file for mock replay (set by mock run)
BULKER_MOCK_RECORD_FILEPath to the outputs.json file being written during recording (set by mock record)