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.

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.
- namekebab-case slug
- descriptionsoft 1,536 char cap
- allowed-toolshonored, pre-approves tool calls
- bodymarkdown, dynamic injection supported
- sidecar yamlnot read
- 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.

Install in five steps
- 1git clone
git clone github.com/earlyaidopters/polyskill - 2build
npm install && npm run build - 3link
npm link (puts polyskill on PATH) - 4detect
polyskill detect (finds Claude + Codex) - 5install
cd skill && polyskill 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 initbootstrap a new portable workspace
polyskill importconvert an existing Claude or Codex skill into the portable format
polyskill buildemit runtime-optimized SKILL.md for every target
polyskill installcopy into ~/.claude/skills and ~/.agents/skills
polyskill detectshow which runtimes are installed on this machine
polyskill validatelint 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.

Single definition.md with rich YAML frontmatter and a markdown body. You own this file.
Each runtime adapter is one TypeScript module. Adding Gemini CLI, Cursor, or Copilot is a one-file change.
Invoke via /polyskill in Claude Code or $polyskill in Codex chat. Polyskill maps intent to the right operation.
- It will not write the skill content for you.
- It will not publish skills to GitHub, npm, or any marketplace. Distribution stays separate.
- It will not modify
~/.claude/settings.jsonor~/.codex/config.toml. Only the skill directory contents change.
Invocation
/polyskill convert my y-compare skill so it works in both$polyskill convert my agent-inbox skill so it works in both