关于 Skill Validator
Skill Validator 是用于检查 Skill 和 MCP 实现是否符合清单声明的验证工具,适合维护者进行质量审查。它借助 Codex 比较描述、前置条件、效果和 API,并报告偏差与覆盖率。
主要功能
- 01语义比较描述与代码
- 02检查前置条件是否落实
- 03核实声明效果是否实现
- 04分析 API 与清单一致性
- 05检测偏差并计算覆盖率
适用场景
- 01更新 Skill 后检查实现
- 02审计清单与代码准确性
- 03发布前发现功能缺失
- 04在 CI/CD 中执行验证
MCP 相关
面向 Skill 和 MCP 实现进行清单验证;输入可包含 MCP 目录及其清单和代码。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ daffy0208/ ai-dev-standards --skill skill-validator安装后在 Claude Code 中输入/skill-validator确认已加载。
附带文件validate.shmanifest.yaml
详细介绍
技能验证器
使用 Codex 进行语义比较,验证实现是否符合清单
用途
确保技能/MCP 实现确实提供了清单所承诺的内容。使用 Codex 进行语义分析,将描述、前提条件和效果与实际代码进行比较。检测偏差、缺失的功能和夸大承诺的能力。
适用场景
- 更新技能实现后
- 在质量审计期间验证准确性
- 清单似乎过时或不正确时
- 检测描述与实现之间的偏差
- 发布新版本的资源之前
主要功能
- 语义比较:使用 Codex 理解代码是否符合描述
- 前提条件验证:验证所声明的前提条件是否确实经过检查
- 效果验证:确认代码是否产生了所声明的效果
- API 表面分析:验证公开的函数是否与清单相符
- 偏差检测:识别实现何时偏离清单
- 覆盖率评分:衡量清单中有多少内容已实现
输入
inputs:
resource_path: string # Path to skill/MCP directory
manifest_path: string # Path to manifest.yaml (default: resource_path/manifest.yaml)
implementation_path: string # Path to code (default: resource_path/index.js)
strict_mode: boolean # Fail on warnings (default: false)
流程
步骤 1:加载清单和实现
#!/bin/bash
# Load manifest and implementation
RESOURCE_PATH="$1"
MANIFEST_PATH="${2:-$RESOURCE_PATH/manifest.yaml}"
IMPL_PATH="${3:-$RESOURCE_PATH/index.js}"
if [ ! -f "$MANIFEST_PATH" ]; then
echo "❌ Manifest not found: $MANIFEST_PATH"
exit 1
fi
if [ ! -f "$IMPL_PATH" ]; then
# Try alternative extensions
if [ -f "$RESOURCE_PATH/index.ts" ]; then
IMPL_PATH="$RESOURCE_PATH/index.ts"
elif [ -f "$RESOURCE_PATH/SKILL.md" ]; then
# Skill might be declarative only
IMPL_PATH=""
else
echo "⚠️ No implementation file found, validating description only"
IMPL_PATH=""
fi
fi
# Read manifest
MANIFEST=$(cat "$MANIFEST_PATH")
# Read implementation (if exists)
if [ -n "$IMPL_PATH" ]; then
IMPLEMENTATION=$(cat "$IMPL_PATH")
else
IMPLEMENTATION=""
fi
步骤 2:验证描述的准确性
# Use Codex to compare description with implementation
codex exec "
Compare this manifest description with the actual implementation:
MANIFEST:
$MANIFEST
IMPLEMENTATION:
$IMPLEMENTATION
Questions:
1. Does the implementation match the description?
2. Are there features described but not implemented?
3. Are there features implemented but not described?
4. Is the description accurate and complete?
Output JSON:
{
\"description_accurate\": boolean,
\"missing_features\": [\"feature1\", \"feature2\"],
\"undocumented_features\": [\"feature3\"],
\"accuracy_score\": 0.0-1.0,
\"issues\": [
{
\"type\": \"missing_feature\",
\"severity\": \"high|medium|low\",
\"description\": \"...\",
\"suggestion\": \"...\"
}
]
}
" > /tmp/validation-description.json
步骤 3:验证前提条件
# Check if preconditions are actually enforced in code
PRECONDITIONS=$(python3 -c "
import yaml, json
manifest = yaml.safe_load(open('$MANIFEST_PATH'))
print(json.dumps(manifest.get('preconditions', []), indent=2))
")
codex exec "
Analyze if these preconditions are actually checked in the code:
PRECONDITIONS:
$PRECONDITIONS
IMPLEMENTATION:
$IMPLEMENTATION
For each precondition, determine:
1. Is it checked in the code?
2. Where is it checked (function name, line number)?
3. Does it fail gracefully if not met?
4. Is the error message clear?
Output JSON:
{
\"preconditions_validated\": [
{
\"check\": \"file_exists('package.json')\",
\"enforced\": boolean,
\"location\": \"function:line\",
\"error_handling\": \"good|poor|missing\",
\"suggestion\": \"...\"
}
],
\"coverage_score\": 0.0-1.0
}
" > /tmp/validation-preconditions.json
步骤 4:验证效果
# Check if claimed effects are actually produced
EFFECTS=$(python3 -c "
import yaml, json
manifest = yaml.safe_load(open('$MANIFEST_PATH'))
print(json.dumps(manifest.get('effects', []), indent=2))
")
codex exec "
Verify that this code actually produces the claimed effects:
CLAIMED EFFECTS:
$EFFECTS
IMPLEMENTATION:
$IMPLEMENTATION
For each effect, determine:
1. Is the effect actually produced?
2. Where in the code does it happen?
3. Are there conditions where it might not happen?
4. Are there other effects not listed?
Output JSON:
{
\"effects_validated\": [
{
\"effect\": \"creates_vector_index\",
\"implemented\": boolean,
\"location\": \"function:line\",
\"conditional\": boolean,
\"confidence\": 0.0-1.0
}
],
\"missing_effects\": [\"effect1\"],
\"extra_effects\": [\"effect2\"],
\"coverage_score\": 0.0-1.0
}
" > /tmp/validation-effects.json
步骤 5:验证 API 表面
# For MCPs/tools with defined APIs, validate exports
if [ -n "$IMPLEMENTATION" ]; then
codex exec "
Analyze the API surface of this implementation:
IMPLEMENTATION:
$IMPLEMENTATION
Questions:
1. What functions/classes are exported?
2. What are their signatures?
3. Are they documented?
4. Do they match what the manifest describes?
Output JSON:
{
\"exports\": [
{
\"name\": \"functionName\",
\"type\": \"function|class|object\",
\"signature\": \"(args) => result\",
\"documented\": boolean
}
],
\"api_complete\": boolean,
\"documentation_quality\": \"good|fair|poor\"
}
" > /tmp/validation-api.json
fi
步骤 6:生成验证报告
# Combine all validation results
python3 <<'PYTHON_SCRIPT'
import json
from datetime import datetime
# Load validation results
with open('/tmp/validation-description.json') as f:
desc_validation = json.load(f)
with open('/tmp/validation-preconditions.json') as f:
precond_validation = json.load(f)
with open('/tmp/validation-effects.json') as f:
effects_validation = json.load(f)
try:
with open('/tmp/validation-api.json') as f:
api_validation = json.load(f)
except FileNotFoundError:
api_validation = None
# Calculate overall score
scores = [
desc_validation.get('accuracy_score', 0),
precond_validation.get('coverage_score', 0),
effects_validation.get('coverage_score', 0)
]
overall_score = sum(scores) / len(scores)
# Collect all issues
all_issues = []
all_issues.extend(desc_validation.get('issues', []))
for precond in precond_validation.get('preconditions_validated', []):
if not precond.get('enforced'):
all_issues.append({
'type': 'unenforced_precondition',
'severity': 'medium',
'description': f"Precondition not enforced: {precond['check']}",
'suggestion': precond.get('suggestion', '')
})
for effect in effects_validation.get('effects_validated', []):
if not effect.get('implemented'):
all_issues.append({
'type': 'unimplemented_effect',
'severity': 'high',
'description': f"Effect not implemented: {effect['effect']}",
'suggestion': 'Implement this effect or remove from manifest'
})
# Generate report
report = {
'resource': 'RESOURCE_NAME_PLACEHOLDER',
'validated_at': datetime.utcnow().isoformat() + 'Z',
'overall_score': round(overall_score, 3),
'scores': {
'description_accuracy': desc_validation.get('accuracy_score', 0),
'precondition_coverage': precond_validation.get('coverage_score', 0),
'effect_coverage': effects_validation.get('coverage_score', 0)
},
'validation_results': {
'description': desc_validation,
'preconditions': precond_validation,
'effects': effects_validation,
'api': api_validation
},
'issues': all_issues,
'issue_count': len(all_issues),
'passed': overall_score >= 0.8 and len([i for i in all_issues if i['severity'] == 'high']) == 0
}
with open('/tmp/validation-report.json', 'w') as f:
json.dump(report, f, indent=2)
# Print summary
print(f"\nValidation Score: {overall_score:.2f}")
print(f"Issues Found: {len(all_issues)}")
print(f"Status: {'✅ PASSED' if report['passed'] else '❌ FAILED'}")
PYTHON_SCRIPT
验证标准
评分规则
// Overall score is average of component scores
overallScore = (descriptionAccuracy + preconditionCoverage + effectCoverage) / 3
// Pass criteria
passed = overallScore >= 0.8 && highSeverityIssues.length === 0
严重级别
- 高:缺失核心功能、未强制执行的前提条件、未实现的效果
- 中:功能不完整、错误处理不佳、未记录的导出项
- 低:轻微不一致、文档缺漏、风格问题
输出示例
{
"resource": "rag-implementer",
"validated_at": "2025-10-28T12:00:00Z",
"overall_score": 0.85,
"scores": {
"description_accuracy": 0.9,
"precondition_coverage": 0.8,
"effect_coverage": 0.85
},
"validation_results": {
"description": {
"description_accurate": true,
"missing_features": [],
"undocumented_features": ["vector_index_optimization"],
"accuracy_score": 0.9,
"issues": [
{
"type": "undocumented_feature",
"severity": "low",
"description": "Implementation includes vector optimization not mentioned in manifest",
"suggestion": "Add 'optimizes_vector_queries' to effects"
}
]
},
"preconditions": {
"preconditions_validated": [
{
"check": "file_exists('package.json')",
"enforced": true,
"location": "validateProject:12",
"error_handling": "good"
},
{
"check": "env_var_set('OPENAI_API_KEY')",
"enforced": true,
"location": "setupEmbeddings:45",
"error_handling": "good"
}
],
"coverage_score": 0.8
},
"effects": {
"effects_validated": [
{
"effect": "creates_vector_index",
"implemented": true,
"location": "createIndex:120",
"conditional": false,
"confidence": 0.95
},
{
"effect": "adds_embedding_pipeline",
"implemented": true,
"location": "setupPipeline:85",
"conditional": false,
"confidence": 0.9
}
],
"missing_effects": [],
"extra_effects": ["optimizes_vector_queries"],
"coverage_score": 0.85
}
},
"issues": [
{
"type": "undocumented_feature",
"severity": "low",
"description": "Implementation includes vector optimization not mentioned in manifest",
"suggestion": "Add 'optimizes_vector_queries' to effects"
}
],
"issue_count": 1,
"passed": true
}
集成
与 manifest-generator 集成
通过与实现进行比较,验证生成的清单是否准确。
与 capability-graph-builder 集成
确保图关系基于准确的能力描述。
CI/CD 流水线
# .github/workflows/validate-skills.yml
name: Validate Skills
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Validate all skills
run: |
for skill in SKILLS/*/; do
bash SKILLS/skill-validator/validate.sh "$skill"
done
成功指标
- ✅ 所有技能得分 >= 0.8
- ✅ 生产环境中的技能不存在高严重级别问题
- ✅ 100% 的前提条件均已强制执行
- ✅ 95%+ 的效果已实现
- ✅ API 表面与清单相符
相关技能
- manifest-generator:生成待验证的清单
- capability-graph-builder:使用经过验证的清单
- system-diagnostician:使用验证结果进行健康检查
评论
支持 Markdown