Repository navigation
v0.7.3 — follow the name, not its spelling
Claude Code 2.1.314 moved the Task tool's model aliases into a constant that one chunk exports and the agent schema imports. On that build Custom models stopped applying — endpoint routing included — because its model-list step found a name where it expected a list, and Override subagent models saw no model to pin: doctor failed on 2.1.314 through 2.1.316. The same kind of move had already hidden the fork and worker agents since 2.1.248, and web-fetch since 2.1.304, while every line stayed green. This release follows a name to what it binds, the way JavaScript does, so how upstream splits its bundle stops mattering.
The fix
Names now resolve through one path. A read leads to every value written to its binding: by scope within its module, and through an import or an export … from into the module that declares it. Every matcher that special-cased a spelling goes through that path, so a list moved behind a constant, an alias or an import reads as the list it is. The model-list step of Custom models is optional, so losing that list can no longer take routing down with it.
Matchers compare bindings, not spellings. The capability gate takes the call that reads its own parameter, not one that merely shares its name. Colour new files as diffs lends the create render a line count, renderer or style only where every name in it means the same at the create site, and declines elsewhere rather than throw when the render runs. A linkage name the parser misreads stays unresolved without hiding its neighbours.
What a build lacks is said, not hidden. Override subagent models judges each saved pin against the bundle it patches: a pin the build cannot take is listed on one not on this build line, and a run with nothing to write is reported absent, never recorded as landed. The effort-limits and effort-cap steps use the same line in place of their two notes. Discovery is a read, so doctor counts the agents or models it could not read, and fails on them.
Compatibility
Transparent. Upgrade and re-apply (patch-cc apply, or the menu); the saved selection replays unchanged. On 2.1.314 and later, custom models and their routing apply again and subagent pins land; from 2.1.248, fork and worker can be pinned again, and web-fetch from 2.1.304.
A saved choice a build cannot take — a pin to an agent or model it lacks, or a patch with no surface on it, such as the org label on 2.1.316 — is no longer dropped when you save. It stays in the file for a build that has it; apply and the menu skip it, record only what landed, and name what they kept. The menu offers a custom model to a pin only where the build's model list was read.
Validated
- GitHub CI passes on Python 3.11, 3.12, 3.13 and 3.14 for the release commit.
patch-cc doctorover all 94 held builds, 2.1.210 → 2.1.316: every patch matches and every baked binary boots. Diffed against a sweep of 0.7.2, exactly these lines move:- 2.1.314–2.1.316:
custom-modelsgoes from dropped to applied, the models readinherit, sonnet, opus, haiku, fablewhere they readinheritalone, anddoctorpasses where it failed. - 2.1.248–2.1.316:
subagent-modelsreachesforkandworker, and from 2.1.304web-fetch— 11 applications where there were 9 (8 from 2.1.304; 2 on 2.1.314–2.1.316, where no model was read). - 2.1.210–2.1.266: the two effort notes become one
not on this build: effort-limits, effort-capline.
- 2.1.314–2.1.316:
- On every held build, the capability gate
custom-modelsbinds is the function 0.7.2 bound, for both capabilities. - Scripted apply and menu flows on a copy of 2.1.316: pins to
Explore,general-purposeandclaudeland; a pin to an agent or model the build lacks, and a patch it has no surface for, stay in the saved file and are named; the menu shows only the pins the build takes. - The 0.7.3 wheel and sdist build, pass Twine metadata checks, and install from PyPI.
uvx --no-cache patch-cc # or: uv tool install patch-cc && patch-cc