Create a new domain
A domain defines a body of curated knowledge for agents to ground against. This guide creates a new domain end to end. For the concepts, see Domains.
1. Create the domain directory
Add a folder under app/content/domains/ named for your domain, with a catalog.yaml:
app/content/domains/my-domain/catalog.yaml
2. Declare your sources
Each source names what it produces and how it's fetched. Use static when the knowledge
is authored/derived, or http when it comes from a URL.
ingest:
sources:
- name: my-standard
produces: [my-control]
fetch:
transport: static
data:
- control_id: mc-1
name: Access control
description: Restrict access to sensitive systems.
frameworks: [my-framework]
- control_id: mc-2
name: Logging
description: Record security-relevant events.
frameworks: [my-framework]
3. Configure normalization
Have an agent normalize raw records into clean, keyed entities:
normalize:
mode: agent
entity_type: my-control
key: "{control_id}"
key_field: control_id
guidance: >-
Emit one my-control record per item, preserving every field verbatim
(control_id, name, description, frameworks). Do not invent or drop items.
ground: true
provenance: { ingested_by: catalog-ingest, sources: [my-standard] }
entity_typeis the type agents will query.key/key_fieldgive each entity a stable identity.ground: truegrounds the normalization against the source so records aren't invented.
4. Set refresh + synthesis
refresh:
schedule: "rate(90 days)" # periodic re-ingest
sanity_drop: 0.5 # reject a refresh that collapses the source
synthesis: none # or a synthesis stage for derived entities
5. Ingest and promote
Publish content, then build the catalog for your domain:
make seed
make ingest DOMAINS="my-domain"
The build state machine ingests → (synthesizes) → validates → promotes the new version if the coverage gate passes. See Catalog for the full lifecycle and timing caveats.
6. Use it in an ecosystem
Once promoted, agents can query your entity_type (e.g. via catalog lookup tools) and
cite it in their output. Point an assessor agent at your domain's entities in its prompt,
and it will ground its assessment against them.
Model your first domain on a shipped one — app/content/domains/responsible-ai/catalog.yaml
is a clean static example, and the AU financial-services domains show http sources.