Noisegate 0.2.0 is a safety and signal-quality release. Compacted output keeps more of the details that help an agent recover from a failure, while source, patches, retrieval results, and other exact evidence are handled more conservatively. The goal is not simply shorter output; it is smaller output that remains trustworthy.
This release also hardens the boundary between Noisegate and Hermes. Installer target detection, JSON envelopes, command aliases, exit hints, and artifact decisions now have stricter regression coverage. No config migration is required, the noisy-tool allowlist has not been broadened, and raw artifact storage remains opt-in.
Highlights
- More useful failure output. Tight budgets now favor assertion messages, tracebacks, chained exceptions,
BaseExceptionGroupheaders, concrete dependency-resolution errors, and other actionable anchors over repetitive progress lines. - Exact context stays exact. Direct source reads, V4A patches,
git show REV:path, attachedfd/fdfindread consumers, protectedexecute_codeoutput, and Hermes-LCM recovery references are preserved instead of being mistaken for noisy logs. - A safer Hermes boundary.
reduce-jsonnow handles mixed and nested host envelopes, conflicting command aliases, structuredargv, exit-status precedence, metadata-key collisions, and artifact no-gain paths without corrupting valid JSON or claiming recovery data that was not stored. - Better operator visibility. Diagnostic metadata can be sent to stderr without changing stdout, and
noisegate doctorexposes the effective runtime configuration and artifact limits more clearly.
Added
noisegate reduce,reduce-json, andwrapaccept--metadata/--debugfor out-of-band diagnostic JSON on stderr.- Regression contracts define why
execute_coderemains protected by default and how command-aware routes can deliberately compact known terminal-style output instead. - Product-contract and adversarial tests cover exact-output ownership, shell and package-runner wrappers, Docker/build noise, dependency failures, malformed host payloads, and recovery-handle preservation.
Changed
noisegate install-hermesnow accepts only a real Hermes console script or supported Hermes shim inside a virtual environment. Ambiguous or unrelated Python launchers fail closed.install-hermes --dry-runexplicitly reports that install, enable, doctor, and Hermes restart/reload actions are not performed.- Plugin enablement is idempotent and removes a stale
noisegateentry fromplugins.disabledwithout rewriting an already-correct configuration. - Unchanged reductions report more precise reason codes and attempted reducers;
noisegate doctornow shows effective config, artifact location, size limits, and environment fallback warnings.
Fixed
- Pytest and Python diagnostics retain the assertion, traceback, task, chained-exception, and exception-group details most likely to explain the failure under tight line or character budgets.
uv run pytestdistinguishes resolver failures that happen before pytest starts from resolver-like text printed by a real test run.- Source-like content remains exact even when it contains strings such as
FAILED,ERROR,Traceback, ornpm ERR!; exact passthrough no longer depends on whether the content happens to resemble a log. - Hermes-LCM
externalized_refvalues and recovery placeholders survive compaction without requiring Noisegate artifacts. If every distinct recovery handle cannot be retained, Noisegate fails open. - Complete JSON envelopes make artifact decisions transactionally: no-gain paths write nothing, accepted recovery IDs resolve to the stored raw text, and multi-artifact envelopes avoid partial or orphaned writes.
Documentation
- Clarified Noisegate's ground-up Hermes positioning and corrected the Tokenjuice attribution link used for background context.
How to update
For an existing Hermes Agent installation, run:
uvx --from noisegate-hermes noisegate install-hermesPreview the exact commands first. Dry-run mode does not run the install/enable/doctor commands and does not restart or reload Hermes:
uvx --from noisegate-hermes noisegate install-hermes --dry-runnpm users can use the wrapper instead:
npx -p noisegate-hermes noisegate install-hermesThe installer finds hermes on PATH, verifies that the launcher points at a Hermes Python console script or supported Hermes shim inside a virtual environment, installs noisegate-hermes there, enables the noisegate plugin, removes any stale plugins.disabled entry for noisegate, and runs noisegate doctor.
If Hermes is running as a long-lived gateway/service, restart or reload that Hermes process through your normal maintenance flow after installing so the plugin/config change is picked up. Avoid interrupting in-flight agent work.
Included pull requests
Release range: v0.1.2...v0.2.0.
Security / Safety
- #15 Harden install-hermes for real Hermes hosts — @Tosko4. Harden
noisegate install-hermesso it only targets launchers that resolve to a real Hermes console script or supported Hermes shim inside a virtualenv. - #17 Level up Noisegate product safety and context value — @Tosko4. Adds a product-contract checklist for Noisegate maintainers: context value first, exact context protection, fail-open behavior, artifact boundaries, and thin Hermes integration.
- #23 Harden protected command intent across terminal envelopes — @Tosko4. Preserve exact command intent when
args,arguments, payload aliases, andargvdisagree. - #12 Strengthen Noisegate host adapter protocol — @Tosko4. Harden
reduce-jsonacross Hermes-like envelopes, direct tool payloads, nested objects, JSON-string results, mixed direct/nested fields, and non-text results.
Release / Packaging
- #24 Prepare Noisegate 0.2.0 release — @Tosko4. Prepare all Python, plugin, lockfile, and npm metadata for Noisegate
0.2.0.
Added
- #13 Improve Noisegate diagnostics and reducer visibility — @Tosko4. Add
--metadata/--debugdiagnostics forreduce,reduce-json, andwrapwithout changing stdout. - #20 Validate Noisegate with LCM externalized payloads — @Tosko4. Add Hermes-like LCM externalized payload fixtures covering terminal output, externalized placeholders,
lcm_describe, pagedlcm_expand, missing-file fallback, externalization failure fallback, media-ish placeholders, and huge JSON… - #19 Define safe execute_code compaction boundaries — @Tosko4. Add execute_code boundary coverage for small JSON, huge JSON arrays, printed source, configs, diffs, pytest-like output, web excerpts, dependency reports, apt-style spam, and invalid text.
Fixed
- #8 Fix Tokenjuice attribution link — @Tosko4. Fix the Tokenjuice attribution link in the README.
- #16 Prevent source-like noise from corrupting exact content — @Tosko4. Preserve exact source-like terminal file displays (
cat,sed -n,head,tail,less,more,nl,bat,git show REV:path) even when contents look like failing logs. - #9 fix: preserve pytest assertion details under tight budgets — @stephenschoettler. Preserve pytest assertion details before pytest progress/status lines when Noisegate is under tight budgets.
- #11 Improve reducer coverage for real agent slop — @Tosko4. Preserve uv dependency-resolution failures that occur before
uv run pyteststarts, including wrapped/compound invocations and tight output budgets. - #22 Preserve follow-up diagnostic anchors — @Tosko4. Preserve Python task/chained exception headers under tight line and char budgets.
Documentation
- #14 Simplify README project note — @Tosko4. Simplify the closing README project note to one sentence.
New contributors
- @stephenschoettler made their first merged Noisegate PR in #9 — fix: preserve pytest assertion details under tight budgets.