Schema JSON Format

Preview Feature: CLI AI Automation is a preview feature. If you encounter any issues, please report them at support.skipper18.com.

The -cli-schema-summaryverb outputs the entire Skipper project as structured JSON. This is the primary way for scripts and AI assistants to read a project's schema without parsing the .skipper XML file directly.

Top-Level Structure

The output is wrapped in a standard CLI envelope. The data field contains the project structure:

{
  "project": {
    "name": "MyProject",
    "orm": "Doctrine2",
    "mvc": "Symfony",
    "uuid": "a1b2c3d4-...",
    "modules": [...]
  }
}

Module Object

FieldTypeDescription
uuidstringUnique identifier of the module
namestringDisplay name of the module
namespacestringNamespace or package prefix for entities in this module
export_pathstringFilesystem path where exported files are written
export_formatstringExport format (e.g. "Doctrine2PhpAttributes", "xml", "yaml"). May be absent when no format is configured.
entitiesarrayList of Entity objects in this module
regionsarrayList of Region objects for visual grouping
commentsarrayList of Comment objects attached to this module
orm_attributesobjectFramework-specific ORM attribute key-value pairs. Empty {} when none are set.

Entity Object

FieldTypeDescription
uuidstringUnique identifier of the entity
namestringFully qualified entity name (including namespace)
local_namestringShort name without namespace prefix
descriptionstringEntity description text. Empty string when not set.
fieldsarrayList of Field objects belonging to this entity
associationsarrayList of Association objects (one-to-one, one-to-many, many-to-one)
indexesarrayList of Index objects defined on this entity
orm_attributesobjectFramework-specific ORM attribute key-value pairs
many_to_manyarrayList of Many-to-Many objects
embeddedsarrayList of Embedded objects

Field Object

FieldTypeDescription
uuidstringUnique identifier of the field
namestringField name
typestringData type (e.g. "integer", "string", "datetime", "text")
sizenumberColumn size/length (e.g. 255), 0 if not set
primarybooleanWhether this field is part of the primary key
requiredbooleanWhether this field is NOT NULL
nullablebooleanInverse of required — both are always present for convenience
uniquebooleanWhether a unique constraint exists on this field
auto_incrementbooleanWhether the field auto-increments
defaultstring | nullDefault value expression, null if not set
orm_attributesobjectFramework-specific ORM attributes (e.g. precision, scale, column). Empty {} when none are set.

Association Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
to_entitystringName of the target entity
owner_aliasstringProperty name on the owning side
inverse_aliasstringProperty name on the inverse side
orm_attributesobjectFramework-specific ORM attributes. Empty {} when none are set.

Index Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
namestringIndex name
uniquebooleanWhether this is a unique index
fieldsarrayList of field names included in the index
orm_attributesobjectFramework-specific ORM attributes. Empty {} when none are set.

Many-to-Many Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
mn_entitystringName of the join table entity (if applicable)
owner_aliasstringProperty name on the owning side
inverse_aliasstringProperty name on the inverse side
orm_attributesobjectFramework-specific ORM attributes. Empty {} when none are set.

Embedded Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
to_entitystringName of the embedded entity
owner_aliasstringProperty name on the owning side
inverse_aliasstringProperty name on the inverse side
orm_attributesobjectFramework-specific ORM attributes. Empty {} when none are set.

Region Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
captionstringDisplay caption for the region
descriptionstringRegion description text. Empty string when not set.
namespacestringNamespace override for entities within the region
orm_attributesobjectFramework-specific ORM attributes. Empty {} when none are set.

Comment Object

FieldTypeDescription
idnumberProject-scoped auto-increment identifier
captionstringComment title text
descriptionstringFull description body of the comment

ORM Attributes Object

The orm_attributes field is present on every object type (entity, field, association, index, many-to-many, embedded, module, region). It contains framework-specific configuration as key-value pairs. Values are always strings. Empty {} when no ORM attributes are set.

Nested structures (like options) become JSON objects. Ordered containers (like lifecycle-callbacks) become JSON arrays of objects.

Entity orm_attributes example (Doctrine2):

"orm_attributes": {
  "table": "customers",
  "repository-class": "App\Repository\CustomerRepository",
  "change-tracking-policy": "DEFERRED_EXPLICIT",
  "options": {
    "charset": "utf8mb4",
    "engine": "InnoDB"
  },
  "lifecycle-callbacks": [
    {
      "type": "prePersist",
      "method": "onPrePersist"
    }
  ]
}

Field orm_attributes example:

"orm_attributes": {
  "precision": "10",
  "scale": "2",
  "column": "customer_email"
}

Inheritances

Note: Inheritances are managed via add_inheritance, update_inheritance, and remove_inheritance patch ops but are not yet included in schema-summary output.

Key Notes

  • IDs (id on associations, indexes, many-to-many, embeddeds, regions, comments) are project-scoped auto-increment numbers. Use them for update_* and remove_* operations.

  • UUIDs are stable identifiers for entities, fields, and modules -- they survive renames and moves.

  • orm_attributes is present on every object type (entity, field, association, index, M:N, embedded, module, region). Empty {} when no ORM attributes are set. Values are always strings.

  • name on entities and modules is the fully qualified name (e.g. \App\Entity\Customer). local_name is the short name (e.g. Customer).

  • nullable is the inverse of required -- both are always present on field objects for convenience.

  • export_format on modules may be absent when no format is configured.

Full Example

Below is a complete JSON output from a sample Doctrine2 project showing all object types with their orm_attributes, including field-level attributes, lifecycle callbacks, nested options, associations, indexes, many-to-many, embeddeds, regions, and comments:

{
  "project": {
    "name": "MyProject",
    "orm": "Doctrine2",
    "mvc": "Symfony",
    "uuid": "dc9798d3-...",
    "modules": [
      {
        "uuid": "b3cd1cb6-...",
        "name": "\\AppBundle",
        "namespace": "\\App\\Entity",
        "export_path": "src/Entity",
        "export_format": "Doctrine2PhpAttributes",
        "entities": [
          {
            "uuid": "95f18d41-...",
            "name": "\\App\\Entity\\Customer",
            "local_name": "Customer",
            "description": "Main customer entity",
            "fields": [
              {
                "uuid": "ca9e942c-...",
                "name": "id",
                "type": "integer",
                "size": 0,
                "primary": true,
                "required": true,
                "nullable": false,
                "unique": true,
                "auto_increment": true,
                "default": null,
                "orm_attributes": {}
              },
              {
                "uuid": "f31aa519-...",
                "name": "email",
                "type": "string",
                "size": 255,
                "primary": false,
                "required": true,
                "nullable": false,
                "unique": true,
                "auto_increment": false,
                "default": null,
                "orm_attributes": {
                  "column": "customer_email"
                }
              },
              {
                "uuid": "a830c960-...",
                "name": "price",
                "type": "decimal",
                "size": 0,
                "primary": false,
                "required": true,
                "nullable": false,
                "unique": false,
                "auto_increment": false,
                "default": "0.00",
                "orm_attributes": {
                  "precision": "10",
                  "scale": "2"
                }
              }
            ],
            "associations": [
              {
                "id": 1,
                "to_entity": "\\App\\Entity\\Order",
                "owner_alias": "orders",
                "inverse_alias": "customer",
                "orm_attributes": {}
              }
            ],
            "indexes": [
              {
                "id": 1,
                "name": "idx_email",
                "unique": true,
                "fields": ["email"],
                "orm_attributes": {}
              }
            ],
            "orm_attributes": {
              "table": "customers",
              "repository-class": "App\\Repository\\CustomerRepository",
              "change-tracking-policy": "DEFERRED_EXPLICIT",
              "options": {
                "charset": "utf8mb4"
              },
              "lifecycle-callbacks": [
                {
                  "type": "prePersist",
                  "method": "onPrePersist"
                }
              ]
            },
            "many_to_many": [
              {
                "id": 1,
                "mn_entity": "\\App\\Entity\\CustomerTag",
                "owner_alias": "tags",
                "inverse_alias": "customers",
                "orm_attributes": {}
              }
            ],
            "embeddeds": [
              {
                "id": 1,
                "to_entity": "\\App\\Entity\\Address",
                "owner_alias": "address",
                "inverse_alias": null,
                "orm_attributes": {}
              }
            ]
          }
        ],
        "regions": [
          {
            "id": 1,
            "caption": "Core Entities",
            "description": "",
            "namespace": "\\App\\Entity\\Core",
            "orm_attributes": {}
          }
        ],
        "comments": [
          {
            "id": 1,
            "caption": "TODO",
            "description": "Add audit fields"
          }
        ],
        "orm_attributes": {}
      }
    ]
  }
}