Aguara v0.27.0 makes the terminal experience consistent and well-behaved, and adds a native fuzz harness over every parser that reads untrusted input.
Every command now shares one visual language: the same palette, severity icons, framed verdicts, and section layout that scan introduced. And output finally adapts to where it is going - pipe a command, redirect to a file, or run in CI, and color and the spinner turn themselves off instead of littering logs with escape codes.
# One verdict across package check + content scan, framed and color-coded
aguara audit .
# List every content finding instead of the top 10
aguara audit . --verbose
# Piping no longer emits ANSI noise; NO_COLOR now covers every command
aguara scan . | less
NO_COLOR=1 aguara explain SUPPLY_001
# Grouped help with copy-paste examples
aguara --helpWhat's inside
- Shared terminal style layer:
scan,check,audit,explain, andcleanuse one style layer instead of hand-rolled ANSI codes.auditopens with a framed header, lists findings in aligned columns under PACKAGE CHECK and CONTENT SCAN sections, and closes with a framed verdict - green PASS, yellow FINDINGS, red FAIL.scanandauditend with aNext: aguara explain <rule>hint for the most severe finding. - Terminal detection done right: color and the spinner disable themselves when stdout is not an interactive terminal, when
--outputwrites to a file, or whenNO_COLORis set. Separators and the spinner size themselves to the real terminal width. The FINDINGS verdict renders yellow instead of green: exit code 0 with unresolved findings is not a clean pass, and the color now says so. - Native fuzz harness: 22 Go fuzz targets cover every parser that touches attacker-controlled files - the ten lockfile parsers behind
aguara check, the pattern engine with its NFKC normalization and 8-decoder rescan, the markdown/JSON/YAML NLP extractor, the JS/Python/Rust scanners, the policy analyzers, and the custom-rule loader. Each target asserts the parser never panics. Seed corpora run insidemake test, a nightly workflow fuzzes every target and uploads any crasher as a reproducible artifact, andmake fuzzruns the same loop locally. Initial shakeout: ~37M executions, zero crashes.
JSON, SARIF, and markdown outputs are unchanged - only the human-facing terminal output evolved.
Install or upgrade
# Homebrew
brew install garagon/tap/aguara && brew upgrade aguara
# Install script (signed, checksum-verified)
curl -fsSL https://raw.githubusercontent.com/garagon/aguara/main/install.sh | VERSION=v0.27.0 sh
# Docker (multi-arch, signed, SBOM + SLSA provenance)
docker run --rm -v "$PWD:/repo:ro" ghcr.io/garagon/aguara:0.27.0 check /repoCompatibility
- No flag removals.
auditgains--verbose;--no-colorkeeps working as the explicit override. - Rule IDs, severities, and the JSON
Severityencoding are unchanged. 250 cataloged detections. - JSON, SARIF, and markdown formatter contracts are unchanged.
Verify this release
cosign verify-blob \
--certificate-identity-regexp 'github.com/garagon/aguara' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate checksums.txt.pem --signature checksums.txt.sig checksums.txt
cosign verify ghcr.io/garagon/aguara@sha256:93cd378ebcd488b12e80375370b7d0e8f25a29315c49cc73bd8ddb9ef6bc0f86 \
--certificate-identity-regexp 'github.com/garagon/aguara' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comFull changelog
See CHANGELOG.md for the complete entry, including the dependency and GitHub Actions updates.