Interactive patcher for the Claude Code native binary
Project description
patch-cc
An interactive patcher for the Claude Code native binary. Pick the tweaks
you want — inline and live thinking, detailed tool calls, subagent model
overrides, your own startup name — and apply them to your installed claude
in one keystroke. Pure Python; no Node, no Bun.
Requirements
- Linux or macOS
- Python 3.11+
- uv — how patch-cc is run and installed
below. Install it with
curl -LsSf https://astral.sh/uv/install.sh | sh. Not using uv?pipx install patch-cc(orpip install patch-cc) works too; it is an ordinary PyPI package. - macOS only: the Xcode command line tools, for
codesign— a patched binary has to be re-signed or macOS refuses to run it.
uvx patch-cc # fullscreen menu, no install needed
The menu is a single centered panel: move with ↑ ↓, toggle with space,
press s to save. Patches that carry a setting — subagent models, the startup
name, the --version marker — open a centered modal on enter, and the row
then shows what you chose. Everything choosable is a picker: the agent names
and model aliases are discovered from your binary itself, so the menu can
never offer something your build would reject. Typing exists only for the two
genuinely free-text values.
A patched binary records what was applied inside itself, so the menu always
comes up showing the real current state, and patch-cc status answers
exactly.
Prefer it always available on your PATH? Install it:
uv tool install patch-cc
patch-cc # then just run it
What it can do
| Group | Patch | |
|---|---|---|
| Output & diffs | Detailed tool calls | Show full read/search calls, not collapsed summaries |
| Colour new files as diffs | Created files render with + lines and green |
|
| Thinking | Fix blank thinking blocks | Opt out of the server-side experiment that can empty every thinking block |
| Always show thinking | Thinking blocks stay inline — no ctrl+o |
|
| Stream thinking live | See reasoning as it is generated, inline and in order | |
| Subagents | Show subagent prompts | Prompt blocks visible during normal use |
| Override subagent models | Pick the model per built-in agent (discovered from your binary) | |
| Chrome | Disable spinner tips | No rotating tips on the spinner |
| Custom startup name | Defaults to <your username>'s Code |
|
Mark --version |
Appends (patched) — or any marker you choose |
Usage
Everything the menu does is also a non-interactive subcommand (shown with
uvx; drop it if you installed the tool):
uvx patch-cc apply # the default patch set
uvx patch-cc apply tool-calls live-thinking # just these
uvx patch-cc apply --brand # + branding as <username>'s Code
uvx patch-cc apply --brand "Ada's Code" # + branding, explicit name
uvx patch-cc apply --model Explore=haiku --model general-purpose=opus
uvx patch-cc apply --suffix "(mine)" # custom --version marker
uvx patch-cc apply --from-cache # replay your last remembered selection
uvx patch-cc status # exactly what is applied
uvx patch-cc doctor # do all patches match this build?
uvx patch-cc doctor path/to/claude # ...or match some other binary
uvx patch-cc list # every patch, described
uvx patch-cc restore # put the original back
--model and --brand imply their patches; agents and models are validated
against what your installed binary actually ships.
After a Claude update
Claude auto-updates roughly daily and replaces the binary, which reverts the
patch. Re-run patch-cc — the menu remembers your last selection — replay it
without the menu via patch-cc apply --from-cache, or re-apply your set
explicitly:
uvx patch-cc apply --brand --model Explore=haiku
uvx patch-cc status tells you whether the current binary is patched, and the
startup name / --version marker are visible tells too.
Why native-only, and why it stays small
Claude Code now ships only as a Bun single-file executable; the npm package is a
wrapper that downloads it. patch-cc edits the JavaScript bundle embedded in the
binary's .bun section in place. It also drops the module's 154 MB of stale
precompiled bytecode — editing the source invalidates it anyway — so a patched
binary is smaller than the original (≈113 MB vs 267 MB), not larger.
See docs/INTERNALS.md for the container format and docs/PLAYBOOK.md for repairing a patch after an update.
Credits
The patch set is a Python port of a-connoisseur/patch-claude-code, with the subagent-model override idea from aleks-apostle/claude-code-patches.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file patch_cc-0.1.4.tar.gz.
File metadata
- Download URL: patch_cc-0.1.4.tar.gz
- Upload date:
- Size: 93.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73ac9a0815bcf36204b74cdba26f13a06f7c6dc8a21d6cbfa5bfc8ab0c4d3756
|
|
| MD5 |
1b762de9dca8c157a44cc305daddc5ca
|
|
| BLAKE2b-256 |
cb989a1a06dd53d0d0c6d57d2ae5cac65a18ff0baa4e75fa33969d45d29295ee
|
Provenance
The following attestation bundles were made for patch_cc-0.1.4.tar.gz:
Publisher:
release.yml on anfreire/patch-cc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
patch_cc-0.1.4.tar.gz -
Subject digest:
73ac9a0815bcf36204b74cdba26f13a06f7c6dc8a21d6cbfa5bfc8ab0c4d3756 - Sigstore transparency entry: 2225325444
- Sigstore integration time:
-
Permalink:
anfreire/patch-cc@a254514d54d27abbbf118ae0c52bc69419420ec8 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/anfreire
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a254514d54d27abbbf118ae0c52bc69419420ec8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file patch_cc-0.1.4-py3-none-any.whl.
File metadata
- Download URL: patch_cc-0.1.4-py3-none-any.whl
- Upload date:
- Size: 72.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4c4d9a2c4c413f52fe916def75a15afeb7ec28ce25c3f84348140552198ceec
|
|
| MD5 |
5e9d462e83595641943b74aa10dc0c1c
|
|
| BLAKE2b-256 |
a510721c1a0a212bd560bae958db49534942f370eb1c0ad721fb1c6666cc55c7
|
Provenance
The following attestation bundles were made for patch_cc-0.1.4-py3-none-any.whl:
Publisher:
release.yml on anfreire/patch-cc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
patch_cc-0.1.4-py3-none-any.whl -
Subject digest:
f4c4d9a2c4c413f52fe916def75a15afeb7ec28ce25c3f84348140552198ceec - Sigstore transparency entry: 2225326241
- Sigstore integration time:
-
Permalink:
anfreire/patch-cc@a254514d54d27abbbf118ae0c52bc69419420ec8 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/anfreire
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a254514d54d27abbbf118ae0c52bc69419420ec8 -
Trigger Event:
push
-
Statement type: