Part of forgectl — see the command roster.
forgectl bench status # aggregate health card across all components
forgectl bench status --json # machine-readable JSON (safe to pipe)
forgectl bench up # bring up the configured services via their own entrypoints
forgectl bench open [target] # open a bench UI (hearth | grafana; default hearth)forgectl bench is the interop spine across the local bench: the hearth telemetry stack and the chronicle transcript-retention layer. It orchestrates each system through its own frozen contract — it never reimplements one. Configure it in the [bench] section of the same config.toml:
[bench]
hearth_dir = "~/Projects/hearth" # else $HEARTH_DIR; unset ⇒ hearth reports not-configured
chronicle_dir = "~/Projects/chronicle" # else $CHRONICLE_DIR
otlp_endpoint = "http://localhost:16317" # hearth's frozen OTLP transport (baked default)
otlp_protocol = "grpc" # baked default
telemetry = false # opt-in: inject OTLP env into launched sessionsbench statusprobes each component —docker compose -p hearth psplus HTTP/OTLP reachability, andchronicle status --jsoncorroborated againstdocker compose -p sessions ps(chronicle's DB containers) plus thelocal.chronicle-syncLaunchAgent. Each resolves took | degraded | unavailable | not-configuredwith a human reason; a missingdocker, an unloaded daemon, or an unconfigured dir is a graceful state, never an error, sobench statusalways exits 0.--jsonemits the report to stdout for scripting.telemetry = trueinjects the Claude-Code-tailored OpenTelemetry env block into launched sessions so their metrics and logs flow to the local collector. Opt-in: with it off, no session points at a collector. A profileenvvalue wins over the injected default.forgectl launch doctorshows the current telemetry state.launch,resume,surface launch, andforgectl pr's tmux reviewer all inject it.forgectl launch whichnames the injected variables so you can confirm it without reading the source.- The collector lives on loopback, so a proxy profile can cut it off.
otlp_endpointdefaults tolocalhost:16317. If you set[proxy] launch_profile(see proxy), that profile must carry ano_proxy(forgectl refuses one without it) and it must includelocalhost— otherwise the session's OTLP exporter dials the collector through the corporate proxy and the metrics never arrive. bench upbrings the configured services up via their own entrypoints (hearth'sscripts/start.sh, chronicle'smake sync); an unconfigured service is skipped with a note.bench openopens a service UI in the browser (openon macOS,xdg-openelsewhere).