Skip to content

version, doctor and init

The three built-ins with no inner clap subtree. They take no flags of their own and accept --output only in the sense that they ignore it — none of them renders through rtb_cli::render::output.

version

Prints the tool's version information to stdout.

$ mytool version
mytool 0.1.0
  commit: 4f2a9c1
  built:  2026-07-31T09:12:44Z
  target: x86_64-linux
Line Source Shown when
<name> <version> ToolMetadata::name, VersionInfo::version always
commit: VersionInfo::commit the field is Some
built: VersionInfo::date the field is Some
target: std::env::consts::ARCH and ::OS always

commit and date are None unless the tool's build.rs populates them — version_info!() sets only the version, from CARGO_PKG_VERSION.

target: is not a Rust target triple. It is <arch>-<os>, so a GNU/Linux x86-64 build prints x86_64-linux, not x86_64-unknown-linux-gnu. The full triple is computed separately, by rtb-update, for asset naming.

Feature: Version. Exit code: always 0.

doctor

Runs every health check registered into rtb_cli::health::HEALTH_CHECKS and prints one line per check, in registration order.

$ mytool doctor
  [OK  ] config-file: parsed cleanly
  [WARN] keychain: locked, falling back to env
  [FAIL] api-token: no credential resolved
Verdict Label Effect on exit code
HealthStatus::Ok OK none
HealthStatus::Warn WARN none
HealthStatus::Fail FAIL run fails

Any Fail makes the command return an error with code rtb::doctor::failed and help text see the report above for which checks failed. Warn never fails the run.

A tool with no registered checks prints nothing and exits 0 — silence means "no checks", not "all healthy".

Feature: Doctor. See Add a health check.

init

Runs every initialiser registered into rtb_cli::init::INITIALISERS, in registration order, skipping any that reports itself already configured.

$ mytool init
  [SKIP] config-file — already configured
  [RUN]  api-token

With nothing registered:

$ mytool init
no initialisers registered — nothing to do

For each initialiser the command awaits is_configured(&app); true prints the [SKIP] line and moves on, false prints [RUN] and awaits configure(&app). The first configure that returns an error aborts the whole command — later initialisers do not run, and the ones that already ran are not undone. Write configure to be idempotent, because a re-run after a failure repeats everything that has not since reported itself configured.

Feature: Init. Exit code 0 unless an initialiser errored.