curl -L -o regex-builder.skill "https://aiskillstore.io/v1/agent/skills/60bc9850-0a4c-4107-aa2a-4bdad21ceed8/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "60bc9850-0a4c-4107-aa2a-4bdad21ceed8",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
자연어 설명으로 정규표현식을 생성하고, 테스트 케이스와 함께 설명을 제공합니다.
Compatible Platforms any
✅ No security risks found.
AI Review Stage
스킬 메타데이터와 코드 파일을 상세히 검토했습니다. 1. **권한 일치 여부**: 메타데이터에 `network: false`, `filesystem: false`, `subprocess: true`로 선언되어 있습니다. 코드 분석 결과, `lib/tester.py`에서 ReDoS 공격 방어를 위해 `subprocess.run()`을 사용하여 Python 자체를 자식 프로세스로 실행하는 부분이 확인되었습니다. 이는 선언된 `subprocess: true` 권한과 일치하며, 외부 명령어를 실행하는 것이 아니라 제어된 내부 스크립트를 실행하므로 안전합니다. 네트워크 및 파일 시스템 접근은 확인되지 않았습니다. 2. **악의적 목적 코드**: 데이터 탈취, 시스템 파괴, 난독화 등 악의적인 목적으로 의심될 만한 코드는 발견되지 않았습니다. 코드는 명확하고 스킬의 기능 구현에 집중되어 있습니다. 3. **선언되지 않은 외부 통신**: `network: false`로 선언되었으며, 코드 내에서 `requests`나 `urllib` 등 네트워크 통신을 위한 라이브러리 사용이나 외부 서버로의 데이터 전송 시도는 발견되지 않았습니다. 4. **사용자 데이터 무단 수집/전송**: 스킬은 표준 입력(stdin)으로 데이터를 받아 처리하고 표준 출력(stdout)으로 결과를 반환하는 CLI 방식으로 동작합니다. 사용자 데이터를 무단으로 수집하거나 외부로 전송하는 기능은 없습니다. 5. **코드 품질**: 코드는 Python 표준 라이브러리만을 사용하며, 각 모듈이 명확한 역할을 수행하도록 잘 분리되어 있습니다. 특히 `lib/tester.py`의 ReDoS 방어 로직과 `lib/sampler.py`의 `sre_parse`를 활용한 샘플 생성 로직은 스킬의 목적에 부합하는 견고한 구현으로 판단됩니다. 정적 분석 결과에서도 'approved' 및 'red_flags_found: []'로 보고되어 코드의 안전성을 뒷받침합니다. 종합적으로, 이 스킬은 선언된 권한 범위 내에서 안전하게 동작하며, 악의적인 요소나 보안 취약점이 발견되지 않았습니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
이메일 주소 패턴을 자연어로 요청하면 카탈로그에서 검증된 패턴을 반환합니다.
{
"action": "build",
"intent": "\uc774\uba54\uc77c \uc8fc\uc18c \uac80\uc99d",
"language": "ko"
}
{
"action": "build",
"catalog_id": "email_address",
"description_en": "Standard email address (RFC 5321 approximation)",
"description_ko": "\ud45c\uc900 \uc774\uba54\uc77c \uc8fc\uc18c (RFC 5321 \uadfc\uc0ac)",
"regex": "^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$",
"regex_pcre": "^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$",
"source": "catalog"
}
한국 휴대폰 번호 패턴을 요청합니다. 하이픈 유무 모두 허용.
{
"action": "build",
"intent": "\ud55c\uad6d \ud734\ub300\ud3f0 \ubc88\ud638",
"language": "ko"
}
{
"action": "build",
"catalog_id": "kr_mobile_phone",
"description_en": "Korean mobile phone number (010/011/016/017/018/019, optional hyphens)",
"description_ko": "\ud55c\uad6d \ud734\ub300\ud3f0 \ubc88\ud638 (010/011/016/017/018/019, \ud558\uc774\ud508 \uc120\ud0dd)",
"regex": "^01[016789]-?\\d{3,4}-?\\d{4}$",
"regex_pcre": "^01[016789]-?\\d{3,4}-?\\d{4}$",
"source": "catalog"
}
이메일 정규식으로 여러 문자열을 테스트합니다. named group 결과 포함.
{
"action": "test",
"flags": {
"ignorecase": false
},
"language": "ko",
"regex": "^(?P\u003cuser\u003e[\\w.%+\\-]+)@(?P\u003cdomain\u003e[\\w.\\-]+\\.[a-zA-Z]{2,})$",
"test_strings": [
"user@example.com",
"invalid-email",
"admin@korea.co.kr"
]
}
{
"action": "test",
"regex": "^(?P\u003cuser\u003e[\\w.%+\\-]+)@(?P\u003cdomain\u003e[\\w.\\-]+\\.[a-zA-Z]{2,})$",
"test_results": [
{
"all_matches": [
"user@example.com"
],
"groups": [
"user",
"example.com"
],
"input": "user@example.com",
"match_text": "user@example.com",
"matched": true,
"named_groups": {
"domain": "example.com",
"user": "user"
}
},
{
"all_matches": [],
"groups": [],
"input": "invalid-email",
"match_text": null,
"matched": false,
"named_groups": {}
},
{
"all_matches": [
"admin@korea.co.kr"
],
"groups": [
"admin",
"korea.co.kr"
],
"input": "admin@korea.co.kr",
"match_text": "admin@korea.co.kr",
"matched": true,
"named_groups": {
"domain": "korea.co.kr",
"user": "admin"
}
}
]
}
정규식을 토큰 단위로 분해하고 한국어로 설명합니다.
{
"action": "explain",
"language": "ko",
"regex": "\\d{3}-\\d{4}-\\d{4}"
}
{
"action": "explain",
"explanation": {
"summary_en": "Matches 3 digits, hyphen, 4 digits, hyphen, 4 digits",
"summary_ko": "\uc22b\uc790 3\uac1c, \ud558\uc774\ud508(-), \uc22b\uc790 4\uac1c, \ud558\uc774\ud508(-), \uc22b\uc790 4\uac1c \uc21c\uc11c\ub85c \ub9e4\uce58\ud558\ub294 \ud328\ud134",
"tokens": [
{
"meaning_en": "Exactly 3 digits (0-9)",
"meaning_ko": "\uc22b\uc790(0-9) \uc815\ud655\ud788 3\uac1c",
"token": "\\d{3}"
},
{
"meaning_en": "A literal hyphen character",
"meaning_ko": "\ud558\uc774\ud508(-) \ubb38\uc790 1\uac1c",
"token": "-"
},
{
"meaning_en": "Exactly 4 digits (0-9)",
"meaning_ko": "\uc22b\uc790(0-9) \uc815\ud655\ud788 4\uac1c",
"token": "\\d{4}"
},
{
"meaning_en": "A literal hyphen character",
"meaning_ko": "\ud558\uc774\ud508(-) \ubb38\uc790 1\uac1c",
"token": "-"
},
{
"meaning_en": "Exactly 4 digits (0-9)",
"meaning_ko": "\uc22b\uc790(0-9) \uc815\ud655\ud788 4\uac1c",
"token": "\\d{4}"
}
]
},
"regex": "\\d{3}-\\d{4}-\\d{4}"
}
잘 작성된 이메일 정규식을 감사하면 safe 등급을 반환합니다.
{
"action": "audit",
"language": "ko",
"regex": "^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$"
}
{
"action": "audit",
"audit_result": {
"findings": [
{
"category": "STR",
"fix_hint": {
"action": "add_named_groups",
"original": "([a-zA-Z0-9._%+\\-]+)",
"reference": "https://docs.python.org/3/library/re.html#re.Pattern.groupdict",
"suggested": "(?P\u003cuser\u003e[a-zA-Z0-9._%+\\-]+)"
},
"message": "\uadf8\ub8f9\uc5d0 \uc774\ub984\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. (?P\u003cname\u003e...) \ud615\uc2dd\uc73c\ub85c \uba85\uba85\ud558\uba74 \uc5d0\uc774\uc804\ud2b8\uac00 \uacb0\uacfc\ub97c \uad6c\uc870\uc801\uc73c\ub85c \ucc38\uc870\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"rule_id": "STR004",
"severity": "info",
"title_en": "No named groups",
"title_ko": "\uba85\uba85 \uadf8\ub8f9 \uc5c6\uc74c"
}
],
"passed": true,
"risk_level": "safe",
"score": 95
},
"regex": "^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$"
}
중첩 quantifier(ReDoS 위험)와 anchor 누락을 가진 패턴을 감사합니다.
{
"action": "audit",
"language": "ko",
"regex": "(a+)+"
}
{
"action": "audit",
"audit_result": {
"findings": [
{
"category": "PERF",
"fix_hint": {
"action": "rewrite_pattern",
"original": "(a+)+",
"reference": "https://owasp.org/www-community/attacks/ReDoS",
"suggested": "a+"
},
"message": "(a+)+ \ud328\ud134\uc740 Catastrophic Backtracking\uc744 \uc720\ubc1c\ud569\ub2c8\ub2e4. \uae34 \uc785\ub825\uc5d0\uc11c \uc9c0\uc218 \uc2dc\uac04 \ubcf5\uc7a1\ub3c4\ub85c DoS \uacf5\uaca9\uc5d0 \uc545\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"rule_id": "PERF001",
"severity": "critical",
"title_en": "Nested quantifier \u2014 catastrophic backtracking risk",
"title_ko": "\uc911\ucca9 quantifier \u2014 Catastrophic Backtracking \uc704\ud5d8"
},
{
"category": "STR",
"fix_hint": {
"action": "add_anchors",
"original": "(a+)+",
"reference": "https://docs.python.org/3/library/re.html",
"suggested": "^(a+)+$"
},
"message": "^ \ub610\ub294 $ anchor\uac00 \uc5c6\uc5b4 \ubb38\uc790\uc5f4 \ub0b4 \ubd80\ubd84 \ub9e4\uce58\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"rule_id": "STR001",
"severity": "medium",
"title_en": "Missing anchors",
"title_ko": "Anchor \ub204\ub77d"
}
],
"passed": false,
"risk_level": "critical",
"score": 10
},
"regex": "(a+)+"
}
정규식이 매치하는 샘플 문자열 5개를 자동 생성합니다.
{
"action": "generate_samples",
"language": "ko",
"regex": "\\d{3}-\\d{4}-\\d{4}"
}
{
"action": "generate_samples",
"regex": "\\d{3}-\\d{4}-\\d{4}",
"samples": [
"000-0000-0000",
"123-4567-8901",
"010-1234-5678",
"999-1111-2222",
"555-9876-5432"
]
}
유효하지 않은 정규식을 test 하면 INVALID_REGEX 에러를 반환합니다.
{
"action": "test",
"language": "ko",
"regex": "[unclosed",
"test_strings": [
"hello"
]
}
{
"error": {
"code": "INVALID_REGEX",
"message": "\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc815\uaddc\uc2dd\uc785\ub2c8\ub2e4: unterminated character set at position 0 / Invalid regex: unterminated character set at position 0"
}
}
All examples are also available via the agent API:
/v1/agent/skills/60bc9850-0a4c-4107-aa2a-4bdad21ceed8/schema
No reviews yet. Be the first to leave one!