Who does what
| Actor | What they manage | Where |
|---|---|---|
| Mnemom platform team | Platform policy (alignment + protection floors) | platform_policies row — not user-editable |
| Org owner / admin | Org templates (alignment + protection) and org-wide exemptions | /dashboard/orgs/{id}/templates + CLI |
| Agent owner | Agent’s raw alignment + protection cards | /dashboard/agents/{id}/card + mnemom card edit |
forbidden_actions entry from the org scope; an org admin cannot downgrade the platform’s audit.retention_days floor.
Managing an org alignment template
View the current template
/dashboard/orgs/{id}/templates in the website for a YAML-first editor.
Update the template
Publishing a new org template triggersmark_agents_for_recompose(org_id), which sets needs_recompose = true on every agent in the org. The background composer then regenerates each canonical card.
What an org template looks like
Recompose timing
- For small orgs (under 50 agents), recompose completes in under 2 seconds.
- For large orgs (1000+ agents), the background worker paces the batch. Until recompose finishes, reads serve the previous canonical with the
needs_recompose: trueflag set. - The gateway respects the flag: when serving a
needs_recomposecanonical, it bypasses its 5-minute KV cache so changes are picked up as soon as recompose finishes.
Managing an org protection template
Same shape as the alignment template, different fields:Granting an exemption
Exemptions let an org admin waive a specific section of the org card for a specific agent, with an explicit reason, audit trail, and expiry. Use them when a single agent has a legitimate need that diverges from the org floor.When to grant one
- Specialist roles. An audit agent that needs
modify_audit_logs(forbidden at platform scope) may be granted a scoped exemption with justification. - Debug workflows. A red-team agent that needs a canary pass-through for testing.
- Legacy exceptions. An agent that predates a new org-wide forbidden action and needs time to migrate.
How to grant
Rules
| Rule | Why |
|---|---|
Exemption expires (default 90 days). Set expires_at: null for permanent — rare and audit-flagged. | Exemptions are narrow, contextual, and time-bounded by design. |
granted_by and reason are required. Length minimums enforced. | Audit trail is the whole point. |
BOUNDARY-typed conscience entries cannot be exempted. | Inviolable commitments are inviolable. |
Exemptions on forbidden-action modify_audit_logs + exfiltrate_data are owner-only. | Platform-critical deny can only be waived by platform-level authorization. |
Every grant + revocation writes a governance_audit_log row synchronously. | Non-repudiable. |
Listing active exemptions for an agent
Revoking an exemption
compose_agent_card(agent_id) call — the canonical card is regenerated within a second or two with the exemption no longer honored.
Reading a canonical card
Via CLI
_composition metadata showing which scopes contributed which fields and which exemptions were honored.
Via API
Sample output
Debugging composition
”Why does this field have this value?”
The canonical card is the effective state. If a value you didn’t put in the agent card is still there, it came from a higher scope. Check_composition.scopes_applied and cross-reference with the per-field rules at /concepts/card-composition.
”Why isn’t my agent-scope change showing up?”
Three possibilities:- Recompose is still running. Check
needs_recomposeon the canonical row. The background worker clears it within seconds for small orgs, within a minute or two for larger orgs. - A higher scope is overriding. If you set
integrity.enforcement_mode: observeat agent scope and the org requiresenforce, the strictest-wins rule means your agent-scope value never takes effect. Look at_composition.scopes_appliedto confirm your scope is listed. - Exemption not granted. If you’re trying to remove an org-scope
forbidden_actionsentry, you need an exemption. Setting something to false at agent scope doesn’t override a deny from a higher scope.
card_source structured log
Every gateway + observer card read emits a structured log entry with card_source: canonical_hit (or canonical_miss_fallback in the rare case where the canonical row is missing and the composer is still catching up). You can grep your gateway logs to see the actual read pattern:
Common patterns
Tightening the org forbidden list
You want to addexternal_http as forbidden for every agent in an org:
PUT /v1/orgs/{org_id}/alignment-templatewithautonomy.forbidden_actionsincluding the new entry.- Wait for recompose to complete (
needs_recompose=falseon all agents). - Verify one agent’s canonical card shows the new entry in
autonomy.forbidden_actions. - Agents that legitimately need
external_httpget individual exemptions.
Loosening a threshold for one agent
Protection card thresholds follow floor-plus-override: agents can set stricter (lower) thresholds but not looser (higher). If you need a looser threshold for a specific agent, that’s an exemption, not an agent-scope override.Adding a conscience commitment fleet-wide
A newBOUNDARY commitment (“never modify the customer-facing price in an automated way”):
- Add to org template’s
conscience.valuesarray. - Publish. Recompose propagates the new commitment to every canonical card.
- The commitment is inviolable — no agent-scope exemption will remove it without platform-level authorization.
See also
- Card Composition (concept) — rules table, mechanism, worked example
- Agent Cards — two-card model overview
- Alignment Card Schema — per-section composition rules
- Protection Card Schema — protection-card composition
- Migration Guide — if you’re coming from the pre-UC model