Skip to main content

The source files

Semantic source lives in .cordango.yaml files, one per aggregate: an entity, a lifecycle, a role, a screen. They’re the source of truth, and they’re meant to be read, reviewed and diffed. Editing them directly is fine. They describe what a thing is, not how it runs.
fmt rewrites every .cordango.yaml file in canonical form, so a diff shows a change in meaning instead of a change in whitespace or key order.

The build directories

Two, and neither is committed. cordango new writes a .gitignore that already excludes both. .cordango/ with the leading dot holds the definition artifacts — the compiled App Definition and its manifest. cordango build regenerates it. generated/ holds the applications themselves, one directory per app, so a workspace with support and billing in it builds to generated/support/ and generated/billing/. There is no --out: where the output goes is not a decision anybody has to make twice. It’s ordinary source code and it’s reproducible from the apps/ directory beside it, which is why it stays out of git — and moving a directory out of the workspace is how an application leaves.

Agent instructions

cordango new writes CLAUDE.md and AGENTS.md with the same generated text. Two conventions, two filenames. Both get written because a workspace that taught two agents different rules would end up with source only one of them could maintain. They teach the workflow rather than the schema. An agent arrives knowing how to find out:
That’s on purpose. Everything specific is one cordango inspect away, which keeps the instructions from growing back into a copy of the whole schema.
Every command accepts --json. cordango help --json is how an agent discovers the command surface without a human pasting a README into its context.