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 β underscoreNaming 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 suffixNaming 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 folderNaming 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 folderNaming 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 β underscoreNaming 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.jsonSolution Play Folders
solution-plays/
βββ 01-enterprise-rag/ β
NN-kebab-case
βββ 02-ai-landing-zone/ β
βββ enterprise-rag/ β missing number prefix
βββ 01_enterprise_rag/ β underscorePattern: 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:primitivesThis 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