Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 15 additions & 16 deletions .claude/flow.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
146 changes: 127 additions & 19 deletions .github/spec-baselines.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Copilot AI Apr 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cursor-hooks baseline only lists CUR-010..013, but CUR-017..019 also cite the Cursor hooks docs (https://cursor.com/docs/hooks) and should be included here so spec-drift changes get attributed to all affected rules.

Suggested change
"CUR-013"
"CUR-013",
"CUR-017",
"CUR-018",
"CUR-019"

Copilot uses AI. Check for mistakes.
]
},
"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"
]
}
}
}
}
}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
Loading
Loading