fai-suggest-skills — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-suggest-skills (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Suggest skills from the 322-skill catalog based on task and context.
| Task | Recommended Skills | Why |
|---|---|---|
| Build RAG pipeline | fai-build-genai-rag, fai-build-semantic-search | End-to-end RAG |
| Write tests | fai-pytest-coverage, fai-jest-test, fai-junit-test | Language-specific |
| Deploy to Azure | fai-deploy-01-enterprise-rag, fai-rollout-plan | Deployment patterns |
| Review code | fai-review-and-refactor, fai-security-review-skill | Quality + security |
| Build MCP server | fai-mcp-python-generator, fai-mcp-typescript-generator | Language-specific |
| Create docs | fai-readme-generator, fai-api-docs-generator | Documentation |
| Optimize cost | fai-az-cost-optimize, fai-cost-estimator | FinOps |
| Build prompts | fai-prompt-builder, fai-boost-prompt | Prompt engineering |
def suggest_skills(task: str, stack: str = None, limit: int = 3) -> list[str]:
"""Recommend skills based on task description and optional stack."""
# Keyword matching (simplified — production would use embeddings)
TASK_SKILLS = {
"test": ["fai-pytest-coverage", "fai-jest-test", "fai-build-integration-test"],
"deploy": ["fai-rollout-plan", "fai-multi-stage-docker"],
"rag": ["fai-build-genai-rag", "fai-build-semantic-search"],
"mcp": ["fai-mcp-python-generator", "fai-mcp-typescript-generator"],
"review": ["fai-review-and-refactor", "fai-security-review-skill"],
"prompt": ["fai-prompt-builder", "fai-boost-prompt"],
}
matches = []
for keyword, skills in TASK_SKILLS.items():
if keyword in task.lower():
matches.extend(skills)
# Stack-specific filtering
if stack:
STACK_SKILLS = {
"python": ["fai-pytest-coverage", "fai-fastapi-scaffold"],
"dotnet": ["fai-mstest-test", "fai-aspnet-minimal-api"],
"java": ["fai-junit-test", "fai-springboot-scaffold"],
}
matches.extend(STACK_SKILLS.get(stack.lower(), []))
return list(dict.fromkeys(matches))[:limit]| Issue | Cause | Fix |
|---|---|---|
| No match found | Task too vague | Ask for specific technology/domain |
| Wrong stack match | Stack not specified | Ask user for their language/framework |
| Too many suggestions | No limit | Cap at 3 most relevant |
| Skill doesn't exist | Catalog gap | Check skills/ directory, suggest nearest |
| Practice | Rationale |
|---|---|
| Start simple, add complexity when needed | Avoid over-engineering |
| Automate repetitive tasks | Consistency and speed |
| Document decisions and tradeoffs | Future reference for the team |
| Validate with real data | Don't rely on synthetic tests alone |
| Review with peers | Fresh eyes catch blind spots |
| Iterate based on feedback | First version is never perfect |
fai-implementation-plan-generator — Planning and milestonesfai-review-and-refactor — Code review patternsfai-quality-playbook — Engineering quality standards~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.