pptx (anthropics/skills)
.pptx와 .potx 슬라이드, 서식 파일, 레이아웃, 발표자 노트를 만들고 읽고 편집합니다.
anthropics pptx: 모든 그룹이 우리 덱 검사를 통과했고(5.0 대 4.99), 스킬은 토큰을 1.4배 사용합니다. 한 문장 프롬프트 실행 중 한 번은 LibreOffice에서 열 수 없는 덱을 만들었습니다
Codex CLI · gpt-6-astra
24.0 / 30
스킬 없이 대비 향상폭: +0.01 · 상황에 따라 · 17회 실행
상황에 따라: 향상폭 +0.01가 +1.0 미만. 추천이 되려면 총점 22/30, 출력 품질 3.5, 향상폭 +1.0이 필요합니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 17회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 2.0
- 출력 품질
- 5.0
- 토큰 및 시간 비용
- 3.0
- 설치 및 이식성
- 4.0
- 안전성
- 5.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 1 / MEDIUM 6. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(스캐너 지적 사항은 설명됨). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add anthropics/skills --skill pptx
고정 커밋: ca45fc496a3436251f191354091d557da31c15b5
테스트일: 2026-11-02
테스트한 과제
- 피치 덱 만들기 — pitch.pptx를 만드세요. 가상의 제품 Falcon 출시를 위한 5장짜리 16:9 덱입니다. 타이틀 슬라이드, Problem 슬라이드, Solution 슬라이드, 분기별 매출 막대 차트가 있는 Traction 슬라이드(Q1 12, Q2 18, Q3 27, Q4 35, 단위 $k), 마지막 Ask 슬라이드로 구성합니다…
- 슬라이드 삽입 및 제목 변경 — team.pptx에서 2번 슬라이드 제목을 'Revenue outlook'으로 바꾸고, 바로 뒤에 'Risks' 제목의 새 슬라이드를 삽입하세요. 불릿은 세 개(공급 지연, 채용, 환율)입니다. 다른 모든 슬라이드와 발표자 노트는 그대로 유지하세요. 결과를 team.pptx로 저장…
- 개요와 표 추출 — team.pptx에서 outline.txt(슬라이드 제목을 순서대로 한 줄에 하나씩)와 table.csv(결과 슬라이드의 표, 헤더 행 먼저)를 작성하세요. team.pptx는 수정하지 마세요.
장점
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 스킬 사용 시 높은 절대 품질: 5.0/5.
단점
- 스킬 없이보다 측정 가능한 향상 없음(+0.01, 노이즈 범위 안).
- 대조군이 이미 4.99점입니다. 천장 효과 때문에 이 테스트로는 향상을 보여줄 수 없습니다.
- 테스트 참고: 계획된 18회 중 17회 실행으로, t3 한 문장 프롬프트군은 n=1입니다. 테스트 머신에서 LibreOffice가 반복적으로 크래시해 배치를 중단했습니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 과제는 세 가지입니다. 5장짜리 16:9 피치 덱 만들기(모든 슬라이드에 발표자 노트, 네이티브 편집 가능 차트, 실제 불릿, 모든 내용을 슬라이드 안에, LibreOffice에서 열림), team.pptx에서 2번 슬라이드 제목을 바꾸고 그 뒤에 불릿 세 개를 담은 'Risks' 슬라이드 삽입하기(다른 슬라이드, 표, 발표자 노트는 유지), 덱을 수정하지 않고 슬라이드 제목과 표를 텍스트 파일로 추출하기. 두 그룹 모두 동일한 오프라인 사본의 pptxgenjs와 python-pptx를 사용했습니다. 검사는 python-pptx와 우리 쪽에서 오프라인으로 수행한 LibreOffice 변환을 사용했습니다. 계획된 18회 중 17회로 실행했는데, 배치가 조기 중단되어(한계 참고) 추출 과제에서 한 문장 프롬프트군이 한 회 적습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 4.99 | 114k |
| 한 문장 프롬프트 | 4.86 | 224k |
| 스킬 사용 | 5.0 | 162k |
Codex CLI에서 17회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 24.0 / 30, 판정 상황에 따라.
참고: 계획된 18회 중 17회만 실행했습니다. t3의 한 문장 프롬프트군은 n=1입니다. 테스트 머신에서 LibreOffice가 반복적으로 충돌해 배치를 중단했습니다.
판정: 상황에 따라 (24.0 / 30). 출처: anthropics/skills, skills/pptx, 커밋 ca45fc4에 고정. 설치: npx skills@latest add anthropics/skills --skill pptx. 라이선스: 독점(스킬 디렉터리의 LICENSE.txt). 읽기 전용으로 평가했으며 재배포하지 않았습니다.
무엇인가
anthropics/skills의 pptx 스킬입니다. pptxgenjs로 덱을 만들고(파일을 깨뜨리는 함정 목록 포함), 압축을 풀어 슬라이드 XML을 편집하는 방식으로 덱을 수정하며(도우미 스크립트 add_slide.py, clean.py, thumbnail.py), markitdown으로 콘텐츠를 읽고, scripts/office/validate.py와 LibreOffice로 검증합니다. SKILL.md 약 3,100단어에 더해 Python 스크립트와 OOXML 스키마가 있습니다. 독점 라이선스이며 읽기 전용으로 평가했습니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 스킬 사용군, 스킬이 없는 대조군, 스킬 없이 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 한 문장 프롬프트군으로 나눴으며, 작업·군당 2회 실행, 네트워크 차단, /tmp 쓰기 차단 조건이었습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현 제외).
세 가지 작업입니다. 5장짜리 16:9 피치 덱 만들기(모든 슬라이드에 발표자 노트, 편집 가능한 네이티브 차트, 진짜 불릿, 모든 내용이 슬라이드 안에, LibreOffice에서 열림), team.pptx에서 2번 슬라이드 제목을 바꾸고 그 뒤에 불릿 세 개가 있는 'Risks' 슬라이드 삽입하기(다른 슬라이드, 표, 발표자 노트는 유지), 덱을 수정하지 않고 슬라이드 제목과 표를 텍스트 파일로 추출하기. 두 군 모두 같은 오프라인 pptxgenjs와 python-pptx 사본을 사용했습니다. 검사는 python-pptx와 저희 쪽에서 오프라인으로 수행한 LibreOffice 변환을 사용합니다. 계획한 18회 중 17회로 실행했습니다. 일괄 작업이 일찍 중단되어(한계 참고) 한 문장 프롬프트군은 추출 작업에서 한 회가 적습니다.
- 피치 덱 만들기 — pitch.pptx를 만드세요. Falcon이라는 가상 제품 출시를 위한 5장짜리 16:9 덱입니다. 타이틀 슬라이드, Problem 슬라이드, Solution 슬라이드, 분기별 매출 막대 차트가 있는 Traction 슬라이드(Q1 12, Q2 18, Q3 27, Q4 35, 단위 $k), 마지막 Ask 슬라이드로 구성합니다. 모…
- 슬라이드 삽입과 제목 변경 — team.pptx에서 2번 슬라이드 제목을 'Revenue outlook'으로 바꾸고, 바로 뒤에 'Risks' 제목과 불릿 세 개(공급 지연, 채용, 환율)가 있는 새 슬라이드를 삽입하세요. 다른 모든 슬라이드와 발표자 노트는 그대로 유지하세요. 결과를 team.pptx로 저장하…
- 개요와 표 추출 — team.pptx에서 outline.txt(슬라이드 제목을 순서대로 한 줄에 하나씩)와 table.csv(결과 슬라이드의 표, 헤더 행 먼저)를 작성하세요. team.pptx는 수정하지 마세요.
채점은 프로그램 방식(숨은 테스트/심어 둔 문제 탐지/제약 조건 검사/해당되는 경우 렌더링+OCR)으로 진행하며 실행당 0~5점입니다. 어떤 점수도 LLM 심사자가 결정하지 않았습니다.
결과
세 번째 군에 제공한 한 문장 프롬프트: "덱을 진짜 PowerPoint 객체로 만드세요. 16:9 레이아웃을 먼저 설정하고, 네이티브 편집 가능 차트를 사용하며(그림 아님), 진짜 불릿을 쓰고('•' 문자를 직접 입력하지 않음), notes API로 발표자 노트를 넣고, 모든 도형을 슬라이드 안에 유지하고, PDF로 변환해 파일이 열리는지 확인하세요. 편집할 때는 요청받은 것만 바꾸고 다른 슬라이드와 노트는 그대로 두며, 작업 파일을 남기지 마세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-new | 4.96 | 5.0 | 5.0 | 147k | 342k | 185k | 2/2 |
| t2-edit | 5.0 | 4.65 | 5.0 | 114k | 175k | 199k | 2/2 |
| t3-extract | 5.0 | 5.0 | 5.0 | 79k | 80k | 99k | 2/2 |
평균 점수: 스킬 없음 4.99 vs 스킬 사용 5.0(델타 +0.01). 실행당 토큰: 114k vs 162k(1.42배), 시간 67초 vs 70초. 한 문장 프롬프트군: 4.86(한 문장 프롬프트 대비 스킬의 이득: +0.14, 스킬 없음 대비 한 문장 프롬프트의 이득: -0.12). 한 문장 프롬프트는 실행당 224k 토큰이므로 스킬 비용은 한 문장 프롬프트의 0.72배입니다.
무슨 일이 있었나
- 점수 차이는 없었습니다. 대조군 4.99, 한 문장 4.86, 스킬 5.00. 대조군도 이미 올바른 덱을 만듭니다(5장, 모든 슬라이드에 노트, 네이티브 차트, 직접 입력한 불릿 없음, 도형이 슬라이드 안에 있음, LibreOffice에서 열림). python-pptx로 노트나 표를 잃지 않고 편집도 해냅니다.
- 스킬 비용은 더 들었습니다. 실행당 162k 토큰으로 114k(1.4배)였고, 한 문장 버전은 224k(2.0배)였습니다. 주로 만들기 작업에서 차이가 났습니다(스킬 185k, 한 문장 버전 325~361k, 대조군 118~176k).
- 실패는 한 문장 군에서 한 건 있었습니다. 편집된 team.pptx가 python-pptx에서는 열리지만 LibreOffice가 변환하지 못했습니다(저희 쪽에서 두 번 재현). 에이전트 스스로도 LibreOffice가 충돌했다고 보고했습니다. 스킬 군의 덱 여섯 개는 모두 변환되었고, 스킬 실행 여섯 번 모두 validate.py를 실행했습니다.
- 스킬은 6/6 실행에서 읽혔고, 여섯 번 모두 에이전트가 스킬의 markitdown, validate.py, LibreOffice 래퍼(soffice.py)를 사용했습니다. 대조군은 LibreOffice를 전혀 호출하지 않았고, 한 문장 실행 5회 중 4회는 soffice를 직접 호출했습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_출력_품질 | 5.0 | 스킬 사용 시 평균 5.00/5(프로그램 검사, 작업별 표 참고). |
| 2_스킬_없음_대비_향상 | 2.01 | 스킬 없음 4.99 대비 +0.01점(작업당 n=2, 약 1점 미만은 노이즈). |
| 3_트리거 | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일을 읽었습니다. |
| 4_지침_이식성 | 4 | pptxgenjs, python-pptx, markitdown, LibreOffice가 설치되어 있다고 가정하며 Linux 샌드박스에 맞춰져 있습니다. |
| 5_효율성 | 3 | 토큰 1.42배(실행당 162k vs 114k), 시간 1.04배(70초 vs 67초). |
| 6_안전성_및_위생 | 5 | 스크립트를 읽어 보았습니다. soffice.py(LibreOffice 실행기, 소켓이 차단된 Linux에서만 작은 LD_PRELOAD 심을 컴파일), thumbnail.py, add_slide.py, clean.py, 검증기들이며 네트워크와 자격 증명 접근은 없습니다. |
이 테스트의 한계
- 일괄 작업은 18회 중 17회에서 중단되었습니다. 에이전트(주로 스킬 군과 한 문장 군)가 덱을 PDF로 변환하는 동안 테스트 컴퓨터에서 LibreOffice가 반복적으로 충돌했고, 사용자가 중단을 요청했습니다. 모든 결과는 완료된 실행에서 나온 것이며, 한 문장 추출 실행 하나가 빠져 있습니다.
- 규칙 검사(구조, 노트, 차트, 경계, 열림 여부)를 했습니다. 슬라이드의 시각적 품질은 판단하지 않았고, 스킬의 디자인 지침(색상 팔레트, 레이아웃 아이디어)도 활용되지 않았습니다.
- 작은 덱(5장과 3장)입니다. 템플릿 기반 편집, 결합/분할, 댓글은 테스트하지 않았습니다.
- 검사의 변환은 저희 쪽에서 오프라인으로 실행했습니다. 테스트 컴퓨터에서 에이전트가 LibreOffice를 직접 사용한 것이 충돌 원인이었습니다.
- 작업·군당 n=2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정하며, 취향이나 결과가 최선인지는 판단하지 못합니다.
보안
security.md를 참고하세요. 스캔: CRITICAL 0 / HIGH 1 / MEDIUM 6. 판정: 실행해도 안전(네트워크 차단 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
작은 덱에서는 python-pptx를 쓴 일반 Codex도 이미 정확하고 유효한 파일을 만들었습니다. 따라서 스킬의 함정 목록과 검증기는 점수를 올리지 못한 채 토큰을 약 40% 더 썼습니다. 검증기와 변환 단계는 더 크거나 템플릿 기반인 덱에 유용할 수 있지만 이 테스트에서는 다루지 않았습니다. 스킬 자체 워크플로가 LibreOffice를 호출하며, 일부 데스크톱에서는 불안정할 수 있다는 점을 유의하세요.
트랜스크립트
실행 로그: pptx (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-new control-1: 점수 4.92, 토큰 117727, 초 118.4, 검사 1/2, 연 파일 없음 t1-new control-2: 점수 5.0, 토큰 176319, 초 129.0, 검사 2/2, 연 파일 없음 t1-new oneliner-1: 점수 5.0, 토큰 324776, 초 128.1, 검사 2/2, 연 파일 없음 t1-new oneliner-2: 점수 5.0, 토큰 360676, 초 134.3, 검사 2/2, 연 파일 없음 t1-new treatment-1: 점수 5.0, 토큰 183150, 초 123.4, 검사 2/2, 연 파일 pptx t1-new treatment-2: 점수 5.0, 토큰 187890, 초 110.7, 검사 2/2, 연 파일 pptx t2-edit control-1: 점수 5.0, 토큰 115865, 초 43.4, 검사 2/2, 연 파일 없음 t2-edit control-2: 점수 5.0, 토큰 113982, 초 42.2, 검사 2/2, 연 파일 없음 t2-edit oneliner-1: 점수 4.31, 토큰 147330, 초 67.2, 검사 1/2, 연 파일 없음
17회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: create_pitch.js (t1-new, run 1, Codex)
const pptxgen=require('pptxgenjs'); const p=new pptxgen();p.layout='LAYOUT_WIDE';p.title='Falcon launch';p.author='Falcon';p.theme={headFontFace:'Arial',bodyFontFace:'Arial',lang:'en-US'}; const dark='192620',green='C2F36B',muted='56665C'; function t(s,text,x,y,w,h,size=20,color=dark,bold=false){s.addText(text,{x,y,w,h,fontSize:size,fontFace:'Arial',color,bold,margin:0});} function base(n,d=false){const s=p.addSlide();s.background={color:d?dark:'FFFFFF'};t(s,'FALCON / LAUNCH',.65,.35,6,.25,10,d?green:muted,true);t(s,String(n).padStart(2,'0'),12,6.9,.6,.25,10,d?'FFFFFF':muted);return s;} function list(s,items,x,y,w,h,color=dark,size=22){s.addText(items.map((text,i)=>({text,options:{bullet:{indent:size},hanging:4,breakLine:i<items.length-1}})),{x,y,w,h,fontFace:'Arial',fontSize:size,color,margin:0,paraSpaceAfter:23,valign:'top'});} function box(s,x,y,w,h,color){s.addShape(p.ShapeType.roundRect,{x,y,w,h,fill:{color},line:{color,transparency:100},radius:.15});} let s=base(1,true);t(s,'Falcon',.75,1.45,8,1.1,66,'FFFFFF',true);t(s,'Turn team plans into\nforward motion.',.75,2.85,8,1.5,34,'FFFFFF');t(s,'One workspace for priorities, owners, and progress.',.75,4.85,8,.7,20,'B9C8BE');s.addShape(p.ShapeType.chevron,{x:10,y:1.8,w:1.2,h:3.3,fill:{color:green},line:{color:green}});s.addShape(p.ShapeType.chevron,{x:11.4,y:2.5,w:.6,h:1.9,fill:{color:'71964A'},line:{color:'71964A'}});t(s,'Fictional product • Illustrative launch pitch',.75,6.5,8,.3,11,'B9C8BE');s.addNotes('Introduce Falcon as a fictional work-management product for growing teams. Its promise is to turn plans into coordinated action through shared priorities, owners, and progress. All business details are illustrative; quarterly revenue was supplied for this pitch.'); s=base(2);t(s,'Problem',.65,1,10,.65,40,dark,true);t(s,'Work moves faster than the tools tracking it.',.65,1.85,12,.6,25,muted);list(s,['Priorities scatter across chats, docs, and spreadsheets.','Unclear ownership delays decisions and handoffs.','Manual updates hide risks until deadlines slip.'],.8,3,7.1,3);box(s,9,2.85,3.55,3.15,'F0F5F1');t(s,'The cost',9.35,3.2,2.8,.4,20,muted,true);t(s,'More chasing.\nLess shipping.',9.35,3.95,2.8,1.3,30,dark,true);s.addNotes('Growing teams often keep priorities in multiple places, leaving owners and dependencies unclear. Explain how this creates time spent chasing updates. These are product assumptions for a fictional launch, not research findings.'); s=base(3);t(s,'Solution',.65,1,10,.65,40,dark,true);t(s,'One shared view. A clear next step.',.65,1.85,12,.6,25,muted);[['01','Align priorities',['Capture goals in one place.','Link tasks to outcomes.']],['02','Assign owners',['Give every task an owner.','Make deadlines visible.']],['03','Advance work',['Track progress together.','Flag blockers early.']]].forEach((a,i)=>{let x=.65+i*4.1;box(s,x,2.9,3.8,3.3,'F0F5F1');t(s,a[0],x+.3,3.2,1,.5,28,'638831',true);t(s,a[1],x+.3,4,3.2,.6,23,dark,true);list(s,a[2],x+.3,4.9,3.1,1.1,dark,16);});s.addNotes('Walk through the proposed workflow: align on priorities, assign owners, and advance work with visible progress and blockers. These are conceptual features of the fictional Falcon product. Emphasize the va [... excerpt: first 3200 of 5381 characters]