$ reference
TOML Filters
~/.boost/filters/ or .boost/filters/ to teach Boost how to trim a custom script, linter, or internal CLI — no recompile required. Where filters load
Boost merges filters from several locations. Later files can add new filters; the first match_command regex that matches the command line wins at runtime. Files within a folder load in sorted (deterministic) order.
- Built-in filters shipped with Boost (
make,terraform,shellcheck, …) ~/.boost/filters/*.toml(global folder, one filter per file).boost/filters/*.tomlin the project (folder, one filter per file)
Folder layout (one filter per file)
Custom filters live in a folder of one-filter files: each file holds a single [filters.<name>] block plus its [[tests.<name>]] examples. This keeps filters independently editable — an agent (or you) can tune one filter without touching the others.
~/.boost/filters/
git-status.toml # [filters.git-status] + [[tests.git-status]]
my-deploy.toml # [filters.my-deploy] + [[tests.my-deploy]]
Folder filters in ~/.boost/filters/ are picked up by the next boost process with no rebuild (unlike built-in filters, which are embedded at compile time).
Disabling a filter
In ~/.boost/config.toml, list filter names under [filters] disabled. Those names are skipped at load time (builtins and user/project filters alike). After retrieve_disable_threshold retrieve events for the same capability (default 3), boost retrieve auto-appends the rolled-back filter name(s). Set the threshold to 0 to turn auto-disable off. Edit or clear the list to re-enable.
[filters]
disabled = ["git-status", "make"]
retrieve_disable_threshold = 3
Example: custom deploy script
Your team runs ./scripts/deploy.sh through Boost. The script prints hundreds of progress lines but only errors matter to the agent.
.boost/filters/deploy.toml
schema_version = 1
[filters.deploy]
description = "Keep failures from deploy.sh"
match_command = "^\\./scripts/deploy\\.sh\\b"
strip_ansi = true
keep_lines_matching = [
"^(ERROR|WARN|FAIL)",
"^\\s+at ",
]
max_lines = 80
on_empty = "deploy: ok"
==> Resolving staging manifest…
==> Pulling image acme/web:staging
==> Waiting for rollout (1/3 ready)
==> Waiting for rollout (2/3 ready)
ERROR: pod api-7f9c failed readiness: connection refused
at deploy.sh:142 check_health
WARN: retry 1/3 in 5s
==> Rollout complete
ERROR: pod api-7f9c failed readiness: connection refused
at deploy.sh:142 check_health
WARN: retry 1/3 in 5s
$ boost ./scripts/deploy.sh staging
Example: strip make chatter
Built-in filters use the same schema. This mirrors the shipped make filter: drop entering/leaving directory lines and blank rows.
[filters.make]
match_command = "^make\\b"
strip_lines_matching = [
"^make\\[\\d+\\]:",
"^\\s*$",
"^Nothing to be done",
]
max_lines = 50
on_empty = "make: ok"
make[1]: Entering directory '/home/user/app' gcc -O2 -c src/main.c gcc -O2 -o app src/main.o make[1]: Leaving directory '/home/user/app'
gcc -O2 -c src/main.c gcc -O2 -o app src/main.o
Example: short-circuit on clean lint
Use match_output to return a one-line summary when the tool succeeded quietly.
[filters.eslint-quiet]
match_command = "^eslint\\b"
match_output = [
{ pattern = "0 problems", message = "eslint: ok" },
]
Filter fields
| Field | Purpose |
|---|---|
| match_command | Required regex against the full command line |
| strip_ansi | Remove terminal color codes first |
| strip_lines_matching | Drop lines matching any pattern |
| keep_lines_matching | Keep only matching lines |
| collapse_lines_matching | Replace matching lines with one {count} summary line |
| truncate_lines_at | Cap each line length |
| head_lines / tail_lines | Keep first or last N lines |
| max_lines | Total line budget with ...+N more lines suffix |
| match_output | Replace entire output when a pattern matches |
| on_empty | Message when filtering removes everything |
Commands without a Go or TOML filter pass output through unchanged. See the full reference in docs/TOML_FILTERS.md on GitHub.