Skip to main content

Understanding Conversions

Different AI coding tools have different capabilities. a16n handles this as transparently as possible, converting what it can and warning you about limitations.

The Concepts

a16n understands the following kinds of agent customizations:

  • Global Prompts - prompts that are always injected into the agent's context each time the agent is invoked, e.g.
    • CLAUDE.md
    • Cursor Rules with alwaysApply: true
  • File-specific rules - prompts that are injected into the agent's context when working with specific files, e.g.
    • Cursor Rules with globs: [...]
  • Skills - prompts that are injected into the agent's context when the agent decides they're needed, e.g.
    • Cursor Rules with description: ...
    • Claude Code skills
    • AgentSkills.io skills
  • Manual prompts - prompts that are injected into the agent's context when the user invokes them, e.g.
    • Cursor Commands
    • Cursor Rules with no globs or description, when @mention'd
    • AgentSkills with disable-model-invocation: true
  • Ignore patterns - patterns that are ignored by the agent, e.g.
    • .cursorignore
    • Claude Code permissions.deny Read rules

See the Models page for more details.

What Translates Cleanly

Some concepts map cleanly between tools, including but not necessarily limited to:

ConceptCursorClaude Code
Global PromptsalwaysApply: true rules.claude/rules/*.md (no paths:)
File Rulesglobs: [...] rules.claude/rules/*.md with paths: frontmatter
Skillsdescription: ... rulesSkills
AgentSkills.io Skills.cursor/skills/*/SKILL.md.claude/skills/*/SKILL.md
Manual PromptsCommands in .cursor/commands/*.mdSkills with disable-model-invocation: true
Ignore patterns.cursorignorepermissions.deny Read rules
Lossless FileRule Conversion

As of January 2026, Claude Code natively supports glob-based file rules via the paths: frontmatter. FileRules now convert losslessly between Cursor and Claude Code.

What Gets Approximated

Some features don't have perfect equivalents. a16n converts them as closely as possible and warns you about such situations.

Some lossy conversions include, but are not necessarily limited to:

FeatureFromToBehavior
Ignore patternsCursorClaude≈ Converted to Read permission denials

What Gets Skipped

Not all concepts exist across all toolchains. a16n warns you and skips impossible conversions.

Some impossible conversions include, but are not necessarily limited to:

FeatureFromToReason
Complex CommandsCursorClaudeCommands with $ARGUMENTS, !, @, or allowed-tools have no equivalent
Skills with hooksClaudeCursorCursor skills do not support hooks

Non-Invertible

a16n translates from one toolchain to another, and like all translations, running it back-and-forth, or through several iterations, does not always result in the original input.

For example, Cursor Commands convert from .cursor/commands/*.md into Claude as AgentSkills with disable-model-invocation: true. Converting from Claude back to Cursor will just move the AgentSkill file, as Cursor does understand AgentSkills. You'll never get the original .cursor/commands/*.md file back.

Since a16n doesn't know what conversions you may attempt after the first, it cannot warn you about such non-invertible (or multi-step) lossiness like this.

Example Warning Output

When you run a conversion, a16n shows you exactly what happened:

≈ AgentIgnore approximated as permissions.deny (behavior may differ slightly)
Sources: .cursorignore
Hint: Behavior may differ slightly between tools

✓ Wrote .claude/rules/general.md
✓ Wrote .claude/rules/style.md
✓ Wrote .claude/rules/testing.md
✓ Wrote .claude/settings.json (4 deny rules)
Summary: 4 discovered, 4 written, 1 warning

Warning Codes

a16n emits warnings when conversions can't be perfect. These appear in CLI output (with icons) and in JSON output under the warnings array.

CodeIconMeaning
mergedMultiple sources were combined into one output
approximatedFeature was converted to nearest equivalent
skippedFeature could not be converted
overwrittenExisting file was replaced
file-renamedFile was renamed to avoid collision

Note: Warnings don't affect the exit code. The CLI exits 0 on success (even with warnings) and 1 on error.

JSON Output Example

With --json, warnings appear in the output:

{
"warnings": [
{
"code": "approximated",
"message": "AgentIgnore approximated as permissions.deny (behavior may differ slightly)"
}
]
}

Learn More