Skip to content

feat: Cursor platform support - skills, commands, and rules#269

Merged
avifenesh merged 19 commits intomainfrom
feature/cursor-support-261
Feb 22, 2026
Merged

feat: Cursor platform support - skills, commands, and rules#269
avifenesh merged 19 commits intomainfrom
feature/cursor-support-261

Conversation

@avifenesh
Copy link
Collaborator

Summary

Adds Cursor as the 4th platform target for agentsys (alongside Claude Code, OpenCode, and Codex CLI).

Cursor v2.4+ natively supports the Agent Skills standard (SKILL.md), so instead of converting everything to .mdc rule files, content is installed to the correct Cursor locations:

  • Skills -> .cursor/skills/<name>/SKILL.md (minimal transform - same format as Claude Code)
  • Commands -> .cursor/commands/<name>.md (light transform - frontmatter stripped, JS syntax removed)
  • Rules -> .cursor/rules/*.mdc (reserved for coding standards, MDC frontmatter format)

All content is project-scoped (installed relative to CWD, not globally).

Key changes

  • transformSkillForCursor - minimal: PLUGIN_ROOT replacement + namespace stripping
  • transformCommandForCursor - light: strip frontmatter, require(), Task() calls, namespaces
  • transformRuleForCursor - full MDC transform (kept for future rule generation)
  • Rewritten installForCursor() with OpenCode-style multi-type installer
  • Platform constants, CLI wiring, detection, help text
  • Scoped cleanup: only removes agentsys-managed files, preserves user-created content
  • Path traversal protection on both skill dirs and command filenames
  • 3655 tests passing across 89 suites

Security hardening

  • Skill directory name validation (/^[a-zA-Z0-9_-]+$/)
  • $ pattern escaping in String.replace() for PLUGIN_ROOT substitution
  • Control character stripping in YAML descriptions
  • JSON.stringify() for globs in MDC frontmatter
  • Safer platform detection (checks .cursor/rules|commands|skills, not just .cursor/)

Test plan

  • npm test passes (3655 tests, 89 suites)
  • node bin/cli.js --help shows cursor in supported platforms
  • node bin/cli.js list --tool cursor lists available skills + commands
  • Skills install to .cursor/skills/<name>/SKILL.md
  • Commands install to .cursor/commands/<name>.md
  • Old agentsys files cleaned up on reinstall
  • User-created files preserved during cleanup

Closes #261

Use object-form source {"source": "url", "url": "..."} instead of bare
URL strings, and remove unrecognized "requires"/"core" keys that cause
schema validation errors when loading the marketplace.
Add PLATFORMS.CURSOR, STATE_DIRS entry, detectPlatform branch,
and INSTRUCTION_FILES entry for Cursor support.
Convert plugin content to Cursor MDC rule format with description,
globs, and alwaysApply frontmatter. Strips Claude-specific syntax
(Task calls, require statements, plugin namespacing) and replaces
PLUGIN_ROOT paths.
Returns tuples with agentsys-prefixed rule names, plugin info,
description, type, and globs for Cursor MDC rule generation.
Add 'cursor' to VALID_TOOLS, detectInstalledPlatforms, interactive
prompt, install subcommand, and main install flow. Add installForCursor
function that writes .mdc rules to .cursor/rules/ using discovery
mappings and the transformForCursor pipeline. Update help text.
Add Cursor to all reference tables, add MDC rule format section,
installation location, and testing checklist entry.
Add transformForCursor tests (frontmatter, description escaping,
PLUGIN_ROOT replacement, require stripping, plugin namespacing,
Task call stripping). Update VALID_TOOLS, PLATFORMS, STATE_DIRS,
and detectPlatform tests for Cursor.
Cursor v2.4+ natively supports the Agent Skills standard (SKILL.md).
Instead of converting everything to .mdc rules, install content to
the correct locations:
- Skills -> .cursor/skills/<name>/SKILL.md (minimal transform)
- Commands -> .cursor/commands/<name>.md (light transform)
- Rules -> .cursor/rules/*.mdc (reserved for coding standards)
- Validate skill directory names against [a-zA-Z0-9_-]+ to prevent path traversal
- Detect Cursor only when .cursor/rules, commands, or skills exist (not bare .cursor/)
- Scope command cleanup to only remove known command files, preserving user files
- Default description to empty string in transformRuleForCursor
- Add PLUGIN_ROOT substitution integration tests for skills and commands
Copilot AI review requested due to automatic review settings February 22, 2026 10:42
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds Cursor as the 4th platform target for agentsys, alongside Claude Code, OpenCode, and Codex CLI. Cursor v2.4+ natively supports the Agent Skills standard, so the implementation installs content with minimal transformations: skills to .cursor/skills/<name>/SKILL.md, commands to .cursor/commands/<name>.md, and infrastructure for future rule generation to .cursor/rules/*.mdc. All content is project-scoped (installed relative to CWD).

Changes:

  • Added Cursor platform constants, detection, and CLI integration across core modules
  • Implemented three transform functions: transformSkillForCursor (minimal), transformCommandForCursor (strips frontmatter), and transformRuleForCursor (MDC format, reserved for future use)
  • Added installForCursor() with scoped cleanup that preserves user-created content
  • Updated documentation, checklists, and help text to reflect 4-platform support

Reviewed changes

Copilot reviewed 17 out of 18 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
lib/adapter-transforms.js Added three Cursor transform functions with PLUGIN_ROOT replacement, namespace stripping, and MDC frontmatter generation
lib/discovery/index.js Added getCursorRuleMappings function and command filename validation for path traversal protection
lib/cross-platform/index.js Added CURSOR to PLATFORMS, STATE_DIRS, and INSTRUCTION_FILES constants
bin/cli.js Added installForCursor function, Cursor to VALID_TOOLS, platform detection, and CLI help text updates
tests/gen-adapters.test.js Added comprehensive tests for all three Cursor transform functions (78 new tests)
tests/cross-platform.test.js Added tests for Cursor platform detection and constants
tests/cli-args.test.js Added 15 integration tests for installForCursor function
docs/.md, checklists/.md Updated all documentation and checklists to reference 4 platforms and Cursor-specific patterns
.claude-plugin/marketplace.json Changed source field format from string to object and removed requires/core fields
README.md, CLAUDE.md, AGENTS.md, CHANGELOG.md Updated to reference Cursor as 4th platform
Comments suppressed due to low confidence (10)

tests/gen-adapters.test.js:441

  • The test at line 441 checks that control characters are stripped using the pattern [\x00-\x09\x0b-\x1f\x7f] (which excludes \x0a/newline), but the actual implementation at lib/adapter-transforms.js:318 uses [\x00-\x1f\x7f] (which includes \x0a/newline). This mismatch means the test is checking for the wrong behavior.

Either update the test to match the implementation's behavior, or fix the implementation to match what the test expects. Given the test input includes \x0a explicitly ("line1\x00line2\x0aline3"), it appears the test expects newlines to be stripped, so the test pattern should match the implementation.

      expect(result).not.toMatch(/[\x00-\x09\x0b-\x1f\x7f]/);

CHANGELOG.md:14

  • The PR description and CHANGELOG mention that "Rules -> .cursor/rules/*.mdc" are installed, but the implementation doesn't actually create any .mdc rule files. The test at tests/cli-args.test.js:316-329 explicitly verifies that NO .mdc files are created. The code includes the infrastructure (rulesDir creation, cleanup of old .mdc files, getCursorRuleMappings function, transformRuleForCursor function) but doesn't use it to generate rules.

This appears intentional (the PR description says "transformRuleForCursor - full MDC transform (kept for future rule generation)"), but the PR description and CHANGELOG should be clarified to indicate that rule generation is infrastructure-only and reserved for future implementation, not a currently active feature.

- **Cursor platform support (#261)** — agentsys now installs to Cursor as a 4th platform alongside Claude Code, OpenCode, and Codex CLI. Use `agentsys --tool cursor` or `agentsys install <plugin> --tool cursor` to install. Skills are copied to `.cursor/skills/` (same SKILL.md format - no transform needed), commands to `.cursor/commands/` (light transform), and rules to `.cursor/rules/*.mdc` (MDC frontmatter). All content is project-scoped. Cursor v2.4+ natively supports the Agent Skills standard.

checklists/cross-platform-compatibility.md:18

  • The documentation states that Cursor's "Env var for state dir" is "N/A", but the detectPlatform() function in lib/cross-platform/index.js:81 checks for AI_STATE_DIR=.cursor to detect the Cursor platform. This creates an inconsistency between the documentation and the code.

Either update the documentation to reflect that Cursor can be detected via AI_STATE_DIR=.cursor, or clarify that this environment variable is only used for internal platform detection and not a user-facing feature.

| **Env var for state dir** | N/A | `AI_STATE_DIR` | `AI_STATE_DIR` | N/A |

lib/adapter-transforms.js:357

  • The namespace stripping regex is missing the agnix plugin. The pattern includes: next-task, deslop, ship, sync-docs, audit-project, enhance, perf, repo-map, drift-detect, consult, debate, learn, web-ctl (13 plugins), but the marketplace.json includes 14 plugins including agnix.

This means any content referencing agnix:agent-name or agnix:skill-name will not have its namespace prefix stripped for Cursor, creating inconsistent behavior compared to other plugins. Add agnix to the namespace stripping pattern.

  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

lib/adapter-transforms.js:383

  • The namespace stripping regex is missing the agnix plugin (same issue as in transformRuleForCursor at line 357). Add agnix to the pattern to ensure consistent namespace stripping across all Cursor transform functions.
  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

lib/adapter-transforms.js:427

  • The namespace stripping regex is missing the agnix plugin (same issue as in transformRuleForCursor at line 357 and transformSkillForCursor at line 383). Add agnix to the pattern for consistency.
  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

lib/adapter-transforms.js:427

  • The namespace stripping regex uses a hardcoded list of plugin names, which requires manual maintenance whenever plugins are added or removed. The OpenCode transform functions (lib/adapter-transforms.js:46-51) use discovery.discoverPlugins(repoRoot) to dynamically build the plugin list, which is more maintainable.

Consider refactoring all three Cursor transform functions (transformRuleForCursor, transformSkillForCursor, transformCommandForCursor) to use the same dynamic discovery approach as OpenCode, passing repoRoot or installDir as a parameter to enable dynamic plugin discovery. This would eliminate the need for manual updates when plugins change.

  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

  return content;
}

/**
 * Transform skill content for Cursor.
 *
 * Minimal transform - Cursor reads SKILL.md frontmatter natively so we
 * preserve it. Only replaces PLUGIN_ROOT paths and strips namespace prefixes.
 *
 * @param {string} content - Source SKILL.md content
 * @param {Object} options
 * @param {string} options.pluginInstallPath - Absolute path to plugin install dir
 * @returns {string} Transformed skill content
 */
function transformSkillForCursor(content, options) {
  const { pluginInstallPath } = options;

  // Replace PLUGIN_ROOT paths with actual install path
  content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, () => pluginInstallPath);
  content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, () => pluginInstallPath);
  content = content.replace(/\$\{PLUGIN_ROOT\}/g, () => pluginInstallPath);
  content = content.replace(/\$PLUGIN_ROOT/g, () => pluginInstallPath);

  // Strip plugin namespacing (e.g. next-task:agent-name -> agent-name)
  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

  return content;
}

/**
 * Transform command content for Cursor.
 *
 * Light transform - strips frontmatter, replaces PLUGIN_ROOT paths,
 * removes require() statements and Task() calls, strips namespace prefixes.
 *
 * @param {string} content - Source command markdown content
 * @param {Object} options
 * @param {string} options.pluginInstallPath - Absolute path to plugin install dir
 * @returns {string} Transformed command content
 */
function transformCommandForCursor(content, options) {
  const { pluginInstallPath } = options;

  // Strip existing frontmatter if present
  if (content.startsWith('---')) {
    content = content.replace(/^---\n[\s\S]*?\n---\n?/, '');
  }

  // Replace PLUGIN_ROOT paths with actual install path
  content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, () => pluginInstallPath);
  content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, () => pluginInstallPath);
  content = content.replace(/\$\{PLUGIN_ROOT\}/g, () => pluginInstallPath);
  content = content.replace(/\$PLUGIN_ROOT/g, () => pluginInstallPath);

  // Strip require() statements
  content = content.replace(/(?:const|let|var)\s+\{?[^}=\n]+\}?\s*=\s*require\s*\([^)]+\);?/g, '');
  content = content.replace(/require\s*\(['"][^'"]+['"]\)/g, '');

  // Strip Claude-specific syntax: Task tool calls (handles one level of nested braces)
  content = content.replace(/await\s+Task\s*\(\s*\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}\s*\);?/g, (match) => {
    const agentMatch = match.match(/subagent_type:\s*["'](?:[^"':]+:)?([^"']+)["']/);
    if (agentMatch) {
      return `Invoke the ${agentMatch[1]} agent`;
    }
    return '';
  });

  // Strip plugin namespacing (e.g. next-task:agent-name -> agent-name)
  content = content.replace(/(?:next-task|deslop|ship|sync-docs|audit-project|enhance|perf|repo-map|drift-detect|consult|debate|learn|web-ctl):([a-z][a-z0-9-]*)/g, '$1');

lib/adapter-transforms.js:318

  • The control character stripping pattern [\x00-\x1f\x7f] at line 318 includes \x0a (newline, LF) and \x0d (carriage return, CR), which will remove legitimate line breaks from multi-line descriptions. YAML descriptions are typically single-line strings, but if a description contains intentional newlines, they will be incorrectly stripped and replaced with spaces.

Consider using a more selective pattern like [\x00-\x09\x0b-\x0c\x0e-\x1f\x7f] to preserve \x0a (LF) and \x0d (CR) if multi-line descriptions are expected, or document that descriptions must be single-line.

  const cleanDescription = description.replace(/[\x00-\x1f\x7f]/g, ' ');

README.md:24

  • The PR description states "3655 tests passing across 89 suites", but the README.md line 24 shows "3,357 tests". This is a discrepancy of 298 tests. If the test count has increased with the new Cursor-related tests, the README should be updated to reflect the accurate count. Verify the actual test count and ensure consistency between the PR description and the README.
  <b>14 plugins · 43 agents · 30 skills (across all repos) · 26k lines of lib code · 3,357 tests · 4 platforms</b><br>

README.md:934

  • The README shows "1,818 tests passing" at line 934, but line 24 shows "3,357 tests" and the PR description mentions "3655 tests". These numbers are inconsistent and confusing. Verify the actual test count and ensure all test count references in the README are accurate and consistent.
- 1,818 tests passing

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 27 to 32
"source": {"source": "url", "url": "https://github.com/agent-sh/next-task.git"},
"description": "Master workflow orchestrator: autonomous workflow with model optimization (opus/sonnet/haiku), two-file state management, workflow enforcement gates, 14 specialist agents",
"version": "1.0.0",
"category": "productivity",
"requires": ["deslop", "sync-docs", "ship"],
"core": ">=1.0.0"
"homepage": "https://github.com/agent-sh/next-task"
},
Copy link

Copilot AI Feb 22, 2026

Choose a reason for hiding this comment

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

The requires and core fields have been removed from all plugin entries in marketplace.json, but the dependency resolution system in resolvePluginDeps (line 272 in bin/cli.js) checks for plugin.requires to build the dependency graph. Removing these fields will break transitive dependency installation.

According to the repo memory, "plugins[].requires drives transitive dependency installs", so these fields are essential for the installer to work correctly. If these fields are being deprecated, the dependency resolution code needs to be updated accordingly. Otherwise, restore the requires fields.

Copilot uses AI. Check for mistakes.
{
"name": "next-task",
"source": "https://github.com/agent-sh/next-task",
"source": {"source": "url", "url": "https://github.com/agent-sh/next-task.git"},
Copy link

Copilot AI Feb 22, 2026

Choose a reason for hiding this comment

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

The marketplace.json has changed the source field from a string to an object format {"source": "url", "url": "..."}, but the fetchPlugin function at line 297 and usage at line 465 expect plugin.source to be a string. This will cause the installer to fail when trying to fetch plugins.

The code at line 314 expects to parse URLs like "https://github.com/owner/repo" or "github:owner/repo" but will receive an object instead.

Either revert the marketplace.json changes to keep source as a string, or update the fetchPlugin function to handle the new object format by extracting plugin.source.url when plugin.source is an object.

Copilot uses AI. Check for mistakes.
Addresses Copilot review comments:
- Restore 'source' field from object format back to string (required by fetchPlugin function)
- Restore 'requires' array for each plugin (required for transitive dependency resolution)
- Restore 'core' version field for all plugins

These fields are essential for the installer to work correctly. The incorrect changes would have broken:
1. Plugin fetching (fetchPlugin expects string URL)
2. Dependency resolution (resolvePluginDeps checks plugin.requires)
3. Core compatibility validation

Reverts marketplace.json to match main branch format while preserving Cursor platform support.
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 16 out of 17 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +57 to +253
<<<<<<< HEAD
40 agents across 11 plugins. Key agents by model:

| Model | Agents | Use Case |
|-------|--------|----------|
| **opus** | planning, implementation, perf-orchestrator, debate-orchestrator | Complex reasoning, judgment |
| **sonnet** | exploration, learn, task-discoverer, delivery-validator, ci-fixer, deslop-agent, reporters | Validation, pattern matching |
| **haiku** | worktree-manager, ci-monitor, simple-fixer | Mechanical execution |

See [README.md](./README.md#command-details) and [docs/reference/AGENTS.md](./docs/reference/AGENTS.md) for full agent list.
</agents>

<skills>
## Skills

26 skills across plugins. Agents invoke skills for reusable implementation.

| Category | Key Skills |
|----------|------------|
| Workflow | `orchestrate-review`, `discover-tasks`, `validate-delivery` |
| Enhancement | `enhance-*` (9 skills for plugins, agents, docs, prompts, hooks) |
| Performance | `baseline`, `benchmark`, `profile`, `theory-tester` |
| Cleanup | `deslop`, `sync-docs`, `drift-analysis`, `repo-mapping` |

See [README.md](./README.md#skills) for full skill list.
</skills>

<state-files>
## State Files

| File | Location | Purpose |
|------|----------|---------|
| `tasks.json` | `{stateDir}/` | Active task registry |
| `flow.json` | `{stateDir}/` (worktree) | Workflow progress |
| `preference.json` | `{stateDir}/sources/` | Cached task source |
| `suppressions.json` | `~/.<claude\|opencode\|codex>/enhance/` | Auto-learned suppressions |

Platform-aware state directory:
- Claude Code: `.claude/`
- OpenCode: `config/.opencode/`
- Codex: `.codex/`
</state-files>

<workflow-agents>
## Workflow Agents (MUST-CALL)

Cannot skip in /next-task:
- `exploration-agent` → before planning
- `planning-agent` → before implementation
- **Phase 9 review loop** → MUST use orchestrate-review skill
- `delivery-validator` → before sync-docs:sync-docs-agent
- `sync-docs:sync-docs-agent` → before /ship
</workflow-agents>

<pr-auto-review>
## PR Auto-Review

4 reviewers: Copilot, Claude, Gemini, Codex

1. Wait 3 min after PR creation (initial auto-reviews)
2. Claude-review may take 10+ min - wait for it
3. Read ALL comments
4. Address EVERY comment
5. Iterate until zero unresolved
</pr-auto-review>

<model-selection>
## Model Selection

| Model | When to Use |
|-------|-------------|
| **Opus** | Complex reasoning, analysis where imperfection compounds |
| **Sonnet** | Validation, pattern matching, most agents |
| **Haiku** | Mechanical execution, no judgment needed |
</model-selection>

<priorities>
## Core Priorities

1. User DX (plugin users)
2. Worry-free automation
3. Token efficiency
4. Quality output
5. Simplicity
</priorities>

<end-reminder>
**REMEMBER**:
- Use CHANGELOG.md for completion tracking (not summary files)
- BEFORE starting → Read the relevant checklist (`checklists/*.md`)
- BEFORE delivering any work, especially releases → Go through that checklist item by item
- 4 platforms: Claude Code + OpenCode + Codex + Cursor - ALL must work
- Agent/Skill pattern: Agents invoke skills, skills have implementation
- Create PRs for non-trivial changes
</end-reminder>

</project-memory>
||||||| ddd8211
40 agents across 11 plugins. Key agents by model:

| Model | Agents | Use Case |
|-------|--------|----------|
| **opus** | planning, implementation, perf-orchestrator, debate-orchestrator | Complex reasoning, judgment |
| **sonnet** | exploration, learn, task-discoverer, delivery-validator, ci-fixer, deslop-agent, reporters | Validation, pattern matching |
| **haiku** | worktree-manager, ci-monitor, simple-fixer | Mechanical execution |

See [README.md](./README.md#command-details) and [docs/reference/AGENTS.md](./docs/reference/AGENTS.md) for full agent list.
</agents>

<skills>
## Skills

26 skills across plugins. Agents invoke skills for reusable implementation.

| Category | Key Skills |
|----------|------------|
| Workflow | `orchestrate-review`, `discover-tasks`, `validate-delivery` |
| Enhancement | `enhance-*` (9 skills for plugins, agents, docs, prompts, hooks) |
| Performance | `baseline`, `benchmark`, `profile`, `theory-tester` |
| Cleanup | `deslop`, `sync-docs`, `drift-analysis`, `repo-mapping` |

See [README.md](./README.md#skills) for full skill list.
</skills>

<state-files>
## State Files

| File | Location | Purpose |
|------|----------|---------|
| `tasks.json` | `{stateDir}/` | Active task registry |
| `flow.json` | `{stateDir}/` (worktree) | Workflow progress |
| `preference.json` | `{stateDir}/sources/` | Cached task source |
| `suppressions.json` | `~/.<claude\|opencode\|codex>/enhance/` | Auto-learned suppressions |

Platform-aware state directory:
- Claude Code: `.claude/`
- OpenCode: `config/.opencode/`
- Codex: `.codex/`
</state-files>

<workflow-agents>
## Workflow Agents (MUST-CALL)

Cannot skip in /next-task:
- `exploration-agent` → before planning
- `planning-agent` → before implementation
- **Phase 9 review loop** → MUST use orchestrate-review skill
- `delivery-validator` → before sync-docs:sync-docs-agent
- `sync-docs:sync-docs-agent` → before /ship
</workflow-agents>

<pr-auto-review>
## PR Auto-Review

4 reviewers: Copilot, Claude, Gemini, Codex

1. Wait 3 min after PR creation (initial auto-reviews)
2. Claude-review may take 10+ min - wait for it
3. Read ALL comments
4. Address EVERY comment
5. Iterate until zero unresolved
</pr-auto-review>

<model-selection>
## Model Selection

| Model | When to Use |
|-------|-------------|
| **Opus** | Complex reasoning, analysis where imperfection compounds |
| **Sonnet** | Validation, pattern matching, most agents |
| **Haiku** | Mechanical execution, no judgment needed |
</model-selection>

<priorities>
## Core Priorities

1. User DX (plugin users)
2. Worry-free automation
3. Token efficiency
4. Quality output
5. Simplicity
</priorities>

<end-reminder>
**REMEMBER**:
- Use CHANGELOG.md for completion tracking (not summary files)
- BEFORE starting → Read the relevant checklist (`checklists/*.md`)
- BEFORE delivering any work, especially releases → Go through that checklist item by item
- 3 platforms: Claude Code + OpenCode + Codex - ALL must work
- Agent/Skill pattern: Agents invoke skills, skills have implementation
- Create PRs for non-trivial changes
</end-reminder>

</project-memory>

## References

Copy link

Copilot AI Feb 22, 2026

Choose a reason for hiding this comment

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

This file contains unresolved merge conflict markers (<<<<<<< HEAD, |||||||, and likely ======= and >>>>>>>). The merge conflict must be resolved before this PR can be merged. The conflict appears to be between two versions that both add similar content about agents, skills, state files, and workflow agents. The key difference is line 148 vs line 245 where one version says "4 platforms" (the new version with Cursor) and the other says "3 platforms" (the old version).

Copilot uses AI. Check for mistakes.
@avifenesh avifenesh merged commit 27c320e into main Feb 22, 2026
12 checks passed
@avifenesh avifenesh deleted the feature/cursor-support-261 branch February 22, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Cursor support — install agents and rules as .mdc files

2 participants