Added
- MCP-025: non-boolean
alwaysLoadin MCP server config (#836). Claude Code 2.1.121 introduced analwaysLoad: booleanfield on MCP server entries - whentrue, every tool from that server skips tool-search deferral and is always available. A typo like"alwaysLoad": "true"(quoted string) is a silent footgun: Claude Code treats it as truthy in some code paths and ignores it in others, so the user's intent silently fails. MCP-025 (MEDIUM) flags non-boolean values before they reach Claude Code. Also teaches MCP-024 that{ "alwaysLoad": true }is a deliberate field, not an "empty server" false positive. - Tool baseline:
claude-codebumped from v2.1.119 to v2.1.121 in.github/tool-release-baselines.jsonandknowledge-base/RESEARCH-TRACKING.md. - Rule count: 414 -> 415 across all derived locations (rules.json, CLAUDE.md, AGENTS.md, README.md, website docs) via
scripts/sync-rule-bookkeeping.js.
Changed
- Tool-release triage is now grounded in the rule catalog (#837).
scripts/glm-extract.js --mode=agnix-triageused to ask GLM to classify release notes against achanges_of_interestlist without any knowledge of existing rules, so its "Rule candidates" invented freeform names (e.g.mcp-server-always-load-type) and its "Agnix-relevant changes" never explained why a bullet was surfaced. Two changes:- Citation requirement: every Agnix-relevant bullet must cite the
changes_of_interest.relevantline it matched, shaped- <phrase> -- matches: <interest>. Makes the triage auditable and tightens the hallucination guard. - Rule-catalog grounding:
scripts/check-tool-releases.shnow builds a compact per-tool rule manifest (via the newscripts/build-rule-manifest.js) and passes it to the triage prompt via a new--rules-manifestflag. GLM can now reclassify changes as "already covered by MCP-024" and propose real next-in-sequence ids (MCP-025 notmcp-server-always-load-type). A new#### Already-covered changessection surfaces rules that already cover a change so maintainers can close the tracker issue without adding a new rule. Prompt degrades gracefully to the un-grounded form when the manifest is absent.
- Citation requirement: every Agnix-relevant bullet must cite the
- Covered by 18 new unit tests (
node --test scripts/*.test.js), including prompt-structure regression guards so future prompt edits can't silently drop the citation requirement or the Already-covered section. - Bookkeeping sync now covers plugin/skill files and plugin/npm versions (this release). The previous
scripts/sync-rule-bookkeeping.jsonly rewrote rule-count phrases inCLAUDE.md,AGENTS.md, andREADME.md, leavingknowledge-base/README.md,knowledge-base/INDEX.md,plugin/commands/agnix.md,plugin/skills/agnix/SKILL.md,skills/agnix/SKILL.md, andplugin/.claude-plugin/plugin.jsonfree to drift (observed: 405 rules in these files while CLAUDE.md said 414). Also:plugin/.claude-plugin/plugin.jsonversion was 4+ minor versions behind Cargo's workspace version andnpm/package.jsonwas 2 behind, because release commits only bumpedCargo.tomlandeditors/vscode/package.json.sync-rule-bookkeeping.jsnow (a) rewrites count phrases across every file in the extendedCOUNT_FILESlist using per-file pattern scoping to avoid clobbering per-category counts in table rows, and (b) syncsplugin/.claude-plugin/plugin.json+npm/package.jsonversionfields fromCargo.toml [workspace.package] version.--checkmode fails when drift is present, so both CI (.github/workflows/ci.yml) and the local pre-push hook (scripts/pre-push-rust, which now runs the check as its first gate) refuse to ship a drifted tree. plugin/skills/agnix/SKILL.mdnow declaresallowed-toolsmatching its root-level counterpart inskills/agnix/SKILL.md(#830). Closes a security-relevant divergence where users installing via the plugin got an unrestricted skill while users loading the root skill got one scoped toBash(agnix:*),Bash(cargo:*), and read-only file ops.