Wraps Gradle
Prefers ./gradlew when present, falls back to system
gradle. Injects --console=plain unless you already
set a console mode. Preserves the Gradle exit code.
build-brief sits in front of Gradle, keeps the full raw log on
disk, and cuts terminal output down to the parts that actually matter —
failed tasks, test names, warnings, and build status.
$ build-brief test
failed tasks :app:test
failed tests 2
- ExampleServiceTest > returns 500 on timeout
- CacheLayerTest > evicts stale entry
warnings 6
status FAILED
raw log: /tmp/build-brief/myproject.latest.log
Prefers ./gradlew when present, falls back to system
gradle. Injects --console=plain unless you already
set a console mode. Preserves the Gradle exit code.
Streams the full raw output to a reusable per-project log file. Nothing is thrown away. Memory use stays steady regardless of output size.
Default output shows failed tasks, failed test names, warnings, and build status. Clean successes are especially short. Full log path is always printed.
> Configure project :app
> Task :app:compileKotlin
w: Service.kt:14:9 Parameter 'ttl' is never used
w: Cache.kt:28:5 Variable 'result' is never used
> Task :app:processResources UP-TO-DATE
> Task :app:classes
> Task :app:compileTestKotlin
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses
> Task :app:test
ExampleServiceTest > returns 200 on valid input PASSED
ExampleServiceTest > returns 500 on timeout FAILED
java.lang.AssertionError: expected 500 but was 503
at ExampleServiceTest.kt:42
CacheLayerTest > caches valid response PASSED
CacheLayerTest > evicts stale entry FAILED
java.lang.AssertionError: expected null
at CacheLayerTest.kt:67
4 tests completed, 2 failed
> Task :app:test FAILED
FAILURE: Build failed with an exception.
BUILD FAILED in 34s
7 actionable tasks: 5 executed, 2 up-to-date
$ build-brief test
failed tasks :app:test
failed tests 2
- ExampleServiceTest > returns 500 on timeout
- CacheLayerTest > evicts stale entry
warnings 2
status FAILED
raw log: /tmp/build-brief/myproject.latest.log
Successful builds stay short. Failing builds surface the failed tasks, test names, and warnings without making you scroll through pages of task output and daemon noise.
When coding agents run Gradle repeatedly, they dump all output into their context window. build-brief reduces that to a concise summary while preserving signal.
The full log is streamed to disk and the path is printed after every run. When the summary is not enough, the complete output is right there.
Operates at the Gradle process level. Designed for Spring Boot, Ktor, Android, Kotlin Multiplatform, plain JVM, and multi-project builds.
brew tap static-var/tap
brew install static-var/tap/build-brief
Works with Homebrew on macOS and Linuxbrew on Linux.
Download the latest release archive for your platform:
https://github.com/static-var/build-brief/releases/latest
Archives follow this naming pattern:
build-brief_<version>_darwin_arm64.tar.gz
build-brief_<version>_darwin_amd64.tar.gz
build-brief_<version>_linux_arm64.tar.gz
build-brief_<version>_linux_amd64.tar.gz
build-brief_<version>_windows_arm64.zip
build-brief_<version>_windows_amd64.zip
git clone https://github.com/static-var/build-brief.git
cd build-brief
go build -o build-brief ./cmd/build-brief
Then move the binary onto your PATH.
build-brief test
build-brief build
build-brief --daemon-mode on \
--gradle-user-home /tmp/bb-gradle test
build-brief -- --stacktrace test
build-brief gains --history
build-brief --help
build-brief can install instructions into AI coding tools so they route Gradle commands through it. Agents that follow these instructions will use build-brief instead of calling Gradle directly.
Updates AGENTS.md in the current project.
build-brief --install
build-brief --install-force
--install-force creates the file if it does not exist.
Detects which AI tools you have installed and updates their global instruction files. Interactive — you choose which tools to update.
build-brief --global
~/.copilot/copilot-instructions.md
~/.claude/CLAUDE.md
~/.codex/AGENTS.md
config + managed plugin
~/.gemini/GEMINI.md
build-brief works at the Gradle process and log level. It is not tied to any particular plugin stack or framework.
build-brief gains reports rough token savings using a
chars-divided-by-4 estimate. Useful when agents hit noisy builds
repeatedly. Not billing-grade.
build-brief gains --history
build-brief gains --format json
build-brief gains --reset
No. It wraps Gradle, preserves the exit code, and keeps the raw output. The goal is a better default terminal view, not a new build system.
No. Failures stay visible in the summary. If the short output is not enough, the raw log path is printed so you can inspect the full output.
No. It works at the Gradle process level, so it handles Spring Boot, Ktor, Android, KMP, plain JVM, and multi-project builds.
Agents tend to re-run noisy commands in a loop. Shorter summaries make it easier for them (and for you) to spot what changed without flooding the context window.
Approximate. It uses a chars-divided-by-4 estimate and is meant as operational feedback, not precise accounting. Some commands save more than others.
build-brief does not implement its own daemon. It leans on Gradle's normal
daemon behavior. Use --daemon-mode on and a shared
--gradle-user-home for more reliable reuse across repeated runs.
If you installed with Homebrew, run brew upgrade build-brief.
Otherwise, grab the newest build from the
latest release.