Get started

Codex skills: where they live, how $ invocation works, and how to write one

Most Codex skills posts are top-ten lists that never explain the machinery underneath, which is a shame, because the machinery is the useful part: once you know how Codex finds and triggers a skill, writing your own takes ten minutes.

Updated August 4, 2026

The anatomy: one required file, three optional folders

A skill is a directory. The only required file is SKILL.md: YAML frontmatter with a name and a description, then Markdown instructions. Around it, three optional folders carry weight the instructions can lean on: scripts/ for executable code the skill tells Codex to run, references/ for documentation too long to inline, and assets/ for templates. An optional agents/openai.yaml adds UI metadata and dependencies for distribution.

---
name: apply-design-system
description: Apply the project design system when building or editing UI. Use for any component, page, or styling task; reads DESIGN.md and forbids colors, fonts, or spacing outside its tokens.
---

# Apply the design system

1. Read DESIGN.md at the repo root before writing any UI code.
2. Use only its semantic tokens for color, its type scale for text,
   and its spacing scale for layout.
3. If a needed value has no token, stop and say so instead of
   inventing one.
A complete, working SKILL.md.

Discovery: the five places Codex looks

  • .agents/skills/ in the repository: project skills, shared with everyone who clones it.
  • ~/.agents/skills/: your personal skills, present in every project.
  • /etc/codex/skills: admin-managed skills on shared machines.
  • System bundles that ship with the product.
  • Installed skills: $skill-installer pulls curated ones; plugins distribute beyond that.

The repo location is the one that changes team behavior. A skill in .agents/skills/ rides along with the codebase: every collaborator, every CI run, every fresh clone gets the same procedures without setup. Project contracts, how UI gets styled, how releases go out, belong there rather than in any one person's home directory.

Triggering: $ when you know, descriptions when you don't

Explicit invocation is the easy case: type $ in the Codex CLI and select the skill, and it loads regardless of how its description reads. The interesting case is implicit: Codex keeps each skill's name and description available, and pulls in the full body when it judges your request matches. That judgment can only be as good as the description, which makes the description the real interface. "Use for any component, page, or styling task" gives the matcher verbs and situations to bind to; "design helper" gives it nothing.

Test the implicit path, not the $ path

Invoking with $ proves the body works. It says nothing about whether the skill will ever fire on its own. Test by phrasing a natural request ("add a settings page") and checking whether the skill loads; if it does not, edit the description, not the instructions.

Skills vs AGENTS.md

Codex reads AGENTS.md on every run: it is the project's standing orders, build commands, conventions, constraints, and every line of it is paid for on every request. Skills are the opposite contract: near-zero cost while idle, full procedures when relevant. The division that works is short rules in AGENTS.md, long procedures in skills, and durable artifacts (token files, DESIGN.md, schemas) in the repo where both can point at them. The full file taxonomy, including where CLAUDE.md and DESIGN.md sit, is in CLAUDE.md vs AGENTS.md vs SKILL.md vs DESIGN.md.

The design skill, and why it should be short

The example skill above is nine lines of instruction, and that is its strength. Everything it enforces lives in one artifact: a DESIGN.md at the repo root carrying the actual system, semantic color tokens in light and dark, the type scale, spacing, motifs, and do-not rules. Codex is a strong implementer with no visual memory between sessions; the file is the memory. Skills full of adjectives ("clean, modern, consistent") do nothing, because there is nothing to check work against. A skill pointing at a file with exact values turns every styling decision into a lookup.

Ambient Sage

Live render

Rendered from the kit's actual tokens, fonts, and treatments

Ambient SageOverview
Search anything⌘K
AS

Analytics

Revenue overview

See revenue and retention trends alongside account health.

Jan 1 to Jan 30, 2026
Overview
Analytics
Reports
Notifications

Active users

15.1k

2,491 new

+5%

MRR

$49.1k

Net of churn

+3%

Retention

89%

28-day window

+2%

NPS

69

1,204 replies

+3

Revenue

Last 12 months

$49.1k +18.2%

12m30d7d
JanFebMarAprMayJunJulAugSepOctNovDec

Acquisition

Goal completion

On track
78%of goal
Organic48%
Direct31%
Referral21%

Recent transactions

Latest activity across your workspace

View all
CustomerStatusDateAmount
AR

Alex Rivera

Founder & CEO

Paid2 min ago$1,999.00
MO

Mira Okonkwo

Head of Product

Pending1 hour ago$39.00
JF

Jonas Feld

Design Lead

Processing3 hours ago$299.00

Typography

Plus Jakarta Sans

Color system

28 semantic roles, light + dark

Agent outputs

DESIGN.md, CSS, Tailwind, shadcn

A design kit is that file, pre-built: a complete token system that exports as DESIGN.md, CSS variables, or Tailwind config.
npx --yes identityforge@latest apply ambient-sage
The CLI writes a kit's DESIGN.md and tokens into the repo; no MCP required, so it works in any Codex setup.

The artifact your skill points at

Pick a kit, run one command, and your repo has the DESIGN.md, tokens, and rules the skill enforces. Codex stops re-deciding your brand every session.

One format, three tools

The SKILL.md convention grew into an open agent-skills standard: Claude Code discovers the same shape under .claude/skills/, and Cursor's Agent Skills load the same way next to its Rules. Discovery paths and invocation syntax differ per tool; the anatomy and the description-driven trigger do not. Write skills that reference artifacts in your repository rather than one tool's internals and they transfer almost verbatim; the Claude Code side of the same story is in Claude Code skills, explained.

How do I create a Codex skill?

Make a folder under .agents/skills/ (project) or ~/.agents/skills/ (personal) containing a SKILL.md with name and description frontmatter followed by Markdown instructions. Add scripts/, references/, or assets/ if the instructions need them. Codex picks it up on its next scan; invoke it with $ or let the description matching trigger it.

What is the difference between Codex skills and AGENTS.md?

AGENTS.md loads on every run and should hold short standing constraints. A skill loads only when triggered, so it holds longer procedures without a permanent context cost. Checklist you keep pasting into AGENTS.md? That is a skill.

Why doesn't my Codex skill trigger on its own?

Implicit triggering matches your request against the skill's description, so a vague description leaves it unreachable except via $. Rewrite the description to name concrete situations and verbs, then test with a naturally phrased request.

Do Claude Code skills work in Codex?

The format is the same, SKILL.md with name and description frontmatter, so the content transfers; the discovery folders differ (.claude/skills/ vs .agents/skills/). Skills that reference repo artifacts like DESIGN.md rather than tool-specific behavior port with a copy.

Can a skill make Codex follow my design system?

Yes, with the split shown above: a short skill that instructs Codex to read DESIGN.md and use only its tokens, and a real DESIGN.md in the repo carrying the system. Any Identity Forge kit exports that file, plus the matching CSS variables and Tailwind theme, with one CLI command.