curl -L -o prompt-template-engine.skill "https://aiskillstore.io/v1/agent/skills/0acca157-cf7a-40fc-9e56-287edb805d3a/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "0acca157-cf7a-40fc-9e56-287edb805d3a",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Prompt template engine with 5 actions: render, parse, validate, list_variables, audit. Zero external dependencies. Korean variable name support, conditional/loop blocks, HTML/SQL/Shell escaping, missing variable detection.
호환 플랫폼: any
검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
✅ 보안 위험 항목이 발견되지 않았습니다.
AI 검수 단계
1. **Permissions 일치 여부:** 스킬 메타데이터에 `network: false`, `filesystem: false`, `subprocess: false`로 명확히 선언되어 있습니다. 제공된 `main.py` 코드 스니펫에는 외부 네트워크 통신, 파일 시스템 접근, 서브프로세스 실행을 시도하는 코드가 전혀 없으며, 'Zero external dependencies'라는 설명과도 일치합니다. 정적 분석 결과에서도 금지된 실행 파일이 발견되지 않아 선언된 권한을 준수하고 있음을 확인했습니다. 2. **악의적 목적 코드 여부:** 제공된 코드 스니펫 및 메타데이터에서 데이터 탈취, 시스템 파괴, 난독화 등 악의적인 목적의 코드는 발견되지 않았습니다. 오히려 `escape_mode` (html, sql, shell) 옵션과 `audit` 액션을 통해 SQL/HTML/Shell 인젝션 공격을 방지하고 보안 취약점을 감사하는 기능을 명시적으로 제공하여 보안에 대한 높은 인식을 보여줍니다. 3. **선언되지 않은 외부 통신 여부:** `network: false` 권한 선언에 따라 외부 통신은 허용되지 않으며, 코드 분석 결과에서도 외부 통신을 시도하는 어떠한 흔적도 발견되지 않았습니다. 4. **사용자 데이터 무단 수집/전송 여부:** 스킬은 입력으로 받은 템플릿과 변수를 처리하는 것이 주 목적이며, `network: false` 권한으로 인해 외부로 사용자 데이터를 무단으로 수집하거나 전송할 수 없습니다. 5. **코드 품질 및 목적 일치 여부:** 스킬의 설명, 입출력 스키마, 기능 목록, 예시가 매우 상세하고 명확하게 정의되어 있습니다. 한국어 변수명 지원, 조건/반복 블록, 다양한 이스케이핑 모드, 누락 변수 감지, 보안 감사 등 풍부한 기능을 제공하며, 'Zero external dependencies'를 통해 안정성과 보안성을 높였습니다. 제공된 `main.py` 코드 스니펫(토크나이저 부분)은 깔끔하고 효율적으로 작성되어 있으며, 스킬의 목적에 부합하는 높은 코드 품질을 보여줍니다. 특히 `sys.stdout` 및 `sys.stdin`의 UTF-8 강제 설정은 다국어 지원에 대한 세심한 고려를 나타냅니다. 종합적으로 판단할 때, 이 스킬은 기능성, 보안성, 코드 품질 면에서 매우 우수하며, AI 에이전트 스킬 스토어에 안전하게 등록될 수 있다고 판단됩니다.
이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.
한국어 변수명으로 프롬프트 렌더링 / Render prompt with Korean variable names
{
"action": "render",
"escape_mode": "none",
"template": "\uc548\ub155\ud558\uc138\uc694, {{\uc0ac\uc6a9\uc790\uba85}}\ub2d8. {{\uc11c\ube44\uc2a4\uba85}}\uc5d0 \uc624\uc2e0 \uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4.",
"variables": {
"\uc0ac\uc6a9\uc790\uba85": "\ud64d\uae38\ub3d9",
"\uc11c\ube44\uc2a4\uba85": "AI Skill Store"
}
}
{
"action": "render",
"meta": {
"escape_mode": "none",
"variables_provided": 2,
"variables_used": 2
},
"missing_variables": [],
"rendered": "\uc548\ub155\ud558\uc138\uc694, \ud64d\uae38\ub3d9\ub2d8. AI Skill Store\uc5d0 \uc624\uc2e0 \uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4."
}
조건부 블록 렌더링 / Render template with if/else conditional blocks
{
"action": "render",
"escape_mode": "none",
"template": "{% if is_premium %}\ud504\ub9ac\ubbf8\uc5c4 \uc0ac\uc6a9\uc790\uc785\ub2c8\ub2e4. \ucd94\uac00 \ud61c\ud0dd: {{benefits}}{% else %}\uc77c\ubc18 \uc0ac\uc6a9\uc790\uc785\ub2c8\ub2e4.{% endif %}",
"variables": {
"benefits": "\ubb34\uc81c\ud55c API \ud638\ucd9c",
"is_premium": true
}
}
{
"action": "render",
"meta": {
"escape_mode": "none",
"variables_provided": 2,
"variables_used": 2
},
"missing_variables": [],
"rendered": "\ud504\ub9ac\ubbf8\uc5c4 \uc0ac\uc6a9\uc790\uc785\ub2c8\ub2e4. \ucd94\uac00 \ud61c\ud0dd: \ubb34\uc81c\ud55c API \ud638\ucd9c"
}
반복문으로 목록 렌더링 / Render a list using for loop
{
"action": "render",
"escape_mode": "none",
"template": "\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ubaa8\ub378:\n{% for item in models %}- {{item}}\n{% endfor %}",
"variables": {
"models": [
"GPT-4",
"Claude 3",
"Gemini Pro"
]
}
}
{
"action": "render",
"meta": {
"escape_mode": "none",
"variables_provided": 1,
"variables_used": 1
},
"missing_variables": [],
"rendered": "\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ubaa8\ub378:\n- GPT-4\n- Claude 3\n- Gemini Pro\n"
}
HTML 이스케이핑으로 XSS 방지 / HTML escaping to prevent XSS injection
{
"action": "render",
"escape_mode": "html",
"template": "\u003cp\u003e\uc548\ub155\ud558\uc138\uc694, {{user_input}}\ub2d8\u003c/p\u003e",
"variables": {
"user_input": "\u003cscript\u003ealert(\u0027xss\u0027)\u003c/script\u003e"
}
}
{
"action": "render",
"meta": {
"escape_mode": "html",
"variables_provided": 1,
"variables_used": 1
},
"missing_variables": [],
"rendered": "\u003cp\u003e\uc548\ub155\ud558\uc138\uc694, \u0026lt;script\u0026gt;alert(\u0026#x27;xss\u0026#x27;)\u0026lt;/script\u0026gt;\ub2d8\u003c/p\u003e"
}
템플릿에서 변수 목록 추출 / Extract all variables from a template
{
"action": "list_variables",
"template": "{{\uc774\ub984}}\ub2d8\uc758 {{\uc9c1\ucc45}} \ubcf4\uace0\uc11c\uc785\ub2c8\ub2e4.\n{% if show_detail %}\uc138\ubd80 \ub0b4\uc6a9: {{detail}}{% endif %}"
}
{
"action": "list_variables",
"meta": {
"required_count": 2,
"total_variables": 4
},
"variables_found": [
{
"kind": "variable",
"line": 1,
"name": "\uc774\ub984",
"required": true
},
{
"kind": "variable",
"line": 1,
"name": "\uc9c1\ucc45",
"required": true
},
{
"kind": "condition",
"line": 2,
"name": "show_detail",
"required": false
},
{
"kind": "variable",
"line": 2,
"name": "detail",
"required": false
}
]
}
템플릿 구문 유효성 검사 / Validate template syntax for errors
{
"action": "validate",
"template": "Hello {{name}}. {% if active %}Active{% endif %}",
"variables": {
"active": true,
"name": "Alice"
}
}
{
"action": "validate",
"meta": {
"template_length": 47
},
"validation": {
"issues": [],
"valid": true,
"warnings": []
}
}
변수 누락 및 보안 감사 / Audit template for missing variables and security issues
{
"action": "audit",
"escape_mode": "none",
"template": "{{\uc0ac\uc6a9\uc790\uba85}}\ub2d8\uc774 {{\ucffc\ub9ac}}\ub97c SQL\uc5d0 \uc9c1\uc811 \uc0bd\uc785\ud569\ub2c8\ub2e4: SELECT * FROM users WHERE name=\u0027{{\ucffc\ub9ac}}\u0027",
"variables": {
"\uc0ac\uc6a9\uc790\uba85": "\ud64d\uae38\ub3d9"
}
}
{
"action": "audit",
"audit_report": {
"issues": [
{
"fix_hint": {
"action": "render",
"field": "variables.\ucffc\ub9ac",
"reference": "https://aiskillstore.io/skills/prompt-template-engine",
"suggested_replacement": "default_values\uc5d0 \u0027\ucffc\ub9ac\u0027 \uae30\ubcf8\uac12 \ucd94\uac00"
},
"message": "\ubcc0\uc218 \u0027\ucffc\ub9ac\u0027\uac00 \uc81c\uacf5\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uae30\ubcf8\uac12 \uc124\uc815\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",
"type": "missing_variable",
"variable": "\ucffc\ub9ac"
},
{
"fix_hint": {
"action": "render",
"field": "escape_mode",
"reference": "https://aiskillstore.io/skills/prompt-template-engine",
"suggested_replacement": "escape_mode: sql \uc124\uc815 \uad8c\uc7a5"
},
"message": "SQL \ucee8\ud14d\uc2a4\ud2b8\uc5d0\uc11c \uc774\uc2a4\ucf00\uc774\ud551 \uc5c6\uc774 \u0027\ucffc\ub9ac\u0027 \ubcc0\uc218 \uc0ac\uc6a9 \u2014 \ubcf4\uc548 \uc704\ud5d8",
"type": "sql_injection_risk",
"variable": "\ucffc\ub9ac"
}
],
"missing_variables": [
"\ucffc\ub9ac"
],
"score": 45,
"unescaped_variables": [
"\ucffc\ub9ac"
]
},
"meta": {
"escape_mode": "none",
"total_variables": 2
}
}
모든 예시는 에이전트 API로도 조회 가능:
/v1/agent/skills/0acca157-cf7a-40fc-9e56-287edb805d3a/schema
아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!