Added
- Output-style validator (CC-OS-001..006) - new validator for
.claude/output-styles/*.mdfiles, surfaced during the Claude Code v2.1.117 triage (#745). The output-style frontmatter spec was added in v2.1.94 with thekeep-coding-instructionsfield. New rules: CC-OS-001 missing description (LOW), CC-OS-002 invalidkeep-coding-instructionstype (HIGH), CC-OS-003 unknown frontmatter key (MEDIUM), CC-OS-004 empty body (MEDIUM), CC-OS-005 name exceeds 64 chars (LOW), CC-OS-006 invalid frontmatter syntax (HIGH). All non-autofix. NewFileType::ClaudeOutputStyle,OutputStyleSchema,OutputStyleValidator. Total rules: 399 -> 405. - Daily tool-release watcher (
.github/workflows/tool-release-watch.yml,scripts/check-tool-releases.sh,scripts/glm-extract.js) - polls every supported tool's release feed daily at 7am UTC and opens a per-tool issue when a new release is detected. Supports four source types via.github/tool-release-baselines.json: GitHub releases (claude-code, codex, opencode, copilot viamicrosoft/vscode-copilot-chat, cline, roo-code, gemini-cli), JSON update endpoint (cursor'sapi2.cursor.shstable channel), HTML scrape with regex (kiro, windsurf), and RSS slug (amp). Per-toolnotes_extractorselects between LLM-extracted markdown via GLM (glm-5by default; activates only whenGLM_API_KEYrepo secret is set),<item><description>CDATA parse, or stub link. Issues are deduped bytool-release:<id>label so re-runs comment on existing open issues.workflow_dispatchacceptstoolfilter andupdate_baselines: truetoggle. - Playground state in URL - playground configs are now shareable by link via
?file=,?tool=, and?code=querystring params (URL-safe base64 for UTF-8 content, debounced writes, capped at 6 KB to stay URL-safe).
Changed
- Clippy gate now covers tests and benches -
cargo clippyin.github/workflows/ci.ymlandscripts/pre-push-rustnow runs with--all-targets --all-features, so warnings in test, bench, and example code fail the build instead of slipping through. Surfaced and fixed 8 latent warnings:items_after_test_moduleinagnix-cli/src/main.rs,unnecessary_literal_unwrapandOk(...).unwrap()inagnix-cli/src/sarif.rsandagnix-core/tests/api_contract.rs(both intentional contract tests, marked#[allow]), needless<'a>lifetime inagnix-cli/tests/kiro_fixture_inventory.rs, deprecatedcriterion::black_box->std::hint::black_boxinagnix-core/benches/validation.rs,needless_borrows_for_generic_argsinagnix-core/src/rules/cross_platform.rsandagnix-core/src/rules/project_level.rs(3 sites),unnecessary_castinagnix-lsp/src/backend/tests.rs, and unusedDiagnosticLevel/LintConfigimports inagnix-lsp/tests/lsp_integration.rs. - Tool-tier list reorganised in
CLAUDE.md/AGENTS.md- split into "Validated" (the 11 tools with a per-tool validator incrates/agnix-core/src/rules/) and "Watchlist" (8 aspirational entries with no validator yet) so a reader can tell at a glance what agnix actually supports today.knowledge-base/RESEARCH-TRACKING.mdaligned: Kiro CLI moved B-tier -> S-tier (matches the canonical tier list), Roo Code repo URL updated (RooVetGit/Roo-Code->RooCodeInc/Roo-Codeafter upstream rename), and watchlist entries removed from the per-tier tables since they have no rules to track. - Search UX - the top-right search now shows 8 inline preview hits as you type (via
searchResultLimitsondocusaurus-search-local) instead of only a "See all results" link. - Docs drift - updated validation rule count from 385 to 399 across 20+ user-facing locations:
CLAUDE.md,AGENTS.md,README.md,SPEC.md,npm/README.md,crates/agnix-lsp/README.md,docs/EDITOR-SETUP.md, Neovim and VS Code editor READMEs,editors/vscode/package.json,editors/zed/README.md,knowledge-base/INDEX.md(5 places),knowledge-base/README.md,plugin/.claude-plugin/plugin.json,plugin/commands/agnix.md,plugin/skills/agnix/SKILL.md,skills/agnix/SKILL.md,crates/agnix-mcp/src/main.rsserver instructions (3 places), and website docs (intro, getting-started, contributing).rules.jsonis the source of truth; these human-written references had drifted. - CONTRIBUTING tone -
CONTRIBUTING.mdandwebsite/docs/contributing.mduse first-person singular ("I welcome", "I want to know") since agnix is single-maintainer. Previously used "we" which implied a team. - Docusaurus - bumped
@docusaurus/coreand@docusaurus/preset-classicfrom 3.9.2 to 3.10.0. - Cursor 3.0.0 -> 3.1.17 doc refresh + URL migration (#749) - re-verified all 19 CUR-* rules against the upstream changelog at
cursor.com/changelog(3.0 "New Cursor Interface" 2026-04-02, two patch posts 2026-04-08 / 2026-04-15, 3.1 "Tiled Layout and Upgraded Voice Input" 2026-04-13). The 3.0/3.1 features are all UX-side (Agents Window, /worktree, /best-of-n, Design Mode, tiled layout, voice input, Canvases) or cloud-side (Bugbot learned rules, Bugbot MCP) - none touch any on-disk file agnix validates. MDC frontmatter (description,globs,alwaysApply), Cursor agent fields (name,description,model,readonly,is_background), and the 20 hook events all match agnix's allow-lists exactly (verified against the new docs). No code changes required. Cursor's docs URL structure migrated upstream:/docs/context/rules->/docs/rules(CUR-001..009),/docs/agent/hooks->/docs/hooks(CUR-010..013, CUR-017..019),/docs/context/subagents->/docs/subagents(CUR-014/015). Updated 18 source URL references across 18 rule entries (CUR-016 cloud-agent URL is unchanged). Bumpedverified_onfor all 19 CUR-* rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Cursor from 2026-02-26 to 2026-04-22; expanded the Config Format column to list all 5 file types Cursor validates (was only listing.cursor/rules/*.mdcand.cursorrules; added.cursor/hooks.json,.cursor/agents/*.md,.cursor/environment.json); updated the per-doc-source breakdown rows to use the new URLs. - Cline v3.77.0 -> v3.80.0 doc refresh (#746) - re-verified all 10 Cline rules (CLN-001..006, CLN-009 + CL-SK-001..003; CLN-007/008 are reserved IDs not currently defined) against the upstream
https://docs.cline.bot/features/cline-rules/overviewandhttps://docs.cline.bot/features/hooksdocs. The 3-version bump introducedglobalSkillsenterprise remote config withalwaysEnabledenforcement (v3.79.0/v3.80.0), removed foreground terminal mode (v3.80.0), added quota-exceeded UI, and fixed long-conversation OOM crashes - none of these touch any on-disk file agnix validates.globalSkills/alwaysEnabledlive exclusively in Cline'sRemoteConfigSchema(delivered over the network via the enterprise remote-config API), not in.cline/skills/*/SKILL.mdor.clinerules/skills/*/SKILL.mdfrontmatter. Foreground terminal removal is VS Code extension internals; agnix has no validator for Cline settings files. Verified the v3.77.0 changelog mention "Polish Notification hook functionality" against the official hooks docs -Notificationis NOT a valid Cline hook event (the 8 valid events match agnix'sVALID_HOOK_EVENTSexactly: TaskStart, TaskResume, TaskCancel, TaskComplete, PreToolUse, PostToolUse, UserPromptSubmit, PreCompact). No code changes required. Bumpedverified_onfor all 10 Cline rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Cline from 2026-02-05 to 2026-04-22; expanded the Config Format column to list all 5 file types Cline validates (was only listing 2) and filled in the Rules column (was--). - Kiro CLI 1.28.3 -> 2.0.1 doc refresh (#751) - re-verified all 51 Kiro rules (KIRO-* steering, KR-AG-* agents, KR-HK-* hooks, KR-MCP-* MCP, KR-PW-* powers, KR-SK-* skills) against the upstream
https://kiro.dev/changelog/cli/HTML changelog and the relevant pages underhttps://kiro.dev/docs/. The 1.28 -> 2.0 jump was platform expansion (Windows native, headless modeKIRO_API_KEY, TUI graduation, granular tool trust, session settings tool, simplified agent creation) - none of those add fields to any of the 5 Kiro file types agnix validates. Two ambiguous changelog mentions (availableAgents/trustedAgentsfrom v1.25,knowledgeIndexresource type from v1.23/v1.24) were verified againstkiro.dev/docs/cli/custom-agents/configuration-referenceand confirmed NOT to appear in.kiro/agents/*.jsonfield lists - they're either global settings or were never shipped as documented config. No code changes required. Bumpedverified_onfor all 51 Kiro rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Kiro CLI from 2026-02-05 to 2026-04-22 (also added.kiro/powers/*/POWER.mdto the Config Format column - it was missing). Discovered: agnix has FIVE Kiro validators, not four -kiro_power.rs(KR-PW-001..008) for.kiro/powers/*/POWER.mdwas undocumented in earlier triage briefings. - OpenCode v1.14.20 -> v1.14.21 doc refresh (#766) - re-verified all 46 OC-* rules against the upstream changelog. v1.14.21 is a runtime/UI-only patch (LSP pull diagnostics support, bare Git repo project caching, session compaction improvements, UTF-8 BOM preservation, Roslyn for C#, Mistral high reasoning variant, TUI/Desktop fixes) - zero on-disk file schema changes. No code changes required. Bumped
verified_onfor all 46 OC-* rules to 2026-04-23; bumpedRESEARCH-TRACKING.md"Last Reviewed" for OpenCode 2026-04-22 -> 2026-04-23 and added OC to the Rules column (was justAGM, XP). - Roo Code v3.51.1 -> v3.52.1 doc refresh (#753) - re-verified all 6 ROO-* rules against the upstream
CHANGELOG.md. v3.52.0 added Poe AI provider, MiniMax model fixes, xAI Grok-4.20 + GPT-5.4 model catalog updates; v3.52.1 added the IDE-side JSON schema for.roomodesautocomplete + UI cleanup. None of these touch any on-disk file agnix validates: provider/model lists are not allowlisted, and agnix'sparse_roomodesis permissive (only readsslug,name,roleDefinition,groups— ignoreswhenToUse,description,customInstructions,source, etc.). No code changes required. Bumpedverified_onfor all 6 ROO-* rules to 2026-04-23; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Roo Code 2026-02-05 -> 2026-04-23; expanded the Config Format column to list all 6 file types Roo validates (was only listing.roo/rules/*.md); filled in Rules column (was--, nowROO). - amp (Sourcegraph)
amp-free-is-ad-freedoc refresh (#744) - the news post is a pricing/business announcement (Amp Free no longer shows ads). Zero on-disk file schema impact. No code changes. Bumpedverified_onto 2026-04-23 for all 5 amp rules (AMP-001..004 + AMP-SK-001); bumpedRESEARCH-TRACKING.md"Last Reviewed" for amp 2026-02-05 -> 2026-04-23 and filled in the Rules column (was--, nowAMP, AMP-SK). - Gemini CLI v0.36.0 -> v0.38.2 doc refresh (#750) - re-verified all 9 GM-* rules. Many runtime/UX/sandbox/browser-agent changes in this cumulative window; only schema-relevant addition was
experimental.adk.agentSessionNoninteractiveEnabledin v0.37.0. agnix's GM-* rules are permissive on settings.json (GM-004 validates hooks structure only, GM-009 catches parse errors only), so no false-positive risk. No code changes. Bumpedverified_onfor all 9 GM-* rules to 2026-04-23; bumpedRESEARCH-TRACKING.md"Last Reviewed" for gemini cli 2026-02-05 -> 2026-04-23, normalized Rules column fromGM-toGM. - Windsurf Wave 13 -> Wave 14 doc refresh (#754) - Wave 14 added Arena Mode (run two Cascade agents side-by-side), Plan Mode (
megaplan), team-admin default-model setting. All runtime UI / cloud features. Zero on-disk schema impact. No code changes. Bumpedverified_onfor all 5 WS-* rules to 2026-04-23; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Windsurf 2026-02-05 -> 2026-04-23, filled in Rules column (was--, nowWS, WS-SK).
Fixed
- Codex CLI rust-v0.122.0 -> rust-v0.123.0 catch-up (#765) - upstream
config-schema.json(verified 2026-04-23) gained 1 new top-level key:experimental_thread_store_endpoint(per #18714 in v0.123.0). Without this fix, agnix would false-positive CDX-004 (unknown TOML top-level key) for any v0.123.0+ config. Added to bothKNOWN_TOP_LEVEL_KEYS(schemas/codex.rs, used by CDX-004) andKNOWN_CONFIG_TOP_LEVEL_KEYS(rules/codex.rs, used by CDX-CFG-006) plus regression tests for both the TOML and JSON paths. Bumpedverified_onfor all 58 CDX-* rules to 2026-04-23. Other v0.123.0 changes (amazon-bedrock model provider #18744, /mcp verbose #18610, plugin MCP loading dual format #18780, realtime handoffs #18597,remote_sandbox_config#18763, model metadata refresh) need no agnix changes —remote_sandbox_configdoes not appear as a top-level key in the published schema; model providers are not allowlisted by agnix; the rest are runtime/CLI/UI. - Claude Code v2.1.117 -> v2.1.118 catch-up (#764) - upstream v2.1.118 added
type: "mcp_tool"so hooks can invoke MCP tools directly. Without this fix, agnix would false-positive CC-HK-016 (unknown hook type) on every v2.1.118+ user that follows the release notes. Added"mcp_tool"to bothvalid_typesarrays ANDknown_non_commandarrays incrates/agnix-core/src/rules/hooks/helpers.rs(4 sites total — two for the strict-fields pass, two for the async-on-non-command pass) plus a regression test assertingmcp_tooldoesn't trigger CC-HK-016. Note: as of 2026-04-23 the docs atcode.claude.com/docs/en/hooksonly list 4 types; the v2.1.118 release notes are authoritative for the newmcp_tooltype until the docs catch up. Bumpedverified_onfor all 25 CC-HK-* rules to 2026-04-23. Other v2.1.118 changes (vim visual mode,/cost+/stats->/usage, custom themes, pluginthemes/directory,DISABLE_UPDATES,wslInheritsWindowsSettingspolicy key,autoMode.*"$defaults"token,claude plugin tag, OAuth and credential bug fixes) need no agnix changes — they're runtime/UI/CLI behavior or settings.json fields agnix doesn't validate directly. - GitHub Copilot v0.42.2 -> v0.43.0 catch-up (#748) - upstream PR
microsoft/vscode-copilot-chat#4964(in v0.43.0) makes thedescriptionfrontmatter field on.instructions.mdfiles a user-visible feature in the VS Code Chat Customizations UI. Without this fix, agnix would false-positive COP-004 (unknown frontmatter key) and offer an auto-fix to delete the line on every v0.43.0+ user that follows the docs. Added"description"toKNOWN_KEYSand a typeddescription: Option<String>field onCopilotScopedSchemaincrates/agnix-core/src/schemas/copilot.rsplus two regression tests (parse + unknown-key check). Documentation: bumpedverified_onfor all 25 COP-* rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for GitHub Copilot from 2026-02-05 to 2026-04-22. Verified other v0.43.0 changes (hooks/plugins UI wiring, AGENTS.md/CLAUDE.md multi-root discovery fix, internal NES/session/telemetry refactors) need no agnix changes - they're UI/runtime only with no schema impact. - OpenCode v1.3.13 -> v1.14.20 catch-up (#752) - upstream PR
anomalyco/opencode#13748(in v1.3.16) added thetui.mouse: boolconfig key to disable terminal mouse capture. Without this fix, agnix would false-positive OC-TUI-001 (unknown TUI key) on any current OpenCode config that includes{"tui": {"mouse": false}}. Added"mouse"toKNOWN_TUI_KEYSincrates/agnix-core/src/schemas/opencode.rsplus two regression tests (mouse: falseandmouse: true). Documentation: bumpedverified_onfor all 46 OC-* rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for OpenCode from 2026-02-05 to 2026-04-22. Verified other schema additions in the bump window (MCPoauth_redirect_uriin v1.4.3,compaction.autocontinuein v1.4.4,compaction.preserve_recent_tokensin v1.14.19, LLM Gateway provider in v1.4.9) need no agnix changes - they extend optional sub-fields agnix doesn't enforce. Note: as of v1.14.x, upstreamconfig.tsdeprecates the in-configtuiblock in favour of a separatetui.jsonfile; agnix's TUI validator continues to help users on v1.3-v1.4 and users who keep the deprecated form. Migrating to validatetui.jsonis a future enhancement, not a blocker for this triage. - Codex CLI rust-v0.118.0 -> rust-v0.122.0 catch-up (#747) - upstream
config-schema.json(verified 2026-04-22) gained 8 new top-level keys (experimental_realtime_start_instructions,experimental_realtime_ws_startup_context,include_apps_instructions,include_environment_context,include_permissions_instructions,marketplaces,realtime,tool_suggest). Without this fix, agnix would false-positive CDX-004 (unknown TOML top-level key, primary path for.codex/config.toml) and CDX-CFG-006 (its JSON/YAML equivalent) on any current Codex config that uses them. Added all 8 toKNOWN_TOP_LEVEL_KEYSincrates/agnix-core/src/schemas/codex.rs(the TOML path used by CDX-004) ANDKNOWN_CONFIG_TOP_LEVEL_KEYSincrates/agnix-core/src/rules/codex.rs(the JSON/YAML path). Also addedrealtimeandmarketplacestoKNOWN_TABLE_KEYSsince both can appear as TOML tables ([realtime],[[marketplaces]]). Plus a regression test that runs an inline-table config and a section-table config and asserts zero CDX-004 diagnostics. Documentation: bumpedverified_onfor all 58 CDX-* rules to 2026-04-22; bumpedRESEARCH-TRACKING.md"Last Reviewed" for Codex CLI from 2026-02-05 to 2026-04-22. Verified MCP server config (env,env_vars), AGENTS.md discovery refactor (#18035), filesystem deny-read globs (#15979), and PermissionRequest hooks (#17563) require no agnix changes - their upstream effects are runtime-only, additive, or already covered by existing validators. - Claude Code v2.1.90 -> v2.1.117 catch-up (#745) -
Monitor(the new built-in tool added in v2.1.98 for streaming events from background scripts) is now inKNOWN_AGENT_TOOLS, sotools: [Monitor]in agent frontmatter no longer false-positives CC-AG-009/CC-AG-010.xhigh(the new effort level for Opus 4.7, added in v2.1.111) is now inschemas::skill::VALID_EFFORT_LEVELS(the single source of truth shared by both agent CC-AG-014 and skill CC-SK-018 validation), soeffort: xhighno longer false-positives in either rule. The agentcolorfield (display color for the task list and transcript) is now a typed field onAgentSchemaand listed inKNOWN_AGENT_FIELDS, socolor: blueno longer false-positives CC-AG-019. Documentation: bumpedverified_onfor CC-AG-009/010/011/014/019 and CC-SK-018 to 2026-04-22; added a single scope note at the top of theCLAUDE CODE RULES (SUBAGENTS)section inVALIDATION-RULES.mdthat agent-frontmatterhooksandmcpServersare loaded for both subagent spawning and--agentmain-thread sessions (v2.1.116/v2.1.117); bumpedRESEARCH-TRACKING.md"Last Reviewed" for Claude Code from 2026-02-05 to 2026-04-22. - Clippy errors under Rust 1.95 - collapsed nested
ifblocks into match guards inkiro_steering.rs,roo.rs, andwindsurf.rs, and switchedfixes.rstosort_by_keywithReverse. Resolvescollapsible_matchandunnecessary_sort_bylints newly enforced on stable 1.95, unblocking CI onmainand all open PRs. [files].excludesilently half-worked (#722) - previously this filter ran atresolve_file_type, which skipped per-file validators but left project-level rules (AGM-006, XP-004/005/006) collecting vendored paths by filename during the walk. A vendoredAGENTS.mdwould still fire "Nested AGENTS.md" even when excluded.[files].excludenow joins the walker filter alongside top-levelexclude, so both filters share one "don't look at this path" semantic and cross-file rules honour it too.- Pre-commit hook rescanned the whole repo (#723) -
agnixnow accepts multiple positional paths, and.pre-commit-hooks.yamlno longer forcespass_filenames: false+ trailing.. pre-commit's built-in optimisation works again: only the changed files get checked, not every eligible file in the repo. - Docs site versioning -
/docs/now serves the latest released version (0.18.0) instead of unreleased dev content, and dev docs moved to/docs/next/with an unreleased banner. Snapshotteddocs/asversion-0.18.0(lossless - no commits toucheddocs/after the v0.18.0 tag). - Release automation - the
version-docsjob inrelease.ymlnow bumpslastVersionindocusaurus.config.jsand includes the config change in the auto-opened docs PR, so/docs/automatically flips to point at the newly released version. Previously the snapshot was created butlastVersionstayed stale, which caused the v0.18.0 drift.