- Codex์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ํ์คํฌ ํนํ ์ํฌํ๋ก์ฐ ํจํค์ง
SKILL.mdํ์ผ์ ์ง์์ฌํญ์ ์์ฑํ๋ฉด, Codex๊ฐ ์๋์ผ๋ก ๋๊ตฌ๋ก ์ธ์- ์ํฉ์ ๋ง๊ฒ **Codex๊ฐ ์๋ ํธ์ถ(implicit)**ํ๊ฑฐ๋, ์ฌ์ฉ์๊ฐ
$skill-name์ผ๋ก ์ง์ ํธ์ถ(explicit) - Agent Skills ์คํ ์คํ ๋ค๋(agentskills.io)๋ฅผ ๋ฐ๋ฅด๋ฉฐ, Codex CLI / IDE Extension / Codex App ๋ชจ๋ ์ง์
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- ๋ฐ๋ณต ์ํฌํ๋ก์ฐ ์ ๊ฑฐ: PR ๋ฆฌ๋ทฐ, ๋ก๊ทธ ๋ถ๋ฅ, ๋ฆด๋ฆฌ์ฆ ๋ ธํธ ๋ฑ ๋ฐ๋ณต ์์ ์ ํ ๋ฒ ์ ์ํ๊ณ ์ฌ์ฌ์ฉ
- ํ ํ์ค ๊ณต์ : ํ๋ก์ ํธ ์คํฌ ๋๋ ํ ๋ฆฌ์ ์ปค๋ฐํ๋ฉด ํ ์ ์ฒด๊ฐ ๋์ผํ ์ํฌํ๋ก์ฐ ์ฌ์ฉ
- Custom Prompt ๋์ฒด: Codex์์ Custom Prompt๋ deprecated โ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ํฌํ๋ก์ฐ๋ ๋ชจ๋ Skill๋ก ์ ํ ๊ถ์ฅ
- Progressive Disclosure: ๋ฉํ๋ฐ์ดํฐ๋ง ๋จผ์ ๋ก๋ํ๊ณ , ์ค์ ์ฌ์ฉ ์์๋ง ์ ์ฒด SKILL.md๋ฅผ ์ฝ์ด ์ปจํ ์คํธ ํจ์จ ๊ทน๋ํ
AS-IS
# ๋งค๋ฒ ์๋์ผ๋ก ๋์ผํ ์ง์๋ฅผ ๋ฐ๋ณต ์
๋ ฅ
User: "์ด PR ๋ฆฌ๋ทฐํด์ค. ์ ํ์ฑ, ๋ณด์, ๋๋ฝ๋ ํ
์คํธ ํ์ธํ๊ณ
๊ฒฐ๊ณผ๋ ์ฒดํฌ๋ฆฌ์คํธ ํํ๋ก..."
# ๋ค์ ๋ฒ์๋ ๋์ผํ ๋ด์ฉ์ ๋ ์
๋ ฅ
User: "์ด PR ๋ฆฌ๋ทฐํด์ค. ์ ํ์ฑ, ๋ณด์..."
TO-BE
# ~/.codex/skills/review-pr/SKILL.md (ํ ๋ฒ๋ง ์ ์)
---
name: review-pr
description: PR์ ์ ํ์ฑ, ๋ณด์, ํ
์คํธ ๊ด์ ์์ ๋ฆฌ๋ทฐ
---
PR์ ๋ค์ ๊ด์ ์์ ๋ฆฌ๋ทฐํ๋ผ:
1. ์ ํ์ฑ ๋ฐ ํ๊ท ๊ฐ๋ฅ์ฑ
2. ๋ณด์ ์ทจ์ฝ์
3. ๋๋ฝ๋ ํ
์คํธ
๊ฒฐ๊ณผ๋ ์ฒดํฌ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅ.# ์ดํ์๋ $ ๋ฉ์
์ด๋ฉด ๋
$review-pr์คํฌ ํ์ผ ๊ตฌ์กฐ
๋ชจ๋ ์คํฌ์ ๋๋ ํ ๋ฆฌ ๋จ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, SKILL.md๊ฐ ์ง์
์ (entrypoint)์ด๋ค:
my-skill/
โโโ SKILL.md # ๋ฉ์ธ ์ง์์ฌํญ (ํ์)
โโโ agents/
โ โโโ openai.yaml # UI ๋ฉํ๋ฐ์ดํฐ, ํธ์ถ ์ ์ฑ
, ๋๊ตฌ ์์กด์ฑ
โโโ scripts/ # ๊ฒฐ์ ์ ๋์์ด ํ์ํ ์คํ ์คํฌ๋ฆฝํธ
โโโ references/ # ์ฐธ์กฐ ๋ฌธ์
โโโ assets/ # ํ
ํ๋ฆฟ, ์์ด์ฝ ๋ฑ ๋ฆฌ์์ค
SKILL.md ์์ฑ๋ฒ
SKILL.md๋ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค:
- YAML Frontmatter (
---์ฌ์ด): ์คํฌ์ ๋ฉํ๋ฐ์ดํฐ (name,descriptionํ์) - Markdown Content: Codex๊ฐ ๋ฐ๋ฅผ ์ง์์ฌํญ
---
name: fix-issue
description: GitHub ์ด์๋ฅผ ์์ ํ๋ค
---
GitHub ์ด์๋ฅผ ์์ ํ๋ผ:
1. ์ด์ ์ค๋ช
์ฝ๊ธฐ
2. ์๊ตฌ์ฌํญ ํ์
3. ์์ ๊ตฌํ
4. ํ
์คํธ ์์ฑ
5. ์ปค๋ฐ ์์ฑagents/openai.yaml
์ ํ์ ์ค์ ํ์ผ๋ก, UI ํ์์ ํธ์ถ ์ ์ฑ ์ ์ ์ดํ๋ค:
interface:
display_name: "User-facing name"
short_description: "Brief description"
icon_small: "./assets/small-logo.svg"
icon_large: "./assets/large-logo.png"
brand_color: "#3B82F6"
default_prompt: "Optional surrounding prompt"
policy:
allow_implicit_invocation: false # true(๊ธฐ๋ณธ): ์๋ ํธ์ถ ํ์ฉ
dependencies:
tools:
- type: "mcp"
value: "openaiDeveloperDocs"
description: "Tool description"
transport: "streamable_http"
url: "https://example.com"| ํ๋ | ์ค๋ช |
|---|---|
interface | Codex App์์์ UI ํ์ (์์ด์ฝ, ์์, ์ด๋ฆ) |
policy.allow_implicit_invocation | false ์ Codex ์๋ ํธ์ถ ์ฐจ๋จ, $skill-name ๋ช
์ ํธ์ถ๋ง ๊ฐ๋ฅ |
dependencies.tools | ์คํฌ์ด ์์กดํ๋ MCP Server ๋ฑ ์ธ๋ถ ๋๊ตฌ ์ ์ธ |
์คํฌ ์ ์ฅ ์์น์ ์ ์ฉ ๋ฒ์
์คํฌ ๊ฒฝ๋ก์ ๊ธฐ์ค์ $CODEX_HOME ํ๊ฒฝ๋ณ์์ด๋ฉฐ, ๋ฏธ์ค์ ์ ~/.codex๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
| ์์น | ๊ฒฝ๋ก | ์ ์ฉ ๋ฒ์ |
|---|---|---|
| Personal | $CODEX_HOME/skills/<name>/ (๊ธฐ๋ณธ: ~/.codex/skills/) | ๋ด ๋ชจ๋ ํ๋ก์ ํธ |
| System | $CODEX_HOME/skills/.system/ | ๋นํธ์ธ (skill-creator, skill-installer) |
๊ณต์ ์์ค ๊ฐ ๊ฒฝ๋ก ๋ถ์ผ์น
๊ณต์ ์น ๋ฌธ์(developers.openai.com/codex/skills, best-practices)๋
.agents/skills/๊ฒฝ๋ก๋ฅผ ์๋ดํ์ง๋ง, ๊ณต์ GitHub ์์ค(openai/codex)์ skill-installer์ install-skill-from-github.py๋$CODEX_HOME/skills/๋ฅผ ์ฌ์ฉํ๋ค.
- GitHub: skill-installer SKILL.md โ โInstalls into
$CODEX_HOME/skills/<skill-name>(defaults to~/.codex/skills)โ- GitHub: install-skill-from-github.py โ
_codex_home()โos.environ.get("CODEX_HOME", "~/.codex")- Changelog: 0.116.0 (2026-03-19) โ โskill-creator: default new skills to ~/.codex/skillsโ (PR #14837)
- PR #14837:
--path "${CODEX_HOME:-$HOME/.codex}/skills"ํจํด์ผ๋ก ๋ณ๊ฒฝ๋ณธ ๋ฌธ์๋ GitHub ์์ค + Changelog ๊ธฐ์ค์ผ๋ก ์์ฑํ์๋ค. ์น ๋ฌธ์์
.agents/skills/๋ 0.116.0 ์ด์ ํจํด์ด๊ฑฐ๋ ๋ฌธ์ ์ ๋ฐ์ดํธ ์ง์ฐ์ผ๋ก ํ๋จ๋๋ค.
๋๋ช ์คํฌ ์ถฉ๋ ์ฒ๋ฆฌ
Codex์์ ๊ฐ์ ์ด๋ฆ์ ์คํฌ์ด ์ฌ๋ฌ ์์น์ ์กด์ฌํ๋ฉด, ๋ณํฉ์ด๋ ๋ฎ์ด์ฐ๊ธฐ ์์ด ๋ชจ๋ ๋ฒ์ ์ด ์ ํ๊ธฐ์ ํจ๊ป ํ์๋๋ค:
# Personal ์คํฌ
~/.codex/skills/review-pr/SKILL.md
---
name: review-pr
description: ๋ณด์ ์ค์ฌ์ผ๋ก PR ๋ฆฌ๋ทฐ
---
# ํ๋ก์ ํธ ์คํฌ (๊ฐ์ ์ด๋ฆ)
<project>/skills/review-pr/SKILL.md
---
name: review-pr
description: ํ ์ปจ๋ฒค์
์ค์ฌ์ผ๋ก PR ๋ฆฌ๋ทฐ
---
์ฌ์ฉ์๊ฐ $ ๋๋ /skills๋ก ์คํฌ ๋ชฉ๋ก์ ์ด๋ฉด:
> review-pr (~/.codex/skills) โ ๋ณด์ ์ค์ฌ์ผ๋ก PR ๋ฆฌ๋ทฐ
> review-pr (<project>/skills) โ ํ ์ปจ๋ฒค์
์ค์ฌ์ผ๋ก PR ๋ฆฌ๋ทฐ
์ฌ์ฉ์๊ฐ ์ง์ ์ํ๋ ๋ฒ์ ์ ์ ํํด์ผ ํ๋ค.
Claude Code์์ ์ฐจ์ด
| Codex | Claude Code | |
|---|---|---|
| ์ ๋ต | ๋ชจ๋ ๋ฒ์ ๊ณต์กด (์ฌ์ฉ์ ์ ํ) | ์ฐ์ ์์๋ก ํ๋๋ง ์ ์ฉ |
| ๋๋ช ์ถฉ๋ | ์ ํ๊ธฐ์ ๋ ๋ค ํ์ | Enterprise > Personal > Project ์์ผ๋ก ์์๊ฐ ํ์๋ฅผ ๋ฎ์ด์ |
| ์ฅ์ | ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฒ์ ์ฌ์ฉ ๊ฐ๋ฅ | ์ค์ ์์ด ์ผ๊ด๋ ๋์ ๋ณด์ฅ |
| ๋จ์ | ์ฌ์ฉ์๊ฐ ๋งค๋ฒ ๊ตฌ๋ถํด์ผ ํจ | ํ์ ๋ ๋ฒจ ์คํฌ์ด ์๋์น ์๊ฒ ๊ฐ๋ ค์ง ์ ์์ |
ํธ์ถ ๋ฐฉ์
| ๋ฐฉ์ | ์ค๋ช | ์์ |
|---|---|---|
| Explicit (๋ช ์์ ) | ์ฌ์ฉ์๊ฐ ์ง์ $ ๋ฉ์
๋๋ /skills ๋ฉ๋ด์์ ์ ํ | $review-pr, /skills |
| Implicit (์๋) | Codex๊ฐ ํ๋กฌํํธ์ description์ ๋งค์นญํ์ฌ ์๋ ์ ํ | ํ๋กฌํํธ: โ์ด PR ๋ฆฌ๋ทฐํด์คโ โ review-pr ์๋ ํธ์ถ |
Progressive Disclosure ๋์:
sequenceDiagram autonumber actor User participant Codex participant Skill as SKILL.md Note over Codex: ์ธ์ ์์ ์<br/>๋ชจ๋ ์คํฌ์ name + description๋ง ๋ก๋ User->>Codex: "์ด PR ๋ฆฌ๋ทฐํด์ค" Codex->>Codex: description ๋งค์นญ<br/>"review-pr" ์ ํ Codex->>Skill: SKILL.md ์ ์ฒด ๋ก๋ Skill-->>Codex: ์ง์์ฌํญ ๋ฐํ Codex->>Codex: ์ง์์ฌํญ์ ๋ฐ๋ผ ์คํ Codex-->>User: ๊ฒฐ๊ณผ ์๋ต
์คํฌ ์ค์น์ ๊ด๋ฆฌ
์ค์น
์คํฌ์ $CODEX_HOME/skills/<skill-name>์ ์ค์น๋๋ค (๊ธฐ๋ณธ: ~/.codex/skills/).
# ํ๋ ์ด์
๋ ์คํฌ (์ด๋ฆ์ผ๋ก ์ค์น)
$skill-installer linear
# โ ~/.codex/skills/linear/ ์ ์ค์น
# ์คํ์ ์คํฌ (GitHub URL๋ก ์ค์น)
$skill-installer install https://github.com/openai/skills/tree/main/skills/.experimental/create-plan
# ์ปค์คํ
๊ฒฝ๋ก ์ง์
$skill-installer install <url> --dest /custom/path์ค์น ํ Codex ์ฌ์์ ํ์.
๋นํ์ฑํ
~/.codex/config.toml์์ ๊ฐ๋ณ ์คํฌ ๋นํ์ฑํ:
[[skills.config]]
path = "/path/to/skill/SKILL.md"
enabled = false์คํฌ ์นดํ๋ก๊ทธ (github.com/openai/skills)
| ์นดํ ๊ณ ๋ฆฌ | ์ค๋ช |
|---|---|
.system | Codex ์ต์ ๋ฒ์ ์ ์๋ ์ค์น |
.curated | ์ปค๋ฎค๋ํฐ ๊ฒ์ฆ, ์๋ ์ค์น ํ์ |
.experimental | ์คํ์ , ํ ์คํธ์ฉ |
์คํฌ ์ค๊ณ ์์น (Best Practices)
| ์์น | ์ค๋ช |
|---|---|
| Single Responsibility | ์คํฌ ํ๋ = ํ๋์ ์์ |
| Instructions over Scripts | ๊ฒฐ์ ์ ๋์์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ง์์ฌํญ ์ฐ์ |
| ๋ช ํํ I/O | ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ช ์์ ์ผ๋ก ์ ์ |
| ํธ๋ฆฌ๊ฑฐ ๋ฌธ๊ตฌ ํฌํจ | description์ ์ฌ์ฉ์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ธ ํค์๋ ํฌํจ |
| 2-3๊ฐ ์ ์ค์ผ์ด์ค๋ถํฐ | ์๋ํ๋ ๊ฒ๋ถํฐ ์์, ์ฃ์ง ์ผ์ด์ค๋ ๋์ค์ |
โ๊ฐ์ ํ๋กฌํํธ๋ฅผ ๋ฐ๋ณตํ๊ฑฐ๋, ๊ฐ์ ์ํฌํ๋ก์ฐ๋ฅผ ๋งค๋ฒ ๊ต์ ํ๊ณ ์๋ค๋ฉด, ๊ทธ๊ฑด ์คํฌ์ด ๋์ด์ผ ํ๋ค.โ
์คํฌ ํ๋ณด ์์ ์ ํ
- ๋ก๊ทธ ๋ถ๋ฅ ๋ฐ ๋ถ์
- ๋ฆด๋ฆฌ์ฆ ๋ ธํธ ์์ฑ
- PR ์ฒดํฌ๋ฆฌ์คํธ ๋ฆฌ๋ทฐ
- ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ
- ํ ๋ ๋ฉํธ๋ฆฌ/์ธ์๋ํธ ์์ฝ
- ํ์คํ๋ ๋๋ฒ๊น ์ํฌํ๋ก์ฐ
Claude Code Skills์ ๋น๊ต
| ํญ๋ชฉ | Codex Skills | Claude Code Skills |
|---|---|---|
| ์ง์ ์ | SKILL.md | SKILL.md |
| ํธ์ถ ๋ฌธ๋ฒ | $skill-name | /skill-name |
| ์ ์ฅ ์์น | $CODEX_HOME/skills/ (๊ธฐ๋ณธ: ~/.codex/skills/) | .claude/skills/ |
| ๊ฐ์ธ ์คํฌ | ~/.codex/skills/ | ~/.claude/skills/ |
| UI ์ค์ | agents/openai.yaml (๋ณ๋ ํ์ผ) | YAML frontmatter ๋ด |
| ์๋ ํธ์ถ ์ฐจ๋จ | allow_implicit_invocation: false (yaml) | disable-model-invocation: true (frontmatter) |
| ์ฌ์ฉ์ ํธ์ถ ์ฐจ๋จ | ํด๋น ์ต์ ์์ | user-invocable: false |
| ๋๊ตฌ ์์กด์ฑ | dependencies.tools (yaml) | allowed-tools (frontmatter) |
| Subagent ์์ | ๋ณ๋ Agent ์ ์ (.codex/agents/) | context: fork + agent (frontmatter) |
| ์ค์ ํ์ผ | AGENTS.md | CLAUDE.md |
| ๋๋ช ์คํฌ | ๋ชจ๋ ๋ฒ์ ๊ณต์กด (์ฌ์ฉ์ ์ ํ) | ์ฐ์ ์์๋ก ์์๊ฐ ํ์ ๋ฎ์ด์ |
| Custom Prompt | deprecated โ Skill ์ ํ ๊ถ์ฅ | ํด๋น ์์ |
Automation๊ณผ์ ๊ด๊ณ
Codex App์์ Automation์ ์คํฌ์ ์ค์ผ์ค ๊ธฐ๋ฐ์ผ๋ก ์คํํ๋ ๊ธฐ๋ฅ์ด๋ค:
flowchart LR A["Skill<br/>(๋ฐฉ๋ฒ ์ ์)"] --> B["Automation<br/>(์ค์ผ์ค ์ ์)"] B --> C["๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ<br/>โ ๋ฆฌ๋ทฐ ํ"]
โSkills define the method, automations define the schedule.โ
์๋ ์คํ์ด ์์ธก ๊ฐ๋ฅํด์ง ํ์๋ง Automation์ผ๋ก ์ ํํ๋ค.
ํ์ฉ ์์: ์ผ์ผ ์ด์ ๋ถ๋ฅ, CI ์คํจ ์์ฝ, ๋ฆด๋ฆฌ์ฆ ๋ธ๋ฆฌํ, ๋ฒ๊ทธ ์ค์บ
ํธ๋ฌ๋ธ์ํ
| ๋ฌธ์ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| ์คํฌ์ด ํธ๋ฆฌ๊ฑฐ๋์ง ์์ | description์ ์ฌ์ฉ์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋งํ ํค์๋ ํฌํจ. $skill-name์ผ๋ก ์ง์ ํธ์ถ ์๋ |
| ์คํฌ์ด ๋๋ฌด ์์ฃผ ํธ๋ฆฌ๊ฑฐ๋จ | description์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์์ . allow_implicit_invocation: false ์ค์ |
| ์ค์น ํ ์ธ์ ์ ๋จ | Codex ์ฌ์์ ํ์ |
| ์คํฌ ๋นํ์ฑํ | ~/.codex/config.toml์์ enabled = false |
์ฐธ๊ณ ๋ฌธ์
- Codex Skills ๊ณต์ ๋ฌธ์
- Skills GitHub ์นดํ๋ก๊ทธ
- Codex Best Practices
- Codex Subagents - ์์ ์ ์์ํ๋ ํ์ ์์ด์ ํธ
- AGENTS.md ๊ฐ์ด๋ - ์๊ตฌ ์ปจํ ์คํธ ๊ด๋ฆฌ