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

PUT /v1/alignment/agent/{agent_id} accepts card_version, agent_id (overwritten to match the URL), autonomy_mode, integrity_mode, principal, values, conscience, autonomy, capabilities, enforcement, audit, extensions, and expires_at. card_id, issued_at, content_hash, version, and _composition are server-assigned response fields — do not send them on a PUT.

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

Required. 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.

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 legacy AAP autonomy_envelope for protocol-level verification — the unified shape (AAP SDK 2.0.0+) renames it to autonomy 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({ context, 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 24h fallback (when no scope sets a value) 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.
*query_endpoint is required when queryable is true. Validation: audit.query_endpoint is required whenever audit.queryable is true; the composer guarantees the invariant holds on canonical output. An audit.storage field appears in some historical card examples but is not read by the composer or any downstream consumer — do not rely on it.

extensions

Protocol-specific or user-defined additions. Free-form Record<string, unknown>. Mnemom reads extensions.clpi.role (a free-form role label) for fault-line complementary/conflicting classification across a fleet’s agents; any other key is passed through unread.
Extensions are agent-scoped: the composer copies agentCard.extensions verbatim onto the canonical card. Platform/org/team scopes do not contribute to or merge with agent extensions.

_composition (canonical-only)

Only returned from GET/preview-compose when the caller passes ?include_composition=true; absent otherwise and 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, enforced at the API boundary from both Content-Length and the actual body size. Oversize bodies get 413 Payload Too Large.

Versioning

card_version is a required, non-empty string. The composer stamps every canonical card with unified/<YYYY-MM-DD> using the composition date — treat the prefix (unified/) as the stable signal, not the date suffix, which changes on every recompose. Breaking changes are negotiated via the X-Mnemom-Version: YYYY-MM-DD request header used elsewhere in the API.

See also