npx skills add https://github.com/unicorn-plugins/claude-skills --skill pdf
Agent 安装分布
Skill 文档
PDF ì²ë¦¬
[PDF ì²ë¦¬ ì¤í¬ íì±í]
목í
PDF íì¼ì ëí 모ë ìì ì ì²ë¦¬í¨. í ì¤í¸/í ì´ë¸ ì¶ì¶, PDF ë³í©/ë¶í , íì , ìí°ë§í¬ ì¶ê°, ì ê· PDF ìì±, í¼ ìì±, ìí¸í/ë³µí¸í, ì´ë¯¸ì§ ì¶ì¶, OCRì íµí ì¤ìº PDF ê²ì ê°ë¥í ë±ì í¬í¨.
íì±í ì¡°ê±´
ì¬ì©ìê° .pdf íì¼ì ì¸ê¸íê±°ë PDF ê´ë ¨ ìì
ìì² ì íì±í.
ìì´ì í¸ í¸ì¶ ê·ì¹
ìì´ì í¸ FQN
| ìì´ì í¸ | FQN | í°ì´ |
|---|---|---|
| pdf-handler | claude-skills:pdf-handler:pdf-handler |
MEDIUM |
í롬íí¸ ì¡°ë¦½ ì ì°¨
agents/pdf-handler/ìì 3íì¼ ë¡ë (AGENT.md + agentcard.yaml + tools.yaml)gateway/runtime-mapping.yaml참조íì¬ êµ¬ì²´í:- ëª¨ë¸ êµ¬ì²´í: agentcard.yamlì
tier: MEDIUMâtier_mapping.default.MEDIUMâclaude-sonnet-4-5 - í´ êµ¬ì²´í: tools.yamlì ì¶ì ë구 â
tool_mappingìì ì¤ì ë구 ê²°ì - ê¸ì§ì¡ì
구체í:
forbidden_actions: [user_interact, agent_delegate]âaction_mappingìì[AskUserQuestion, Task]ì ì¸ - ìµì¢ ë구 = (구체íë ë구) – (ì ì¸ ë구)
- ëª¨ë¸ êµ¬ì²´í: agentcard.yamlì
- í롬íí¸ ì¡°ë¦½: ê³µíµ ì ì (runtime-mapping) â ìì´ì í¸ë³ ì ì (3íì¼) â ëì (ìì ì§ì)
Task(subagent_type="claude-skills:pdf-handler:pdf-handler", model="claude-sonnet-4-5", prompt=조립ë í롬íí¸)í¸ì¶
ì¤ì¼ì¤í¸ë ì´ì ì¤í¬ íì©
| ìí¬íë¡ì° Phase | ì¶ì² ì¤í¬ | ì ì© |
|---|---|---|
| Phase 1 (ìì ì í íë³) | ulw ë§¤ì§ í¤ìë |
íì |
| Phase 2-A (PDF ì½ê¸°/ì¶ì¶) | ulw ë§¤ì§ í¤ìë |
íì |
| Phase 2-B (ì PDF ìì±) | /oh-my-claudecode:ralph |
íì |
| Phase 2-C (ë³í©/ë¶í ) | ulw ë§¤ì§ í¤ìë |
íì |
| Phase 2-D (í¼ ìì±) | /oh-my-claudecode:ralph |
íì |
| Phase 2-E (ì´ë¯¸ì§ ë³í) | ulw ë§¤ì§ í¤ìë |
íì |
| Phase 3 (ê²°ê³¼ ê²ì¦) | ulw ë§¤ì§ í¤ìë |
íì |
ìí¬íë¡ì°
Phase 1: ìì
ì í íë³ (ulw íì©)
ì¬ì©ì ìì²ì ë¶ìíì¬ ìì ì íì ì½ê¸°/ìì±/í¸ì§/í¼/ë³í ì¤ íëë¡ ë¶ë¥.
Phase 2-A: PDF ì½ê¸°/ì¶ì¶ â Agent: pdf-handler (ulw íì©)
- TASK: pypdf, pdfplumber를 íì©íì¬ PDFìì í ì¤í¸, í ì´ë¸, ë©íë°ì´í° ì¶ì¶
- EXPECTED OUTCOME: ì¶ì¶ë í ì¤í¸/í ì´ë¸ ë°ì´í°, ë©íë°ì´í°
- MUST DO: pdfplumberë¡ í ì´ë¸ ì¶ì¶ ì ë ì´ìì ë³´ì¡´, ì¤ìº PDFë OCR íì ì¬ë¶ ìë´
- MUST NOT DO: ì¤ìº PDF를 ì¼ë° ì¶ì¶ë¡ ì²ë¦¬íì§ ìì (OCR íì)
- CONTEXT: ì본 PDF ê²½ë¡, ì¶ì¶ ëì(í
ì¤í¸/í
ì´ë¸/ë©íë°ì´í°),
PYTHONPATH=gateway/toolsíê²½ë³ì ì¤ì íì
Phase 2-B: ì PDF ìì± â Agent: pdf-handler (/oh-my-claudecode:ralph íì©)
- TASK: reportlab를 íì©íì¬ ì ê· PDF ìì±
- EXPECTED OUTCOME: ì í¨í PDF 구조를 ê°ì§ ì ê· PDF íì¼
- MUST DO: Paragraph ê°ì²´ìì
<sub>,<super>íê·¸ ì¬ì© (Unicode 첨ì ê¸ì§), ì¬ë¬ íì´ì§ ìì± ì Platypus íë ììí¬ íì© - MUST NOT DO: Unicode 첨ì/ì첨ì 문ì (âââ, â°Â¹Â²) ì¬ì© ê¸ì§ (ê²ì ë°ì¤ ë ëë§ë¨)
- CONTEXT: ì½í
ì¸ ì구ì¬í, íì´ì§ ë ì´ìì,
PYTHONPATH=gateway/toolsíê²½ë³ì ì¤ì íì
Phase 2-C: ë³í©/ë¶í â Agent: pdf-handler (ulw íì©)
- TASK: pypdf + qpdfë¡ PDF ë³í©/ë¶í
- EXPECTED OUTCOME: ë³í©ë PDF ëë ë¶í ë PDF íì¼ë¤
- MUST DO: qpdf íì©íì¬ êµ¬ì¡° ë¬´ê²°ì± ë³´ì¡´
- MUST NOT DO: ë©íë°ì´í° ìì¤ ê¸ì§
- CONTEXT: ì본 PDF ê²½ë¡, ë³í©/ë¶í ë²ì,
PYTHONPATH=gateway/toolsíê²½ë³ì ì¤ì íì
Phase 2-D: í¼ ìì± â Agent: pdf-handler (/oh-my-claudecode:ralph íì©)
- TASK: ì ëµ íë³(íë ë°©ì vs 주ì ì¤ë²ë ì´) í PDF í¼ ìì±
- EXPECTED OUTCOME: ìì± ìë£ë PDF í¼, ë°ì´ë© ë°ì¤ ê²ì¦ íµê³¼
- MUST DO: check_fillable_fields.pyë¡ íë íì¸, fill_fillable_fields.py(íë ë°©ì) ëë fill_pdf_form_with_annotations.py(주ì ì¤ë²ë ì´) ì í, check_bounding_boxes.pyë¡ ì¢í ê²ì¦
- MUST NOT DO: ì ëµ íë³ ìì´ í¼ ìì± ìë ê¸ì§, ë°ì´ë© ë°ì¤ ê²ì¦ ìì´ ê²°ê³¼ ì ë¬ ê¸ì§
- CONTEXT: ì본 PDF ê²½ë¡, í¼ ë°ì´í°, agents/pdf-handler/references/pdf-forms-guide.md 참조,
PYTHONPATH=gateway/toolsíê²½ë³ì ì¤ì íì
ì¤í¬ë¦½í¸ í¸ì¶ í¨í´:
python gateway/tools/pdf/check_fillable_fields.py input.pdf
python gateway/tools/pdf/fill_fillable_fields.py input.pdf output.pdf
PYTHONPATH=gateway/tools python gateway/tools/pdf/fill_pdf_form_with_annotations.py input.pdf output.pdf
Phase 2-E: ì´ë¯¸ì§ ë³í â Agent: pdf-handler (ulw íì©)
- TASK: PDF를 PNG ì´ë¯¸ì§ë¡ ë³í
- EXPECTED OUTCOME: ê° íì´ì§ê° PNG ì´ë¯¸ì§ë¡ ë³íë¨
- MUST DO: convert_pdf_to_images.py íì©
- MUST NOT DO: ì´ë¯¸ì§ íì§ ì í ê¸ì§
- CONTEXT: ì본 PDF ê²½ë¡, ì¶ë ¥ ëë í 리,
PYTHONPATH=gateway/toolsíê²½ë³ì ì¤ì íì
ì¤í¬ë¦½í¸ í¸ì¶ í¨í´:
PYTHONPATH=gateway/tools python gateway/tools/pdf/convert_pdf_to_images.py input.pdf output_dir/
Phase 3: ê²°ê³¼ ê²ì¦ (ulw íì©)
- PDF ì½ê¸° ê°ë¥ ì¬ë¶ íì¸ (pypdf)
- í¼ ìì±ì¸ ê²½ì° check_bounding_boxes.pyë¡ ì¢í ê²ì¦
- create_validation_image.pyë¡ ìê°ì ê²ì¦ ì´ë¯¸ì§ ìì±
- 모ë ê²ì¦ íµê³¼ íìë§ ìë£ ì ì¸
ì¤í¬ë¦½í¸ í¸ì¶ í¨í´:
python gateway/tools/pdf/check_bounding_boxes.py output.pdf
PYTHONPATH=gateway/tools python gateway/tools/pdf/create_validation_image.py output.pdf validation.png
ìë£ ì¡°ê±´
- ìì±/í¸ì§ë PDFê° ì í¨í PDF 구조를 ê°ì§
- í¼ ìì± ì check_bounding_boxes.py ê²ì¦ íµê³¼
- ìê°ì ê²ì¦ ì´ë¯¸ì§(create_validation_image.py)ë¡ íì¸ ê°ë¥
- ì¬ì©ì ìì²ì 모ë íëª©ì´ ë°ìë¨
ê²ì¦ íë¡í ì½
- PDF ì½ê¸° ê°ë¥ ì¬ë¶ íì¸ (pypdf)
- í¼ ìì±ì¸ ê²½ì° check_bounding_boxes.pyë¡ ì¢í ê²ì¦
- create_validation_image.pyë¡ ìê°ì ê²ì¦ ì´ë¯¸ì§ ìì±
- 모ë ê²ì¦ íµê³¼ íìë§ ìë£ ì ì¸
ìí ì 리
ìë£ ì ìì ì´ë¯¸ì§ íì¼ ìì± ì ì¬ì©ììê² ìë´. ìí íì¼ ë¯¸ì¬ì© (ë¨ê±´ ìì ).
ì·¨ì
cancelomc ëë stopomc í¤ìëë¡ ì¦ì ì¤ë¨.
ì¬ê°
ì본 PDFê° ë³´ì¡´ëì´ ìì¼ë¯ë¡ ì²ìë¶í° ì¬ìì ê°ë¥.
MUST ê·ì¹
| # | ê·ì¹ |
|---|---|
| 1 | í¼ ìì± ì ë°ëì ì ëµ íë³ (íë ë°©ì vs 주ì ì¤ë²ë ì´) ì í |
| 2 | ìê°ì ê²ì¦ ì´ë¯¸ì§ë¥¼ ìì±íì¬ ê²°ê³¼ íì¸ |
| 3 | 모ë Phaseì ì¤ì¼ì¤í¸ë ì´ì ì¤í¬ íì© íì ëª ì |
| 4 | ìì´ì í¸ ìì ì 5í목 (TASK, EXPECTED OUTCOME, MUST DO, MUST NOT DO, CONTEXT) í¬í¨ |
| 5 | PDF 커ì¤í
ë구 í¸ì¶ ì PYTHONPATH=gateway/tools íê²½ë³ì ì¤ì íì |
MUST NOT ê·ì¹
| # | ê¸ì§ ì¬í |
|---|---|
| 1 | í¼ ì ëµ íë³ ìì´ ì§ì í¼ ìì± ìë ê¸ì§ |
| 2 | ë°ì´ë© ë°ì¤ ê²ì¦ ìì´ í¼ ê²°ê³¼ ì ë¬ ê¸ì§ |
| 3 | ìì´ì í¸ì ë´ë¶ ì¬ê³ ë°©ìì´ë ë¨ê³ë³ ì 차를 ì¤í¬ìì 기ì íì§ ìì |
| 4 | reportlab ì¬ì© ì Unicode 첨ì/ì첨ì 문ì ì¬ì© ê¸ì§ |
ê²ì¦ ì²´í¬ë¦¬ì¤í¸
- frontmatterì name, description í¬í¨
- ìì´ì í¸ í¸ì¶ ê·ì¹ ì¹ì í¬í¨ (pdf-handler FQN, í롬íí¸ ì¡°ë¦½ 4ë¨ê³, ì¤ì¼ì¤í¸ë ì´ì íì©)
- 모ë Phaseì ì¤í¬ ë¶ì¤í ëª ì
- ìë£ ì¡°ê±´, ê²ì¦ íë¡í ì½, ìí ì 리, ì·¨ì/ì¬ê° ì¹ì í¬í¨
- MUST ê·ì¹, MUST NOT ê·ì¹ ì¹ì í¬í¨
- Agent ìì ë¨ê³ì 5í목 í¬í¨
- ì¤í¬ë¦½í¸ í¸ì¶ í¨í´ì PYTHONPATH ì¤ì ëª ì