🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?
Claim this page →
justsaydone
Up to 95% shorter replies with Claude Code. Save output token spend.
git clone https://github.com/raiyanyahya/justsaydone
justsaydone
A mode for Claude Code that does the work and replies with one word.
done
No "Here's what I changed." No "Let me know if you need anything else." No recap of
the diff you're about to read anyway. You asked for a thing, the thing happened, done.
The idea
We ❤️ Claude Code and it is a great engineer but a chatty coworker. Most of that chatter — the opening "I'll start by…", the running narration, the closing paragraph that re-summarizes the diff — restates what your diff, your test output, and your own prompt already told you. It costs output tokens, and it costs you the seconds spent reading past it.
justsaydone is a mode you flip on on purpose — for a focused session, or for a
whole project — when your workflow is already:
type task → glance at the diff → move on.
Claude still plans, edits, runs, and verifies exactly as it always does. It just stops narrating. The work is the message.
Before / after
| Without justsaydone | With justsaydone |
|---|---|
"I've created fizzbuzz.py. It loops from 1 to 30 and prints Fizz for multiples of 3, Buzz for multiples of 5, and FizzBuzz for both. Let me know if you'd like tests!" | done |
"Fixed the off-by-one in average() — it was dividing by len(nums) - 1 instead of len(nums), which skewed the mean. Want me to add input validation too?" | done |
Install
/plugin marketplace add raiyanyahya/justsaydone
/plugin install justsaydone@justsaydone
That's the whole setup. The mode turns on automatically the moment the plugin is
enabled — there's no /config step. Run /clear or start a new session for it to take
effect.
The escape hatch
Terse by default, verbose on demand. Any time you actually want the recap, just ask —
if your message contains explain, summarize, why, what did you change, or details, Claude gives a full normal answer for that one turn, then
snaps back to terse mode:
> fix the auth bug
done
> explain what you changed
The token check in middleware/auth.ts:42 compared the *decoded* expiry against
seconds instead of milliseconds, so every token read as expired. I switched it to
Date.now() and added the missing early-return. …
> add a test for it
done
Benchmarks
Real numbers, not marketing. The suite in benchmark/ runs actual
headless Claude Code sessions twice each — with and without the plugin — across five
task types, then scores them. Reproduce it yourself with one command (see below).
On the tasks this mode is built for — the do-work-and-report loop — a full sign-off paragraph collapses to a single word: ~90–95% fewer words in the reply.
Latest run (claude -p, Sonnet, 2 runs per arm):
| Task | Reply words → (what the mode controls) | Total session tokens |
|---|---|---|
| Fix a bug | 22 → 1 · −95% | −29% |
| Create a file | 12 → 1 · −91% | +5% (noise, see below) |
| Impossible task (missing file) | 58 → 22 · −63% | −12% |
| Explain code (a question) | 62 → 34 · −45% | −13% |
explain escape hatch | 46 → 26 · −42% | −30% |
| Blended average | 199 → 84 · −58% | −19% |
How to read this honestly:
- On build tasks the mode is decisive: ~90–95% shorter replies. That's the loop you spend most of a session in, so that's the range you actually feel.
- The 58% "blended average" is deliberately conservative. It weights the two verbose
scenarios — the
explainescape hatch and the "explain code" question — equally with the work tasks, even though those are supposed to stay long and a real session has far more work turns than questions. Read it as a floor, not the typical case. - Total session tokens move less, and that's expected. Most of a coding turn's output
is the code itself, streamed as tool arguments — which this mode deliberately never
touches. On a pure file-creation task with almost no prose to cut, that code-writing
dominates and is just run-to-run noise — which is why the
createrow can even land slightly above baseline (+5% here). The savings are real and grow with how prose-heavy your turns are; they are not a headline "cut your bill in half" claim, because that wouldn't be true. - Questions still get real answers.
explainand the escape hatch stay complete — they're tighter, not truncated.
It never lies to save words
The one rule that overrides brevity: Claude only says done when the work actually
succeeded and was verified. If something failed, was blocked, or couldn't be checked,
it says so in one line instead — a false done is the worst possible output. In the
benchmark, the impossible-task run correctly reported the missing file every time and
never once claimed success.
| Situation | What you get |
|---|---|
| Task done & verified | done |
| Task failed / blocked | one line saying what broke or what's needed — never done |
| You asked a question | the shortest complete answer |
You said explain / why | a full, normal response, just this once |
Reproduce the benchmark
No special access needed — just the claude CLI, jq, and python3:
git clone https://github.com/raiyanyahya/justsaydone
bash justsaydone/benchmark/run.sh # runs the A/B sessions, then scores them
run.sh spins up the same task in throwaway directories with and without the plugin;
report.py prints the table above and asserts the behavior —
that done appears only on real success, that questions get answered, that the escape
hatch fires, and that the actual code still gets written correctly. It exits non-zero if
any check fails, so it doubles as a regression test.
What it actually is
A single output style shipped as a
plugin with force-for-plugin: true. That flag is what makes it apply automatically on
install. It sets keep-coding-instructions: true, so every one of Claude Code's
built-in engineering instructions stays intact — scoping, verification, comment style,
all of it. The plugin adds terseness to how Claude talks; it changes nothing about how
Claude codes.
justsaydone/
├── .claude-plugin/
│ ├── plugin.json # manifest
│ └── marketplace.json # the repo is its own marketplace
├── output-styles/
│ └── justsaydone.md # the mode itself
└── benchmark/
├── run.sh # A/B session runner
└── report.py # scorer + behavior assertions
Turn it off
/plugin
Disable justsaydone, then /clear. Chatty Claude returns.
License
MIT © Raiyan Yahya
// compatibility
| Platforms | cli, api, mobile |
|---|---|
| Operating systems | — |
| AI compatibility | claude |
| License | MIT |
| Pricing | open-source |
| Language | Python |
// faq
What is justsaydone?
Up to 95% shorter replies with Claude Code. Save output token spend.. It is open-source on GitHub.
Is justsaydone free to use?
justsaydone is open-source under the MIT license, so it is free to use.
What category does justsaydone belong to?
justsaydone is listed under plugins in the Claudeers registry of Claude-compatible tools.
// embed badge
[](https://claudeers.com/justsaydone)
// retro hit counter
[](https://claudeers.com/justsaydone)
// reviews
// guestbook
// related in Claude Plugins
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explainin…
"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/
financial-services — a Claude ecosystem project on GitHub.