Skip to main content
Normative reference for the unified alignment card — the YAML document every Mnemom agent has as one half of its two cards. This page specifies every section, field, required/optional status, type, and composition semantic. Implementers of MCP servers, SDK clients, or custom tooling that stores or mutates alignment cards should treat this as the contract. The AAP protocol-level card (the 1.0 handshake card, stable for external interop) is specified separately at /concepts/alignment-cards. The unified card is a superset with additional sections not present in the protocol surface.

Top-level structure

Master switches

The four-mode enum off | 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). Customers can control the two halves independently — e.g., “enforce conscience commitments at runtime, only observe action policy” or “off action-policing for cost, but enforce drift detection”.

§principal

Declares who the agent serves and the nature of that relationship.
*identifier is required when type != unspecified.

§values

What the agent prioritizes. Core input to the v2 coherence scorer and to fault-line analysis.
Validation: every 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 was always intended to let platform/org compose action sets, e.g. an org-wide request_legal_review action.)

§conscience

Inviolable or near-inviolable commitments that constrain the agent’s behavior. Structured for Safe House + drift detection integration.
Validation: BOUNDARY entries with severity: advisory are rejected.

§autonomy

What the agent may do independently. Maps directly onto the AAP 1.0 autonomy_envelope for protocol-level verification — the unified shape renames it but keeps the semantics.
Validation: 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.
Capabilities are consumed by @mnemom/policy-engine’s evaluatePolicy({ card, tools }) to produce per-request policy decisions.

§enforcement

Policy-level knobs that affect how capabilities are enforced at runtime. The master switch lives at the top level (autonomy_mode); this section carries the fine-grained tool-use policy.
grace_period_hours has a security trade-off. The default 24h means brand-new tools get a one-day pass on enforce mode while operators amend the card. Under adversarial tool introduction (prompt injection, untrusted MCP servers, user-supplied tool definitions) that’s a 24-hour exposure window. Set grace_period_hours: 0 to make enforce strict from the moment a card is published. See Enforcement § Grace period and Policy Engine § Grace period.

§audit

Commitments around trace format, retention, tamper evidence. These are platform-scoped — agents and orgs cannot weaken the audit floor.
Validation: audit.query_endpoint is a composer-enforced invariant. The validator rejects cards without it; the composer ensures it’s always present on canonical output.

§extensions

Protocol-specific or user-defined additions. Free-form Record<string, unknown>. Mnemom reserves the clpi.* and mnemom.* namespaces.
Extensions are agent-scoped and not composed across scopes by default. Callers that need scope-composed extensions must opt in via _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

All yaml.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.
These limits are enforced at the API boundary. 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 legacy AAP-shape card is no longer accepted at the alignment-card endpoint. Convert via the migration script before publishing.
A version bump is an additive + deprecation-by-date convention; breaking changes are negotiated via the same X-Mnemom-Version request-header mechanism used elsewhere in the API.

See also