theme-factory (Anthropic)
10가지 기본 테마 중 하나 또는 즉석에서 생성한 테마로 슬라이드, 문서, HTML 페이지의 스타일을 입힙니다.
theme-factory: Codex는 이미 이름이 붙은 테마 두 가지를 외우고 있지만(스킬 없이 5.0), '프리셋 고르기'는 스킬만 할 수 있습니다. 해당 과제에서 5.0 대 0.0이고 토큰도 더 적게 씁니다(0.66배).
Codex CLI · gpt-6-astra
27.7 / 30
스킬 없이 대비 향상폭: +1.67 · 추천 · 18회 실행
추천: 총점 27.7/30이 22점 이상, 출력 품질 5.0가 3.5 이상, 향상폭 +1.67가 +1.0 이상입니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 3.7
- 출력 품질
- 5.0
- 토큰 및 시간 비용
- 5.0
- 설치 및 이식성
- 4.0
- 안전성
- 5.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add anthropics/skills --skill theme-factory
고정 커밋: ca45fc496a3436251f191354091d557da31c15b5
테스트일: 2026-11-02
테스트한 과제
- 이름이 붙은 프리셋 테마 적용 — deck.html에 'Ocean Depths' 테마를 적용하세요. 파일을 그 자리에서 편집하세요.
- 다른 프리셋 테마 적용 — deck.html에 'Tech Innovation' 테마를 적용하세요. 파일을 그 자리에서 편집하세요.
- 어울리는 프리셋 고르기 — 어린이 과학 경진대회 공지에 가장 어울리는 프리셋 테마를 골라 어떤 것을 골랐는지 밝히고, deck.html에 그 자리에서 적용하세요.
장점
- 스킬 없이보다 평균 점수를 3.33에서 5.0으로 끌어올렸습니다(+1.67).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 토큰 오버헤드 없음: 스킬 없이의 0.66배 토큰을 사용합니다.
- 자기 규칙을 한 문장으로 줄인 버전보다 +1.67점 높습니다.
- 스킬 사용 시 높은 절대 품질: 5.0/5.
단점
- 테스트 참고: 대조군은 이름이 붙은 테마를 이미 기억하고 있고, 스킬만 자체 목록에서 고를 수 있습니다. 한 문장 프롬프트군과의 큰 격차는 이 때문입니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 같은 평범한 HTML 슬라이드 덱(deck.html)으로 과제 세 가지를 냈습니다. 이름이 붙은 'Ocean Depths' 테마 적용, 이름이 붙은 'Tech Innovation' 테마 적용, '어린이 과학 경진대회에 가장 어울리는 프리셋 테마를 골라 어떤 것을 골랐는지 밝히고 적용하기'입니다. 한 문장 프롬프트군에는 프리셋 테마의 팔레트와 폰트 조합을 적용하고 어떤 테마인지 밝히라는 문장 하나를 추가했으며, 테마 데이터는 넣지 않았습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 3.33 | 111k |
| 한 문장 프롬프트 | 3.33 | 126k |
| 스킬 사용 | 5.0 | 73k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 27.7 / 30, 판정 추천.
참고: 대조군은 이름 있는 테마를 이미 기억하고 있고, 스킬만 자체 목록에서 고를 수 있습니다. 이것이 한 문장 프롬프트군과의 큰 격차를 설명합니다.
판정: 권장 (27.7 / 30). 출처: anthropics/skills, skills/theme-factory, 커밋 ca45fc4에 고정. 설치: npx skills@latest add anthropics/skills --skill theme-factory. 라이선스: Apache-2.0 / Anthropic 약관(스킬의 LICENSE.txt 참조).
어떤 스킬인가
anthropics/skills의 theme-factory 스킬은 10개의 색상·폰트 프리셋 테마(Ocean Depths, Sunset Boulevard, Forest Canopy, Tech Innovation 등)를 제공합니다. 각 테마는 헥스 팔레트와 폰트 페어링이 담긴 짧은 markdown 파일이고, 테마 쇼케이스 PDF도 있습니다. 슬라이드, 문서, 페이지 스타일링에 사용합니다. SKILL.md는 에이전트에게 쇼케이스를 보여주고 사용자가 고르게 한 뒤 테마의 색상과 폰트를 적용하라고 안내합니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).
같은 평범한 HTML 슬라이드 덱(deck.html)에서 세 작업을 수행했습니다. 지정된 테마 'Ocean Depths' 적용, 지정된 테마 'Tech Innovation' 적용, 그리고 '어린이 과학 박람회에 가장 잘 맞는 프리셋 테마를 골라 어떤 것을 골랐는지 밝히고 적용'입니다. 한 문장 프롬프트군은 프리셋 테마의 팔레트와 폰트 페어링을 적용하고 어떤 테마인지 말하라는 문장 하나를 추가로 받습니다. 테마 데이터는 들어 있지 않습니다.
- 지정된 프리셋 테마 적용 — deck.html에 'Ocean Depths' 테마를 적용하세요. 파일을 제자리에서 편집하세요.
- 다른 프리셋 테마 적용 — deck.html에 'Tech Innovation' 테마를 적용하세요. 파일을 제자리에서 편집하세요.
- 어울리는 프리셋 고르기 — 어린이 과학 박람회 공지에 가장 잘 맞는 프리셋 테마를 고르고, 어떤 것을 골랐는지 밝힌 뒤 deck.html에 제자리에서 적용하세요.
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "선택한 프리셋 테마의 색상 팔레트(배경, 텍스트, 액센트)와 헤더/본문 폰트 페어링을 모든 요소에 일관되게 적용하고, 어떤 테마를 적용했는지 말하세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-ocean | 5.0 | 5.0 | 5.0 | 70k | 103k | 69k | 2/2 |
| t2-tech | 5.0 | 5.0 | 5.0 | 73k | 102k | 79k | 2/2 |
| t3-choose | 0.0 | 0.0 | 5.0 | 187k | 171k | 71k | 2/2 |
평균 점수: 스킬 없이 3.33, 스킬 사용 시 5.0(델타 +1.67). 실행당 토큰: 111k 대 73k(0.66배), 시간 53초 대 44초. 한 문장 프롬프트군: 3.33(한 문장 프롬프트 대비 스킬의 이득: +1.67, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +0.0). 한 문장 프롬프트는 실행당 126k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 0.58배 비용입니다.
실제로 있었던 일
- 지정된 테마 두 작업에서는 세 군 모두 5.0점입니다. 대조군(스킬 없음, 폴더에 테마 파일 없음)은 Ocean Depths의 정확한 헥스(#1a2332, #2d8b8b, #a8dadc, #f1faee)와 Tech Innovation 팔레트를 기억에서 적용했습니다. 프리셋 테마는 충분히 공개되어 있어 모델이 이미 알고 있으며, 테마를 지정하는 요청에서는 스킬이 아무것도 더하지 않습니다.
- 테마 목록 자체가 필요한 경우에는 스킬이 중요합니다. '최적의 프리셋 고르기' 작업에서 대조군은 0/2점(한 실행은 10개에 없는 'Sky'라는 프리셋을 골랐다고 했고, 다른 실행은 247k 토큰을 썼습니다), 한 문장은 0/2점(한 실행은 작업 공간에 프리셋 목록이 없다고 답하고 사용자에게 요청했습니다), 스킬은 2/2점('Sunset Boulevard'를 골라 팔레트를 적용)이었습니다.
- 평균 대조군 3.33, 한 문장 3.33, 스킬 5.00. 가치가 지시가 아니라 스킬 테마 파일의 데이터에 있으므로 한 문장이 대신할 수 없습니다.
- 토큰: 스킬은 실행당 73k로 대조군 111k, 한 문장 126k(0.66배, 0.58배)입니다. 열린 작업에서 대조군과 한 문장은 검색하고 추측하지만 스킬은 작은 테마 파일을 읽기 때문입니다.
- 스킬 사용군은 스킬의 themes 폴더와 쇼케이스 PDF를 프로젝트에 복사합니다(실행당 평균 14개 새 파일). 작업 폴더가 오염됩니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 5.0 | 스킬 사용 시 평균 5.00/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 3.67 | 스킬 없이 3.33점 대비 +1.67점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | 43줄 SKILL.md, 테마 파일 10개, PDF 쇼케이스. 스크립트 없음. |
| 5_efficiency | 5 | 토큰 0.66배(실행당 73k 대 111k), 시간 0.83배(44초 대 53초). |
| 6_safety_hygiene | 5 | 산문, 데이터, PDF만 포함. |
이 테스트의 한계
- 규칙 기반 팔레트 검사(프리셋 헥스 색상 사용, 테마 이름 명시)이며, 스타일을 바꾼 덱이 얼마나 좋아 보이는지는 판단하지 않습니다.
- 작업 3의 검사는 10개 테마 중 하나의 헥스를 사용하고 그 이름을 밝혀야 정답으로 계산하므로, 목록을 볼 수 있는 군에 유리합니다.
- 셀당 n=2. 스킬의 쇼케이스 단계(PDF를 사용자에게 보여주고 선택을 기다림)는 대화형이라 헤드리스 테스트에서 실행할 수 없습니다.
- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
10개의 특정 프리셋 중 하나를 고르거나 나열해야 할 때 유용합니다. 추측을 없애고 토큰을 절약합니다. 프리셋 이름을 직접 지정한다면 일반 Codex도 똑같이 하므로 스킬이 필요하지 않습니다.
트랜스크립트
실행 로그: theme-factory (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-ocean control-1: 점수 5.0, 토큰 74123, 초 43.0, 검사 2/2, 연 파일 없음 t1-ocean control-2: 점수 5.0, 토큰 66741, 초 48.1, 검사 2/2, 연 파일 없음 t1-ocean oneliner-1: 점수 5.0, 토큰 112572, 초 60.5, 검사 2/2, 연 파일 없음 t1-ocean oneliner-2: 점수 5.0, 토큰 94515, 초 51.3, 검사 2/2, 연 파일 없음 t1-ocean treatment-1: 점수 5.0, 토큰 69081, 초 47.0, 검사 2/2, 연 파일 theme-factory t1-ocean treatment-2: 점수 5.0, 토큰 70216, 초 33.6, 검사 2/2, 연 파일 theme-factory t2-tech control-1: 점수 5.0, 토큰 77803, 초 56.7, 검사 1/1, 연 파일 없음 t2-tech control-2: 점수 5.0, 토큰 69182, 초 57.9, 검사 1/1, 연 파일 없음 t2-tech oneliner-1: 점수 5.0, 토큰 119920, 초 57.6, 검사 1/1, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: deck.html (t1-ocean, run 1, Codex)
<!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Q3 Update</title> <style> :root { color-scheme: dark; --navy: #1a2332; --teal: #2d8b8b; --seafoam: #a8dadc; --cream: #f1faee; } * { box-sizing: border-box; } body { margin: 0; background: var(--navy); color: var(--cream); font-family: "DejaVu Sans", sans-serif; font-size: clamp(18px, 2.2vw, 28px); line-height: 1.6; } section { max-width: 1200px; min-height: 100vh; margin: 0 auto; padding: clamp(32px, 7vw, 96px); display: flex; flex-direction: column; justify-content: center; border-top: 6px solid var(--teal); } h1, h2 { font-family: "DejaVu Sans", sans-serif; font-weight: 700; line-height: 1.15; margin: 0 0 0.6em; } h1 { font-size: clamp(48px, 7vw, 88px); } h2 { color: var(--seafoam); font-size: clamp(36px, 5vw, 60px); } p { margin: 0 0 1em; } section:first-child p { color: var(--seafoam); } ul { margin: 0; padding-left: 1.3em; } li { padding: 0.25em 0; } li::marker { color: var(--seafoam); } table { width: 100%; border-collapse: collapse; border: 2px solid var(--teal); margin-top: 1em; } th, td { padding: 0.65em 1em; text-align: left; border: 1px solid var(--teal); } th { background: var(--seafoam); color: var(--navy); font-weight: 700; } @media print { section { min-height: 0; height: 100vh; break-after: page; } section:last-child { break-after: auto; } body { print-color-adjust: exact; -webkit-print-color-adjust: exact; } } </style> </head> <body> <section><h1>Q3 Update</h1><p>Prepared for the leadership team</p></section> <section><h2>Highlights</h2><ul><li>Revenue up 12%</li><li>Two launches shipped</li><li>Support backlog cleared</li></ul></section> <section><h2>Next quarter</h2><p>Focus: reliability, onboarding, pricing review.</p><table border="1"><tr><th>Metric</th><th>Q3</th></tr><tr><td>Revenue</td><td>$1.2M</td></tr><tr><td>Churn</td><td>2.1%</td></tr></table></section> </body></html>