blowhorn store

Report whether this machine can reach the Blowhorn database, and say why not when it cannot.

blowhorn store

Report whether this machine can reach the Blowhorn database, and say why not when it cannot. One bounded probe: the bastion tunnel is up (and is opened if it is not), the server answers, the schema matches the migrations this checkout ships, the configured organization resolves, and the local write-back spool is empty.

The connection is Blowhorn's own configuration -- host, port, database, user, password and the tunnel, under 'store.' in ~/.config/blowhorn/store.yaml (mode 0600), settable with 'blowhorn config set' and in the desktop app. --replay-spool drains results already waiting in the spool.

Exits 0 when the store is usable, 2 when two flags contradict each other and 3 when the store is not usable -- the same code every other command uses for an unreachable store, so a wrapper can tell an outage from a failed job. --json emits the probe as one object: configured, configPath, configMode, dsn (password elided), tunnel {enabled, up, error}, reachable, serverVersion, schema {applied, pending}, organization, spoolDepth, validation, error, plus ok, exitCode, cause, warnings, rungs, offline, properties and replay.

output
blowhorn store [OPTIONS]
Flag Type Default Description
--json boolean false Emit the probe as machine-readable JSON (the shape the desktop app's Setup row reads); the password is elided in the reported dsn on every surface
--offline boolean false Answer from the configured paths and the files on disk alone: no tunnel is opened and no connection is attempted. This is how you tell a wrong setting from a dropped tunnel without waiting for three connect attempts to time out. It cannot be combined with --replay-spool, which needs the connection it refuses to open
--replay-spool boolean false Write out the results waiting in the local write-back spool now, rather than leaving them for the next run to drain. An entry whose row no longer exists is named and dropped from the pending file (the month's ledger still holds it); nothing else is ever deleted. With --dry-run it writes nothing and reports what the run without it would have done.
--platform string Accepted and ignored by 'blowhorn store': 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 store' 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 store
blowhorn store --json
blowhorn store --offline
blowhorn store --replay-spool
blowhorn store --replay-spool --dry-run

Output: json with --json, text otherwise.

Last modified October 18, 2026