diff --git a/.claude/flow.json b/.claude/flow.json
index 52366f05f..e562d566b 100644
--- a/.claude/flow.json
+++ b/.claude/flow.json
@@ -1,27 +1,26 @@
{
"version": "1.0.0",
"task": {
- "id": "output-style-validator",
- "source": "manual",
- "title": "PR2: output-style validator (post-#745 follow-on)"
+ "id": "749",
+ "title": "Tool release: Cursor 3.1.17 (was 3.0.0)",
+ "description": "PR for issue #749: Cursor 3.0.0 → 3.1.17 triage",
+ "tier": "A",
+ "category": "tool-release-triage",
+ "issue_url": "https://github.com/agent-sh/agnix/issues/749"
},
"workflow": {
- "id": "output-style-validator",
- "status": "active",
- "currentPhase": "setup",
- "createdAt": "2026-04-22T00:00:00Z",
- "updatedAt": "2026-04-22T00:00:00Z"
+ "status": "in-progress",
+ "currentPhase": "worktree-setup",
+ "startedAt": "2026-04-22T00:00:00Z"
},
"git": {
- "branch": "feat/output-style-validator",
+ "branch": "chore/triage-cursor-3-1-17",
"baseBranch": "main",
- "baseSha": "3c4a3a9",
- "mainRepoPath": "C:/Users/avife/agent-sh/agnix",
- "isWorktree": true
+ "baseSha": "1326467",
+ "mainRepoPath": "C:/Users/avife/agent-sh/agnix"
},
- "context": {
- "description": "Add output-style validator for Claude Code output-style files (.claude/output-styles/*.md) - new FileType in agnix-core. Follow-on from triage of issue #745 which merged as PR #756. The keep-coding-instructions field was surfaced during #745 triage.",
- "relatedIssue": "#745",
- "relatedMergedPR": "#756"
+ "resume": {
+ "canResume": true,
+ "resumeFromStep": "exploration"
}
}
diff --git a/.github/spec-baselines.json b/.github/spec-baselines.json
index 2781e6ef1..797a9cda2 100644
--- a/.github/spec-baselines.json
+++ b/.github/spec-baselines.json
@@ -7,81 +7,189 @@
"agent-skills-spec": {
"url": "https://agentskills.io/specification",
"hash": "07eb3bfba81db490030345a8c7bfed3683207205dae290300318279c30106de2",
- "rules": ["AS-001", "AS-002", "AS-003", "AS-004", "AS-005", "AS-006", "AS-008", "AS-011", "AS-013", "AS-014", "AS-015", "AS-016"]
+ "rules": [
+ "AS-001",
+ "AS-002",
+ "AS-003",
+ "AS-004",
+ "AS-005",
+ "AS-006",
+ "AS-008",
+ "AS-011",
+ "AS-013",
+ "AS-014",
+ "AS-015",
+ "AS-016"
+ ]
},
"mcp-spec": {
"url": "https://modelcontextprotocol.io/specification/2025-11-25",
"hash": "45eed48714317ebca887c021e5a2a46f56b0dabbae14c399dcccd73100358934",
"github_repo": "modelcontextprotocol/specification",
- "rules": ["MCP-001", "MCP-002", "MCP-003", "MCP-004", "MCP-005", "MCP-006", "MCP-007", "MCP-008"]
+ "rules": [
+ "MCP-001",
+ "MCP-002",
+ "MCP-003",
+ "MCP-004",
+ "MCP-005",
+ "MCP-006",
+ "MCP-007",
+ "MCP-008"
+ ]
},
"claude-code-memory": {
"url": "https://code.claude.com/docs/en/memory",
"hash": "afcbf2219b2f9f72f3d8932ef5049278833627a09b2fd2955406e82b9ae312e2",
- "rules": ["CC-MEM-001", "CC-MEM-002", "CC-MEM-003", "CC-MEM-004"]
+ "rules": [
+ "CC-MEM-001",
+ "CC-MEM-002",
+ "CC-MEM-003",
+ "CC-MEM-004"
+ ]
},
"claude-code-hooks": {
"url": "https://code.claude.com/docs/en/hooks",
"hash": "404c38e161c8b9cf8daabd455776ae078a0dc29314cbaa682e0a17c2ce24ac1a",
- "rules": ["CC-HK-001", "CC-HK-002", "CC-HK-003", "CC-HK-004", "CC-HK-005", "CC-HK-006", "CC-HK-007", "CC-HK-008", "CC-HK-010", "CC-HK-011", "CC-HK-012"]
+ "rules": [
+ "CC-HK-001",
+ "CC-HK-002",
+ "CC-HK-003",
+ "CC-HK-004",
+ "CC-HK-005",
+ "CC-HK-006",
+ "CC-HK-007",
+ "CC-HK-008",
+ "CC-HK-010",
+ "CC-HK-011",
+ "CC-HK-012"
+ ]
},
"claude-code-skills": {
"url": "https://code.claude.com/docs/en/skills",
"hash": "aa304d51b31be37a59f35e81c315e9b298894508857295c71a6b56e7a25c8cd9",
- "rules": ["CC-SK-001", "CC-SK-002", "CC-SK-003", "CC-SK-004", "CC-SK-006"]
+ "rules": [
+ "CC-SK-001",
+ "CC-SK-002",
+ "CC-SK-003",
+ "CC-SK-004",
+ "CC-SK-006"
+ ]
},
"claude-code-plugins": {
"url": "https://code.claude.com/docs/en/plugins-reference",
"hash": "af4d216303304bf0ffd1de74a9a1f71ffb0e44d5323306a80a30cf89bbbcb769",
- "rules": ["CC-PL-002", "CC-PL-003", "CC-PL-004", "CC-PL-005", "CC-PL-006"]
+ "rules": [
+ "CC-PL-002",
+ "CC-PL-003",
+ "CC-PL-004",
+ "CC-PL-005",
+ "CC-PL-006"
+ ]
},
"claude-code-subagents": {
"url": "https://code.claude.com/docs/en/sub-agents",
"hash": "b17ed99452ce65f18804fff1ed945414d9e42ae862d295ad49be6b13dd93210c",
- "rules": ["CC-SA-001", "CC-SA-002", "CC-SA-003", "CC-SA-004", "CC-SA-005", "CC-SA-006", "CC-SA-007"]
+ "rules": [
+ "CC-SA-001",
+ "CC-SA-002",
+ "CC-SA-003",
+ "CC-SA-004",
+ "CC-SA-005",
+ "CC-SA-006",
+ "CC-SA-007"
+ ]
},
"codex-cli-agents-md": {
"url": "https://developers.openai.com/codex/guides/agents-md/",
"hash": "7ff43344ded3bb80b7c8f3dc37f40dec948a331719c1c7a0125384338f87c15c",
- "rules": ["AGM-001", "AGM-002", "AGM-003", "AGM-004", "AGM-005", "AGM-006", "XP-001", "XP-002", "XP-003", "XP-004", "XP-005", "XP-006"]
+ "rules": [
+ "AGM-001",
+ "AGM-002",
+ "AGM-003",
+ "AGM-004",
+ "AGM-005",
+ "AGM-006",
+ "XP-001",
+ "XP-002",
+ "XP-003",
+ "XP-004",
+ "XP-005",
+ "XP-006"
+ ]
},
"opencode-rules": {
"url": "https://opencode.ai/docs/rules/",
"hash": "622315eb04b6dacc551537a4298b02cef15078e2b041cc79945cefce7e607c4a",
- "rules": ["XP-001", "XP-002", "XP-003", "XP-004", "XP-005", "XP-006"]
+ "rules": [
+ "XP-001",
+ "XP-002",
+ "XP-003",
+ "XP-004",
+ "XP-005",
+ "XP-006"
+ ]
}
},
"a-tier": {
"cursor-rules": {
- "url": "https://cursor.com/docs/context/rules",
+ "url": "https://cursor.com/docs/rules",
"hash": "24529507938b37d3e3815e86b8c1c87cbaf78230c899854f0d74b2d5356c676a",
- "rules": ["CUR-001", "CUR-002", "CUR-003", "CUR-004", "CUR-005", "CUR-006", "CUR-007", "CUR-008", "CUR-009"]
+ "rules": [
+ "CUR-001",
+ "CUR-002",
+ "CUR-003",
+ "CUR-004",
+ "CUR-005",
+ "CUR-006",
+ "CUR-007",
+ "CUR-008",
+ "CUR-009"
+ ]
},
"cursor-hooks": {
- "url": "https://cursor.com/docs/agent/hooks",
+ "url": "https://cursor.com/docs/hooks",
"hash": "4f55df64b01fe7d2c55a9d544eafdda070e35d7f84045c021f4a5ea9fcdd05d8",
- "rules": ["CUR-010", "CUR-011", "CUR-012", "CUR-013"]
+ "rules": [
+ "CUR-010",
+ "CUR-011",
+ "CUR-012",
+ "CUR-013"
+ ]
},
"cursor-subagents": {
- "url": "https://cursor.com/docs/context/subagents",
+ "url": "https://cursor.com/docs/subagents",
"hash": "f849221f0342190122e8411587e47f129c915902077da6995753f26c8a03cc9a",
- "rules": ["CUR-014", "CUR-015"]
+ "rules": [
+ "CUR-014",
+ "CUR-015"
+ ]
},
"cursor-environment": {
"url": "https://cursor.com/docs/cloud-agent/setup",
"hash": "326a48176a4541dc5e1d94d7f1ef94c50a007dc4798b85e97e8ada5ec75e8a9e",
- "rules": ["CUR-016"]
+ "rules": [
+ "CUR-016"
+ ]
},
"github-copilot": {
"url": "https://docs.github.com/en/copilot/customizing-copilot",
"hash": "668c75acb7948484e1334aeb040332961836fbe187561fa830219afcde8ae289",
- "rules": ["GH-001", "GH-002", "GH-003", "GH-004"]
+ "rules": [
+ "GH-001",
+ "GH-002",
+ "GH-003",
+ "GH-004"
+ ]
},
"cline-rules": {
"url": "https://docs.cline.bot/features/cline-rules/overview",
"hash": "3a42acacd88e62655c440c04214bed9e622793007489f1d9ef68a2ea85360063",
- "rules": ["CLINE-001", "CLINE-002", "CLINE-003"]
+ "rules": [
+ "CLINE-001",
+ "CLINE-002",
+ "CLINE-003"
+ ]
}
}
}
-}
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index f819ef98e..b6167c2ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,10 @@ dist/
IMPLEMENTATION-NEXT-STEPS.md
STATUS.md
+# Triage exploration reports (working memory for /next-task triage workflow)
+.triage-report-*.md
+.exploration-report-*.md
+
.claude/plan.md
.claude/scheduled_tasks.lock
.claude/settings.local.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e2090796..f5622f0be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **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.
diff --git a/crates/agnix-rules/rules.json b/crates/agnix-rules/rules.json
index 3f9db7c2d..aafc074fc 100644
--- a/crates/agnix-rules/rules.json
+++ b/crates/agnix-rules/rules.json
@@ -39,7 +39,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]"
],
"verified_on": "2026-02-09",
@@ -66,7 +66,7 @@
"evidence": {
"source_type": "community",
"source_urls": [
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]"
],
"verified_on": "2026-02-09",
@@ -120,7 +120,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -146,7 +146,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -6150,9 +6150,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6177,9 +6177,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6205,9 +6205,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6232,9 +6232,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6259,9 +6259,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6287,9 +6287,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6314,9 +6314,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6342,9 +6342,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6370,9 +6370,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6397,9 +6397,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6424,9 +6424,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6452,9 +6452,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6479,9 +6479,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6507,9 +6507,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/subagents"
+ "https://cursor.com/docs/subagents"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6534,9 +6534,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/subagents"
+ "https://cursor.com/docs/subagents"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6563,7 +6563,7 @@
"source_urls": [
"https://cursor.com/docs/cloud-agent/setup"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6588,9 +6588,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -6618,9 +6618,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -6648,9 +6648,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -9929,7 +9929,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -9956,7 +9956,7 @@
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
"https://opencode.ai/docs/rules",
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]",
"https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/"
],
@@ -9984,7 +9984,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10010,7 +10010,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10036,7 +10036,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10062,7 +10062,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
diff --git a/knowledge-base/MONTHLY-REVIEW.md b/knowledge-base/MONTHLY-REVIEW.md
index da6b9f583..da7e7f2bb 100644
--- a/knowledge-base/MONTHLY-REVIEW.md
+++ b/knowledge-base/MONTHLY-REVIEW.md
@@ -49,9 +49,9 @@ These tools have automated monthly monitoring. Review confirms accuracy and chec
**Sources to check**:
- https://docs.github.com/en/copilot/customizing-copilot
- https://docs.cline.bot/features/cline-rules/overview
-- https://cursor.com/docs/context/rules
-- https://cursor.com/docs/agent/hooks
-- https://cursor.com/docs/context/subagents
+- https://cursor.com/docs/rules
+- https://cursor.com/docs/hooks
+- https://cursor.com/docs/subagents
- https://cursor.com/docs/cloud-agent/setup
### B/C Tier: Roo Code, Kiro CLI, amp, pi, gemini cli, continue, Antigravity
diff --git a/knowledge-base/RESEARCH-TRACKING.md b/knowledge-base/RESEARCH-TRACKING.md
index eaf025c48..d883a85f2 100644
--- a/knowledge-base/RESEARCH-TRACKING.md
+++ b/knowledge-base/RESEARCH-TRACKING.md
@@ -27,7 +27,7 @@ Tools are organized by support tier (see [../CONTRIBUTING.md#tool-tier-system](.
|------|---------------|-------------------|------------|-----------|---------------|-------------|
| GitHub Copilot | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md` | https://docs.github.com/en/copilot/customizing-copilot | Automated (spec-drift.yml + tool-release-watch.yml via microsoft/vscode-copilot-chat) | Monthly | 2026-04-22 | COP |
| Cline | `.clinerules` (file or dir), `.clinerules/workflows/*.md`, `.clinerules/hooks/*`, `.clinerules/skills/*/SKILL.md`, `.cline/skills/*/SKILL.md` | https://docs.cline.bot/features/cline-rules/overview | Automated (spec-drift.yml + tool-release-watch.yml) | Monthly | 2026-04-22 | CLN, CL-SK |
-| Cursor | `.cursor/rules/*.mdc`, `.cursorrules` | https://cursor.com/docs/context/rules | Automated (spec-drift.yml + tool-release-watch.yml via api2.cursor.sh stable update endpoint) | Monthly | 2026-02-26 | CUR |
+| Cursor | `.cursor/rules/*.mdc`, `.cursorrules`, `.cursor/hooks.json`, `.cursor/agents/*.md`, `.cursor/environment.json` | https://cursor.com/docs/rules | Automated (spec-drift.yml + tool-release-watch.yml via api2.cursor.sh stable update endpoint) | Monthly | 2026-04-22 | CUR |
### B Tier (test on significant changes if time permits)
@@ -77,9 +77,9 @@ Authoritative sources monitored for changes that may affect validation rules.
| Claude Code - Sub-agents | https://code.claude.com/docs/en/sub-agents | spec-drift.yml (weekly) | CC-AG-001 through CC-AG-007 |
| Codex CLI - AGENTS.md | https://developers.openai.com/codex/guides/agents-md/ | spec-drift.yml (weekly) | AGM-001 through AGM-006, XP-001 through XP-006 |
| OpenCode - Rules | https://opencode.ai/docs/rules/ | spec-drift.yml (weekly) | XP-001 through XP-006 |
-| Cursor - Rules | https://cursor.com/docs/context/rules | spec-drift.yml (monthly) | CUR-001 through CUR-009 |
-| Cursor - Hooks | https://cursor.com/docs/agent/hooks | spec-drift.yml (monthly) | CUR-010 through CUR-013 |
-| Cursor - Subagents | https://cursor.com/docs/context/subagents | spec-drift.yml (monthly) | CUR-014, CUR-015 |
+| Cursor - Rules | https://cursor.com/docs/rules | spec-drift.yml (monthly) | CUR-001 through CUR-009 |
+| Cursor - Hooks | https://cursor.com/docs/hooks | spec-drift.yml (monthly) | CUR-010 through CUR-013, CUR-017 through CUR-019 |
+| Cursor - Subagents | https://cursor.com/docs/subagents | spec-drift.yml (monthly) | CUR-014, CUR-015 |
| Cursor - Environment | https://cursor.com/docs/cloud-agent/setup | spec-drift.yml (monthly) | CUR-016 |
| GitHub Copilot | https://docs.github.com/en/copilot/customizing-copilot | spec-drift.yml (monthly) | COP-001 through COP-006 |
| Cline - Rules | https://docs.cline.bot/features/cline-rules/overview | spec-drift.yml (monthly) | -- |
diff --git a/knowledge-base/VALIDATION-RULES.md b/knowledge-base/VALIDATION-RULES.md
index 1d200e419..dfd634c9b 100644
--- a/knowledge-base/VALIDATION-RULES.md
+++ b/knowledge-base/VALIDATION-RULES.md
@@ -1546,105 +1546,105 @@ Output-style files (`.claude/output-styles/*.md` or `~/.claude/output-styles/*.m
**Requirement**: Cursor .mdc rule files MUST have non-empty content
**Detection**: `content.trim().is_empty()` after stripping frontmatter
**Fix**: Add meaningful rules content
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-002 [MEDIUM] Missing Frontmatter in .mdc File
**Requirement**: Cursor .mdc files SHOULD have YAML frontmatter with metadata
**Detection**: File doesn't start with `---` markers
**Fix**: Auto-fix (unsafe) - insert template frontmatter with description and globs fields
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-003 [HIGH] Invalid YAML Frontmatter
**Requirement**: .mdc file frontmatter MUST be valid YAML
**Detection**: YAML parse error on frontmatter content
**Fix**: Fix YAML syntax errors in frontmatter
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-004 [HIGH] Invalid Glob Pattern in globs Field
**Requirement**: `globs` field MUST contain valid glob patterns
**Detection**: Attempt to parse as glob pattern
**Fix**: Correct the glob syntax
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-005 [MEDIUM] Unknown Frontmatter Keys
**Requirement**: .mdc frontmatter SHOULD only contain known keys (description, globs, alwaysApply)
**Detection**: Check for keys other than known keys in frontmatter
**Fix**: Remove unknown keys
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-006 [MEDIUM] Legacy .cursorrules File Detected
**Requirement**: Projects SHOULD migrate from .cursorrules to .cursor/rules/*.mdc format
**Detection**: File named `.cursorrules`
**Fix**: Create `.cursor/rules/` directory and migrate rules to .mdc files
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-007 [MEDIUM] alwaysApply with Redundant globs
**Requirement**: When `alwaysApply: true`, the `globs` field SHOULD NOT be set (it is redundant)
**Detection**: Frontmatter has both `alwaysApply: true` and a `globs` field
**Fix**: [AUTO-FIX] Remove the `globs` field (safe)
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-008 [HIGH] Invalid alwaysApply Type
**Requirement**: `alwaysApply` MUST be a boolean (`true`/`false`), not a quoted string
**Detection**: `alwaysApply` value is a string (e.g., `"true"` or `"false"`) instead of a boolean
**Fix**: Auto-fix (safe) - convert quoted string to unquoted boolean
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-009 [MEDIUM] Missing Description for Agent-Requested Rule
**Requirement**: Rules with no `alwaysApply` and no `globs` (agent-requested rules) SHOULD have a `description`
**Detection**: Frontmatter has no `alwaysApply`, no `globs`, and no `description` (or empty description)
**Fix**: Add a `description` field explaining when the rule should apply
-**Source**: cursor.com/docs/context/rules
+**Source**: cursor.com/docs/rules
### CUR-010 [HIGH] Invalid .cursor/hooks.json Schema
**Requirement**: `.cursor/hooks.json` MUST define an integer `version` and object `hooks` map
**Detection**: Parse JSON and validate top-level shape and required fields
**Fix**: Add required fields and correct schema types for `version` and `hooks`
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-011 [MEDIUM] Unknown Cursor Hook Event Name
**Requirement**: Hook event names in `.cursor/hooks.json` SHOULD use documented Cursor events
**Detection**: Validate each `hooks.` key against allowlisted event names
**Fix**: [AUTO-FIX] Rename event keys to supported Cursor hook events
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-012 [HIGH] Hook Entry Missing Required Command Field
**Requirement**: Each hook entry MUST include a `command` field
**Detection**: Parse `hooks.[]` objects and check for missing `command`
**Fix**: Add a non-empty command to each hook object
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-013 [HIGH] Invalid Cursor Hook Type Value
**Requirement**: Hook `type` MUST be `command` or `prompt` when present
**Detection**: Parse hook entries and validate `type` values
**Fix**: [AUTO-FIX] Change invalid `type` values to supported values
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-014 [HIGH] Invalid Cursor Subagent Frontmatter
**Requirement**: `.cursor/agents/**/*.md` files MUST have valid YAML frontmatter with required fields and valid optional field types
**Detection**: Parse frontmatter and validate required keys (`name`, `description`), plus optional typed fields (`model`, `readonly`, `is_background`) when present
**Fix**: Correct frontmatter keys, naming format, and value types
-**Source**: cursor.com/docs/context/subagents
+**Source**: cursor.com/docs/subagents
### CUR-015 [MEDIUM] Empty Cursor Subagent Body
**Requirement**: `.cursor/agents/**/*.md` Cursor subagent markdown files SHOULD include body instructions after frontmatter
**Detection**: Parse file and check that body content is non-empty after frontmatter
**Fix**: Add clear subagent instructions below frontmatter
-**Source**: cursor.com/docs/context/subagents
+**Source**: cursor.com/docs/subagents
### CUR-016 [HIGH] Invalid .cursor/environment.json Schema
@@ -1658,21 +1658,21 @@ Output-style files (`.claude/output-styles/*.md` or `~/.claude/output-styles/*.m
**Requirement**: Hook entry fields SHOULD have correct types (timeout: number, loop_limit: number|null, failClosed: boolean)
**Detection**: Check field types in hook entries
**Fix**: Manual
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-018 [MEDIUM] Prompt Hook Missing Prompt Field
**Requirement**: Prompt-type hooks SHOULD have a prompt field
**Detection**: Check for type:"prompt" without prompt key
**Fix**: Manual
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
### CUR-019 [LOW] Invalid Prompt Hook Model Type
**Requirement**: model field on prompt hooks MAY be validated as string
**Detection**: Check model field type
**Fix**: Manual
-**Source**: cursor.com/docs/agent/hooks
+**Source**: cursor.com/docs/hooks
---
diff --git a/knowledge-base/agent-config-optional-fields.md b/knowledge-base/agent-config-optional-fields.md
index 4fdd4f5fc..866ee6136 100644
--- a/knowledge-base/agent-config-optional-fields.md
+++ b/knowledge-base/agent-config-optional-fields.md
@@ -544,7 +544,7 @@ Supported syntax in `.mcp.json`:
| [Claude Code Memory](https://code.claude.com/docs/en/memory) | Official Docs | CLAUDE.md and .claude/rules/ reference |
| [Agent Skills Specification](https://agentskills.io/specification) | Spec | Cross-tool skill standard |
| [GitHub Copilot Custom Instructions](https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot) | Vendor Docs | Copilot instruction file schema |
-| [Cursor Rules](https://cursor.com/docs/context/rules) | Vendor Docs | .mdc file format reference |
+| [Cursor Rules](https://cursor.com/docs/rules) | Vendor Docs | .mdc file format reference |
| [Cline Rules](https://docs.cline.bot/features/cline-rules) | Vendor Docs | .clinerules format reference |
| [OpenCode Configuration](https://opencode.ai/docs/config) | Vendor Docs | opencode.json schema reference |
| [Codex CLI Documentation](https://developers.openai.com/codex/guides/agents-md) | Vendor Docs | AGENTS.md discovery and config.yaml |
diff --git a/knowledge-base/rules.json b/knowledge-base/rules.json
index 3f9db7c2d..aafc074fc 100644
--- a/knowledge-base/rules.json
+++ b/knowledge-base/rules.json
@@ -39,7 +39,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]"
],
"verified_on": "2026-02-09",
@@ -66,7 +66,7 @@
"evidence": {
"source_type": "community",
"source_urls": [
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]"
],
"verified_on": "2026-02-09",
@@ -120,7 +120,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -146,7 +146,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -6150,9 +6150,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6177,9 +6177,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6205,9 +6205,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6232,9 +6232,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6259,9 +6259,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6287,9 +6287,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6314,9 +6314,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6342,9 +6342,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6370,9 +6370,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6397,9 +6397,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6424,9 +6424,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6452,9 +6452,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6479,9 +6479,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6507,9 +6507,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/subagents"
+ "https://cursor.com/docs/subagents"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6534,9 +6534,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/context/subagents"
+ "https://cursor.com/docs/subagents"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6563,7 +6563,7 @@
"source_urls": [
"https://cursor.com/docs/cloud-agent/setup"
],
- "verified_on": "2026-02-26",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},
@@ -6588,9 +6588,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -6618,9 +6618,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -6648,9 +6648,9 @@
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
- "https://cursor.com/docs/agent/hooks"
+ "https://cursor.com/docs/hooks"
],
- "verified_on": "2026-03-28",
+ "verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor",
"file_types": [
@@ -9929,7 +9929,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -9956,7 +9956,7 @@
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
"https://opencode.ai/docs/rules",
- "https://cursor.com/docs/context/rules",
+ "https://cursor.com/docs/rules",
"https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]",
"https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/"
],
@@ -9984,7 +9984,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10010,7 +10010,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10036,7 +10036,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
@@ -10062,7 +10062,7 @@
"source_type": "community",
"source_urls": [
"https://developers.openai.com/codex/guides/agents-md",
- "https://cursor.com/docs/context/rules"
+ "https://cursor.com/docs/rules"
],
"verified_on": "2026-02-04",
"applies_to": {},
diff --git a/website/docs/rules/generated/agm-001.md b/website/docs/rules/generated/agm-001.md
index 8062df026..009508b0b 100644
--- a/website/docs/rules/generated/agm-001.md
+++ b/website/docs/rules/generated/agm-001.md
@@ -24,7 +24,7 @@ keywords: ["AGM-001", "valid markdown structure", "agents.md", "validation", "ag
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/agm-002.md b/website/docs/rules/generated/agm-002.md
index 376784bba..a7dfc3de2 100644
--- a/website/docs/rules/generated/agm-002.md
+++ b/website/docs/rules/generated/agm-002.md
@@ -23,7 +23,7 @@ keywords: ["AGM-002", "missing section headers", "agents.md", "validation", "agn
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/agm-004.md b/website/docs/rules/generated/agm-004.md
index f18a42c2e..95d56a1dd 100644
--- a/website/docs/rules/generated/agm-004.md
+++ b/website/docs/rules/generated/agm-004.md
@@ -24,7 +24,7 @@ keywords: ["AGM-004", "missing project context", "agents.md", "validation", "agn
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/agm-005.md b/website/docs/rules/generated/agm-005.md
index e4953caf0..24a460a87 100644
--- a/website/docs/rules/generated/agm-005.md
+++ b/website/docs/rules/generated/agm-005.md
@@ -24,7 +24,7 @@ keywords: ["AGM-005", "platform-specific features without guard", "agents.md", "
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-001.md b/website/docs/rules/generated/cur-001.md
index 6b6dbc220..83ea00f71 100644
--- a/website/docs/rules/generated/cur-001.md
+++ b/website/docs/rules/generated/cur-001.md
@@ -13,7 +13,7 @@ keywords: ["CUR-001", "empty cursor rule file", "cursor", "validation", "agnix",
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-001", "empty cursor rule file", "cursor", "validation", "agnix",
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-002.md b/website/docs/rules/generated/cur-002.md
index c26c0487a..2f8049597 100644
--- a/website/docs/rules/generated/cur-002.md
+++ b/website/docs/rules/generated/cur-002.md
@@ -13,7 +13,7 @@ keywords: ["CUR-002", "missing frontmatter in .mdc file", "cursor", "validation"
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `Yes (unsafe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-002", "missing frontmatter in .mdc file", "cursor", "validation"
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-003.md b/website/docs/rules/generated/cur-003.md
index ac46af4b2..67de37904 100644
--- a/website/docs/rules/generated/cur-003.md
+++ b/website/docs/rules/generated/cur-003.md
@@ -13,7 +13,7 @@ keywords: ["CUR-003", "invalid yaml frontmatter", "cursor", "validation", "agnix
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-003", "invalid yaml frontmatter", "cursor", "validation", "agnix
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-004.md b/website/docs/rules/generated/cur-004.md
index 42bbb8244..cc400171e 100644
--- a/website/docs/rules/generated/cur-004.md
+++ b/website/docs/rules/generated/cur-004.md
@@ -13,7 +13,7 @@ keywords: ["CUR-004", "invalid glob pattern in globs field", "cursor", "validati
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-004", "invalid glob pattern in globs field", "cursor", "validati
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-005.md b/website/docs/rules/generated/cur-005.md
index f547b2e07..01438a992 100644
--- a/website/docs/rules/generated/cur-005.md
+++ b/website/docs/rules/generated/cur-005.md
@@ -13,7 +13,7 @@ keywords: ["CUR-005", "unknown frontmatter keys", "cursor", "validation", "agnix
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `Yes (safe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-005", "unknown frontmatter keys", "cursor", "validation", "agnix
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-006.md b/website/docs/rules/generated/cur-006.md
index b2e3065fc..2109d104e 100644
--- a/website/docs/rules/generated/cur-006.md
+++ b/website/docs/rules/generated/cur-006.md
@@ -13,7 +13,7 @@ keywords: ["CUR-006", "legacy .cursorrules file detected", "cursor", "validation
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-006", "legacy .cursorrules file detected", "cursor", "validation
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-007.md b/website/docs/rules/generated/cur-007.md
index 583e7e218..8bcfc5585 100644
--- a/website/docs/rules/generated/cur-007.md
+++ b/website/docs/rules/generated/cur-007.md
@@ -13,7 +13,7 @@ keywords: ["CUR-007", "alwaysapply with redundant globs", "cursor", "validation"
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `Yes (safe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-007", "alwaysapply with redundant globs", "cursor", "validation"
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-008.md b/website/docs/rules/generated/cur-008.md
index ddac9985b..989b98ead 100644
--- a/website/docs/rules/generated/cur-008.md
+++ b/website/docs/rules/generated/cur-008.md
@@ -13,7 +13,7 @@ keywords: ["CUR-008", "invalid alwaysapply type", "cursor", "validation", "agnix
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `Yes (safe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-008", "invalid alwaysapply type", "cursor", "validation", "agnix
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-009.md b/website/docs/rules/generated/cur-009.md
index 98f8d9f85..5b4483b14 100644
--- a/website/docs/rules/generated/cur-009.md
+++ b/website/docs/rules/generated/cur-009.md
@@ -13,7 +13,7 @@ keywords: ["CUR-009", "missing description for agent-requested rule", "cursor",
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-009", "missing description for agent-requested rule", "cursor",
## Evidence Sources
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-010.md b/website/docs/rules/generated/cur-010.md
index 67da10d74..e2989dfc7 100644
--- a/website/docs/rules/generated/cur-010.md
+++ b/website/docs/rules/generated/cur-010.md
@@ -13,7 +13,7 @@ keywords: ["CUR-010", "invalid cursor hooks schema", "cursor", "validation", "ag
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-010", "invalid cursor hooks schema", "cursor", "validation", "ag
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-011.md b/website/docs/rules/generated/cur-011.md
index 873ad526a..27a6d89b3 100644
--- a/website/docs/rules/generated/cur-011.md
+++ b/website/docs/rules/generated/cur-011.md
@@ -13,7 +13,7 @@ keywords: ["CUR-011", "unknown cursor hook event name", "cursor", "validation",
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `Yes (safe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-011", "unknown cursor hook event name", "cursor", "validation",
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-012.md b/website/docs/rules/generated/cur-012.md
index dbd34838a..b5d47156f 100644
--- a/website/docs/rules/generated/cur-012.md
+++ b/website/docs/rules/generated/cur-012.md
@@ -13,7 +13,7 @@ keywords: ["CUR-012", "hook entry missing required command field", "cursor", "va
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-012", "hook entry missing required command field", "cursor", "va
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-013.md b/website/docs/rules/generated/cur-013.md
index cf04b3ec9..6749b5a1b 100644
--- a/website/docs/rules/generated/cur-013.md
+++ b/website/docs/rules/generated/cur-013.md
@@ -13,7 +13,7 @@ keywords: ["CUR-013", "invalid cursor hook type value", "cursor", "validation",
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `Yes (safe)`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-013", "invalid cursor hook type value", "cursor", "validation",
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-014.md b/website/docs/rules/generated/cur-014.md
index ab33b80fa..541871165 100644
--- a/website/docs/rules/generated/cur-014.md
+++ b/website/docs/rules/generated/cur-014.md
@@ -13,7 +13,7 @@ keywords: ["CUR-014", "invalid cursor subagent frontmatter", "cursor", "validati
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-014", "invalid cursor subagent frontmatter", "cursor", "validati
## Evidence Sources
-- https://cursor.com/docs/context/subagents
+- https://cursor.com/docs/subagents
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-015.md b/website/docs/rules/generated/cur-015.md
index cff20cfcc..3f73565f4 100644
--- a/website/docs/rules/generated/cur-015.md
+++ b/website/docs/rules/generated/cur-015.md
@@ -13,7 +13,7 @@ keywords: ["CUR-015", "empty cursor subagent body", "cursor", "validation", "agn
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-015", "empty cursor subagent body", "cursor", "validation", "agn
## Evidence Sources
-- https://cursor.com/docs/context/subagents
+- https://cursor.com/docs/subagents
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-016.md b/website/docs/rules/generated/cur-016.md
index 99eedc68f..95f78e84a 100644
--- a/website/docs/rules/generated/cur-016.md
+++ b/website/docs/rules/generated/cur-016.md
@@ -13,7 +13,7 @@ keywords: ["CUR-016", "invalid cursor environment schema", "cursor", "validation
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-02-26`
+- **Verified On**: `2026-04-22`
## Applicability
diff --git a/website/docs/rules/generated/cur-017.md b/website/docs/rules/generated/cur-017.md
index 4b9eebf12..61e1b769c 100644
--- a/website/docs/rules/generated/cur-017.md
+++ b/website/docs/rules/generated/cur-017.md
@@ -13,7 +13,7 @@ keywords: ["CUR-017", "invalid hook entry field types", "cursor", "validation",
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-03-28`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-017", "invalid hook entry field types", "cursor", "validation",
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-018.md b/website/docs/rules/generated/cur-018.md
index d214bd8ed..07384a279 100644
--- a/website/docs/rules/generated/cur-018.md
+++ b/website/docs/rules/generated/cur-018.md
@@ -13,7 +13,7 @@ keywords: ["CUR-018", "prompt hook missing prompt field", "cursor", "validation"
- **Category**: `Cursor`
- **Normative Level**: `MUST`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-03-28`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-018", "prompt hook missing prompt field", "cursor", "validation"
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/cur-019.md b/website/docs/rules/generated/cur-019.md
index 6b1f6638a..3b9a3264f 100644
--- a/website/docs/rules/generated/cur-019.md
+++ b/website/docs/rules/generated/cur-019.md
@@ -13,7 +13,7 @@ keywords: ["CUR-019", "invalid prompt hook model type", "cursor", "validation",
- **Category**: `Cursor`
- **Normative Level**: `SHOULD`
- **Auto-Fix**: `No`
-- **Verified On**: `2026-03-28`
+- **Verified On**: `2026-04-22`
## Applicability
@@ -23,7 +23,7 @@ keywords: ["CUR-019", "invalid prompt hook model type", "cursor", "validation",
## Evidence Sources
-- https://cursor.com/docs/agent/hooks
+- https://cursor.com/docs/hooks
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/xp-001.md b/website/docs/rules/generated/xp-001.md
index 49f570129..940b299cf 100644
--- a/website/docs/rules/generated/xp-001.md
+++ b/website/docs/rules/generated/xp-001.md
@@ -24,7 +24,7 @@ keywords: ["XP-001", "platform-specific feature in generic config", "cross-platf
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/xp-002.md b/website/docs/rules/generated/xp-002.md
index 68bd79244..57fceaa86 100644
--- a/website/docs/rules/generated/xp-002.md
+++ b/website/docs/rules/generated/xp-002.md
@@ -25,7 +25,7 @@ keywords: ["XP-002", "agents.md platform compatibility", "cross-platform", "vali
- https://developers.openai.com/codex/guides/agents-md
- https://opencode.ai/docs/rules
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]
- https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/
diff --git a/website/docs/rules/generated/xp-003.md b/website/docs/rules/generated/xp-003.md
index 43c68aa52..4adc94b9f 100644
--- a/website/docs/rules/generated/xp-003.md
+++ b/website/docs/rules/generated/xp-003.md
@@ -24,7 +24,7 @@ keywords: ["XP-003", "hard-coded platform paths", "cross-platform", "validation"
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/xp-004.md b/website/docs/rules/generated/xp-004.md
index 80a34ba54..21bda3d4c 100644
--- a/website/docs/rules/generated/xp-004.md
+++ b/website/docs/rules/generated/xp-004.md
@@ -24,7 +24,7 @@ keywords: ["XP-004", "conflicting build/test commands", "cross-platform", "valid
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/xp-005.md b/website/docs/rules/generated/xp-005.md
index 456708555..67ecaed09 100644
--- a/website/docs/rules/generated/xp-005.md
+++ b/website/docs/rules/generated/xp-005.md
@@ -24,7 +24,7 @@ keywords: ["XP-005", "conflicting tool constraints", "cross-platform", "validati
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata
diff --git a/website/docs/rules/generated/xp-006.md b/website/docs/rules/generated/xp-006.md
index 123b0d72a..f24431eb7 100644
--- a/website/docs/rules/generated/xp-006.md
+++ b/website/docs/rules/generated/xp-006.md
@@ -24,7 +24,7 @@ keywords: ["XP-006", "multiple layers without documented precedence", "cross-pla
## Evidence Sources
- https://developers.openai.com/codex/guides/agents-md
-- https://cursor.com/docs/context/rules
+- https://cursor.com/docs/rules
## Test Coverage Metadata