Repository navigation
Releases
hush 2.5.0
hush gains an optional mod for the Claude desktop app's Code tab. It does one thing: once a reply's final message arrives, the progress texts written between tool calls fold into one grey line that opens with a press. It never changes a reply.
- A text is folded only when hush can tell it apart from everything else in the session. In any doubt it is drawn whole: a final message, a subagent's text, a text repeated in a reply, every text before a compaction and every text after a prompt queued mid-turn.
- Each session keeps its folds across a reopen.
- The fold line follows the
languagesetting, Spanish or English. - The mod adds no slash command and touches no other surface.
HUSH_DISABLE=1turns it off, and every command hook runs as before without it.
hush now needs Claude Code 2.1.323 or later, up from 2.1.139, and the manifest declares it. An older Claude Code may still install hush; hush is not tested there. Not seen in the live app after the last review rounds: a subagent's transcript view, rows drawn after a compaction, and /rewind.
A trimmed view of tool output now keeps failure lines that carry no warning, error or failure word, such as Permission denied, Connection refused, timed out, command not found, Cannot find module, 404 Not Found, No such file or directory and Segmentation fault. A clean run that mentions a timeout is still not treated as a failure.
The voice changes in three places. The "Next:" line stands on its own. The sentence for passed checks gives each command's counts as the runner printed them and names every failed test. The end-of-turn check asks whether a session is ready to archive, never to delete.
The README now lists every environment variable hush reads. The repository now holds only what hush uses at run time, plus its tests, CI, LICENSE, SECURITY.md and CONTRIBUTING.md, so an install downloads less. Release notes now live on this page; the repository carries no changelog file.
hush 2.0.0
hush has a new icon: a blue pebble with a crescent moon, from Foundry's
hallmark-seal identity. The README banner and wordmark use it. The Ember scene
now ends with a stamp pressing that seal onto the answer, and each README
graphic carries the seal in a corner. No recorded text, number or timing in the
graphics changed.
/hush:craft-style and /hush:pick-style are gone; hush ships one voice. If
you had a crafted style active, updating hush puts stock Hush back, and your
style file stays where you saved it.
hush 1.13.0
A new voice. Claude still stays quiet while it works and writes one message
at the end, now in the language you write in. That message opens with the
result in one bold line, then the idea in one sentence, how it was checked,
and one exact next step. A request with several parts, or for the long
version, gets one short block per part. A request to understand something
ends with a short question you can check yourself against. The old limits of
8 lines and 90 words per reply are gone.
Long command output keeps more of what explains a failure:
- The first stack frame after a Node, Java or Go error.
- The values and file:line lines a failed check prints under go test,
gotestsum, Jest, Vitest, pytest, cargo test and RSpec, up to 10 per failed
test. They also survive the folding of same-shape lines. - RSpec's rerun line for each failed example.
- Java-style names such as
IllegalStateException, and lines that say
"warnings" in the plural. - A very large output's digest now keeps traceback frames and other failure
evidence, not only warning and error lines. - A line that Jest marks with
✕, or Vitest with×, counts as a failure
line. - A long grep result keeps every failure-shaped match, not only the first
three per file. A search inside a folder such aserrors/still shortens,
since only the matched text is checked, not the path.
Output under 4,000 characters is no longer folded by shape or cut by line
count. The rows of a short table all share one shape, and a short file print
is all code lines, so folding or cutting them hid the answer, and Claude ran
the command again to see it. Exact repeats still fold.
A directory listing or a print of a line range now comes back whole up to
250 lines: ls, dir, Get-ChildItem, find without -exec, sed -n,
head -n, tail -n, and Get-Content with -TotalCount or -Tail, each
run on its own. A listing or print of more than 60 lines could keep only its
first and last stretch, so Claude read it a second time. Past 250 lines one
under 4,000 characters still comes back whole and one from 4,000 keeps 250;
only exact repeats fold, and from 15,000 characters it is still saved to a
file.
A whole-file print in PowerShell, Get-Content, gc, type or cat with
nothing else, now keeps up to 250 lines when hush wraps it to read its exit
code, as it already did unwrapped and in Bash; it was cut to 60 like a clean
run. A script of several lines that opens with such a print and then runs
other commands is now trimmed
like any other output, where it kept up to 250. Folding and the save to a
file from 15,000 characters work as before.
A read of whole source files with cat, type, gc or Get-Content now
comes back whole up to 250 lines, like a line-range print. This holds when the
reads follow a cd or sit between echo separators, such as
cd src && cat a.js; echo ---; cat b.js. Such a read could lose lines from
the middle of the file, so Claude read the file a second time. A print of a
log or a generated file, and test or build output, are trimmed as before.
A whole-file read piped into one line-range print, such as
cat -n a.js | sed -n '1,80p' or Get-Content a.js | Select-Object -First 80,
now counts as a line-range print; it was cut to 60 lines like a clean run. A
read with a wildcard run on its own, such as cat src/*.js, still keeps up to 250 lines and
shrinks as the session grows, and a following read, tail -f or
Get-Content -Wait, is never passed whole. A listing or a git diff or
git show piped into one line-range print, such as git diff | head -n 50,
now counts as a line-range print too; it was trimmed like any other
output. A read of a Windows long path, such as cat \\?\C:\src\a.js, no longer
counts as a read with a wildcard.
A command that mixes line-range prints with searches now comes back whole up
to 250 lines, like a line-range print. This covers grep -n on named files,
a line-range print or grep -n filtered by grep -n, a search ending in
head with or without a count, and a for loop over named files, such as
sed -n 60,110p a.js; grep -n "x" b.js | head -5. Such a read over 4,000
characters could lose lines from the middle, which could send Claude back to
read the files again. A whole-file read piped into grep, a recursive
search (grep -r or grep -d recurse) or a wildcard among the files with
no line range after it, and a loop over a wildcard are trimmed as before.
A ;, &&, |, < or > inside quotes, such as grep -n "a;b" x.js or
sed -n '/a|b/p' x.js | grep -n y, is now read as part of the pattern, so
such a read also comes back whole; it was trimmed.
A command's JSON output now comes back whole up to 250 lines when the run did
not fail and its regular output is one JSON object or array, or JSON Lines. A
trim could keep only the first and last stretch of the data, so Claude had to
fetch the data a second time. JSON of 15,000 characters or more is
still saved to a file, and error output is trimmed as before. JSON Lines with
up to two text lines before or after them, such as a header or a sum= line,
and a table of same-shape rows whose changing values are all numbers now come
back whole the same way; they were folded to their first row.
A git diff or git show run on its own now comes back whole up to 250
lines, however long the session, as a listing or a line-range print does:
nothing in it is folded, cut or saved to a file. It was cut to 60 like a
clean run when hush knew it exited 0 or its text never said error or failed,
and its runs of same-shape lines were folded. When hush has no exit code, a
whole-file print, a line-range print past 250 lines and such a diff no longer
end with the note that the run failed just because the printed text says
error or failed.
A log, a generated file or a file hush saved, read whole and cut to fit, no
longer ends with the note that the run failed and should be run again when
its text says error or failed. A read runs no command, and the notes inside
the view already say that no warning, error or failure line was cut.
A whole-file print of a failing test log, such as cat test.log, now keeps
each failed check's values and file:line lines out of the folding of
same-shape lines, as the failing run itself does. They were folded because
the print exited 0 or had no exit code.
A failing run past the line cap whose every line is a warning, error or
failure line, so the cap cuts none, no longer ends with the note that the
view is capped and the command should be run again.
A whole-file print or a git diff that redirects only its errors, such as
cat f 2>/dev/null, cat f 2>&1 or Get-Content f 2>$null, now keeps up to
250 lines like the same print without the redirect, as a listing or a
line-range print already did; it was cut to 60 like a clean run. A print that
sends its own output to a file with >, >> or &> is still trimmed like
any other output.
A view that folds same-shape lines now always says how to see them. When the
folds save less than the usual note costs, a one-line note takes its place,
and folds that save less than that line are left unfolded. When a long
output's line cut removes every fold, the output is cut unfolded instead, so
the view carries no note about folds it no longer shows, and its count of
omitted lines counts each line of the output. When the cut removes some
folds and keeps others, or removes a line repeated several times, that count
now includes every line the fold or the repeats stood for, where it used to
count them as two lines. A fold's or a repeat's count no longer stays in the
view when the cut removed the line it belongs to; its lines join the omitted
count instead. A line repeated inside a run of same-shape lines now counts in
the run's fold, where its repeat count used to stay in the view after the fold
had removed the line.
Some lines no longer count as failures when nothing failed. A passing
summary with zero counts, such as "Failures: 0", is no longer kept or counted
as a failure line. A mid-line ×, as in "320 × 240", no longer makes a
passing run read as failed. The note
hush adds once per session now says plainly that a large output's digest
shows only part of its signal lines, and that the saved file holds all of
them.
Subagents are now asked to mark what they could not confirm and say where
they looked.
The mid-turn reminder now comes at most once per turn, and never after the
line Claude Code asks for when you have not heard from Claude in a while.
Before, each such line drew a reminder to stay quiet, so a long turn could
collect one per request. The update is excused only when it is one line;
a longer update still draws the reminder. HUSH_NUDGE=max is unchanged.
Every switch that takes off, 0 or false now ignores spaces around the
value, as HUSH_NUDGE already did: HUSH_CORE=" off" turns Core off, where
it used to leave it on. HUSH_DISABLE, HUSH_WRAP and HUSH_DEBUG ignore
spaces around their 1 too, so set HUSH_DISABLE=1 in cmd.exe, which
keeps the trailing space, now turns hush off.
Styles: a crafted style's name can no longer contain a colon, and craft-style
says so before activation does. Switching styles keeps a namespaced
outputStyle setting such as "hush:Hush". In a checkout you update with
git, the stock backup now follows the new stock voice after a pull. The style
check now catches a changed number at the end of a sentence.
A line of command output that already opens with [hush now reaches Claude
as \[hush, even in a short output, so it can no longer pass for one of
hush's notes or be counted as one. The logs hush trims get the same. The
voice no longer calls those notes trusted or forbids naming them. It tells a
note from output the way the note hush adds once per session does: by where
it appears and how its line opens, not by what it says. A note sits on a line
of its own in shell output, a long search result, or a whole read of a...
hush 1.11.1
The published figures are re-measured on a wider suite. It now includes a job
that asks how Claude would approach a change without letting it write anything,
which is where the new code-instead-of-a-list rule shows up.