Show HN: DebugBrief – turn debugging sessions into reports, no AI DebugBrief, a new open-source tool, captures debugging sessions and generates evidence-backed Markdown reports for pull requests, handoffs, or incident notes without using AI. The tool records commands run and notes taken, then builds a report from actual events, avoiding inferred root causes or unverified test results. Record what you do while debugging and turn it into an evidence-backed Markdown report for a pull request, a handoff, or an incident note. DebugBrief captures the notes you write and the commands you run, then builds a report from what actually happened: what you tried, what failed, what passed, and which files changed in between. It does not use AI and does not infer a root cause or report a test result you did not get. pipx install debugbrief or uv tool install debugbrief Plain pip install debugbrief works too. DebugBrief needs Python 3.9 or newer. Native Git is used when available to capture repository metadata and changed files. The project you debug does not need to be Python; only DebugBrief runs on Python. debugbrief start "Fix add returning wrong result" debugbrief note "add subtracts instead of adds; the test expects 5." debugbrief run -- python -m pytest -q test calc.py fails make your fix debugbrief redo same test, now passes debugbrief end writes the PR report Everything after -- runs exactly as you typed it, with its output streaming live to your terminal. DebugBrief flags --timeout , --shell , --no-redact , --verify go before the -- . redo re-runs the last captured command, and end defaults to the pr report mode. Tip: a one-line alias makes the capture prefix disappear in daily use. alias db="debugbrief run --" db pytest -q A report built only from recorded evidence. A short excerpt from a real run: Summary Failing check python -m pytest -q test calc.py passed after 2 attempts over 2s, changes touched calc.py. Red to green A check failed at 12:02:09 and python -m pytest -q test calc.py passed at 12:02:10 window 1s . Between the failing and passing checks, these files changed correlation, not proven cause : - calc.py Full samples: PR https://github.com/harihkk/Debug-Brief/blob/main/examples/sample-pr.md , handoff https://github.com/harihkk/Debug-Brief/blob/main/examples/sample-handoff.md , incident https://github.com/harihkk/Debug-Brief/blob/main/examples/sample-incident.md . run executes a command under a pseudo-terminal so its output streams live, then records the real exit code, a bounded output preview, the duration, and a per-command git snapshot.- Pass or fail comes only from the exit code. A command counts as verified only when a recognized test, build, lint, or typecheck runner actually exits 0. - It works with any language. A recognized runner pytest, jest, vitest, go test, cargo test, dotnet test, make check, and more is classified automatically. Any other command is still captured, and you mark it a check with --verify . end derives the report from those events: the red-to-green window, the reproduce and verify commands, a timeline, the observed error, and the failed attempts. Empty sections are omitted.- Secrets are redacted before anything is written to disk. Redaction is best effort; --no-redact opts out for a single command. Full command reference and the complete recognized-runner list: docs/COMMANDS.md https://github.com/harihkk/Debug-Brief/blob/main/docs/COMMANDS.md . Security model and redaction details: SECURITY.md https://github.com/harihkk/Debug-Brief/blob/main/SECURITY.md . Post a report straight to a pull request GitHub CLI optional : debugbrief end --stdout | gh pr comment --body-file - The five you use most: | Command | What it does | |---|---| start "