Hey, Muted it! Ditch the diff cut the riff, no more edits less of credits
A Claude Code mod that mutes edit diffs. When Claude edits or creates a file, the terminal shows one grey summary line instead of the full diff:
● Update(src/app.js)
⎿ Muted it: updated · src/app.js · +2 −1
● Write(notes.txt)
⎿ Muted it: created · notes.txt · 4 lines
Only the screen changes. The saved tool result and what the model sees stay the same.
Mods need Claude Code v2.1.287 or later.
claude plugin marketplace add egrn/claude-code-mutedit
claude plugin install mutedit@mutedit
Start a new Claude Code session, or run /reload-plugins in an open one.
Or do the same inside Claude Code, at the prompt:
/plugin install mutedit --marketplace egrn/claude-code-mutedit
/reload-plugins
Answer y to add the marketplace, then pick a scope. Check it with /mutedit on: it answers mutedit: on.
Update:
claude plugin marketplace update mutedit
claude plugin update mutedit@mutedit
Remove: claude plugin uninstall mutedit@mutedit.
Tested with Claude Code 2.1.295 on Linux. Node.js is not needed: the mod runs inside Claude Code. The checks also need tmux (tested 3.6).
The mod uses only the public Claude Code mod API, and no Anthropic rule forbids it: see legacy.md with sources. License: MIT. Security reports: SECURITY.md.
| Tool | Summary line |
|---|---|
| Edit | updated · <path> · +<added> −<removed> |
| Write, new file | created · <path> · <lines> lines |
| Write, existing file | updated · <path> · +<added> −<removed> |
| NotebookEdit | <mode> cell <id> · <path> |
| Bash that changed files | the command's output, then one line per file: updated · <path> · +<added> −<removed>, created · <path> · <lines> lines, deleted · <path> · <lines> lines, changed · <path> for a file Claude Code shows no diff for (too large or binary), and … <n> more files when it does not name them all |
Each line starts with Muted it: , under the tool row with the same ⎿ indent as Claude Code's own result. A failed edit or command shows the normal error. Other tools and Bash commands that changed no files look normal.
The path is shown as it really is. Characters that can move the cursor, break the line, hide text or turn it right-to-left are shown as escapes, for example \x1b, \n, \u202e. A path longer than 1000 characters is cut in the middle with ….
| Command | What it does |
|---|---|
/mutedit |
shows the state and a short help, then asks On or Off |
/mutedit on |
one summary line for new edit results, answers mutedit: on |
/mutedit off |
full diff for new edit results, answers mutedit: off |
The choice is saved and kept in new sessions. It changes only edit results drawn after it: results already on the screen keep their look.
The mod hides what Claude changed. A bad or unwanted change is not visible on the screen. Read the changes with git diff or in your editor before you trust them.
- In the manual permission mode Claude Code shows the diff in the permission dialog before the edit. A mod cannot change this dialog.
- Checked live only in the terminal. The VS Code extension and the desktop app are not checked.
- Claude Code groups edits in the session scratchpad folder into one row before the mod can draw them, so these edits keep the normal view.
- A file name can contain text that looks like the summary, for example
a.ts · +0 −0. The mod does not detect this. - A new file with only
\r(old Mac) line breaks counts as one line. - The mod API is in early access. After a Claude Code update, run the gate (see below).
The repository is for development. Users get only the plugin/ folder: the marketplace file points there.
plugin/ what users install: manifest, hooks module, readme, license
tests/check.sh all checks and the gate
tests/unit/ unit tests
Run Claude Code with the mod loaded from your copy:
claude --plugin-dir /path/to/claude-code-mutedit/plugin
The first such session creates plugin/.claude-plugin/types/ and plugin/tsconfig.json (the mod API types, not in git). Until then the root tsconfig.json has nothing to extend, and the editor shows a config error.
Claude Code has no setting to hide edit diffs. Requests for one:
- #25060 Add setting to hide/collapse file diff output in chat
- #33412 Add global setting to suppress verbose diff/edit output
- #5740 Implement
--summarymode for concise execution overview - #13065 Add setting to control Edit tool output verbosity
- #21520 Add diffDisplay setting to control Edit tool output verbosity
- #72788 Add option to suppress file diff output
One script runs all checks: tests/check.sh. Without flags it prints its help.
| Call | Needs | What it does | Time |
|---|---|---|---|
tests/check.sh --unit |
claude | static check + unit tests | ~3 s |
tests/check.sh --live |
claude, tmux | static check + live check in a real terminal, no model | ~40 s |
tests/check.sh --live --baseline |
claude, tmux | the above + the same session without the mod, to compare | ~45 s |
tests/check.sh --gate |
claude, tmux | the gate: static check + unit tests + live check with baseline | ~50 s |
add --keep to a live run |
keeps the temp folder and the session copy |
Flags combine. Exit code is 0 only when every check passes. Output goes to tests/results/.
Static check claude plugin validate must report exactly these hooks: session.start, command.run{command=mutedit}, ui.render{component=ToolResult}, and these calls: $.command.register, $.store.get, $.store.set, $.ui.ask, $.ui.resolve. No files, no network, no processes. A mod runs with your permissions, so this list must stay this short.
Unit tests (183, claude plugin test, each one on the terminal and the desktop surface where it draws):
| Class | Tests | What it checks |
|---|---|---|
| summary line | 26 | the line for every tool and case, line count of new files |
| broken input | 20 | broken patch, wrong field types: no crash |
| control characters | 46 | escapes, bidi and zero-width chars, broken UTF-16, cut of long paths |
| stock drawing kept | 18 | errors, other tools, empty output go to the normal drawing |
| Bash file changes | 44 | one line per changed, created, deleted file, files with no diff, … more files, escaped paths, broken diff data; the command's output still drawn; no diff, errors: normal drawing |
| command | 11 | /mutedit on/off, unknown and hostile arguments |
| dialog | 5 | On, Off, Esc, free text |
| switch keeps rows | 4 | rows drawn before a switch keep their look |
| broken store | 7 | bad saved values, failed read and save |
| speed | 2 | time limits from 10 lines to 1 million lines, 100 000 rows |
claude plugin test finds tests only inside the plugin folder, so the script copies plugin/ and tests/unit/ to a temp folder and runs them there.
Live check The script builds a made-up saved session: every permission mode, every file tool, Bash commands that change files, errors, a user rejection, a plan file, a parallel group, bad paths. Then it opens the session with claude --resume in a hidden tmux window. Claude Code draws the saved results again through the mod, and the script reads the screen. It also drives /mutedit and its dialog and checks that the choice is kept in a new session. Nothing is sent to the model. Your own on/off state is read first and put back at the end.
The gate After every code change run:
tests/check.sh --gate
Do not ship when it fails.
