manifest.json
manifest.json is the entry point for ModernizeSpec. AI agents read this file first to understand what the project is, what it is built with, what it is migrating to, and which other spec files are available.
Full Example
Section titled “Full Example”{ "modernizespec": "0.1.0", "project": "ERPNext", "legacy": { "framework": "frappe", "language": "python", "loc": 316000, "entities": 521, "endpoints": 768, "age_years": 20 }, "target": { "language": "go", "architecture": "hexagonal", "pattern": "strangler-fig" }, "files": { "domains": "domains.json", "complexity": "complexity.json", "extraction-plan": "extraction-plan.json", "parity-tests": "parity-tests.json", "migration-state": "migration-state.json" }}Field Reference
Section titled “Field Reference”Root Fields
Section titled “Root Fields”| Field | Type | Required | Description |
|---|---|---|---|
modernizespec | string | Yes | Spec version (semver). Currently "0.1.0". |
project | string | Yes | Project name. |
legacy Object
Section titled “legacy Object”Describes the legacy system being modernized.
| Field | Type | Required | Description |
|---|---|---|---|
framework | string | Yes | Framework name. Examples: "frappe", "django", "rails", "spring", "dotnet", "custom" |
language | string | Yes | Primary language. Examples: "python", "java", "ruby", "csharp", "php", "cobol" |
loc | number | Yes | Total lines of code (source files only). |
entities | number | Yes | Number of business entities/models/doctypes. |
endpoints | number | Yes | Number of API endpoints. |
age_years | number | No | Approximate age of the codebase in years. |
target Object
Section titled “target Object”Describes the modernization target.
| Field | Type | Required | Description |
|---|---|---|---|
language | string | Yes | Target language. Examples: "go", "kotlin", "typescript", "java" |
architecture | string | Yes | Target architecture. Options: "hexagonal", "clean", "modular-monolith", "microservices" |
pattern | string | Yes | Migration pattern. Options: "strangler-fig", "big-bang", "parallel-run" |
files Object
Section titled “files Object”Maps logical names to file paths (relative to the modernization/ directory).
| Field | Type | Required | Description |
|---|---|---|---|
domains | string | No | Path to domains file |
complexity | string | No | Path to complexity file |
extraction-plan | string | No | Path to extraction plan file |
parity-tests | string | No | Path to parity tests file |
migration-state | string | No | Path to migration state file |
Minimal Example
Section titled “Minimal Example”Only the required fields:
{ "modernizespec": "0.1.0", "project": "LegacyApp", "legacy": { "framework": "django", "language": "python", "loc": 85000, "entities": 120, "endpoints": 200 }, "target": { "language": "typescript", "architecture": "modular-monolith", "pattern": "strangler-fig" }, "files": {}}Agent Behavior
Section titled “Agent Behavior”When an AI agent discovers .agents/modernization/manifest.json, it should:
- Read the
legacyobject to understand the source system - Read the
targetobject to understand where the migration is heading - Iterate through
filesto discover which spec files are available - Load the relevant files based on the current task
Next Steps
Section titled “Next Steps”- domains.json — Bounded context mapping
- complexity.json — Extraction difficulty assessment