Cross-runtime adapter for Agent Skills

Polyskill

Write a skill once. Get an optimized version for both Claude Code and OpenAI Codex. Polyskill is the universal travel adapter for Agent Skills.

Polyskill connects Claude Code and OpenAI Codex from one source definition

The problem in one paragraph

Claude Code and OpenAI Codex both implement the Agent Skills open standard, but each adds runtime-specific extensions the other ignores or mishandles. A skill that fires cleanly in Claude often misbehaves in Codex, and vice versa. The shape of the SKILL.md, the trigger density, the sidecar, the tool allowlist, none of it is portable by default.

Claude Code
  • namekebab-case slug
  • descriptionsoft 1,536 char cap
  • allowed-toolshonored, pre-approves tool calls
  • bodymarkdown, dynamic injection supported
  • sidecar yamlnot read
OpenAI Codex
  • namesame slug
  • descriptionshares an 8K catalog cap with every other skill
  • allowed-toolsnot honored, surfaces as guidance
  • bodymarkdown, no dynamic injection
  • sidecar yamlagents/openai.yaml drives UI + MCP

How the adapter works

One portable definition. Pluggable runtime adapters. The CLI parses any runtime's skill files into the portable format and emits the right shape for any target. Round-trips stay lossless for the spec core, lossy with warnings for runtime extensions.

Source skill parses to definition.md and polyskill CLI emits per-runtime SKILL.md with sidecar where needed

Install in five steps

  1. 1
    git clone
    git clone github.com/earlyaidopters/polyskill
  2. 2
    build
    npm install && npm run build
  3. 3
    link
    npm link (puts polyskill on PATH)
  4. 4
    detect
    polyskill detect (finds Claude + Codex)
  5. 5
    install
    cd skill && polyskill install
Five-step install flow: clone, build, link, detect, install

After polyskill install lands files in ~/.claude/skills/polyskill/ and ~/.agents/skills/polyskill/, Claude Code live-reloads the new skill, and Codex picks it up after a Plugins refresh.

The five operations

polyskill init

bootstrap a new portable workspace

polyskill import

convert an existing Claude or Codex skill into the portable format

polyskill build

emit runtime-optimized SKILL.md for every target

polyskill install

copy into ~/.claude/skills and ~/.agents/skills

polyskill detect

show which runtimes are installed on this machine

polyskill validate

lint the definition against each target's rules

What each runtime gets

Polyskill never just copies the file twice. It reshapes the definition for each runtime's real constraints.

Side-by-side SKILL.md anatomy: Claude has dynamic injection, Codex has the sidecar yaml
Portable definition

Single definition.md with rich YAML frontmatter and a markdown body. You own this file.

Adapters as cartridges

Each runtime adapter is one TypeScript module. Adding Gemini CLI, Cursor, or Copilot is a one-file change.

Natural language CLI

Invoke via /polyskill in Claude Code or $polyskill in Codex chat. Polyskill maps intent to the right operation.

What polyskill will not do

Invocation

Claude Code
/polyskill convert my y-compare skill so it works in both
Codex chat
$polyskill convert my agent-inbox skill so it works in both