Top-level structure
Master switches
The four-mode enumoff | observe | nudge | enforce is shared with the Protection Card. Same words; same semantics; same UI picker component renders all three master fields (Protection’s mode, Alignment’s autonomy_mode, Alignment’s integrity_mode). Composition rule on each: strictest wins across Platform → Org → Agent (enforce > nudge > observe > off).
| Field | Governs | Off | Observe | Nudge | Enforce |
|---|---|---|---|---|---|
autonomy_mode | action-policing | skip CLPI + trace verification | log policy results, don’t block | inject advisory annotation, don’t block | block tool violations, escalate |
integrity_mode | values/conscience | skip AIP + drift detection | log checkpoint, no action | inject advisory on next request | auto-pause on boundary violation |
§principal
Declares who the agent serves and the nature of that relationship.| Field | Type | Required | Composition |
|---|---|---|---|
type | enum | Yes | Agent wins |
identifier | string | Cond.* | Agent wins |
relationship | enum | Yes | Agent wins |
escalation_contact | string | No | Agent wins |
identifier is required when type != unspecified.
§values
What the agent prioritizes. Core input to the v2 coherence scorer and to fault-line analysis.| Field | Type | Required | Composition |
|---|---|---|---|
declared | string[] | Yes | Union across scopes |
definitions.<name>.description | string | No | Agent wins |
definitions.<name>.priority | number (0–1) | No | Agent wins |
conflicts_with | string[] | No | Union |
hierarchy | enum | No | Agent wins; platform default = lexicographic |
definitions key must be present in declared.
Composition note: bounded_actions is composed as union across Platform → Org → Agent. (An earlier draft of this spec said “Agent-scoped” — that was incorrect; the unified-card program was always intended to let platform/org compose action sets, e.g. an org-wide request_legal_review action. ADR-039 Decision 8 reconciles docs to composer.)
§conscience
Inviolable or near-inviolable commitments that constrain the agent’s behavior. Structured for Safe House + drift detection integration.| Field | Type | Required | Composition |
|---|---|---|---|
mode | enum | Yes (if section present) | replace beats augment across scopes |
values[].type | enum | Yes | — |
values[].content | string | Yes | — |
values[].id | string | No | — |
values[].severity | enum | No | Default: mandatory for BOUNDARY, advisory otherwise |
values (the array) | — | Yes | Union with dedup by content; platform BOUNDARY entries inviolable |
BOUNDARY entries with severity: advisory are rejected.
§autonomy
What the agent may do independently. Maps directly onto the AAP 1.0autonomy_envelope for protocol-level verification — the unified shape renames it but keeps the semantics.
| Field | Type | Required | Composition |
|---|---|---|---|
bounded_actions | string[] | Yes | Union across Platform → Org → Agent |
forbidden_actions | string[] | No | Deny-overrides union |
escalation_triggers[].condition | string | Yes (if trigger present) | — |
escalation_triggers[].action | enum | Yes | — |
escalation_triggers[].reason | string | Yes | — |
escalation_triggers (array) | — | No | Union with dedup by condition |
max_autonomous_value.amount | number | Cond. | Min across scopes |
max_autonomous_value.currency | string (ISO 4217) | Cond. | Agent wins |
bounded_actions and forbidden_actions must be disjoint (no action in both).
§capabilities
Tool-use capabilities, keyed by capability name. Each entry maps to a glob pattern over MCP/A2A tool names or an explicit tool allowlist.| Field | Type | Required | Composition |
|---|---|---|---|
<name>.description | string | No | Agent wins |
<name>.tools | string[] (glob patterns) | Yes | Union within capability |
<name>.allowed_domains | string[] | No | Platform → agent intersection (compliance ceiling, mirrors Protection Card trusted_sources) |
<name>.severity_on_unmapped | enum | No | Strictest wins per name; default medium |
@mnemom/policy-engine’s evaluatePolicy({ card, tools }) to produce per-request policy decisions.
§enforcement
Policy-level knobs that affect howcapabilities are enforced at runtime. The master switch lives at the top level (autonomy_mode); this section carries the fine-grained tool-use policy.
| Field | Type | Required | Composition |
|---|---|---|---|
allow_unmapped_tools | boolean | No (default false) | Strictest wins (false beats true) |
default_unmapped_severity | enum | No (default high) | Strictest wins (critical > high > medium > low) |
forbidden_tools[].pattern | string | Yes (per entry) | Deny-overrides union (with exemption removal) |
forbidden_tools[].reason | string | Yes (per entry) | — |
forbidden_tools[].severity | enum | Yes (per entry) | — |
grace_period_hours | number | No (default 24) | Min across scopes |
§audit
Commitments around trace format, retention, tamper evidence. These are platform-scoped — agents and orgs cannot weaken the audit floor.| Field | Type | Required | Composition |
|---|---|---|---|
trace_format | string | Yes | Platform-scoped |
retention_days | number | Yes | Max across scopes (longest retention wins) |
queryable | boolean | Yes | Platform-scoped |
query_endpoint | string (URL) | Yes | Platform-scoped |
tamper_evidence | enum | No | Platform-scoped |
audit.query_endpoint is a composer-enforced invariant (see ADR-023). The validator rejects cards without it; the composer ensures it’s always present on canonical output.
§extensions
Protocol-specific or user-defined additions. Free-formRecord<string, unknown>. Mnemom reserves the clpi.* and mnemom.* namespaces.
_composition.extensions_composition_mode: merge.
§_composition (canonical-only)
Present on the canonical card, absent on raw agent-scope cards. Records the provenance of every composed field._composition is read-only on the wire. Mutating it via API is a 400.
YAML safe schema
Allyaml.load() calls in the Mnemom stack use { schema: yaml.CORE_SCHEMA } — Node-specific tags (!!js, !!binary, etc.) are rejected. If your client produces YAML with those tags, validation fails. Stick to plain scalars, maps, and sequences.
Body-size limits
- Full alignment card payload: 128 KB max (Content-Length + rawBody double-check).
values.declared: recommended under 200 values per scope for coherence-scoring performance.
413 Payload Too Large for oversize bodies; no grace period. If a legitimate card is getting 413’d, file an issue — the limits are currently conservative and will relax with production data.
Versioning
card_version is a date-anchored schema identifier. Accepted values as of 2026-04-17:
unified/2026-04-15— current. All canonical cards emit this version.- (legacy) — the pre-UC AAP-shape card is no longer accepted at the alignment-card endpoint. Convert via the migration script before publishing.
X-Mnemom-Version request-header mechanism used elsewhere in the API.
See also
- Agent Cards — the two-card product story
- Card Composition — scope composition rules + exemptions
- Protection Card Schema — companion normative spec
- Alignment Card (AAP 1.0 surface) — the protocol-level card
- Policy Engine — how
capabilities+enforcementbecome runtime policy