curl -L -o qr-barcode-gen.skill "https://aiskillstore.io/v1/agent/skills/bd03f070-2a1d-42c2-ac73-99e09e831183/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "bd03f070-2a1d-42c2-ac73-99e09e831183",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
QR code and 1D barcode generator/decoder — zero dependencies, Korean UTF-8 native, SVG+text-art output, 10+ audit rules
Compatible Platforms any
✅ No security risks found.
AI Review Stage
제공된 스킬 메타데이터와 코드 파일을 분석한 결과, 다음과 같은 판단을 내렸습니다: 1. **선언된 Permissions 일치 여부:** 스킬 메타데이터는 `network: false`, `filesystem: false`, `subprocess: false`로 선언되어 있습니다. 코드(`main.py` 및 `lib` 모듈)를 검토한 결과, `os.path`, `sys.stdin`, `sys.stdout`, `sys.path.insert`와 같은 표준 라이브러리 기능만 사용하며, 네트워크 통신(`requests`, `socket` 등), 파일 시스템 접근(`open`, `shutil` 등), 외부 프로세스 실행(`subprocess`, `os.system` 등)을 시도하는 코드는 발견되지 않았습니다. 이는 선언된 권한과 실제 코드가 완벽하게 일치함을 의미합니다. 2. **악의적 목적의 코드 여부:** 코드에서 데이터 탈취, 시스템 파괴, 또는 난독화의 흔적은 전혀 발견되지 않았습니다. 오히려 `lib/auditor.py` 모듈은 `javascript:`, `<script>`, `data:base64` 등 잠재적으로 위험한 패턴을 적극적으로 감지하고 경고하는 보안 기능을 포함하고 있습니다. 이는 스킬의 보안성을 높이는 긍정적인 요소입니다. 3. **선언되지 않은 외부 통신 여부:** 코드 내에서 외부 네트워크 통신을 위한 라이브러리(예: `requests`, `urllib`)나 시스템 호출이 전혀 사용되지 않았습니다. 스킬은 `stdin_stdout` 패턴에 따라 표준 입력을 받아 처리하고 표준 출력으로 결과를 반환하는 방식으로만 작동합니다. 4. **사용자 데이터 무단 수집/전송 여부:** 스킬은 입력된 데이터를 처리하여 결과를 반환할 뿐, 어떠한 방식으로도 사용자 데이터를 무단으로 수집하거나 외부로 전송하는 기능이 없습니다. `network: false` 권한 선언과 코드 내용이 이를 뒷받침합니다. 5. **코드 품질 및 목적 일치 여부:** 코드는 모듈화가 잘 되어 있고, 주석이 상세하며, 가독성이 높습니다. 'zero dependencies', 'Korean UTF-8 native', 'SVG+text-art output', '10+ audit rules' 등 메타데이터에 명시된 모든 기능과 특징이 코드에 충실하게 구현되어 있습니다. 특히, `qr_encoder.py`는 ISO/IEC 18004 표준을 자체 구현하여 외부 의존성 없이 QR 코드를 생성하며, `lib/svg_renderer.py`는 SVG 및 텍스트 아트를 순수 Python으로 렌더링합니다. `lib/qr_decoder.py`는 자체 생성한 텍스트 아트 QR 코드만 디코딩한다는 명확한 한계를 명시하여 투명성을 확보했습니다. 결론적으로, 이 스킬은 보안 위험이 없으며, 높은 코드 품질과 명확한 목적을 가지고 안전하게 작동하도록 설계되었습니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
https URL을 QR 코드로 인코딩합니다. ECL=Q로 URL에 권장 설정을 사용합니다.
{
"action": "generate_qr",
"data": "https://aiskillstore.io",
"error_correction": "Q",
"output_format": "text_art"
}
{
"action": "generate_qr",
"metadata": {
"data_length_bytes": 22,
"data_length_chars": 22,
"ecl": "Q",
"has_multibyte": false,
"mode": "byte",
"output_format": "text_art"
},
"modules": 25,
"qr_matrix": [
[
0,
0,
0
],
[
"..."
]
],
"qr_svg": "\u003csvg ...\u003e...\u003c/svg\u003e",
"qr_text_art": " ## ## ## ...(abbreviated)",
"version": 2
}
한국어 텍스트를 UTF-8 Byte 모드로 QR 인코딩합니다. 멀티바이트 메타데이터가 반환됩니다.
{
"action": "generate_qr",
"data": "\uc548\ub155\ud558\uc138\uc694 AI Skill Store",
"error_correction": "M",
"output_format": "matrix"
}
{
"action": "generate_qr",
"metadata": {
"data_length_bytes": 35,
"data_length_chars": 20,
"ecl": "M",
"has_multibyte": true,
"mode": "byte",
"output_format": "matrix"
},
"modules": 29,
"qr_matrix": [
[
1,
1,
1,
1,
1,
1,
1
]
],
"qr_svg": "\u003csvg ...\u003e...\u003c/svg\u003e",
"qr_text_art": " ## ##...",
"version": 3
}
EAN-13 바코드를 생성합니다. 12자리 입력 시 체크 디짓을 자동 계산합니다.
{
"action": "generate_barcode",
"data": "590123412345",
"format": "ean13"
}
{
"action": "generate_barcode",
"barcode_svg": "\u003csvg ...\u003e...\u003c/svg\u003e",
"barcode_text_art": "| ||| | |...",
"check_digit": "7",
"encoded_data": "5901234123457",
"encoded_pattern": [
1,
0,
1,
1,
0
],
"symbology": "EAN-13"
}
generate_qr로 생성한 text_art를 다시 원본 데이터로 복원합니다.
{
"action": "decode_qr",
"qr_text_art": " \n ########## \n ## ## \n ## ## ## \n ## ## \n ########## \n "
}
{
"action": "decode_qr",
"decoded_data": "HELLO",
"note": "\uc774 \ub514\ucf54\ub354\ub294 \uc774 \uc2a4\ud0ac\uc774 \uc0dd\uc131\ud55c text_art QR \ucf54\ub4dc\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4. / This decoder supports only text_art QR codes generated by this skill."
}
https URL을 QR 감사합니다. 짧은 URL에 ECL Q 이상 권장 메시지가 반환됩니다.
{
"action": "audit",
"data": "https://example.com",
"error_correction": "M",
"target": "qr"
}
{
"action": "audit",
"audit_result": {
"findings": [
{
"fix_hint": {
"action": "increase_ecl",
"field": "error_correction",
"reference": "ISO/IEC 18004:2015 \u00a77.4.1",
"suggested_value": "Q"
},
"message": "URL \ub370\uc774\ud130\uc5d0\ub294 ECL Q(25% \ubcf5\uad6c) \ub610\ub294 H(30% \ubcf5\uad6c)\ub97c \uad8c\uc7a5\ud569\ub2c8\ub2e4. \ud604\uc7ac ECL=M\ub294 \uc778\uc1c4 \ud488\uc9c8 \uc800\ud558 \uc2dc \uc2a4\uce94 \uc2e4\ud328 \uc704\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. / For URLs, ECL Q or H recommended. Current ECL=M may fail if print quality is low.",
"rule_id": "QUAL001",
"severity": "low",
"title": "URL\uc5d0 ECL Q/H \uad8c\uc7a5",
"title_en": "ECL Q/H recommended for URLs"
}
],
"passed": true,
"risk_level": "low",
"score": 95
}
}
javascript: URI 패턴이 포함된 데이터를 감사합니다. critical 발견이 반환됩니다.
{
"action": "audit",
"data": "javascript:alert(\u0027xss\u0027)",
"target": "qr"
}
{
"action": "audit",
"audit_result": {
"findings": [
{
"fix_hint": {
"action": "remove_pattern",
"field": "data",
"reference": "OWASP QR Code Security",
"suggested_value": "Remove or sanitize the dangerous pattern"
},
"message": "\ub370\uc774\ud130\uc5d0 \uc704\ud5d8\ud55c \ud328\ud134(javascript: URI \ud328\ud134)\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. QR \ucf54\ub4dc\ub85c \ubc30\ud3ec\ud560 \uacbd\uc6b0 \uc0ac\uc6a9\uc790 \uae30\uae30\uc5d0\uc11c \ubcf4\uc548 \uc704\ud611\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. / Data contains dangerous pattern (javascript: URI scheme). This may pose security risks when scanned.",
"rule_id": "SEC001",
"severity": "critical",
"title": "\uc704\ud5d8 \ud328\ud134 \uac10\uc9c0: javascript: URI \ud328\ud134",
"title_en": "Dangerous pattern detected: javascript: URI scheme"
}
],
"passed": false,
"risk_level": "critical",
"score": 10
}
}
한국어 텍스트 QR 감사 시 UTF-8 멀티바이트 및 CJK 안내를 반환합니다.
{
"action": "audit",
"data": "\uc548\ub155\ud558\uc138\uc694",
"error_correction": "L",
"target": "qr"
}
{
"action": "audit",
"audit_result": {
"findings": [
{
"fix_hint": {
"action": "verify_scanner_utf8",
"field": "data",
"reference": "ISO/IEC 18004:2015 \u00a76.4.5 (Byte mode)",
"suggested_value": "Ensure target scanner supports UTF-8 decoding"
},
"message": "\ub370\uc774\ud130\uc5d0 \uba40\ud2f0\ubc14\uc774\ud2b8 \ubb38\uc790\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 (\ubb38\uc790 \uc218=5, \ubc14\uc774\ud2b8 \uc218=15, \ud3c9\uade0 3.0\ubc14\uc774\ud2b8/\ubb38\uc790). \uc774 \uc2a4\ud0ac\uc740 Byte \ubaa8\ub4dc\ub85c UTF-8 \uc778\ucf54\ub529\ud569\ub2c8\ub2e4. / Data contains multibyte chars (chars=5, bytes=15, avg 3.0 bytes/char). Encoded in Byte mode (UTF-8).",
"rule_id": "I18N001",
"severity": "info",
"title": "UTF-8 \uba40\ud2f0\ubc14\uc774\ud2b8 \uac10\uc9c0",
"title_en": "UTF-8 multibyte characters detected"
},
{
"fix_hint": {
"action": "use_ecl_q_or_higher",
"field": "error_correction",
"reference": "ISO/IEC 18004:2015 \u00a76.4.5",
"suggested_value": "Q"
},
"message": "\ud55c\uad6d\uc5b4 \ub610\ub294 CJK \ubb38\uc790\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uac01 \ubb38\uc790\ub294 UTF-8\ub85c 3\ubc14\uc774\ud2b8\uc774\ubbc0\ub85c QR \uc6a9\ub7c9 \uacc4\uc0b0 \uc2dc \uc8fc\uc758\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. ECL Q \uc774\uc0c1\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4. / Korean/CJK characters detected. Each char is 3 bytes in UTF-8. ECL Q or higher recommended.",
"rule_id": "I18N002",
"severity": "info",
"title": "\ud55c\uad6d\uc5b4/CJK \ubb38\uc790 \uac10\uc9c0",
"title_en": "Korean/CJK characters detected"
}
],
"passed": true,
"risk_level": "low",
"score": 80
}
}
action 필드가 없으면 INVALID_INPUT 에러를 반환합니다.
{
"data": "hello"
}
{
"error": {
"code": "INVALID_INPUT",
"message": "action \ud544\ub4dc\uac00 \ub204\ub77d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud5c8\uc6a9\uac12: [\u0027audit\u0027, \u0027decode_qr\u0027, \u0027generate_barcode\u0027, \u0027generate_qr\u0027] / \u0027action\u0027 field is required. Allowed: [\u0027audit\u0027, \u0027decode_qr\u0027, \u0027generate_barcode\u0027, \u0027generate_qr\u0027]"
}
}
QR 버전 1–10 용량을 초과하는 데이터를 encode하면 ENCODE_ERROR를 반환합니다.
{
"action": "generate_qr",
"data": "A very very very long string that exceeds QR version 10 H capacity and cannot be encoded within version 1 to 10 range aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"error_correction": "H"
}
{
"error": {
"code": "ENCODE_ERROR",
"message": "Data too large for QR version 1\u201310 with ECL=H. Byte length=230. Try shorter data, ECL=L, or a higher version (not supported)."
}
}
All examples are also available via the agent API:
/v1/agent/skills/bd03f070-2a1d-42c2-ac73-99e09e831183/schema
No reviews yet. Be the first to leave one!