Skip to main content

Configuration Primitives

Every AI coding tool has converged on the same five configuration primitives — they just named them differently. Understanding the mapping lets you move configuration between tools without starting from scratch. harness-kit targets these primitives directly, so configuration you write once works across harnesses.

The Five Primitives

PrimitiveClaude CodeCopilot (VS Code)Cursor
InstructionsCLAUDE.md, .claude/rules/*.md.github/copilot-instructions.md, .github/instructions/*.instructions.md.cursor/rules/*.mdc
Prompt TemplatesSkills (SKILL.md in .claude/skills/).github/prompts/*.prompt.mdRule files with glob scope
Agent Definitions.claude/agents/*.md.github/agents/*.agent.mdNot yet supported
Skills.claude/skills/.github/skills/Not yet supported
Tool Servers.mcp.json.vscode/mcp.json.cursor/mcp.json

Instruction Files

Instruction files inject persistent context into the AI's working memory for a session. Each tool has its own format.

File path patterns:

  • Claude Code: CLAUDE.md (repo root), .claude/rules/*.md
  • Copilot: .github/copilot-instructions.md, .github/instructions/*.instructions.md
  • Cursor: .cursor/rules/*.mdc

Scoping model:

CLAUDE.md is always repo-wide. Claude Code uses include directives to pull in additional rule files. Copilot and Cursor both support path-scoped instructions via frontmatter, letting you attach different context to different parts of the codebase.

How globs work:

  • Copilot (.github/instructions/): applyTo frontmatter field — a glob pattern that activates the instruction file when the referenced file is in context
  • Cursor (.mdc files): globs: frontmatter field — same idea, different key
  • Claude Code: no per-file scoping at the instruction level; use include rules in CLAUDE.md to compose multiple files

Path-scoped instruction example:

Copilot (.github/instructions/api-routes.instructions.md):

---
applyTo: "src/routes/**"
---

All route handlers must validate request bodies with zod. Return 422 on validation failure.

Cursor (.cursor/rules/api-routes.mdc):

---
globs: src/routes/**
---

All route handlers must validate request bodies with zod. Return 422 on validation failure.

Claude Code does not have a direct equivalent — repo-wide instructions in CLAUDE.md cover this, or you can structure the file with headings that address specific subsystems.

Three-Tier Scoping

All three tools use the same three-tier model: personal preferences, project config shared with the team, and organization-level policy that overrides both.

TierClaude CodeCopilotCursor
Personal~/.claude/CLAUDE.mdVS Code user settings~/.cursor/rules/
ProjectCLAUDE.md / .claude/.github/.cursor/
OrganizationEnterprise policyGitHub Copilot policiesCursor Business

The project tier is what harness-kit targets. Personal and organization config live outside the repo and outside harness-kit's scope.

Agent Files

Agent definition files describe specialized sub-agents that can be invoked within a session. The format is similar across tools.

Claude Code (.claude/agents/*.md): YAML frontmatter with name, description, and tools array. The body is the agent's system prompt.

---
name: code-reviewer
description: Reviews PRs for style, correctness, and test coverage
tools:
- read_file
- list_directory
---

Review the diff and produce structured feedback...

Copilot (.github/agents/*.agent.md): Same frontmatter structure, with tools as a YAML array.

---
name: code-reviewer
description: Reviews PRs for style, correctness, and test coverage
tools:
- read_file
- list_directory
---

Review the diff and produce structured feedback...

Cursor: Not yet supported. Watch the Cursor roadmap.

Convergence Note

The walls are thinner than they appear

VS Code already reads CLAUDE.md natively via chat.useClaudeMdFile. Configuration written for Claude Code works in VS Code Copilot without modification for the parts that matter most — instruction context.

harness-kit leans into this: rather than abstracting over differences, it generates idiomatic files for each harness from a single source, covering the gaps where native compatibility ends.