curl -L -o csv-data-validator.skill "https://aiskillstore.io/v1/agent/skills/06f1c9e5-5d73-46ed-a807-72ebcabc628a/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "06f1c9e5-5d73-46ed-a807-72ebcabc628a",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
CSV/TSV data validation toolkit — schema inference, type checking, null detection, duplicate detection, and quality reports (stdlib only)
호환 플랫폼: any
검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)", '정보: spec: usk/1.0 미선언 — v2 패키지로 처리됩니다. 자동 변환 및 에이전트 검색 기능을 사용하려면 USK v3로 업그레이드하세요.']
✅ 보안 위험 항목이 발견되지 않았습니다.
AI 검수 단계
1. **선언된 permissions과 실제 코드 일치 여부**: 스킬 메타데이터에 `network: false`, `filesystem: false`, `subprocess: false`로 명확하게 선언되어 있습니다. 이는 스킬이 외부 네트워크 통신, 파일 시스템 접근, 외부 프로세스 실행을 하지 않음을 의미합니다. `extended_description`에서 'Python stdlib csv module only — no pandas, no external dependencies'라고 명시하여 이러한 제한을 더욱 강조합니다. 정적 분석 결과(`status: approved`, `red_flags_found: []`) 또한 이러한 선언과 일치함을 시사합니다. 2. **악의적 목적의 코드 여부**: 정적 분석 결과 `red_flags_found: []` 및 `obfuscation_warnings: []`로 악의적인 코드나 난독화가 발견되지 않았습니다. 선언된 권한 제한(`network: false`, `filesystem: false`, `subprocess: false`)으로 인해 데이터 탈취나 시스템 파괴와 같은 악의적인 행위는 사실상 불가능합니다. 3. **선언되지 않은 외부 통신 여부**: `network: false` 선언과 정적 분석 결과에 따라 선언되지 않은 외부 통신은 없을 것으로 판단됩니다. 4. **사용자 데이터 무단 수집/전송 여부**: `csv_content`를 `stdin`으로 받아 처리하고 `stdout`으로 결과를 반환하는 `stdin_stdout` 호출 패턴을 사용하며, 네트워크 및 파일 시스템 접근이 차단되어 사용자 데이터를 무단으로 수집하거나 전송할 수 없습니다. 5. **코드 품질 및 목적 일치 여부**: 스킬의 목적(CSV/TSV 데이터 유효성 검사)이 명확하며, 입력/출력 스키마, 기능, 예시가 상세하게 정의되어 있습니다. 'stdlib only' 사용은 코드의 견고성과 최소한의 의존성을 시사하며, 이는 스킬의 목적에 부합하는 좋은 품질의 구현을 기대하게 합니다. 제공된 정보(메타데이터 및 정적 분석 결과)만으로는 실제 코드를 직접 검토할 수 없지만, 메타데이터의 명확한 보안 선언과 자동화된 정적 분석 결과가 모두 긍정적이므로 이 스킬은 안전하다고 판단됩니다.
이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.
Auto-detect column types from CSV header + data rows
{
"action": "infer_schema",
"csv_content": "id,name,age,salary,joined,active\n1,Alice,30,75000.50,2020-01-15,true\n2,Bob,25,55000.00,2021-06-01,false\n3,Carol,35,95000.75,2019-03-20,true"
}
{
"action": "infer_schema",
"ok": true,
"result": {
"column_count": 6,
"delimiter_detected": ",",
"row_count": 3,
"schema": {
"active": "bool",
"age": "int",
"id": "int",
"joined": "date",
"name": "string",
"salary": "float"
}
}
}
Validate CSV against a user-provided schema, report violations
{
"action": "validate_types",
"csv_content": "id,name,age\n1,Alice,30\n2,Bob,twenty\n3,Carol,35",
"schema": {
"age": "int",
"id": "int",
"name": "string"
}
}
{
"action": "validate_types",
"ok": true,
"result": {
"total_rows": 3,
"valid": false,
"valid_rows": 2,
"violation_count": 1,
"violations": [
{
"column": "age",
"expected_type": "int",
"message": "Cannot parse \u0027twenty\u0027 as int",
"row": 3,
"value": "twenty"
}
]
}
}
Detect null/empty/whitespace-only values per column
{
"action": "detect_nulls",
"csv_content": "id,name,email\n1,Alice,alice@example.com\n2,,bob@example.com\n3,Carol,\n4,Dave, "
}
{
"action": "detect_nulls",
"ok": true,
"result": {
"columns_with_nulls": [
"name",
"email"
],
"null_summary": {
"email": {
"null_count": 2,
"null_ratio": 0.5,
"null_rows": [
3,
4
]
},
"id": {
"null_count": 0,
"null_ratio": 0.0,
"null_rows": []
},
"name": {
"null_count": 1,
"null_ratio": 0.25,
"null_rows": [
2
]
}
},
"total_nulls": 3,
"total_rows": 4
}
}
Detect duplicate rows using all columns or key columns
{
"action": "detect_duplicates",
"csv_content": "id,name,email\n1,Alice,alice@example.com\n2,Bob,bob@example.com\n1,Alice,alice@example.com\n3,Carol,carol@example.com",
"key_columns": [
"id",
"email"
]
}
{
"action": "detect_duplicates",
"ok": true,
"result": {
"duplicate_count": 1,
"duplicates": [
{
"count": 2,
"key_values": {
"email": "alice@example.com",
"id": "1"
},
"row_indices": [
1,
3
]
}
],
"total_duplicate_rows": 2,
"total_rows": 4,
"unique_rows": 3
}
}
Generate a comprehensive data quality report
{
"action": "generate_report",
"csv_content": "id,name,age,email\n1,Alice,30,alice@example.com\n2,,25,bob@example.com\n3,Carol,thirty,carol@example.com\n1,Alice,30,alice@example.com"
}
{
"action": "generate_report",
"ok": true,
"result": {
"duplicate_issues": {
"duplicate_groups": 1,
"total_duplicate_rows": 2
},
"null_issues": {
"columns_with_nulls": [
"name"
],
"total_nulls": 1
},
"quality_score": 62,
"recommendations": [
"Column \u0027name\u0027 has 25.0% null values",
"1 duplicate row groups detected",
"Column \u0027age\u0027 has mixed types"
],
"schema_inferred": {
"age": "string",
"email": "string",
"id": "int",
"name": "string"
},
"summary": {
"delimiter": ",",
"encoding_hint": "utf-8",
"total_columns": 4,
"total_rows": 4
},
"type_consistency": {
"age": {
"consistent": false,
"inconsistent_count": 1
},
"id": {
"consistent": true
}
}
}
}
Auto-detect tab delimiter
{
"action": "infer_schema",
"csv_content": "id\tname\tage\n1\tAlice\t30\n2\tBob\t25"
}
{
"action": "infer_schema",
"ok": true,
"result": {
"delimiter_detected": "\t",
"schema": {
"age": "int",
"id": "int",
"name": "string"
}
}
}
Returns error when csv_content is absent
{
"action": "infer_schema"
}
{
"error": {
"code": "MISSING_FIELD",
"message": "Field \u0027csv_content\u0027 is required"
},
"ok": false
}
모든 예시는 에이전트 API로도 조회 가능:
/v1/agent/skills/06f1c9e5-5d73-46ed-a807-72ebcabc628a/schema
아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!