Skip to main content
Risk assessment answers the question every platform operator asks before letting an agent act: how dangerous is this, right now, in this context? Unlike static reputation scores, risk assessments are dynamic. The same agent can be low-risk for a data access request and high-risk for a financial transaction — because different actions stress different capabilities. Risk assessments incorporate the agent’s reputation, recent violation history, the specific action being attempted, and the operator’s risk tolerance. For teams, the engine goes further: it evaluates whether a group of individually acceptable agents might still be dangerous when combined — through correlated failure, value divergence, or contagion dynamics.

Individual risk

Each individual risk assessment produces a score between 0 and 1, computed as:

Context-aware component risk (60%)

Five reputation components are weighted differently depending on the action type: Different actions weight these differently. A financial_transaction emphasizes compliance (0.30) and integrity (0.30). A task_delegation emphasizes coherence (0.35) — can this agent hand off work reliably? A multi_agent_coordination action weights coherence highest (0.40).
Six action types are supported: financial_transaction, data_access, task_delegation, tool_invocation, autonomous_operation, and multi_agent_coordination. Each has a distinct weight profile tuned to the risks specific to that action.

Recency penalty (30%)

Recent violations count more than old ones. The engine uses exponential decay with a 30-day half-life:
A critical violation yesterday contributes nearly 1.0. The same violation 30 days ago contributes 0.5. After 90 days, it is negligible. Severity weights range from 0.1 (low) to 1.0 (critical).

Confidence penalty (10%)

Agents with limited behavioral history receive an uncertainty premium: insufficient data adds 0.30, low adds 0.20, medium adds 0.10, and high confidence adds nothing.

Amount scaling

When context.amount is supplied (e.g. for a financial_transaction), the composite R is multiplied by a log10-based scale that grows with transaction size: roughly 1.0x at 100,1.1xat100, 1.1x at 1,000, 1.2x at 10,000,1.3xat10,000, 1.3x at 100,000, and 1.4x at $1,000,000, capped at 1.5x. No amount (or an amount ≤ 0) leaves the score unscaled.

Risk levels and recommendations

The composite score maps to four risk levels. Thresholds shift based on the caller’s risk tolerance: Each level maps to a recommendation: approve (low/medium), review (high, requires human approval), or deny (critical, block the action).

Team risk

Team risk assessment evaluates whether a group of agents is safe to operate together. A team of individually low-risk agents can still be dangerous.

Three-pillar model

Aggregate Quality (AQ) uses tail-risk weighting inspired by CoVaR (Conditional Value at Risk): agents with higher individual risk get exponentially more weight. One bad agent drags the score down far more than one good agent lifts it up. Coherence Quality (CQ) evaluates pairwise compatibility across four dimensions — value overlap, priority alignment, behavioral correlation, and boundary compatibility. CQ penalizes high variance: a uniformly moderate team beats a volatile one where some pairs are excellent and others are terrible. Structural Risk (SR) models failure contagion. For each pair of agents, SR estimates how much damage one agent’s failure would cause to the other, based on their coherence gap and the “value at risk.” The team’s SR combines the worst single-agent vulnerability with the fleet average.

Shapley attribution

After computing team coherence, the engine attributes each agent’s marginal contribution using leave-one-out (LOO) Shapley values:
Positive values mean the agent improves the team. Negative values mean they drag it down. This tells operators exactly which agents to swap, add, or remove to optimize team composition. Historical team risk assessments are a primary input to the Team Trust Rating — specifically the Coherence History and Operational Record components. Teams that consistently receive low-risk assessments build stronger reputation scores over time.

Circuit breakers

Hard safety floors override the continuous score when conditions are extreme:
  • Any agent with reputation below 200 forces the team to critical/deny
  • Any pairwise boundary compatibility below 100 forces critical/deny

Additional analytics

Team recommendations

Zero-knowledge proofs

Every risk assessment can optionally be backed by a cryptographic proof. Immediately after /risk/assess or /risk/assess/team computes a score, the risk service fires an asynchronous, fire-and-forget request to a separate proving service and links the resulting proof_id to the assessment. The risk score and recommendation are returned synchronously and are always valid regardless of proof status — an absent or failed proof never invalidates the assessment.

Proof lifecycle and fail-open behavior

proof_status (on the assessment) and status (on the proof object returned by GET /v1/risk/proofs/:proof_id) share the same lifecycle: Proofs typically complete within tens of seconds. Poll GET /v1/risk/proofs/:proof_id to follow a proof from pending through to verified or failed; see Get proof in the API reference.
Proof availability depends on the feature entitlements active on the caller’s account — see Feature gating. Current μ-based usage pricing has no fixed plan tiers; check your account settings for which entitlements are active.

Authorization model

All Risk API endpoints require authentication. Pass your credentials as either:
  • Bearer token: Authorization: Bearer <token>
  • API key: X-Mnemom-Api-Key: <key>

Account-scoped GET endpoints

GET endpoints that retrieve a stored resource by ID — GET /v1/risk/assessments/:assessment_id, GET /v1/risk/team-assessments/:assessment_id, and GET /v1/risk/proofs/:proof_id — are account-scoped. A request with a valid token from a different account returns 404 rather than 403. This prevents leaking resource existence to authenticated callers who do not own the resource. List endpoints (GET /v1/risk/history/:agent_id, GET /v1/risk/team-history/:team_id) filter implicitly to the calling account and return an empty list rather than 404 when the requested ID belongs to a different account.

Which agents you can assess

Assessing another organization’s public or unlisted agent is allowed — that counterparty check is what the engine is for. An assessment never carries reputation data that the reputation API itself withholds, so both POST /v1/risk/assess and POST /v1/risk/assess/team check every agent first:
  • Private reputation — an agent whose reputation visibility is private can be assessed only by a member (owner, admin, member or viewer) of the organization that governs it. Anyone else gets 403 with code reputation_private.
  • Deleted agents — a deleted (tombstoned) agent returns 404 with code agent_not_found.
  • Teams by team_id — a team assessment by team_id requires membership in the team’s organization. A team in an organization you don’t belong to returns the same 404 as a team that doesn’t exist.
If the membership check itself cannot complete, the request fails closed with 503 and code membership_unresolved; retry it.

See also