Every tool checked so far, no exceptions.

Checked against each tool's own current documentation, not inherited from a sibling tool's behavior. Some read the skills directly with zero setup. The rest still get full access through a plain MCP connection, regardless of whether they read skills at all.

The matrix

Zero setup
scans .claude/skills/ directly

Claude Code (native plugin), VS Code / GitHub Copilot, Copilot CLI, OpenCode, and Cursor. Cursor is a real, recent correction: an earlier check found Cursor did not scan .claude/skills/; its current docs now state "for compatibility, Cursor also loads skills from Claude and Codex directories."

Needs placement
.agents/skills/ or alias

Codex (scans .agents/skills/, confirmed it does not read .claude/skills/) and Antigravity (~/.gemini/config/skills/ global, or .agents/skills/ project-scoped).

Genuinely unresolved
placement + enable state

Gemini CLI scans .gemini/skills/ (or the .agents/skills/ alias), but whether a placed skill is enabled by default could not be confirmed across three separate documentation checks, reported here as an open question, not guessed either way. If a skill doesn't trigger after placement, run /skills enable as the concrete fallback.

MCP client
all 8, zero placement

Every one of the 8 tools also works as a plain MCP client with zero placement step, full stop, including the three above whose Skills-format support needs a placement step. This is the actual mechanism behind the "no exceptions" claim, not a slogan.

Per-tool detail

Claude Code

The native path, ships as a proper plugin. /plugin marketplace add N0v4ont0p/Refract then /plugin install refract-suite@refract installs all 5 skills, the safety hooks (blocking accidental writes into reference-only directories), and the shared foundation data together.

VS Code (GitHub Copilot)

Zero setup. VS Code scans .claude/skills/ as one of its own default project-skill locations, alongside .github/skills/ and .agents/skills/. Copy refract-suite/skills/ into .claude/skills/, open the repo with the Copilot extension enabled. That's the whole setup.

Copilot CLI

Not the same tool as the VS Code extension, its own standalone terminal tool with its own skill discovery. Zero setup here too: scans .github/skills/, .claude/skills/, or .agents/skills/. Add a skill mid-session and run /skills reload to pick it up without restarting.

Cursor

Zero setup, verified directly against Cursor's current docs. Copy refract-suite/skills/ into .claude/skills/, open the repo in Cursor. If you're on an older Cursor version and nothing triggers, updating Cursor is the first thing to try, since this compatibility path is a documented but relatively recent addition.

OpenCode

Zero setup. OpenCode scans .claude/skills/<name>/SKILL.md directly, walking up from the current working directory to the git worktree root. Refract's safety hooks (a Claude Code-specific mechanism, separate from the Skills format itself) need a separate community plugin, opencode-claude-hooks, to carry over. Skills themselves work without it.

Codex

Needs placement. Codex scans .agents/skills/, confirmed it does not scan .claude/skills/. Copy or symlink refract-suite/skills/ into .agents/skills/. Detection is automatic; Codex's own docs note a restart if an update doesn't appear.

Antigravity

Needs placement. Scans two tiers: global (~/.gemini/config/skills/) and project (.agents/skills/, the more portable choice for a team repo). Uses semantic triggering against skill descriptions rather than a name you invoke directly. No explicit registration step beyond placement is documented.

Gemini CLI

Needs placement, and the enable state is genuinely unresolved. Scans .gemini/skills/ (or the .agents/skills/ alias). If a skill doesn't trigger after placement, run /skills enable explicitly and try again.

MCP, the path with no placement step at all

mcp-server/ exposes 4 tools as thin wrappers over the exact same deterministic scripts the skills themselves call, real output verbatim, including abstentions, citations, and staleness flags. Fidelity-tested: mcp-server/test_server.py compares each tool's MCP-path output byte-for-byte against the same query run directly against the underlying script.

rule_check(ids=["R207"]) · real output, truncated
{ "freshness": { "season": "decode-2025-26", "stored_incorporates_through": "Team Update 32", "status": "UNVERIFIABLE", "flag": true, "reason": "could not read a live Team Update number on page; treat corpus as possibly stale" }, "lookup": { "rules": [{ "rule_id": "R207", "found": true, "short_title": "ROBOTS don't use air" }]}, "verify": { "missing": [], "all_valid": true } }

Note freshness.flag: true, a real network limitation surfaced honestly rather than silently dropped.

Per-tool config file

Tool Config file
VS Code.vscode/mcp.json
Copilot CLI~/.copilot/mcp-config.json
Cursor~/.cursor/mcp.json
Gemini CLIsettings.json → mcpServers
OpenCodeopencode.json → mcp
Codex~/.codex/config.toml
Antigravitybuilt-in MCP management