Skip to main content
Policy is part of the alignment card. In the unified card model, what used to be a standalone policy document lives in the alignment card’s capabilities and enforcement sections. There is no separate PUT /v1/agents/:id/policy endpoint — publish the alignment card and the policy travels with it. The mnemom policy … CLI group has been removed in favor of mnemom card validate / mnemom card evaluate / mnemom card publish.This guide has been updated for the unified model. Sections that reference the AAP protocol shape describe the protocol-level interop surface; the unified card is what you write in production.
Policies bridge Alignment Cards (abstract values and bounded actions) to concrete tool usage enforcement. An alignment card declares that an agent may perform web_fetch. The card’s capabilities section defines that web_fetch means the agent can call mcp__browser__navigate and mcp__browser__click, but not mcp__filesystem__delete. The card declares intent. The enforcement section enforces it. A policy is made of:
  • Capability mappings (capabilities) — which concrete MCP tools satisfy which capability
  • Forbidden rules (enforcement.forbidden_tools) — which tools are always blocked, with reasons and severities
  • Enforcement defaults (enforcement, plus the card’s top-level autonomy_mode) — how unmapped tools are handled and how long new tools get a grace period
This guide walks through creating, testing, publishing, and managing policies using the CLI and API.

Quick start

Capability mapping walkthrough

Capability mappings are the core of every policy. They bridge the gap between what your alignment card declares (abstract semantic actions) and what your agent actually invokes (concrete MCP tool names).

Start from your alignment card

Look at your card’s autonomy.bounded_actions. These are the abstract actions your agent has declared:
(The AAP 1.0 protocol-level interop card places bounded_actions under a different parent key — see /concepts/alignment-cards for that surface, which is not submitted to mnemom card validate.) Each of these needs at least one capability mapping in your policy.

Identify concrete tools

List the MCP tools your agent actually uses. If you are unsure, check your agent’s recent traces:
This gives you the concrete tool names like mcp__browser__navigate, mcp__browser__click, mcp__filesystem__read_file, and so on.

Create the mappings

For each bounded action, create a capability mapping that lists the concrete tools implementing it, and (optionally) the bounded actions it binds via required_actions:
In this example, the card declares web_fetch and web_search as bounded actions. The agent uses mcp__browser__navigate, mcp__browser__click, and mcp__browser__screenshot to perform those actions. The glob pattern mcp__browser__* covers all of them. Remember that required_actions is validated server-side only today — publish or validate with --agent to check it.

Use glob patterns for tool families

Glob patterns let you match groups of related tools without listing each one:
Start with broad globs during initial development, then tighten them as you understand which specific tools your agent uses. A mapping like mcp__browser__* is fine for week one. By month two, you should enumerate the specific tools for tighter control.

Verify coverage

After writing your mappings, check that every bounded action is covered. Because coverage depends on required_actions, which the offline validator doesn’t yet recognize (see the note above), check it through the API instead of the local card evaluate:
The response’s coverage object tells you which bounded actions are mapped and which are missing. Aim for 100% coverage in production cards.

API-based management

Policy is part of the alignment card. Get, set, and resolve it through the alignment-card endpoints — there’s no separate /v1/agents/{id}/policy surface after the 2026-04-15 unified-cards consolidation.

Publish policy (set the alignment card)

Publish the alignment card with your capabilities and enforcement sections embedded. The server validates the card against the unified schema, recomposes it against platform + org scopes, and writes the canonical output.
The response is the canonical card — your input composed with platform + org scopes (strictest-wins on enforcement mode, deny-overrides union on forbidden patterns, etc). See Card Composition for the per-field rules.

Fetch the canonical card

Add ?include_composition=true to include the _composition metadata block showing which scope contributed which section — useful when debugging “why did this org-level forbidden pattern end up on my agent’s canonical card?”
YAML is the canonical content type; pass Accept: application/json to get JSON back.

Evaluate tools against the active policy

Test a set of tools against the agent’s current policy (the capabilities + enforcement sections of its canonical card) without making a real gateway request. The policy is derived server-side from the agent’s published canonical alignment card — you don’t pass a policy document, just the agent_id and the tools to check:
agent_id and a non-empty tools array are required. context defaults to "cicd". Set dry_run: true to skip persisting the result (useful when calling this repeatedly from CI). The agent must already have a published canonical alignment card (PUT /v1/agents/{agent_id}/alignment-card or PUT /v1/alignment/agent/{agent_id}) — otherwise the endpoint 404s. You must also be a member of the org that governs the agent: for anyone else the endpoint returns the same 404 Agent not found as for an unknown agent. A missing or non-string agent_id is a 400. The evaluate endpoint returns a verdict (pass, warn, or fail) and per-tool detail: which capability each tool matched, which forbidden rule it tripped, or whether it fell through to unmapped_tool_action. Use this in CI to catch regressions before publishing a card — POST /v1/policies/evaluate/historical does the same thing against the agent’s actual recent traces.

Historical evaluation

To evaluate against actual recent traces (rather than a hypothetical tool list), use the historical endpoint:
This replays the agent’s most recent limit traces (default 50, capped at 200) against the agent’s current canonical card, surfacing any tool call that would violate today’s rules. Pass an optional card_json to evaluate the traces against a hypothetical card instead of the agent’s published one — useful for checking “would this candidate card have caught what actually happened.” It’s a useful input for card_gap reclassification (see Trust Recovery). The same org-membership rule applies: an agent outside your orgs returns 404 Agent not found.

Multi-environment strategies

Separate policies per environment

Use a different top-level autonomy_mode (and enforcement defaults) per environment’s agent card to catch issues progressively:
In development, keep enforcement loose so agents can explore new tools without blocking:

Org-level baseline, agent-level specialization

Publish an org-wide alignment card (PUT /v1/alignment/org/{org_id}) for security rules that apply to every agent in the org, and let each agent’s own card (PUT /v1/alignment/agent/{agent_id}) add agent-specific capabilities on top of it. The server composes platform → org → team → agent into one canonical card for the agent (see Card Composition). The merge rules ensure an agent-level card can strengthen but never weaken the org baseline:

Version control your policies

Keep card.yaml alongside your agent code in version control. This gives you:
  • Diff visibility — every policy change is reviewed in a pull request
  • Rollback capability — revert to a previous policy by reverting the commit
  • CI gating — validate and test policies automatically on every push

Using policy recommendations

The Intelligence Layer turns a risk forecast into a concrete policy recommendation. First generate a forecast from a fault-line analysis (POST /v1/teams/forecast), then pass its forecast_id here — the recommendation draws on the forecast’s observed agent behavior, failure modes, and fault-line structure.

Generate a recommendation

The response’s recommended_policy is a complete policy document with:
  • capability_mappings derived from observed tool usage patterns (each entry’s tools + card_actions)
  • forbidden rules based on detected violations and near-misses
  • escalation_triggers from historical escalation patterns
  • defaults (recommended enforcement mode) based on team maturity
alongside a top-level rationale array explaining each recommended field, and expected_coverage / fault_lines_addressed summary numbers.
Policy recommendations are a starting point, not a final policy. Always review the generated policy, adjust mappings to match your specific agent architecture, and test against historical traces before publishing.

Review and customize

rationale gives you a field + reason + confidence (0-1) for each recommended section. Focus your review on the low-confidence entries, where the system was less certain about the correct mapping:
recommended_policy comes back in this capability-mapping shape (card_actions), not the alignment card’s own capabilities/enforcement shape. Before publishing, fold it into your card: each capability_mappings.<name> becomes capabilities.<name> with card_actions renamed to required_actions, forbidden entries become enforcement.forbidden_tools, and defaults.enforcement_mode maps to the card’s top-level autonomy_mode.

Best practices

Start in observe mode

Begin with autonomy_mode: observe to see what your policy would catch without blocking agent traffic. Graduate to nudge and then enforce after testing confirms the policy matches your expectations.

Evaluate before publishing

Always run mnemom card evaluate before mnemom card publish. Evaluating against your agent’s tools shows you the real-world impact of your policy before it affects live requests.

Align mappings with card actions

Keep capability mappings tightly aligned with your alignment card’s bounded_actions. Every card action should have a corresponding mapping, and every mapping should reference a real card action.

Aim for >90% coverage

Review coverage reports regularly. Unmapped card actions fall through to defaults, which may not match your intent. Target 100% coverage in production policies.

Set a grace period

enforcement.grace_period_hours prevents newly-added tools from immediately becoming violations. When your card composes with an org/platform floor, the shortest grace period across all layers wins.

Version control your cards

Store card.yaml in your repository alongside agent code. Use CI validation to catch policy issues before deploy and maintain a clear audit trail of every change.

See also

  • Policy Engine — How the policy engine evaluates tools against policies
  • Policy DSL Specification — The underlying capability-mapping schema the policy engine compiles your card’s capabilities/enforcement sections into (also the shape returned by POST /v1/teams/recommend-policy)
  • CLI Reference — CLI commands including card validate, card evaluate, and card publish
  • CI/CD Policy Gates — Integrating card evaluation into your deployment pipeline
  • Alignment Card Management — Creating and managing alignment cards with embedded policy
  • Enforcement Modes — Alignment enforcement (observe/nudge/enforce) vs. policy enforcement