Customize Claude Code far past its settings menu — themes, prompts, thinking, toolsets, and behavior — patched straight into the installed binary.
Install · Customize · The fork · How it works
Claude Code only exposes so much through its settings. tweakcc reaches the rest: it patches the installed binary directly — the cli.js, and the JavaScript baked into the native Bun build — so you can restyle the interface, rewrite the prompts Claude actually runs on, and change how it behaves. You pick what you want from a terminal UI, apply it in one command, and roll it back whenever you like.
This is tweakcc-fixed, a fork of Piebald's tweakcc that keeps everything the original does and pushes further — over four times the prompt coverage, a deeper set of patches, and overrides that reach the native install where upstream stops. More on that below.
$ npx -y tweakcc-fixed@latest --apply
✓ Theme, spinner, thinking verbs, statusline
✓ System Prompt: Doing tasks (override) 92 fewer chars
✓ Tool Description: Bash (override) 4 fewer chars
✓ Toolset + subagent model selection
… patches applied · backup writtennpx -y tweakcc-fixed@latest # interactive TUI — toggle patches, edit prompts
npx -y tweakcc-fixed@latest --apply # apply everything you've enabled
npx -y tweakcc-fixed@latest --restore # revert from the backup
npx -y tweakcc-fixed@latest --validate-system-prompts # dry-run the apply preflight over your overridesNothing to clone or build. Prompt data is pulled at runtime from the release tag of the version you are running, so a new Claude Code release works once a tweakcc-fixed release carries its prompts. Updating Claude Code overwrites the patches, so you just re-run --apply — your configuration in ~/.tweakcc/config.json is untouched either way.
Versions ≤ 1.0.5 on npm came from a different, unmaintained fork. 2.0.0 onward is this one.
Everything lives behind one terminal UI: toggle a patch, edit a prompt, apply.
The surface is wide. You can restyle the look — themes, the wording of the thinking verbs, the spinner's symbols and speed, the input border, the statusline, table rendering, session titles. You can rewrite the prompts — every system prompt, tool description, and <system-reminder> is plain markdown you can edit, so you change what Claude is told, not just how it's dressed. You can retune the tooling — toolsets, subagent model selection, input-pattern highlighters, file-read limits, MCP startup. And you can adjust behavior — reasoning-effort defaults, memory handling, session naming, and a good deal more.
It works the same on npm and native (Bun-compiled) installs, every change is a toggle, and --restore puts the original binary back.
tweakcc-fixed is a strict superset of the original: everything above still applies, on the same latest Claude Code target. What it adds is reach.
The biggest difference is coverage. Its extractor pulls over ten times the prompt surface upstream does — every model-facing string at any length: tool results, system reminders, utility-agent prompts, slash-command descriptions, and the short fragments the base skips. Every candidate string is classified by its emission site (model-facing vs UI vs internal) with verdicts cached content-addressed, so coverage is complete by construction, not by heuristic. That is what makes serious prompt editing possible in the first place.
| tweakcc-fixed | upstream | |
|---|---|---|
| Prompt sites (CC 2.1.299) | 12,249 | 913 |
| Unique prompt IDs | 11,577 | 913 |
| Patches | 64 | 49 |
| Overrides on native installs | yes | gated off |
That reach shows up in a few mechanisms the base doesn't have. The <system-reminder> injections that fire per turn — and never surface as named prompts — become editable: blank one out to drop it, or rewrite it. Each connected MCP server's instruction block can be dropped or rewritten the same way. And where upstream gates system-prompt overrides off for native installs, this fork applies them. It pairs with lobotomized-claude-code, a set of per-model override packs tuned against exactly this extraction.
The extra patches cluster around a few themes: memory (a dream-mode consolidation pass, leaner memory types), reasoning (Opus defaulting to max effort, plus the experimental complexity router), search (the experimental fff backend), and a run of correctness fixes — an honest rewind-summary header, a "summarize from here" that actually starts at the rewind point, quieter empty system-reminders, and more.
Two of those are worth calling out, and both ship off by default. Native search and fff filename discovery adds system-level guidance to start unknown-file discovery with fff files, then inspect candidate code. It also keeps Grep/Glob available. Native result ordering and Bash search behavior remain intact. fff provides fuzzy filename words in any order, fuzzy @ suggestions, local filename-use history, and a shared worktree daemon. See search behavior and local verification. The complexity router chooses reasoning effort for each user message without switching the main model. It supports Haiku routing or opt-in Jev decisions with asynchronous Haiku conversation summaries. See the effort router setup and behavior, including credential storage, context sharing, and fallback behavior.
Newest is Better Claude in Chrome — a menu item, not a patch, that installs claude-browser-bridge and points Claude Code at your real, logged-in browser over the Chrome DevTools Protocol. It sees and claims your existing signed-in tabs — a fuller, self-hosted take on Claude in Chrome, driven through a /browser skill and a programmable run primitive (script a whole flow — locate, fill, click, wait, read — in one call). Pick it and it fetches the bridge, wires up the MCP server and the skill, walks you through loading the extension once, and disables the built-in Claude in Chrome — in the CLI and the Claude desktop app — so you have one browser surface. Pure config plus a fetched repo, no cli.js patch; Reinstall and Uninstall live in the same menu.
Every patch the fork adds
Each patch is tagged with how it behaves on --apply: [default on] applies unless you set its config flag to false, [always] applies unconditionally with no toggle, [opt-in] applies only if you turn it on. Patches that change model-facing behavior are marked on by default below — --apply activates them even if you never selected them, so review these before applying.
Memory & context
dream-mode[opt-in]—/dreamplus automatic memory consolidationlean-memory-types[opt-in]— a trimmed memory-type taxonomyclaudemd-context-once-per-conversation[opt-in]— inject CLAUDE.md and context once per conversation, not every turn (rewrites how CLAUDE.md reaches the model)
Reasoning
max-effort-default[opt-in]— Opus defaults to max reasoning effortcomplexity-router[opt-in]— opt-in Opus 5.5 / Fable 5.1 model entries that route reasoning effort by task difficulty (experimental)
Search
swap-ripgrep-for-fff[opt-in]— fff discovery instructions, fuzzy filenames, and native Grep/Glob (experimental)
Correctness & noise
fix-rewind-summary-header[default on]— an honest rewind / compaction summary headerfix-summarize-from-here[default on]— "summarize from here" starts at the rewind point, not the topstrip-empty-system-reminders[always]— drop the empty<system-reminder>blocks left after empty tool outputread-default-lines[always]— an env-gated cap on the defaultReadline countattached-background-interactive[opt-in]— a background session with a client attached offers what an interactive one does: ProposeGoal, usage-limit auto-resume, and the auto mode and workflow prompts; one nobody is attached to is unchanged; ProposeGoal also needs its flag, served by Anthropic or forced byenable-propose-goal(settings.misc.attachedBackgroundInteractive)enable-propose-goal[opt-in]— force the ProposeGoal tool's rollout flag on, in every session kind its own checks allow; "Claude-proposed goals" in/configsets whether it asks first (settings.misc.enableProposeGoal)suppress-deferred-tools[opt-in]— drop the deferred-tools announcementmulti-skill-invocation[opt-in]— invoke every/skillyou type in one message ("/a /b do X") directly, not just the leading one (real user invocations, no model round-trip)
Models & prompts
autonomous-operation-all-models[opt-in]— apply the Fable/Mythos autonomous prompt set to every modelauto-mode-classifier-model[opt-in]— pin the auto-mode safety classifier to a cheaper modelrefusal-fallback-model[opt-in]— route a safeguard-flagged message by your own table, then switch back to your model once that turn is answered.settings.misc.refusalFallbackRoutesmaps a refusal category to a model id or a chain of them and is merged over Claude Code's own routes, which stay behind yours as a backstop when none of your models is usable;settings.misc.refusalFallbackMaxReturnscaps consecutive returns (default1,nullfor no limit)
Two kinds of edit, both driven by your config in ~/.tweakcc/config.json:
┌──────────────────────┐ ┌────────────────────────────┐
│ 1. code patches │ │ 2. prompt overrides │
│ regex-anchored │ │ swap embedded prompt text │
│ splices of JS │ │ for your markdown │
└──────────┬───────────┘ └─────────────┬──────────────┘
└────────────┬────────────────────┘
▼
npm cli.js ──or── native Bun binary
(patched in place) (JS extracted → patched → repacked)
▼
backup written · `--restore` anytime
A code patch finds a minified shape with a regex and splices in modified JS; a prompt override swaps the embedded prompt text for your markdown. npm installs are patched in place, while native installs have their JS pulled out of the Bun binary with node-lief, patched, and repacked with stale bytecode cleared. The same building blocks ship as a library — tryDetectInstallation, readContent/writeContent, backupFile, and the minified-identifier helpers — if you'd rather script your own patches.
When Claude Code ships a new version, the showtime skill runs the whole upgrade: pull the new cli.js, re-extract the prompts, realign anything that drifted, and verify it landed clean. Say "it's showtime," or run node skills/showtime/driver.mjs check.
A fork of Piebald-AI/tweakcc (© Piebald LLC) — all of the core customization is its work, carried here with fixes from upstream PRs #601, #646, #655, and #664 on top of the fork-only additions. MIT.
If it made your Claude Code better, a ⭐ helps others find it.