Naming Conventions
All FrootAI primitives follow strict naming conventions enforced by npm run validate:primitives. The golden rule: lowercase-hyphen for everything.
General Rulesโ
- All files and folders use lowercase-hyphen (kebab-case)
- No underscores, no camelCase, no PascalCase
- No spaces in file or folder names
- UTF-8 encoding (no BOM) on all files
Primitives by Typeโ
Agents (.agent.md)โ
agents/
โโโ fai-rag-architect.agent.md โ
lowercase-hyphen
โโโ fai-security-reviewer.agent.md โ
lowercase-hyphen
โโโ fai-play-01-builder.agent.md โ
play-specific agent
โโโ RagArchitect.agent.md โ PascalCase
โโโ rag_architect.agent.md โ underscore
Naming pattern: fai-{name}.agent.md
Frontmatter requirements:
---
description: "10+ character description" # Required
tools: ["codebase", "terminal"] # Optional
model: ["gpt-4o", "gpt-4o-mini"] # Optional (array)
waf: ["security", "reliability"] # Optional
plays: ["01-enterprise-rag"] # Optional
---
Instructions (.instructions.md)โ
instructions/
โโโ waf-security.instructions.md โ
โโโ python-coding.instructions.md โ
โโโ rag-patterns.instructions.md โ
โโโ WAF_Security.instructions.md โ PascalCase + underscore
โโโ security.md โ missing .instructions suffix
Naming pattern: {name}.instructions.md
Frontmatter requirements:
---
description: "10+ character description" # Required
applyTo: "**/*.{ts,js,py}" # Required โ glob pattern
waf: ["security"] # Optional
---
Skills (SKILL.md in folder)โ
skills/
โโโ fai-play-initializer/
โ โโโ SKILL.md โ
name matches folder
โโโ fai-rag-indexer/
โ โโโ SKILL.md โ
โ โโโ index.sh โ
optional bundled assets
โโโ PlayInitializer/
โ โโโ SKILL.md โ PascalCase folder
โโโ fai-play-initializer.md โ not in a folder
Naming pattern: fai-{name}/SKILL.md (folder name = skill name)
Frontmatter requirements:
---
name: fai-play-initializer # Required โ must match folder
description: "10-1024 char description" # Required
---
The name field in SKILL.md frontmatter must exactly match the parent folder name. This is validated by CI.
Hooks (hooks.json in folder)โ
hooks/
โโโ frootai-secrets-scanner/
โ โโโ hooks.json โ
โ โโโ scan-secrets.sh โ
referenced script
โโโ frootai-tool-guardian/
โ โโโ hooks.json โ
โ โโโ guard-tools.sh โ
โโโ SecretsScanner/
โโโ hooks.json โ PascalCase folder
Naming pattern: {name}/hooks.json
Required fields:
{
"version": 1,
"hooks": [
{
"event": "SessionStart",
"steps": [
{
"type": "shell",
"command": "bash ${__dirname}/scan-secrets.sh"
}
]
}
]
}
Plugins (plugin.json in folder)โ
plugins/
โโโ enterprise-rag/
โ โโโ plugin.json โ
โ โโโ README.md โ
recommended
โโโ EnterpriseRAG/
โ โโโ plugin.json โ PascalCase folder
โโโ enterprise_rag/
โโโ plugin.json โ underscore
Naming pattern: {name}/plugin.json (folder name = plugin name)
Required fields:
{
"name": "enterprise-rag",
"description": "Complete RAG pipeline with security hooks",
"version": "1.0.0",
"author": { "name": "Your Name" },
"license": "MIT"
}
The name field in plugin.json must match the parent folder name.
FAI Manifest (fai-manifest.json)โ
{
"play": "01-enterprise-rag",
"version": "1.0.0"
}
playfield must match the folder name:NN-kebab-caseversionmust be valid semver:X.Y.Z
FAI Context (fai-context.json)โ
Placed as a sibling to standalone primitives:
agents/
โโโ fai-rag-architect.agent.md
โโโ fai-rag-architect/
โโโ fai-context.json
Solution Play Foldersโ
solution-plays/
โโโ 01-enterprise-rag/ โ
NN-kebab-case
โโโ 02-ai-landing-zone/ โ
โโโ enterprise-rag/ โ missing number prefix
โโโ 01_enterprise_rag/ โ underscore
Pattern: NN-kebab-case where NN is a two-digit number (01โ99).
Validationโ
Run the validation script to check all naming conventions:
npm run validate:primitives
This checks every primitive file in the repository for:
- Correct file extensions and naming patterns
- Required frontmatter fields
- Name-to-folder matching for skills and plugins
- Valid lifecycle events for hooks
Next Stepsโ
- PR Checklist โ full validation requirements for PRs
- How to Contribute โ the contribution workflow