github agent-sh/agnix v0.19.0

8 hours ago

Added

  • Output-style validator (CC-OS-001..006) - new validator for .claude/output-styles/*.md files, surfaced during the Claude Code v2.1.117 triage (#745). The output-style frontmatter spec was added in v2.1.94 with the keep-coding-instructions field. New rules: CC-OS-001 missing description (LOW), CC-OS-002 invalid keep-coding-instructions type (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. New FileType::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 via microsoft/vscode-copilot-chat, cline, roo-code, gemini-cli), JSON update endpoint (cursor's api2.cursor.sh stable channel), HTML scrape with regex (kiro, windsurf), and RSS slug (amp). Per-tool notes_extractor selects between LLM-extracted markdown via GLM (glm-5 by default; activates only when GLM_API_KEY repo secret is set), <item><description> CDATA parse, or stub link. Issues are deduped by tool-release:<id> label so re-runs comment on existing open issues. workflow_dispatch accepts tool filter and update_baselines: true toggle.
  • 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 clippy in .github/workflows/ci.yml and scripts/pre-push-rust now 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_module in agnix-cli/src/main.rs, unnecessary_literal_unwrap and Ok(...).unwrap() in agnix-cli/src/sarif.rs and agnix-core/tests/api_contract.rs (both intentional contract tests, marked #[allow]), needless <'a> lifetime in agnix-cli/tests/kiro_fixture_inventory.rs, deprecated criterion::black_box -> std::hint::black_box in agnix-core/benches/validation.rs, needless_borrows_for_generic_args in agnix-core/src/rules/cross_platform.rs and agnix-core/src/rules/project_level.rs (3 sites), unnecessary_cast in agnix-lsp/src/backend/tests.rs, and unused DiagnosticLevel / LintConfig imports in agnix-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 in crates/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.md aligned: Kiro CLI moved B-tier -> S-tier (matches the canonical tier list), Roo Code repo URL updated (RooVetGit/Roo-Code -> RooCodeInc/Roo-Code after 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 searchResultLimits on docusaurus-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.rs server instructions (3 places), and website docs (intro, getting-started, contributing). rules.json is the source of truth; these human-written references had drifted.
  • CONTRIBUTING tone - CONTRIBUTING.md and website/docs/contributing.md use first-person singular ("I welcome", "I want to know") since agnix is single-maintainer. Previously used "we" which implied a team.
  • Docusaurus - bumped @docusaurus/core and @docusaurus/preset-classic from 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). Bumped verified_on for all 19 CUR-* rules to 2026-04-22; bumped RESEARCH-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/*.mdc and .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/overview and https://docs.cline.bot/features/hooks docs. The 3-version bump introduced globalSkills enterprise remote config with alwaysEnabled enforcement (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/alwaysEnabled live exclusively in Cline's RemoteConfigSchema (delivered over the network via the enterprise remote-config API), not in .cline/skills/*/SKILL.md or .clinerules/skills/*/SKILL.md frontmatter. 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 - Notification is NOT a valid Cline hook event (the 8 valid events match agnix's VALID_HOOK_EVENTS exactly: TaskStart, TaskResume, TaskCancel, TaskComplete, PreToolUse, PostToolUse, UserPromptSubmit, PreCompact). No code changes required. Bumped verified_on for all 10 Cline rules to 2026-04-22; bumped RESEARCH-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 under https://kiro.dev/docs/. The 1.28 -> 2.0 jump was platform expansion (Windows native, headless mode KIRO_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/trustedAgents from v1.25, knowledgeIndex resource type from v1.23/v1.24) were verified against kiro.dev/docs/cli/custom-agents/configuration-reference and confirmed NOT to appear in .kiro/agents/*.json field lists - they're either global settings or were never shipped as documented config. No code changes required. Bumped verified_on for all 51 Kiro rules to 2026-04-22; bumped RESEARCH-TRACKING.md "Last Reviewed" for Kiro CLI from 2026-02-05 to 2026-04-22 (also added .kiro/powers/*/POWER.md to 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.md was 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_on for all 46 OC-* rules to 2026-04-23; bumped RESEARCH-TRACKING.md "Last Reviewed" for OpenCode 2026-04-22 -> 2026-04-23 and added OC to the Rules column (was just AGM, 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 .roomodes autocomplete + UI cleanup. None of these touch any on-disk file agnix validates: provider/model lists are not allowlisted, and agnix's parse_roomodes is permissive (only reads slug, name, roleDefinition, groups — ignores whenToUse, description, customInstructions, source, etc.). No code changes required. Bumped verified_on for all 6 ROO-* rules to 2026-04-23; bumped RESEARCH-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 --, now ROO).
  • amp (Sourcegraph) amp-free-is-ad-free doc 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. Bumped verified_on to 2026-04-23 for all 5 amp rules (AMP-001..004 + AMP-SK-001); bumped RESEARCH-TRACKING.md "Last Reviewed" for amp 2026-02-05 -> 2026-04-23 and filled in the Rules column (was --, now AMP, 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.agentSessionNoninteractiveEnabled in 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. Bumped verified_on for all 9 GM-* rules to 2026-04-23; bumped RESEARCH-TRACKING.md "Last Reviewed" for gemini cli 2026-02-05 -> 2026-04-23, normalized Rules column from GM- to GM.
  • 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. Bumped verified_on for all 5 WS-* rules to 2026-04-23; bumped RESEARCH-TRACKING.md "Last Reviewed" for Windsurf 2026-02-05 -> 2026-04-23, filled in Rules column (was --, now WS, 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 both KNOWN_TOP_LEVEL_KEYS (schemas/codex.rs, used by CDX-004) and KNOWN_CONFIG_TOP_LEVEL_KEYS (rules/codex.rs, used by CDX-CFG-006) plus regression tests for both the TOML and JSON paths. Bumped verified_on for 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_config does 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 both valid_types arrays AND known_non_command arrays in crates/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 asserting mcp_tool doesn't trigger CC-HK-016. Note: as of 2026-04-23 the docs at code.claude.com/docs/en/hooks only list 4 types; the v2.1.118 release notes are authoritative for the new mcp_tool type until the docs catch up. Bumped verified_on for all 25 CC-HK-* rules to 2026-04-23. Other v2.1.118 changes (vim visual mode, /cost+/stats->/usage, custom themes, plugin themes/ directory, DISABLE_UPDATES, wslInheritsWindowsSettings policy 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 the description frontmatter field on .instructions.md files 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" to KNOWN_KEYS and a typed description: Option<String> field on CopilotScopedSchema in crates/agnix-core/src/schemas/copilot.rs plus two regression tests (parse + unknown-key check). Documentation: bumped verified_on for all 25 COP-* rules to 2026-04-22; bumped RESEARCH-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 the tui.mouse: bool config 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" to KNOWN_TUI_KEYS in crates/agnix-core/src/schemas/opencode.rs plus two regression tests (mouse: false and mouse: true). Documentation: bumped verified_on for all 46 OC-* rules to 2026-04-22; bumped RESEARCH-TRACKING.md "Last Reviewed" for OpenCode from 2026-02-05 to 2026-04-22. Verified other schema additions in the bump window (MCP oauth_redirect_uri in v1.4.3, compaction.autocontinue in v1.4.4, compaction.preserve_recent_tokens in 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, upstream config.ts deprecates the in-config tui block in favour of a separate tui.json file; agnix's TUI validator continues to help users on v1.3-v1.4 and users who keep the deprecated form. Migrating to validate tui.json is 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 to KNOWN_TOP_LEVEL_KEYS in crates/agnix-core/src/schemas/codex.rs (the TOML path used by CDX-004) AND KNOWN_CONFIG_TOP_LEVEL_KEYS in crates/agnix-core/src/rules/codex.rs (the JSON/YAML path). Also added realtime and marketplaces to KNOWN_TABLE_KEYS since 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: bumped verified_on for all 58 CDX-* rules to 2026-04-22; bumped RESEARCH-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 in KNOWN_AGENT_TOOLS, so tools: [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 in schemas::skill::VALID_EFFORT_LEVELS (the single source of truth shared by both agent CC-AG-014 and skill CC-SK-018 validation), so effort: xhigh no longer false-positives in either rule. The agent color field (display color for the task list and transcript) is now a typed field on AgentSchema and listed in KNOWN_AGENT_FIELDS, so color: blue no longer false-positives CC-AG-019. Documentation: bumped verified_on for CC-AG-009/010/011/014/019 and CC-SK-018 to 2026-04-22; added a single scope note at the top of the CLAUDE CODE RULES (SUBAGENTS) section in VALIDATION-RULES.md that agent-frontmatter hooks and mcpServers are loaded for both subagent spawning and --agent main-thread sessions (v2.1.116/v2.1.117); bumped RESEARCH-TRACKING.md "Last Reviewed" for Claude Code from 2026-02-05 to 2026-04-22.
  • Clippy errors under Rust 1.95 - collapsed nested if blocks into match guards in kiro_steering.rs, roo.rs, and windsurf.rs, and switched fixes.rs to sort_by_key with Reverse. Resolves collapsible_match and unnecessary_sort_by lints newly enforced on stable 1.95, unblocking CI on main and all open PRs.
  • [files].exclude silently half-worked (#722) - previously this filter ran at resolve_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 vendored AGENTS.md would still fire "Nested AGENTS.md" even when excluded. [files].exclude now joins the walker filter alongside top-level exclude, 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) - agnix now accepts multiple positional paths, and .pre-commit-hooks.yaml no longer forces pass_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. Snapshotted docs/ as version-0.18.0 (lossless - no commits touched docs/ after the v0.18.0 tag).
  • Release automation - the version-docs job in release.yml now bumps lastVersion in docusaurus.config.js and 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 but lastVersion stayed stale, which caused the v0.18.0 drift.

Don't miss a new agnix release

NewReleases is sending notifications on new releases.