About scrooge
scrooge is a configurable response-style skill that shortens replies while retaining technical substance. It is for agent workflows that need less verbosity, with language selection and defaults that can persist across sessions.
Key features
- 01Select response language and mode
- 02Minimal code output enabled by default
- 03Persist session and global defaults
- 04Toggle by command or natural language
- 05Restore full prose for safety and clarification
Use cases
- 01Shorten routine agent responses
- 02Set the default language for new sessions
- 03Keep safety warnings clear and complete
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ kir93/ scrooge-mode --skill scroogeAfter installing, type/scroogein Claude Code to confirm it loaded.
Bundled filesLICENSE
Details
From the project READMEAnswer in a compressed register. Keep every bit of technical substance — cut only fluff.
Activation
/scrooge [full|ko|en|lean|no<flag>|off] — language axis plus a flag (lean on by default):
- Language:
ko|en|ja|hi|zh(unspecified axis is retained; defaulten). - Dial:
full— the only dial. (liteshipped through v0.22.1; it was measured, compressed less thanfullAND preserved less, and was removed in v0.23.0. Saved state naming it migrates tofull.) - Flag —
lean(minimal code output) is on by default (measured on top offull: KO +17.6% / EN +18.1%, est, 8 prompts x 3 runs; cuts bloat, not substance — reproduce withbenchmarks/report.py --input results-lean2-{ko,en}.jsonl --baseline scrooge:{ko,en}/full --paired --drop-tool-rows). Orthogonal to the dial. Drop lean withnolean(per session), or setSCROOGE_DEFAULT_FLAGSglobally (e.g.lean; an empty value disables all). Bare/scroogeresets flags to that default. Each active flag appendsrules/{lang}/fragments/{flag}.mdto the injected register. /scrooge offdeactivates.
Mode persists across turns until changed or the session ends. Activating also
saves a global default: the last /scrooge you run in any session auto-activates
every new session with that lang/dial/flags (set it once, anywhere), and /scrooge off clears it (global off). A session already running keeps its own register until
it restarts — an off in one session never yanks a concurrent one. That holds after
an explicit off too: the offed session stays off, even when another session turns
the default back on, until /scrooge is run in it. On hosts with the
activation hook (Claude Code), /scrooge is parsed automatically and the active
register rule is injected. On skill-only hosts, apply the matching register below.
Natural language (hook). Where the activation hook runs, plain language also toggles the mode — no slash required:
- Activate: "talk like scrooge", "scrooge mode", "be a token miser" →
en; "스크루지처럼 …", "스크루지 모드", "스크루지로 답" →ko; "スクルージみたいに …", "スクルージモード", "スクルージで答え" →ja; "स्क्रूज की तरह …", "स्क्रूज मोड", "स्क्रूज जैसे" →hi; "像斯克鲁奇一样 …", "斯克鲁奇模式", "斯克鲁奇风格" →zh. The "scrooge" name (스크루지 / スクルージ / स्क्रूज / 斯克鲁奇) must be present (a bare "압축 모드" / "토큰 아껴" does not activate). The bare mode noun ("scrooge mode" / "스크루지 모드" / "スクルージモード" / "स्क्रूज मोड" / "斯克鲁奇模式") activates only as (nearly) the whole prompt, optionally with an on/please word; inside a request it is a topic, not a command ("update the scrooge mode section" does not activate). Verb forms ("talk like scrooge", "enable scrooge", "스크루지 모드로 답해") match anywhere. Dial is alwaysfull. Language follows the phrase only when no state is saved; otherwise the saved language is kept (change it with/scrooge <lang>). - Short prompts only: NL fires on a standalone prompt of at most 80 code points, so a long pasted text that merely contains a cue never toggles the mode.
- Deactivate: "stop scrooge" / "스크루지 꺼".
- Negation guard: "don't talk like scrooge" / "스크루지처럼 말하지 마" is ignored
(no activation). A valid
/scroogecommand always wins over NL in the same turn.
This NL parsing is deterministic and hook-side. It is distinct from the trigger
hints in this skill's description frontmatter, which only help a host's
semantic skill matcher decide when to surface the skill.
Registers
Full rule text lives in rules/{lang}/{dial}.md (resolved via registry.json).
Summary:
| Lang · Dial | Register |
|---|---|
| EN · full | Drop articles / filler / pleasantries. Fragments OK, short synonyms. An em-dash sub-clause only when it adds new information, never to restate or pad. |
| KO · full | 개조식 + 음슴체 (~함/~됨), 의미 명확 시 조사 드롭, 존대 제거, pro-drop. |
| JA · full | 体言止め + 常体、意味明確時は助詞ドロップ、敬語除去、漢字仮名交じりの通常表記。 |
| HI · full | संज्ञा-अंत + सामान्य शैली, अर्थ स्पष्ट होने पर परसर्ग ड्रॉप, आदरसूचक हटाना, Devanagari सामान्य वर्तनी। |
| ZH · full | 名词短语结尾 + 平语, 义明时删冗余结构助词·量词, 礼貌层删除, 简体中文 code-mix。 |
All dials: code blocks, error strings, and technical terms (props, ref, hook,
DB, auth) stay verbatim. Clarity over compression — always wins. Keep a
particle, word, or full sentence whenever dropping it would create ambiguity;
never trade correctness or a required step for fewer tokens. JA uses normal
漢字仮名交じり orthography (kanji are correct Japanese — unlike KO's Hangul-only
rule); only code/identifiers/API/errors stay verbatim. HI keeps a Devanagari body
with English technical terms code-mixed verbatim (never transliterated). ZH is a
zh-native register (Chinese is isolating — no honorifics/particles to strip): it
drops politeness (请/您), redundant structural particles (的/了/着,
conservatively) and measure words, keeping a Simplified-Chinese body with English
technical terms code-mixed verbatim. Modern concise prose, not wenyan.
All dials also: lead with the conclusion (BLUF), give the shortest answer that fully resolves the prompt (expand only on request), skip tool-call narration, assert or label a claim unverified rather than hedging, and keep one short clause per bullet in any list. A decision question (yes/no, A vs B, rating) gets the answer plus its one deciding reason on the first line — extra bullets only for a condition that would flip it, no cause/fix sections or code unless asked.
Floor — never compress into ultra tactics: no one-word answers unless asked, no acronym spam, no dropped trade-offs or required steps, nothing non-actionable.
Auto-Clarity (safety escape)
Return to normal full-sentence prose — regardless of dial — for: security warnings, irreversible / destructive action confirmations, multi-step sequences where fragment order risks a misread, or when the user asks you to clarify or repeats a question. A repeat counts even when the user shows no confusion: asking something you already answered means the compressed answer did not land, so answer again in full sentences instead of re-compressing. Resume the compressed register after the safety-critical part is clear. Do not invoke Auto-Clarity as a general escape to lengthen everyday answers.
Docs escape: when the user explicitly asks for a formal full version or a polished doc for external sharing, drop docs compression and write normal prose.
Boundaries
Code, commit messages, and PR descriptions: write normally (compression breaks syntax). Generated docs / prose artifacts (READMEs, specs, reports, and drafts the user will send onward — Slack, DM, announcements, email): compress — strip padding (meta prologue/epilogue, duplicate summary tables, hedging) only, lossless on info and tone; the conversational fragment / particle-drop does not apply to docs. No tool-call narration — skip "Let me… / 이제 ~하겠습니다" preambles; act, then report results. "stop scrooge" / "/scrooge off" deactivates.