blowhorn config

blowhorn config: get, path, set, show.

The blowhorn config commands. Each one's --help prints the same text.

Command What it does
config get Print one option's effective value, which layer supplied it (a flag, the environment, the file or the built-in) and which document holds it.
config path Print the effective global config file path.
config set Set a dotted key in the global config file, keeping the file's comments, key order and unknown keys as written.
config show Display the current global config file contents, followed by the private connection file that defaults.store.config points at (~/.config/blowhorn/store.yaml, mode 0600) with store.password reported...

blowhorn config get

Print one option's effective value, which layer supplied it (a flag, the environment, the file or the built-in) and which document holds it: .blowhorn.yaml for defaults.<name>, the private connection file for store.<name>. store.password is reported as set or not set and never printed. With --json, the same row 'config show --json' carries for the option.

output
blowhorn config get [OPTIONS] key
Argument Required Description
key yes Dotted option key: defaults.<name> lives in .blowhorn.yaml, store.<name> in the private connection file
Flag Type Default Description
--json boolean false Emit the option report as machine-readable JSON
--platform string Accepted and ignored by 'blowhorn config': this command never acts on a platform, so --platform has no effect here -- including a value inherited from BLOWHORN_PLATFORM or defaults.platform in .blowhorn.yaml
--pace string Accepted by 'blowhorn config get' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn config get defaults.profile
blowhorn config get store.password
blowhorn config get store.tunnel.remote --json

Output: json with --json, text otherwise.

blowhorn config path

Print the effective global config file path.

output
blowhorn config path [OPTIONS]
Flag Type Default Description
--platform string Accepted and ignored by 'blowhorn config': this command never acts on a platform, so --platform has no effect here -- including a value inherited from BLOWHORN_PLATFORM or defaults.platform in .blowhorn.yaml
--pace string Accepted by 'blowhorn config path' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn config path

Output: text.

blowhorn config set

Set a dotted key in the global config file, keeping the file's comments, key order and unknown keys as written. A key the engine reads is stored in its own type (defaults.headless becomes a boolean, defaults.exclude a list even for one name, an empty value clears the key); for any other key, true/false become booleans and comma-delimited values become lists. A store.<name> key -- the database connection and the bastion tunnel -- is written to the private connection file that defaults.store.config points at (~/.config/blowhorn/store.yaml, created at mode 0600 in a 0700 directory) and never to .blowhorn.yaml, which git tracks. 'store.password' with no value prompts for it, so the password is never in argv or the daily log; an empty read -- no stdin, or a blank line -- is refused and nothing is written, so the one way to clear a stored password is the explicit empty argument "blowhorn config set store.password ''". A value that starts with a dash is read as an option unless you end the options first: write "blowhorn config set <key> -- <value>", which is also how a refused value gets the sentence saying what a valid one is.

output
blowhorn config set [OPTIONS] key [value]
Argument Required Description
key yes Dotted option key: defaults.<name> lives in .blowhorn.yaml, store.<name> in the private connection file
value no Value to assign to the key. Leave it out for store.password to be prompted for it instead; an empty prompt clears nothing, so pass an explicit '' to clear a stored value
Flag Type Default Description
--json boolean false Emit the option report as machine-readable JSON
--platform string Accepted and ignored by 'blowhorn config': this command never acts on a platform, so --platform has no effect here -- including a value inherited from BLOWHORN_PLATFORM or defaults.platform in .blowhorn.yaml
--pace string Accepted by 'blowhorn config set' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn config set defaults.profile lee
blowhorn config set defaults.pace slow
blowhorn config set defaults.exclude layer5,lee,meshery,kanvas
blowhorn config set defaults.logs.directory ~/blowhorn-logs
blowhorn config set defaults.logs.retention_days 365
blowhorn config set defaults.logs.retention_days -- -1
blowhorn config set defaults.exclude ''
blowhorn config set defaults.headless true --json
blowhorn config set defaults.store.organization layer5
blowhorn config set store.tunnel.target someone@bastion.example.com
blowhorn config set store.password
blowhorn config set store.password ''

Output: json with --json, text otherwise.

blowhorn config show

Display the current global config file contents, followed by the private connection file that defaults.store.config points at (~/.config/blowhorn/store.yaml, mode 0600) with store.password reported as set or not set and never printed. With --json, report every option .blowhorn.yaml honours instead: the value stored in the file, the environment override in force, the effective value and which of them supplied it, plus any keys under defaults the engine does not read; the private file's options are read with 'blowhorn config get' and 'blowhorn store --json'.

output
blowhorn config show [OPTIONS]
Flag Type Default Description
--json boolean false Emit the option report as machine-readable JSON
--platform string Accepted and ignored by 'blowhorn config': this command never acts on a platform, so --platform has no effect here -- including a value inherited from BLOWHORN_PLATFORM or defaults.platform in .blowhorn.yaml
--pace string Accepted by 'blowhorn config show' because --pace is a global flag, but this command does no paced work -- it opens no browser and sleeps between nothing -- so the value changes nothing about how it runs and appears only in the Pace column of the -v summary. Resolved as CLI flag, then BLOWHORN_PACE, then defaults.pace in .blowhorn.yaml (normal when none is set); an unrecognized value is rejected before anything runs

Also takes the shared flags: --config, --log-dir, --profile, --exclude, --headless, --chrome-launch, --headed, --dry-run, --verbose.

Examples:

terminal
blowhorn config show
blowhorn config show --config ~/.blowhorn.yaml
blowhorn config show --json

Output: json with --json, text otherwise.

Last modified October 18, 2026