원문: https://www.robert-glaser.de/claude-skills-in-codex-cli/

Claude Skills는 벤더 중립적인 설계 덕분에 잘 작동합니다. Anthropic이 이렇게 간단하면서도 강력한 개념을 설계한 것에 경의를 표합니다. 디렉토리에는 YAML 프론트매터(name, description, 선택적 allowed-tools)를 가진 SKILL.md 파일이 있고, 본문은 필요할 때만 읽습니다.

├── algorithmic-art
   ├── LICENSE.txt
   ├── SKILL.md
   └── templates
       ├── generator_template.js
       └── viewer.html
├── artifacts-builder
   ├── LICENSE.txt
   ├── scripts
   ├── bundle-artifact.sh
   ├── init-artifact.sh
   └── shadcn-components.tar.gz
   └── SKILL.md
├── brand-guidelines
   ├── LICENSE.txt
   └── SKILL.md

이 간결한 계약은 컨텍스트를 소모하지 않으면서도 점진적 검색 기능을 제공하며(여러 개의 MCP 서버를 설치한 경우 광범위한 도구 설명으로 컨텍스트를 소모하는 것과 달리), 형식을 준수하면 Claude를 넘어서도 잘 작동합니다.

첫 번째 시도: 프로젝트 레벨에서 설정하기

먼저 Anthropic의 skills 저장소를 Codex 프로젝트에 복제하고, AGENTS.md에 부팅 순서를 설명하는 한 단락을 추가했습니다: 프론트매터만 읽어서 스킬을 열거하고, 기억한 다음, 필요할 때 스킬 본문을 점진적으로 로드합니다.

Claude Code가 아닌 에이전트에서 누락된 부분은 작고 표준을 준수하는 스킬 열거자(enumerator)입니다.

제가 만든 것은 uv 인라인 의존성을 가진 단일 파일입니다. skills/**/SKILL.md를 탐색하고, YAML 프론트매터를 파싱한 다음, 최소한의 JSON 배열을 출력합니다. 여기에는 독점 스키마가 없습니다. 단지 name, description, 그리고 선택적으로 allowed-tools만 있습니다.

#!/usr/bin/env -S uv run -s
# /// script
# requires-python = ">=3.8"
# dependencies = ["python-frontmatter","pyyaml"]
# ///
import os, sys, json
from pathlib import Path
import frontmatter
 
root = (
    Path(sys.argv[1])
    if len(sys.argv) > 1
    else Path(
        os.environ.get("CODEX_SKILLS_DIR", str(Path.home() / ".config/codex/skills"))
    )
)
if not root.exists():
    print(f"missing skills dir: {root}", file=sys.stderr)
    sys.exit(1)
 
skills = []
for f in sorted(root.rglob("SKILL.md")):
    meta = (frontmatter.load(f).metadata) or {}
    n, d = meta.get("name"), meta.get("description")
    if isinstance(n, str) and isinstance(d, str):
        item = {"name": n, "description": d, "path": str(f)}
        if "allowed-tools" in meta:
            item["allowed-tools"] = meta["allowed-tools"]
        skills.append(item)
skills.sort(key=lambda s: s["name"])
json.dump(skills, sys.stdout, ensure_ascii=False, indent=2)

이 스크립트를 ~/bin/list-skills에 저장합니다.

이것을 설정한 후, Codex는 예상대로 작동했습니다. AGENTS.md에 다음과 같이 추가했습니다:

## Skills
당신은 스킬을 가지고 있습니다.
- 이 문서를 읽은 직후 `list-skills`를 통해 스킬 목록을 나열하세요 (`$CODEX_SKILLS_DIR` 사용). 기억하세요.
- 특정 작업에 스킬이 일치하는 경우에만 전체 문서(`SKILL.md`)를 읽고 사용하세요.

다음으로 Codex에 다음과 같이 요청했습니다:

이 프로젝트를 설명하는 잘 정렬된 한 줄짜리 텍스트가 있는 단일 페이지 PDF(test.pdf)를 만들어주세요.

Codex는 스킬 후보를 찾아보고, 일치하는 PDF 스킬의 SKILL.md를 지연 로드하고, 짧은 reportlab 스크립트를 작성한 다음 uv를 통해 실행했습니다. 추적 로그는 다음 순서를 보여줍니다: SKILL.md 읽기, 스크립트 생성, test.pdf 생성.

• list-skills 실행
  └ [
      {
    … +73 lines
      }
    ]

• 탐색
  └ SKILL.md 읽기

• reportlab을 사용하여 test.pdf라는 이름의 잘 정렬된 한 줄짜리 PDF를 생성하는 Python 스크립트를 만들겠습니다.
  의존성이 있는 Python 스크립트에 대한 지침을 따르기 위해 uv를 통해 실행하고,
  적절한 폰트와 페이지 크기로 명확하고 간결한 텍스트를 선택하겠습니다.

• uv run --with reportlab python - <<'PY' 실행
  … (test.pdf 생성)
  PY

• 탐색
  └ test.pdf 목록

생각보다 쉬웠습니다.

이것이 충분히 잘 작동했지만, 다음 문제가 즉시 나타났습니다: 하나의 프로젝트는 좋지만, 저는 여러 코드베이스를 동시에 활성화합니다. 모든 저장소에 스킬을 복사하거나 다섯 곳에서 업데이트를 추적하고 싶지 않았습니다. 해결책은 스킬과 열거자를 전역 자산으로 취급하는 것입니다. 스킬을 Codex 설치 폴더에 넣고, 단일 실행 가능한 열거자 list-skillsPATH에 추가했습니다. 이제 Codex는 AGENTS.md에서 지시한 대로 해당 명령을 실행하기만 하면 모든 저장소에서 스킬을 발견할 수 있습니다(~/.codex/AGENTS.md에서 전역으로 설정할 수도 있습니다).

스킬은 ~/.codex/skills에 있습니다. 열거자는 ~/bin/list-skills에 배치되며 기본적으로 해당 디렉토리를 사용하지만 경로 재정의도 허용합니다.

이 변경 후에도 흐름은 여전히 의미가 있습니다. Codex가 부팅되고, list-skills를 실행하고, 작은 JSON을 메모리에 보관하고, 스킬이 실제로 일치할 때까지 모든 무거운 읽기를 연기합니다. 전역 설정은 중복을 제거하고 업데이트를 간단하게 유지합니다: 스킬을 한 번 가져오면 모든 프로젝트가 즉시 변경 사항을 확인합니다.

완전성을 위해 Codex가 list-skills에서 보는 내용의 축약된 샘플은 다음과 같습니다:

[
  {
    "name": "pdf",
    "description": "텍스트와 표를 추출하고, 새 PDF를 생성하고, 문서를 병합/분할하고, 양식을 처리하는 포괄적인 PDF 조작 툴킷입니다. Claude가 PDF 양식을 작성하거나 대규모로 PDF 문서를 프로그래밍 방식으로 처리, 생성 또는 분석해야 할 때 사용합니다.",
    "path": "/Users/robertg/.codex/skills/document-skills/pdf/SKILL.md"
  },

  {
    "name": "algorithmic-art",
    "description": "시드 랜덤성과 대화형 매개변수 탐색을 사용하여 p5.js로 알고리즘 아트를 생성합니다. 사용자가 코드를 사용한 아트 생성, 생성 예술, 알고리즘 아트, 플로우 필드 또는 파티클 시스템을 요청할 때 사용합니다. 저작권 침해를 방지하기 위해 기존 아티스트의 작품을 복사하지 않고 독창적인 알고리즘 아트를 만드세요.",
    "path": "/Users/robertg/.codex/skills/algorithmic-art/SKILL.md"
  }
]

에이전트가 점진적 검색 및 선택과 관련하여 Claude처럼 동작하는 데 필요한 것은 이것뿐입니다. 무거운 작업은 스킬 작성에 남아 있으며, 이것이 바로 있어야 할 방식입니다. Anthropic은 계약을 작게 유지하고 런타임 동작을 예측 가능하게 만드는 형식을 지정한 공로를 인정받아야 합니다. 나머지는 프롬프트 규율입니다. list-skills라는 이름의 단일 실행 파일과 AGENTS.md의 단일 단락만으로 Codex는 해당 생태계의 좋은 시민이 됩니다. 락인도 없고, 의식도 없으며, 저장소 전체에 흩어진 중복 매니페스트도 없습니다.

핵심 요점

  1. 벤더 중립적 설계: Claude Skills의 간단한 형식(SKILL.md + YAML 프론트매터)은 어떤 에이전트에서도 작동할 수 있습니다.
  2. 점진적 로딩: 프론트매터만 읽어 스킬을 나열하고, 필요할 때만 본문을 로드하여 컨텍스트 효율성을 높입니다.
  3. 전역 설정: 스킬을 한 곳(~/.codex/skills)에 저장하고 모든 프로젝트에서 재사용할 수 있습니다.
  4. 표준 준수: uv를 사용한 간단한 Python 스크립트로 구현 가능하며, 독점 스키마가 필요하지 않습니다.

관련 링크