Quick Start

From zero to a validated, graph-connected system in five minutes.

1. Create the Project

Start with a fresh directory and initialize both npm and SysMARA:

mkdir billing-service && cd billing-service
npm init -y
npm install --save-dev @sysmara/core
npx sysmara init

You now have the system/ directory for your specs and sysmara.config.yaml for project configuration.

2. Define an Entity

Entities are the domain objects in your system. Add a subscription entity:

npx sysmara add entity Subscription

Open system/entities/subscription.yaml and define the schema:

entity: Subscription
description: A recurring billing subscription tied to a customer account.
fields:
  id:
    type: uuid
    required: true
  customer_id:
    type: uuid
    required: true
    references: Customer
  plan_id:
    type: uuid
    required: true
    references: Plan
  status:
    type: enum
    values: [active, paused, cancelled, past_due]
    default: active
  current_period_start:
    type: datetime
    required: true
  current_period_end:
    type: datetime
    required: true
  cancelled_at:
    type: datetime
    required: false

This is a full entity declaration. The references field creates edges in the system graph. The enum type with explicit values gives AI agents and the compiler a closed set of valid states to reason about.

3. Add a Capability

Capabilities declare what your system can do. Add one for cancelling subscriptions:

npx sysmara add capability CancelSubscription

Edit system/capabilities/cancel-subscription.yaml:

capability: CancelSubscription
description: Cancel an active subscription with prorated refund calculation.
module: billing

input:
  subscription_id:
    type: uuid
    required: true
  reason:
    type: string
    required: false
  immediate:
    type: boolean
    default: false

output:
  subscription:
    type: Subscription
  refund_amount:
    type: decimal
    nullable: true

preconditions:
  - subscription.status == "active" OR subscription.status == "past_due"
  - subscription exists

postconditions:
  - subscription.status == "cancelled"
  - subscription.cancelled_at != null
  - IF immediate THEN refund_amount >= 0

errors:
  - code: SUBSCRIPTION_NOT_FOUND
    when: subscription does not exist
  - code: ALREADY_CANCELLED
    when: subscription.status == "cancelled"
  - code: REFUND_CALCULATION_FAILED
    when: prorated refund cannot be computed

Notice the structure: preconditions define what must be true before execution, postconditions define what must be true after. Error cases are declared explicitly, not discovered at runtime. An AI agent reading this spec knows exactly what states are legal, what transitions are valid, and what error handling is required.

4. Validate Your Specs

Check that all specs are syntactically valid and internally consistent:

npx sysmara validate

Expected output for valid specs:

Validating specs...
  entities/subscription.yaml .............. OK
  capabilities/cancel-subscription.yaml ... OK

Checking cross-references...
  CancelSubscription -> Subscription ...... OK

0 errors, 0 warnings

If you have a reference to an entity that does not exist (like Customer or Plan above), the validator will warn you about unresolved references. For this quick start, those warnings are expected.

5. Build the System Graph

The system graph connects all your specs into a single queryable structure:

npx sysmara graph

This generates the AI System Graph, a directed graph where entities are nodes and capabilities, policies, and flows are edges. The graph is the primary artifact that AI agents use to understand your system. You can inspect it in JSON format:

npx sysmara graph --json

The JSON output contains nodes (entities), edges (relationships and capabilities), and metadata that an AI agent can parse to answer questions like "what touches the Subscription entity?" or "what are the downstream effects of changing the Plan schema?"

6. Compile Capabilities

The capability compiler translates your declarative specs into implementation scaffolds:

npx sysmara compile

This reads your capability specs, resolves entity references, validates precondition and postcondition consistency, and produces typed implementation stubs in app/. The compiler ensures that the generated code structurally matches your declared contracts.

7. Run Diagnostics

Check the overall health of your spec suite:

npx sysmara doctor

The doctor command checks for:

For a two-file project, doctor should report a clean bill of health. As your system grows, this becomes the first command you run after any spec change.

8. Explore Additional Commands

A few more commands worth knowing immediately:

Command Purpose
sysmara explain Subscription Show everything connected to an entity or capability
sysmara impact Subscription.status Trace what breaks if a field changes
sysmara plan create "Add trial period" Generate a change plan from a description
sysmara plan show Display the current change plan
sysmara check boundaries Verify no module boundary violations exist

Every command supports --json for machine-readable output. This is how AI agents integrate with SysMARA programmatically.

What You Have Now

In five minutes, you have built a spec-driven system with:

Next Steps

For a complete, production-scale example with multiple entities, cross-module flows, and policy enforcement, see the SaaS Billing example.

To understand the principles behind this approach, read Why SysMARA Exists and the Philosophy page.