Project Metadata Schema
This document defines the metadata.json schema used for all projects in .ai/projects/.
Schema Version 1.0
Complete Schema
{
"name": "string (required)",
"displayName": "string (optional)",
"created": "ISO 8601 datetime (required)",
"updated": "ISO 8601 datetime (required)",
"format": "kiro | codev (required)",
"artifacts": ["array of strings (required)"],
"status": "new | in_progress | complete | archived (required)",
"codevNumber": "string (optional, required if format=codev)",
"tags": ["array of strings (optional)"],
"category": "string (optional)",
"description": "string (optional)"
}Field Descriptions
name (required)
- Type: string
- Description: Unique project identifier in kebab-case
- Example:
"simple-xml-response","n8n-platform" - Rules:
- Must be unique across all projects
- Use kebab-case (lowercase with hyphens)
- No spaces or special characters except hyphens
displayName (optional)
- Type: string
- Description: Human-readable project name
- Example:
"Simple XML Response Adapter","N8N Platform Integration"
created (required)
- Type: ISO 8601 datetime string
- Description: When the project was created
- Example:
"2026-01-26T10:30:00Z" - Format: UTC timezone recommended
updated (required)
- Type: ISO 8601 datetime string
- Description: When the project was last modified
- Example:
"2026-01-26T15:45:00Z" - Format: UTC timezone recommended
- Rules: Should be updated whenever any artifact changes
format (required)
- Type: enum string
- Values:
"kiro","codev","bmad", or"hybrid" - Description: Which tool format the project uses
- Rules:
- A project uses exactly one format (or hybrid for mixed artifacts)
- Determines which artifacts are present
- Determines integration method (symlink, pointer, or direct access)
artifacts (required)
- Type: array of strings
- Description: List of artifact files present in the project
- Example (Kiro):
["requirements.md", "design.md", "tasks.md"] - Example (Codev):
["spec.md", "plan.md", "review.md"] - Example (BMAD):
["brief.md", "prd.md", "architecture.md", "epics-stories.md", "stories/story-001.md"] - Example (Hybrid):
["requirements.md", "design.md", "architecture.md", "stories/story-001.md"] - Rules:
- Must match actual files in project directory
- Updated automatically by sync scripts
- For hybrid projects, include artifacts from all tools used
status (required)
- Type: enum string
- Values:
"new","in_progress","complete","archived" - Description: Current project status
- Definitions:
new: Project created but not startedin_progress: Actively being worked oncomplete: All artifacts completearchived: No longer active
codevNumber (conditional)
- Type: string (4-digit zero-padded)
- Description: Codev sequential number
- Example:
"0001","0042" - Rules:
- Required if
format="codev" - Not used if
format="kiro" - Must be unique across all Codev projects
- Used in pointer file names
- Required if
tags (optional)
- Type: array of strings
- Description: Categorization tags
- Example:
["gateway", "adapter", "xml"] - Rules:
- Use lowercase
- Use hyphens for multi-word tags
- Keep tags concise
category (optional)
- Type: string
- Description: Project category mapping to distinct systems/domains
- Values:
"infrastructure","domain-apis","eda","market-making","ai-dev" - Examples:
"infrastructure"- Platform foundation (secrets, ingress, networking, build tools, n8n, clickhouse)"domain-apis"- Domain API system projects"eda"- Event-driven architecture system"market-making"- Market making system"ai-dev"- AI development system
- Rules:
- Use one of the standard category values
- A project belongs to one category but may span multiple repositories
- Categories represent distinct systems in your platform
description (optional)
- Type: string
- Description: Brief project description
- Example:
"Adapter to transform XML backend responses to JSON" - Rules:
- Keep concise (1-2 sentences)
- Describe the project’s purpose
bmadPhase (conditional)
- Type: enum string
- Values:
"1-analysis","2-planning","3-solutioning","4-implementation","complete" - Description: Current phase in BMAD workflow
- Example:
"3-solutioning" - Rules:
- Required if
format="bmad"orformat="hybrid"with BMAD artifacts - Not used if
format="kiro"orformat="codev"only - Updated as project progresses through BMAD phases
- Helps agents understand where to pick up work
- Required if
tools (conditional)
- Type: array of strings
- Values: Any combination of
["kiro", "codev", "bmad"] - Description: List of tools that have been used on this project
- Example:
["kiro", "bmad"] - Rules:
- Required if
format="hybrid" - Not used for single-format projects
- Tracks project evolution across tools
- Helps with migration and handoff scenarios
- Required if
Format-Specific Examples
Kiro Project Example
{
"name": "n8n-platform",
"displayName": "N8N Platform Integration",
"created": "2026-01-26T10:00:00Z",
"updated": "2026-01-26T16:30:00Z",
"format": "kiro",
"artifacts": ["requirements.md", "design.md", "tasks.md"],
"status": "in_progress",
"tags": ["platform", "automation", "n8n"],
"category": "infrastructure",
"description": "Integration of N8N workflow automation platform"
}Codev Project Example
{
"name": "simple-xml-response",
"displayName": "Simple XML Response Adapter",
"created": "2026-01-26T10:30:00Z",
"updated": "2026-01-26T15:45:00Z",
"format": "codev",
"artifacts": ["spec.md", "plan.md", "review.md"],
"status": "complete",
"codevNumber": "0001",
"tags": ["gateway", "adapter", "xml"],
"category": "domain-apis",
"description": "Adapter to transform XML backend responses to JSON"
}BMAD Project Example
{
"name": "clickhouse-operator",
"displayName": "ClickHouse Kubernetes Operator",
"created": "2026-01-30T14:00:00Z",
"updated": "2026-01-30T16:45:00Z",
"format": "bmad",
"artifacts": [
"brief.md",
"prd.md",
"architecture.md",
"epics-stories.md",
"stories/story-e1-s1.md",
"stories/story-e1-s2.md",
"sprint-status.yaml"
],
"status": "in_progress",
"bmadPhase": "4-implementation",
"tags": ["operator", "kubernetes", "clickhouse"],
"category": "infrastructure",
"description": "Kubernetes operator for managing ClickHouse clusters"
}Hybrid Project Example
{
"name": "api-gateway-refactor",
"displayName": "API Gateway Refactor",
"created": "2026-01-26T10:00:00Z",
"updated": "2026-01-30T17:00:00Z",
"format": "hybrid",
"artifacts": [
"requirements.md",
"design.md",
"architecture.md",
"epics-stories.md",
"stories/story-e1-s1.md",
"stories/story-e2-s1.md"
],
"status": "in_progress",
"bmadPhase": "4-implementation",
"tools": ["kiro", "bmad"],
"tags": ["gateway", "refactor", "architecture"],
"category": "domain-apis",
"description": "Refactor API gateway with new architecture, started with Kiro, continued with BMAD for implementation"
}Validation Rules
Required Fields
All projects must have:
namecreatedupdatedformatartifactsstatus
Conditional Requirements
- If
format="codev", thencodevNumberis required - If
format="kiro", thencodevNumbershould not be present - If
format="bmad"orformat="hybrid"with BMAD artifacts, thenbmadPhaseis required - If
format="hybrid", thentoolsarray is required
Artifact Validation
- Kiro projects should have:
requirements.md,design.md,tasks.md - Codev projects should have:
spec.md,plan.md,review.md - BMAD projects may have (based on phase):
- Phase 1:
brief.md,research/*.md - Phase 2:
prd.md,ux-design.md - Phase 3:
architecture.md,epics-stories.md - Phase 4:
stories/*.md,sprint-status.yaml
- Phase 1:
- Hybrid projects can mix artifacts from multiple tools
- Artifacts array must match actual files in project directory
Uniqueness Constraints
namemust be unique across all projectscodevNumbermust be unique across all Codev projects
Schema Evolution
Version History
- 1.0 (2026-01-26): Initial schema with Kiro and Codev support
- 1.1 (2026-01-30): Added BMAD and hybrid format support
- Added
bmadPhasefield for BMAD workflow tracking - Added
toolsarray for hybrid projects - Updated
formatto include “bmad” and “hybrid” - Added BMAD artifact patterns
- Added
Future Considerations
- Add
versionfield to track schema version - Add
dependenciesarray for project relationships - Add
contributorsarray for multi-person projects - Add
estimatedHoursfor project sizing - Add
llmModelto track which model was used for generation
Maintenance
Automatic Updates
The sync-metadata.sh script automatically:
- Updates
updatedtimestamp when artifacts change - Updates
artifactsarray to match actual files - Validates schema compliance
Manual Updates
Developers should manually update:
statuswhen project phase changestagswhen categorization changesdescriptionwhen project scope changesdisplayNamefor better readability
Tools Integration
Kiro
- Reads metadata to understand project format
- Updates
updatedtimestamp on artifact changes - Does not modify other metadata fields
Codev
- Reads metadata to get
codevNumberfor pointer files - Updates
updatedtimestamp on artifact changes - Updates
artifactsarray when files are added/removed
Helper Scripts
create-project.sh: Creates initial metadatalist-projects.sh: Reads metadata for displaymigrate-project.sh: Updatesformatandartifactssync-metadata.sh: Validates and updates metadata