Back to Resources
Cross-Agent Comparison & Architecture GuideLast Updated: Published October 22, 2026

Windsurf Rules vs Cursor Rules vs Claude Skills: Cross-Agent Formats Compared

Windsurf rules, Cursor rules, and Claude skills represent three fundamentally different paradigms for AI agent instructions: monolithic workspace markdown (.windsurfrules), file-targeted glob rules (.cursor/rules/*.mdc), and episodic on-demand skills (SKILL.md). Understanding how each runtime parses, caches, and activates instructions is essential to eliminating duplicate prompt maintenance and context token waste.

Cascade Rules
Cursor MDC
Claude Skills

Compare Windsurf .windsurfrules, Cursor .cursor/rules, and Claude Code SKILL.md. Stop rewriting rules across editors and sync your library.

Modern AI software engineering rarely happens inside a single application. A developer might architect a feature inside the Cursor IDE, refactor async workflows with Windsurf Cascade, and run extensive test suites or multi-file migrations through the Claude Code CLI. However, each of these three leading coding assistants relies on an incompatible file format, directory structure, and ingestion model for custom instructions.

Without a clear architectural strategy, teams end up with fragmented rules: Cursor follows strict glob-based TypeScript conventions, Windsurf ignores them because they were never appended to .windsurfrules, and Claude Code hallucinates deprecated APIs because its local SKILL.md definitions were last updated two months ago. Below is a comprehensive architectural breakdown of how Windsurf Cascade rules, Cursor MDC rules, and Claude Code skills compare across token costs, ingestion mechanisms, file structures, and cross-agent portability.

How Do Windsurf, Cursor, and Claude Code Ingest Instructions?

Windsurf Cascade, Cursor, and Claude Code each rely on distinct filesystem paths and activation triggers to ingest agent instructions into their active context windows. Windsurf ingests a single workspace-level markdown file on every conversation turn, Cursor dynamically loads rule files matching file globs during active editing, and Claude Code indexes YAML frontmatter to load detailed procedures only when a task requires them. Knowing these mechanics prevents developers from accidentally blowing through token budgets or having critical rules ignored.

The difference in how these runtimes treat custom instructions stems from their underlying interaction models:

  • Windsurf Cascade (Monolithic Prompt Injection): Windsurf discovers project rules by looking for a single .windsurfrules file at the workspace root directory. During Cascade chat and command sessions, Windsurf reads the entire raw markdown document and prepends it to the system instruction block. Windsurf also supports user-level instructions via Cascade Memories (stored in ~/.codeium/windsurf/memories/global_rules.md). Because Windsurf does not parse structured frontmatter keys, all rules exist in flat markdown and apply globally to every query in that workspace.
  • Cursor (Glob-Targeted MDC Rules): In Cursor v0.42 (released in October 2024), Cursor transitioned from legacy monolithic .cursorrules files to modular .cursor/rules/*.mdc documents. According to official Cursor documentation, "Rules allow you to provide custom instructions that Cursor will always take into account when generating code." Cursor rules feature YAML frontmatter specifying description, globs (e.g. globs: ["src/app/api/**/*.ts"]), and an alwaysApply boolean flag. When an engineer opens or edits a file, Cursor matches the active file path against configured globs, selectively injecting only relevant rule bodies into the composer context.
  • Claude Code (Episodic Frontmatter Skills): Claude Code employs a modular, two-stage discovery engine built on SKILL.md packages located in ~/.claude/skills/<skill-name>/SKILL.md (personal/global) or .claude/skills/<skill-name>/SKILL.md (project-level). During startup, Claude Code parses only the YAML 1.2 frontmatter block containing name and description keys, consuming a negligible 30 to 50 tokens per skill. The full procedural markdown body, reference scripts, and schema files remain unloaded on disk until a user prompt or agent execution step semantically matches the skill description.

Architectural Comparison: Windsurf Rules vs Cursor Rules vs Claude Skills

Evaluating the architectural differences between Windsurf, Cursor, and Claude Code highlights why a one-size-fits-all instruction file cannot operate across multiple coding agents without translation. Each format makes distinct trade-offs between simplicity, context efficiency, and procedural depth.

DimensionWindsurf CascadeCursor RulesClaude Code SkillsPrompttly Vault
Primary Configuration File.windsurfrules (root) or global memories.cursor/rules/*.mdc (or legacy .cursorrules)~/.claude/skills/<name>/SKILL.md or .claude/skills/Single unified library synced to all three native paths
Ingestion & Activation TriggerInjected into prompt prefix on every turnFile glob matching (e.g. globs: ["**/*.ts"]) or @-mentionSemantic intent matching against YAML description or /skill-nameDynamic compilation to runtime-native trigger schemas
Idle Context Tax (Tokens)1,200 – 3,500 tokens (entire file every turn)250 – 800 tokens per matched rule file30 – 50 tokens (frontmatter metadata index only)Zero idle tokens; exports modular, scoped rules
Metadata Schema FormatRaw Markdown headings (no frontmatter schema)YAML frontmatter: description, globs, alwaysApplyYAML 1.2 frontmatter: name, descriptionNormalized schema compiling to MDC, YAML 1.2, and Markdown
Multi-File & Procedural DepthMonolithic single-document formatMultiple modular .mdc files with glob filteringModular folders supporting sub-scripts, schemas, and templatesFull multi-file packages with automated runtime export
Global vs Project ScopingProject root + global memories fileProject .cursor/rules/ + global user settings GUIProject .claude/skills/ + global ~/.claude/skills/Global cloud vault with repository and machine tags
Autonomous Tool & Shell ExecutionIntegrated Cascade terminal and workspace toolsComposer terminal execution and editor commandsFull subagent dispatch, bash commands, and MCP toolsMCP server endpoint with real-time library write access
Multi-Machine & Cross-Tool SyncManual Git commits or cloud IDE syncManual Git commits or Cursor Settings syncManual dotfile symlinks or local script transfersAutomated two-way sync on Mac with sub-200ms hotkey palette

As shown in the matrix above, Windsurf optimizes for rapid single-file setup, Cursor optimizes for contextual file-pattern activation, and Claude Code optimizes for deep, multi-step agentic capabilities with minimal idle context consumption.

Token Context Economics: Measuring the Overhead of Each Format

Instruction overhead directly impacts both context window capacity and LLM reasoning accuracy. When an AI agent is forced to ingest thousands of tokens of irrelevant guidelines on every turn, its attention mechanisms degrade, increasing the likelihood of hallucinated imports and forgotten architectural constraints.

Consider the quantitative context tax of maintaining 20 comprehensive engineering guidelines (covering API routes, database transactions, styling conventions, testing rubrics, and security checks):

  • Windsurf Monolithic Overhead (1,200 – 3,500 Tokens Every Turn): Because Windsurf reads all instructions from a single .windsurfrules file, all 20 rules must reside in one document. If each rule averages 120 words (~160 tokens), the baseline prompt prefix consumes over 3,200 tokens before the user types a single character. In a 20-turn Cascade conversation, this monolithic injection consumes over 64,000 cumulative tokens of input bandwidth, raising API costs and pushing older conversation turns out of the active context window.
  • Cursor Modular Glob Overhead (250 – 800 Tokens per Active File): In Cursor, 18 of the 20 rules remain inactive when editing a frontend component like Button.tsx. Cursor loads only the general styling rule and component rule matching src/components/**/*.tsx. This reduces active context overhead to roughly 400 tokens. However, if a developer configures multiple rules with alwaysApply: true, Cursor's context consumption quickly mirrors the monolithic tax of Windsurf.
  • Claude Code Episodic Indexing (30 – 50 Tokens During Idle Discovery): Claude Code loads only the YAML frontmatter descriptions into its initial agent system prompt. For 20 skills, this represents a total discovery index of under 800 tokens—less than 0.4% of Claude 3.5 Sonnet's 200,000-token context window. Only when a command specifically requires database migrations does Claude Code ingest the corresponding 2,000-token procedure.

This economic reality proves that as an engineering team's prompt and rule library expands beyond 10 operational guidelines, episodic or glob-targeted architectures become mandatory to preserve model intelligence and avoid context saturation.

The Sprawl Moment: The Migration Rule That Diverged Across Three Tools

A senior backend engineer configures a critical zero-downtime database migration rule for their team's PostgreSQL database. To prevent table locks in production, the rule mandates adding a strict statement timeout (SET lock_timeout = '2s';) and creating indexes concurrently outside transactional blocks. The engineer writes the guideline into .cursor/rules/db-migrations.mdc on their primary workstation and pushes the branch.

Three days later, while debugging a critical production incident on an on-call laptop, the engineer opens Windsurf Cascade to generate an emergency schema patch. Windsurf has no access to the Cursor rule because it only inspects .windsurfrules, which still contains an outdated template from six months ago. Cascade generates a synchronous index migration that immediately locks the 12-million-row customer table upon deployment. Meanwhile, another teammate runs Claude Code CLI in the terminal to backfill records, but Claude Code's local ~/.claude/skills/db/SKILL.md was never updated with the new connection pooling flags, failing the batch job midway through execution. The root cause was not a lack of engineering standards, but the failure of those standards to follow the team across tools and machines.

How Do You Translate Rules Between Windsurf, Cursor, and Claude Code?

Translating instructions between Windsurf, Cursor, and Claude Code requires separating core operational markdown from runtime-specific metadata schemas. To convert a Cursor MDC rule into Windsurf, strip the YAML frontmatter and append the instructions under an explicit heading in .windsurfrules; to convert into Claude Code, wrap the instructions in a dedicated folder with name and description keys in a SKILL.md file. Automating this translation eliminates the human error of manually maintaining three parallel configurations.

Below is a practical worked example demonstrating how the exact same architectural guideline—enforcing Next.js Server Actions with Zod schema validation—is structured across all three formats.

1. Windsurf Cascade Format (.windsurfrules)

Windsurf requires plain markdown headings. Because there is no frontmatter for glob filtering, the instructions must explicitly state which paths they apply to:

# .windsurfrules (Workspace Root)
# Project Guidelines & Server Action Standards

## Next.js Server Actions (src/app/actions/**/*.ts)
When authoring or modifying Server Actions in Next.js:
1. Always add the 'use server' directive at the top of the action file.
2. Validate every input payload using an explicit Zod schema before database queries.
3. Wrap execution in try/catch blocks and return standardized ActionResponse<T> objects:
   { success: boolean; data?: T; error?: string }
4. Never throw unhandled exceptions to the client component.
5. Log database mutation failures with structured requestId metadata.

2. Cursor MDC Format (.cursor/rules/server-actions.mdc)

Cursor uses YAML frontmatter with glob patterns to ensure the rule loads only when files within the action directory are actively edited:

# .cursor/rules/server-actions.mdc
---
description: Standards for Next.js Server Actions and Zod mutation validation
globs: ["src/app/actions/**/*.ts", "src/features/**/actions.ts"]
alwaysApply: false
---

# Next.js Server Action Conventions

When authoring or modifying Server Actions:
- Include 'use server' at the file top.
- Validate inputs using Zod (e.g. `ActionInputSchema.safeParse(payload)`).
- Return typed result objects: `{ success: true, data } | { success: false, error: string }`.
- Never expose raw database exceptions or internal stack traces to callers.

3. Claude Code Skill Format (~/.claude/skills/server-actions/SKILL.md)

Claude Code uses standard YAML 1.2 frontmatter with a semantic description that Claude Code evaluates dynamically when user prompts mention server mutations:

# ~/.claude/skills/server-actions/SKILL.md
---
name: nextjs-server-actions
description: Enforces Zod validation, typed response envelopes, and error handling for Next.js server actions. Invoke when writing server-side mutations or API action handlers.
---

# Next.js Server Action Operating Procedure

## Core Principles
1. Directive: Ensure 'use server' is placed at the file header.
2. Schema Validation: Parse all incoming payloads with Zod before executing business logic.
3. Response Envelope: Always return a standardized `ActionResponse<T>` object.
4. Error Sanitization: Log raw database errors server-side; return sanitized messages to clients.

Three Common Pitfalls When Converting Rules Across Formats

  • Preserving YAML Frontmatter in Windsurf: If you copy an MDC or SKILL.md file directly into .windsurfrules without stripping the frontmatter fences (---), Windsurf treats the frontmatter as plain text. This wastes tokens and can cause the model to literally echo metadata keys in its code comments.
  • Overusing alwaysApply in Cursor: Setting alwaysApply: true on more than 5 MDC rules recreates the exact monolithic context tax of Windsurf. Reserve alwaysApply: true solely for universal TypeScript or formatting invariants under 200 tokens.
  • Vague Claude Skill Descriptions: Claude Code matches skills semantically. If your description is merely "server code", Claude Code will either load the skill too frequently or fail to invoke it during multi-step refactoring tasks. Provide explicit trigger criteria in the frontmatter description.

When Should You Use Each Native Format vs a Unified Skill Manager?

Choosing between maintaining native rule files directly or adopting a dedicated skill manager depends on team size, editor heterogeneity, and the total volume of operational rules in your workflow.

Workflow ScenarioRecommended ArchitectureWhy This Fits Best
Solo engineer, 1 laptop, Cursor only, <5 rulesNative .cursor/rulesNo cross-tool synchronization is needed. Git commits handle versioning cleanly without additional software.
Solo engineer, 1 laptop, Windsurf only, <3 rulesNative .windsurfrulesA single markdown file at the repository root is simple to maintain and requires no format conversion.
Multi-agent developer (Cursor IDE + Claude Code CLI + Windsurf)Prompttly Skill ManagerEliminates manual synchronization across MDC globs, monolithic markdown, and SKILL.md directories.
Multi-machine setup (Work MacBook + Personal desktop + Remote dev box)Prompttly Skill ManagerTwo-way sync ensures prompt improvements made on one machine immediately reflect across all devices.
Engineering team sharing coding standards across 10+ polyreposPrompttly Skill ManagerCentralizes team rubrics into a versioned vault, pushing updates to developer filesystems automatically.

When NOT to Use Prompttly

A skill manager is not necessary for every developer. If you write code exclusively inside Cursor on a single workstation and your project guidelines consist of three static bullet points in a .cursorrules file, adding a synchronization layer introduces unnecessary tooling. Similarly, if your entire team standardizes strictly on Claude Code in the terminal and shares skills exclusively via Git submodules in a monorepo, native Git workflows may be completely sufficient.

Prompttly becomes valuable when you hit the friction of skill sprawl: using two or more coding assistants, switching between laptops, managing more than 10 specialized rules, or losing track of which repository contains the latest version of your prompt library.

How Prompttly Synchronizes Instructions Across Windsurf, Cursor, and Claude Code

Prompttly is a skill manager for AI agents — one library for your skills and prompts that syncs into Claude Code, Codex, ChatGPT, and Claude and is one hotkey away on your Mac, so your setup follows you across every machine, repo, and tool.

Rather than maintaining separate, drifting files across your filesystem, Prompttly serves as the single source of truth for your AI instructions:

  • Automated Two-Way Filesystem Sync: Prompttly maps your centralized library directly into ~/.claude/skills/ as real SKILL.md packages, exports file-targeted rules into .cursor/rules/*.mdc, and compiles your workspace playbooks into .windsurfrules. Any update made locally syncs back to the cloud.
  • Sub-200ms Mac Hotkey Palette: Whenever you need a prompt or rule outside of an integrated agent—such as pasting instructions into ChatGPT, Claude.ai, GitHub PR reviews, or a terminal session—Prompttly's global hotkey summons your entire library in under 200ms with fuzzy keyword search.
  • Model Context Protocol (MCP) Server: Prompttly includes a built-in Model Context Protocol server, allowing Cursor, Windsurf, and Claude Desktop to query, search, and update your skill library dynamically during autonomous reasoning tasks.
  • Multi-Device Cloud Parity: When you switch from your office Mac to your travel laptop, your entire prompt library, frontmatter metadata, and editor rules are already in place without manual Git stash or dotfile pulls.

To generate compliant skill packages with verified YAML frontmatter, use our free Claude Skill Creator. If you need conversational instructions optimized for web assistants, try our free Custom Instructions Generator or refine prompt clarity with the Prompt Optimizer.

Frequently Asked Questions About Windsurf, Cursor, and Claude Code Instruction Formats

Can Windsurf, Cursor, and Claude Code read each other's rule files natively?

No, none of the three tools natively parses the instruction files of the others. Windsurf reads .windsurfrules at the project root or global user memories (~/.codeium/windsurf/memories/global_rules.md), Cursor parses .cursor/rules/*.mdc files and legacy .cursorrules, and Claude Code indexes directory-based SKILL.md packages located in ~/.claude/skills or .claude/skills. Sharing guidelines across all three requires manual conversion scripts or a centralized skill manager like Prompttly.

What is the main difference between Cursor MDC rules and Claude Code skills?

Cursor .mdc rules are triggered primarily by file globs and always-apply flags, meaning they automatically attach to the editor context whenever matching files (such as **/*.tsx) are modified. Claude Code skills are episodic and semantic: Claude Code evaluates only the 30-to-50-token description frontmatter during startup, loading the full multi-step procedure into active context only when a user prompt or agent plan explicitly invokes the skill.

Why does a monolithic .windsurfrules file consume more context tokens than Claude skills?

Windsurf Cascade injects the entire contents of .windsurfrules into the system prompt prefix on every single turn of conversation, typically imposing an ongoing 1,200 to 3,500 token overhead regardless of the task. In contrast, Claude Code leaves inactive skills unloaded on disk, incurring zero body token cost until the specific skill is semantically triggered by the agent.

Can you commit .cursor/rules, .windsurfrules, and .claude/skills in the same Git repository?

Yes, committing all three directories to the same repository is technically safe because their directory paths do not overlap. However, maintaining three separate configuration files by hand creates severe instruction drift whenever project standards, testing commands, or architectural patterns change, often causing agents in different editors to generate contradictory code.

How does Prompttly synchronize instructions between Windsurf, Cursor, and Claude Code?

Prompttly maintains a single cloud library of your prompts, rules, and skills, providing bidirectional synchronization to your local filesystem. It populates ~/.claude/skills with native SKILL.md packages, exports targeted rules into .cursor/rules/*.mdc, generates .windsurfrules for Windsurf Cascade, and provides sub-200ms global hotkey palette access from any Mac application.

Next Steps: Unifying Your AI Agent Workflow

Explore additional architectural guides on multi-agent synchronization, rule conflict resolution, and prompt engineering on our resources hub:

Ready to eliminate prompt duplication and rule drift across your development environment? Download the Prompttly Mac App or review our team plans to start synchronizing your AI instructions today.

One Skill Library for Windsurf, Cursor, and Claude Code

Stop maintaining three separate rule formats across different repositories and laptops. Prompttly centralizes your prompt and rule library, synchronizing native formats directly to your filesystem.