Skill validation ensures that skills are properly defined, secure, and ready for production use. FastSkill provides multiple levels of validation to catch issues early in the development process.
Validation happens at multiple stages: definition validation, registration validation, and runtime validation.
Create custom validation rules for your organization:
Copy
from fastskill.validation import BaseValidator, ValidationResultclass CustomValidator(BaseValidator): """Custom validation rules for your organization.""" def validate(self, skill_definition: dict) -> ValidationResult: """Perform custom validation.""" issues = [] # Custom business rules if not skill_definition.get('author', '').endswith('@company.com'): issues.append({ 'field': 'author', 'message': 'Skills must be authored by company team members', 'severity': 'error' }) # Check for required company tags required_tags = ['company-project', 'reviewed'] skill_tags = skill_definition.get('tags', '').split(',') missing_tags = [tag for tag in required_tags if tag not in skill_tags] if missing_tags: issues.append({ 'field': 'tags', 'message': f'Missing required tags: {missing_tags}', 'severity': 'warning' }) # Validate dependencies are approved dependencies = skill_definition.get('dependencies', []) approved_deps = ['numpy', 'pandas', 'requests'] unapproved_deps = [dep for dep in dependencies if dep not in approved_deps] if unapproved_deps: issues.append({ 'field': 'dependencies', 'message': f'Unapproved dependencies: {unapproved_deps}', 'severity': 'error' }) return ValidationResult( valid=len([i for i in issues if i['severity'] == 'error']) == 0, issues=issues )# Register custom validatorfrom fastskill.validation import ValidationManagermanager = ValidationManager()manager.register_validator('custom', CustomValidator())# Use custom validationresult = manager.validate(skill_definition, validators=['structure', 'security', 'custom'])
async def batch_validation_example(): service = FastSkillService() await service.initialize() # Get all skills skills = await service.list_skills() # Validate all skills validation_results = [] for skill in skills: try: skill_details = await service.get_skill(skill['id']) result = await service.validate_skill(skill_details) validation_results.append({ 'skill_id': skill['id'], 'valid': result['valid'], 'issues': result.get('issues', []) }) except Exception as e: validation_results.append({ 'skill_id': skill['id'], 'valid': False, 'error': str(e) }) # Report results valid_skills = [r for r in validation_results if r['valid']] invalid_skills = [r for r in validation_results if not r['valid']] print(f"📊 Validation Results:") print(f" ✅ Valid skills: {len(valid_skills)}") print(f" ❌ Invalid skills: {len(invalid_skills)}") # Show issues for invalid skills for result in invalid_skills[:5]: print(f"\n {result['skill_id']}:") if 'error' in result: print(f" Error: {result['error']}") else: for issue in result['issues']: print(f" {issue['severity']}: {issue['message']}") await service.shutdown()
Missing required fields: Ensure all required fields are present and have valid values.
Copy
# Check required fieldsrequired_fields = ['id', 'name', 'description', 'version']missing_fields = [field for field in required_fields if field not in skill_definition]
Invalid field types: Check that field values match expected types (string, integer, boolean, etc.).
Copy
# Validate field typesif not isinstance(skill_definition.get('execution_timeout'), int): print("❌ execution_timeout must be an integer")
Security Validation Issues
Common security issues: Review skill dependencies, execution permissions, and network access requirements.
Copy
# Check for potentially dangerous dependenciesdangerous_deps = ['subprocess', 'os.system', 'eval', 'exec']skill_deps = skill_definition.get('dependencies', [])risky_deps = [dep for dep in dangerous_deps if dep in skill_deps]
Performance Issues
Optimize validation: Use validation caching for repeated checks during development.
Effective validation catches issues early and ensures skills meet quality standards. Invest time in setting up comprehensive validation for your skill ecosystem.