Changed
- pre-commit hooks install agnix themselves
(#1439). The three hooks in
.pre-commit-hooks.yamlmove fromlanguage: systemtolanguage: python,
sopre-commitandprekcreate a virtualenv and pull theagnixwheel that
matches the pinnedrevinstead of requiring a manualcargo installon
PATH. This is what the new PyPI distribution makes possible. A root
pyproject.tomlexists solely for that install: pre-commit clones the repo
andpip install .s it, so the clone has to be pip-installable, and this shim
declares the matchingagnix==<version>as its only dependency.
scripts/sync-versions.shmoves the shim's version and its pin together, so a
hook pinned atrev: vX.Y.Zalways runs agnix X.Y.Z. Platforms without a
wheel can still pinlanguage: systemin their own config, which the
configuration guide now documents.
Added
- CC-SET-028: invalid
feedbackDraftssetting
(#1435). Claude Code v2.1.247
added theSendFeedbacktool and thefeedbackDraftssetting that governs it.
The setting is a string enum -notify,quiet, oroff- so the natural
guess of a boolean silently leaves the defaultnotifyin place. Flags any
value outside the documented enum. - CC-SET-029: invalid
spinnerTipsOverrideshape
(#1435). v2.1.247 extended the
key with tip objects (id,text,cooldownSessions,priority),tipsFile,
andlabel. Claude Code drops an invalid tip with a debug warning instead of
rejecting the file, so a malformed tip is simply never shown. Validates the
object's fields, each tip entry, the documentedid/textlimits, the
0-1000and-10-10numeric ranges, the 40-characterlabelcap, and
thattipsFileis absolute or~/-rooted. - CC-PL-016: plugin name not kebab-case. The plugin reference documents
nameas a kebab-case identifier with no spaces, and v2.1.247 hardened
marketplace handling to reject names containing control or invisible
characters. Those fail kebab-case by construction, so this catches them before
a plugin reaches a marketplace.
Fixed
SendFeedbackandListAgentsreported as unknown tools
(#1435).KNOWN_AGENT_TOOLS
had not been refreshed since 2026-07-31, so CC-AG-009/010 flagged two
documented built-in tools -ListAgentsfrom Claude Code v2.1.224 and
SendFeedbackfrom v2.1.238 - as invalid names in an agent'stoolsor
disallowedToolslist. Diffed the whole list against the live tools reference,
and these were the only two missing.
Changed
- Tool baselines refreshed (closes
#1435,
#1436,
#1437). Claude Code
v2.1.246tov2.1.247, Clinev4.1.15tov4.1.16, and Codex CLI
rust-v0.149.1torust-v0.150.0. Cline's release moves hook workspace
resolution from shared global state to the VS Code window, which changes
runtime behaviour rather than any validated file contract. Codex adds an
Interrupthook event; CDX-PL-013 validates hook shape without an event-name
allowlist, so nothing false-positives, and the missing allowlist is recorded in
RESEARCH-TRACKING along with the uncoveredspinnerVerbssetting.
Fixed
- Tool-release triage produced no summaries. Two separate faults, both of
which the watcher degrades silently to "post the raw changelog": the
GLM_API_KEYsecret had expired, andscripts/glm-extract.jsran with an
output budget too small for a thinking model. Reasoning tokens are drawn from
the samemax_tokensbudget as the answer, so at 4096 the model intermittently
spent the entire budget reasoning and returnedfinish_reason: "length"with
emptycontent(reproduced at 1 failure in 3 runs, 4095 of 4096 tokens on
reasoning).MAX_TOKENSis now 32768, roughly six times the 1.9k-5.2k
reasoning observed on real triage prompts, and thinking stays enabled because
it measurably improves the "does this touch a validated config surface?"
judgement. The default model is now namedglm-5.3explicitly rather than
relying on the endpoint'sglm-5alias, so an alias move cannot change triage
behaviour silently. The empty-content error now also reportsfinish_reason,
reasoning size, and usage instead of just "empty content", and
scripts/glm-extract.test.js- which no workflow ran - is now part of CI.