All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- New
labeled-passwordrule: detects credentials pasted in prose aspassword:/passwd:/passphrase:values. Lower length floor (8) than the generic catch-all with a modest entropy gate, so short labeled secrets are caught whileprintenvPWD=dumps and common placeholders (your-password,<redacted>, …) are filtered out. - Rules can now carry an optional
denyregex to drop placeholder values that clear the entropy gate.
0.2.1 — 2026-07-02
- Report: findings with an unexpected severity are bucketed under
lowinstead of throwing when building the verbose per-severity listing. FORCE_COLORparsing now follows Node's documented rule —'',1,2,3,trueenable colour; any other value (including0/false) disables it.
0.2.0 — 2026-07-02
broom sweep— redact in place, equivalent toclean --apply(both work).- Interactive menu when
broomis run with no arguments on a terminal, and a confirmation prompt beforesweep/clean --apply(skipped with--yesand in non-interactive/CI use). Built onnode:readline/promises— still zero runtime dependencies. --verboseflag: the default report is now a compact summary;--verboselists every occurrence with rule and line number.- "Did you mean …?" suggestion for unknown commands.
- Report redesigned. Instead of one line per finding (thousands of lines on a busy history), the default groups by AI client and shows vulnerable chats and the count of distinct secrets, deduped by value — the same credential echoed many times counts once (the raw occurrence count is shown alongside).
- Colour output now respects
NO_COLOR/FORCE_COLORand TTY detection.
0.1.1 — 2026-07-02
- Cursor adapter out-of-memory crash. Discovery selected
key, valueacross Cursor's entireItemTable/cursorDiskKV, loading every blob (embeddings, file caches — often gigabytes) into memory at once and crashing with "heap out of memory" on large databases. Discovery now selects only keys; each row's value is fetched lazily when it's actually scanned.
0.1.0 — 2026-07-02
First public release.
broom scan/broom clean— find and redact secrets in AI coding-assistant transcripts. Dry-run by default;--applywrites, backing up every touched file to~/.broom/backups/<timestamp>/first.- Source adapters for Claude Code (
~/.claude/**/*.jsonl), Codex (~/.codex/**), and Cursor (state.vscdbSQLite vianode:sqlite). broom sources— list discovered transcript files.- Curated, gitleaks-style ruleset plus an entropy-gated generic catch-all;
non-reversible, idempotent
«BROOM:<rule>:<sha8>»placeholders. - Allowlist with built-in documentation placeholders and a user file at
~/.broom/allowlist.txt(--allowlist/--no-allowlist). broom install— installs a Claude Code skill + Stop hook that sweeps transcripts automatically after each turn.broom proxy— a local redacting proxy that strips secrets from outgoing requests and model responses (text and tool-call arguments) for both streaming and non-streaming Anthropic and OpenAI APIs.broom proxy --install [--daemon]/--uninstall— wire base-URL env vars into shell profiles and register a login-persistent daemon (launchd on macOS,systemctl --useron Linux); uninstall removes both the daemon and the env vars.--json,--no-fail,--extra <file>flags;--sourcefiltering.
- Requires Node ≥ 22.13 (
node:sqliteis unflagged as of 22.13.0). - Zero runtime dependencies.
- Extended-thinking blocks are passed through the proxy unredacted to preserve their signatures — see the README Limitations section.