brb wraps a command, waits for it to finish, then sends a completion event to your
configured channels.
Useful for long builds, test suites, data jobs, and deploys you do not want to watch in real time.
See documentation here.
cargo install brb-cliCreate the global config:
brb initCheck where it lives:
brb config pathStart with a minimal config:
version: 1
default_channels:
- desktop
channels:
desktop:
type: desktopValidate it:
brb channels validateSend a test notification:
brb channels test desktopRun something:
brb cargo testOverride channels for one run:
brb --channel desktop --channel ci-webhook pnpm testWhen you run brb, it:
- Loads your global config.
- Resolves channels from default_channels or repeated --channel flags.
- Runs the wrapped command with inherited stdin, stdout, and stderr.
- Builds a completion event.
- Delivers that event to each selected channel independently.
- Exits with the same code as the wrapped command.
If the wrapped command exits with 17, brb exits with 17. If the command cannot be started, brb exits with 127.
| Channel | Linux | macOS | Windows |
|---|---|---|---|
| desktop | notify-send | osascript | Not implemented yet |
| webhook | Supported | Supported | Supported |
| custom | Supported | Supported | Supported |
A full example config is included at assets/examples/config.yml.
brb uses one global YAML config file.
Minimal config:
version: 1
default_channels:
- desktop
channels:
desktop:
type: desktopRules:
- version must be 1
- channels must contain at least one channel
- default_channels must contain at least one channel ID
- every ID in default_channels must exist under channels
| Type | Purpose | Required | Optional |
|---|---|---|---|
| desktop | Local desktop notification | type | none |
| webhook | HTTP JSON delivery | type, url | method, headers |
| custom | Run your own notifier process | type, exec | args, env |
webhook and custom string values support ${env:VAR_NAME} interpolation.
Example:
channels:
ci-webhook:
type: webhook
url: ${env:BRB_WEBHOOK_URL}
headers:
Authorization: Bearer ${env:BRB_WEBHOOK_TOKEN}webhook and custom channels receive a completion payload like this:
{
"tool": "brb",
"status": "success",
"command": ["pnpm", "test"],
"cwd": "/path/to/project",
"started_at": "2026-02-22T12:00:00.000Z",
"finished_at": "2026-02-22T12:00:03.250Z",
"duration_ms": 3250,
"exit_code": 0,
"host": "my-machine"
}brb channels test sends a synthetic success event with this same shape.
