New releasev0.9.5Jul 14, 2026

New version of Boost releasedNew filters and bundled report dashboard

$ reference

Configuration

Boost works out of the box — every setting is optional. When you want to change something, it lives in a single config.toml: per repo at .boost/config.toml, or globally for your user at ~/.boost/config.toml (same path on macOS, Linux, and Windows).

Where Boost looks for config

Boost reads the first config.toml it finds, checking these locations in order:

  1. .boost/config.toml in the current directory — a per-invocation override.
  2. .boost/config.toml at the enclosing git repo root, so a command run from a subdirectory still finds the project's config.
  3. ~/.boost/config.toml in your home directory — the global fallback that boost init writes.

A legacy boost.config.toml in any of those directories is still read for backward compatibility, but .boost/config.toml takes precedence.

From a monorepo subdirectory, Boost still reads <repo-root>/.boost/config.toml — not a .boost/ folder in cwd unless you put one there (checked first, so it overrides repo and global config).

Config dir vs. data dir

Config (config.toml) lives under .boost/. Boost's runtime data — the history.db SQLite database, update-check cache, and tee logs — lives in the OS data directory instead:

  • macOS — ~/Library/Application Support/boost/
  • Linux — $XDG_DATA_HOME/boost/ or ~/.local/share/boost/
  • Windows — %LOCALAPPDATA%\boost\

Point the database elsewhere with BOOST_DB_PATH or [tracking] database_path.


Skip hook rewrite for specific commands

When Cursor, Claude Code, or Gemini CLI runs a shell command, Boost's hook rewrites supported tools to boost <cmd> so output is compressed before it reaches the agent. To keep certain commands unwrapped, add them to [hooks] exclude_commands. Each entry is matched against the first word of the command, reduced to its binary name — so docker also matches /usr/bin/docker compose up.

.boost/config.toml

[hooks]
exclude_commands = ["playwright", "vim", "docker"]

With the example above, playwright test stays playwright test instead of becoming boost playwright test. The same list applies to boost rewrite and the Gemini and Copilot hook paths.

Hook rewrite only

exclude_commands prevents automatic wrapping in agent hooks. It does not disable capture or filtering when someone runs boost playwright test directly.


All settings

Every key is optional; omit a section to keep its defaults. Top-level keys (accept_terms and friends) are written by boost init when you accept the terms.

~/.boost/config.toml — global defaults

accept_terms = "yes"

[hooks]
exclude_commands = ["vim", "nano"]

[tracing]
report = false                 # silence per-command stderr savings lines

[report]
usd_per_million_tokens = 5.0
co2e_kg_per_million_tokens = 0.21

[filters]
disabled = []                  # filter names skipped by the engine; retrieve auto-appends
retrieve_disable_threshold = 3 # retrieves per capability_id before auto-disable; 0 = never

[update]
auto_update = false            # only read from ~/.boost/config.toml

A project's .boost/config.toml only needs to set what differs from the global defaults above — everything else keeps inheriting from ~/.boost/config.toml or its built-in default:

.boost/config.toml — project override

[tracking]
database_path = "/data/ci/history.db"   # this repo's CI containers only

[report]
co2e_kg_per_million_tokens = 0.09       # this team's low-carbon region

Here, accept_terms, [hooks], and [tracing] report are left unset, so this repo still uses whatever the global ~/.boost/config.toml — or the built-in default — says for those keys.

KeyPurposeDefault
accept_termsRecords that you accepted Boost's terms; set by boost init.unset
[hooks] exclude_commandsCommand names skipped by hook rewrite (matched on the first word's binary name).[ ]
[tracing] reportSet false to hide the per-command stderr savings line. BOOST_REPORT overrides this.true
[tracking] database_pathOverride the SQLite history DB location. BOOST_DB_PATH wins over this.OS data dir / history.db
[report] usd_per_million_tokensUS dollars per 1M saved tokens for boost report dollar figures (non-negative).5.0
[report] co2e_kg_per_million_tokenskg CO2e avoided per 1M saved tokens for emissions estimates (non-negative).0.21
[filters] disabledTOML filter names skipped by the engine (builtins and user filters). boost retrieve auto-appends rolled-back filter names after the retrieve threshold.[]
[filters] retrieve_disable_thresholdHow many retrieve events for the same capability_id trigger auto-disable. Set 0 to never auto-disable. Read from global config.3
[update] auto_updateSet false to opt out of background self-updates. Read from global config only.true

Environment overrides

Environment variables take precedence over config.toml, which makes them handy for one-off runs.

VariableEffect
BOOST_DB_PATHPath to the SQLite history DB; overrides [tracking] database_path.
BOOST_REPORT0 silences the per-command stderr savings line.
BOOST_REPORT_USD_PER_MTOKOverride [report] usd_per_million_tokens.
BOOST_REPORT_CO2E_KG_PER_MTOKOverride [report] co2e_kg_per_million_tokens.
BOOST_TEE_DIRDirectory for raw output tee logs written on failure.
XDG_DATA_HOME / LOCALAPPDATARelocate the data dir (history.db, caches, tee logs) on Linux / Windows.

Summary

GoalMechanism
Edit settings for a project.boost/config.toml
Edit settings for every project~/.boost/config.toml
Agent should not wrap playwright, vim, etc.[hooks] exclude_commands
Move the history databaseBOOST_DB_PATH or [tracking] database_path
Hide per-command savings on stderr[tracing] report = false or BOOST_REPORT=0
Opt out of background self-updates[update] auto_update = false in ~/.boost/config.toml

Related

$ BOOST_REPORT_USD_PER_MTOK=9 boost report -w       # one run; config.toml unchanged
$ BOOST_DB_PATH=/tmp/ci.db boost go test ./...
$ BOOST_REPORT=0 boost npm test