New releasev0.9.5Jul 14, 2026

New version of Boost releasedNew filters and bundled report dashboard

$ reference

TOML Filters

Boost compresses command output with Go parsers for major tools and declarative TOML filters for everything else. Drop one-filter files under ~/.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.

  1. Built-in filters shipped with Boost (make, terraform, shellcheck, …)
  2. ~/.boost/filters/*.toml (global folder, one filter per file)
  3. .boost/filters/*.toml in 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"
Before (raw)
==> 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
After Boost filter
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"
Before
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'
After
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

FieldPurpose
match_commandRequired regex against the full command line
strip_ansiRemove terminal color codes first
strip_lines_matchingDrop lines matching any pattern
keep_lines_matchingKeep only matching lines
collapse_lines_matchingReplace matching lines with one {count} summary line
truncate_lines_atCap each line length
head_lines / tail_linesKeep first or last N lines
max_linesTotal line budget with ...+N more lines suffix
match_outputReplace entire output when a pattern matches
on_emptyMessage 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.