# Intramedial — Agentic Control Surface

> Auto-generated from `@intramedial/contracts@0.43.1` on 2026-09-20T00:00:00.000Z.
> Do not edit by hand — re-run `npm run codegen` in the contracts repo.

This document is the **single source of truth** for every programmatic + agentic action a customer can invoke against Intramedial. It is consumed by:

- AI coding assistants (Claude Code, Cursor, GitHub Copilot, OpenAI Codex) — for retrieval-augmented code generation against the Intramedial API.
- AI chat surfaces (ChatGPT, Claude, Gemini, Perplexity) — for context priming when an end-user grants the connector access.
- The Intramedial developer portal — as the canonical narrative pairing of `openapi.json`.
- Internal Worker handler tests — every example here is exercised in CI.

## Topology

- **Gateway**: `https://api.intramedial.com` — REST surface (OAuth 2.1 + PKCE + DPoP, PAT, workspace API keys).
- **MCP server**: `https://mcp.intramedial.com/mcp` — streamable HTTP transport + SSE. Tool list mirrors this catalogue.
- **A2A capability card**: `https://api.intramedial.com/.well-known/a2a.json` — declarative agent-to-agent delegation contract.
- **AGENTS.md (this file)**: `https://api.intramedial.com/.well-known/AGENTS.md`.

## Safety hierarchy

Every action is classified by `safetyLevel`:

- `read` — no side effects. Safe to auto-execute. Emits `agent_read` audit envelope.
- `mutation` — writes state but reversible. Default `confirmationPolicy=ask` (agent SHOULD prompt; server permits).
- `destructive` — hard to reverse. Default `confirmationPolicy=always` (server enforces — returns 412 without confirmation token).
- `billing_impacting` — costs the customer money. Default `confirmationPolicy=always`; threshold-gated actions escalate to `mandate` (AP2 Verifiable Credential required).

Mutating + destructive + billing-impacting actions also require a workspace context header (`Intramedial-Workspace-Id`) and an `X-Idempotency-Key`.

## Anti-confused-deputy primitive: intent claims

Any cross-workspace agentic delegation requires an `X-Intramedial-Intent` header — a server-issued, audience-bound claim that proves the human principal authorized this exact invocation. See `intent-claims.ts` in `@intramedial/contracts`.

## Domains

### `fleet` (9 actions)

Who each agent is, who it answers to, what it sees.

##### `coordination.fleetmap`

- **Summary**: Fleet Map: Every agent in your workspace on one screen: what its mandate lets it do, which leases it holds right now, how far it is trusted, and whether it is stopped.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/coordination/fleetmap`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { agents, leases, grants, waiters, presence, quarantined, mcpMode, github, ledger }
```

##### `identity.enroll`

- **Summary**: Agent identity registry: Enroll each agent as its own identity principal, with a DID, an accountable owner and its keys.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/identity/enroll`

**Example**:

```jsonc
// input
{
  "did": "did:web:acme.example:agent:billing",
  "displayName": "Billing agent",
  "kind": "customer"
}
// → output
{}
// note: → 200 { agent, skipped }
```

##### `mcp.shadow`

- **Summary**: Shadow agent discovery: Find the agents nobody registered.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/mcp/shadow`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { events, kind, protocolVersion }
```

##### `civics.presence`

- **Summary**: Agent presence: Who else is working here, and on what – one call away.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/civics/presence`

**Example**:

```jsonc
// input
{
  "did": "did:web:acme.example:agent:billing",
  "status": "online"
}
// → output
{}
// note: → 200 { row, all }
```

##### `trust.get`

- **Summary**: Trust scores and autonomy: Turn an agent's history into graduated autonomy.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/trust/get`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { profile }
```

##### `worldmodel.graph`

- **Summary**: World model graph: Everything your workspace knows by name, and how it connects.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/worldmodel/graph`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { nodes, llm }
```

##### `cartographer.map`

- **Summary**: Cartographer edge review: Connections between resources that were proposed but are not yet law.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/cartographer/map`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { edges, pending, bounds }
```

##### `tenancy.tree`

- **Summary**: Tenant tree and reach: The tenant tree, and who may reach each branch.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/tenancy/tree`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { tenants, valid }
```

##### `onramp.sources`

- **Summary**: Fleet on-ramp from export: Bring an existing fleet across from an export instead of rebuilding it.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/onramp/sources`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { v, sources }
```

### `admission` (6 actions)

Who may touch a shared resource, and for how long.

##### `coordination.admit`

- **Summary**: Intralock admission: Declare what an agent is about to do – the actor, the resource, the verb – before it acts.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/coordination/admit`

**Example**:

```jsonc
// input
{
  "actorDid": "did:web:acme.example:agent:billing",
  "resource": "repo:payments/main",
  "action": "write"
}
// → output
{}
// note: → 200 { result: { allow, reason }, llm: false }
```

##### `coordination.lease`

- **Summary**: Resource leases and queues: Short-lived, scoped leases on anything two agents could fight over: a branch, a table, a deploy slot.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/coordination/lease`

**Example**:

```jsonc
// input
{
  "resource": "lock:deploy/production",
  "actorDid": "did:web:acme.example:agent:release"
}
// → output
{}
// note: → 200 { ok, lease } or { ok: false, reason, holder }
```

##### `civics.claims`

- **Summary**: Resource claims office: Stake a claim on a resource before work starts, so other agents see it before they collide.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/civics/claims`

**Example**:

```jsonc
// input
{
  "title": "Migrate the billing schema",
  "resource": "db:billing",
  "by": "did:web:acme.example:agent:billing"
}
// → output
{}
// note: → 200 { stub, desk, title, claim, contest?, liaison }
```

##### `metering.snapshot`

- **Summary**: Metered usage by workspace: What the plane has counted for your workspace, meter by meter.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/metering/snapshot`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { meters, billingMeterIds }
```

##### `coordination.approve`

- **Summary**: Human approval queue: Intents that reach a human gate wait here for a person.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/coordination/approve`

**Example**:

```jsonc
// input
{
  "id": "apr_1",
  "reason": "expected batch"
}
// → output
{}
// note: → 200 { approval, ledgered }
```

##### `dual-control.scopes`

- **Summary**: Two-person dual control: Destructive actions wait for a second person.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/dual-control/scopes`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { scopes, seal, open }
```

### `policy` (7 actions)

The rules agents run under, written down as code.

##### `mandates.compile`

- **Summary**: Mandate studio and replay: Write an agent's charter as code: what it is for, what it may touch, at what priority and under whose authority.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/mandates/compile`

**Example**:

```jsonc
// input
{
  "source": "mandate billing-writes\nallow write on repo:payments/main for did:web:acme.example:agent:billing",
  "apply": false
}
// → output
{}
// note: → 200 { mandate, applied, snapshot, previewDigest }
```

##### `civics.settings`

- **Summary**: Workspace constitution: How fast a human must answer when an agent asks for help, and who is on call to do it.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/civics/settings`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { workspace, platform, effective, urgencies }
```

##### `change-trains.list`

- **Summary**: Staged change trains: A change to a policy, a pack, a role or an adapter reaches the fleet in stages, with a measured check between each one and a way back.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/change-trains/list`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { trains, stages }
```

##### `packs.list`

- **Summary**: Signed pack registry: The packs your workspace can load – parley formats, drill scenarios, yard templates: what each one grants, who wrote it, how well it conforms, and the rules for letting a new one in.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/packs/list`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { packs }
```

##### `lenses.run`

- **Summary**: Governance lenses: Install deterministic governance lenses from a curated catalogue and run one over whatever you send it.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/lenses/run`

**Example**:

```jsonc
// input
{
  "installId": "install_7c2e",
  "input": {
    "leases": [
      {
        "id": "l1",
        "resource": "repo:payments/main",
        "holder": "did:web:acme.example:agent:billing",
        "start": "2026-11-01T09:00:00Z",
        "end": "2026-11-01T10:00:00Z"
      },
      {
        "id": "l2",
        "resource": "repo:payments/main",
        "holder": "did:web:acme.example:agent:refunds",
        "start": "2026-11-01T09:30:00Z",
        "end": "2026-11-01T10:30:00Z"
      }
    ]
  }
}
// → output
{}
// note: → 200 { result: { status, findings, evidence } }
```

##### `attestation.policy`

- **Summary**: Artifact build attestation: Who built a policy snapshot or a detector pack, as opposed to who wrote it.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/attestation/policy`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { policy, kinds, attested }
```

##### `pack-revenue.balances`

- **Summary**: Pack revenue ledger: The earnings ledger behind the pack registry.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/pack-revenue/balances`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { balances, currency }
```

### `enforcement` (6 actions)

Where the plane stands between an agent and the world.

##### `mcp.enforce`

- **Summary**: MCP gateway enforcement: A front for any MCP server.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/mcp/enforce`

**Example**:

```jsonc
// input
{
  "actorDid": "did:web:acme.example:agent:support",
  "tool": "fs.write"
}
// → output
{}
// note: → 200 { allow, reason, action, llm }
```

##### `github.enforce`

- **Summary**: GitHub write gate: Writes to your repositories go through the plane.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/github/enforce`

**Example**:

```jsonc
// input
{
  "repo": "acme/payments",
  "actorDid": "did:web:acme.example:agent:billing",
  "action": "write"
}
// → output
{}
// note: → 200 { allow, reason, commitStatus, checkRun }
```

##### `saas.admit`

- **Summary**: SaaS connector admission: Actions on ticketing, CRM, messaging and storage tools pass the same admission as code and data.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/saas/admit`

**Example**:

```jsonc
// input
{
  "source": "github",
  "actorDid": "did:web:acme.example:agent:support",
  "action": "write"
}
// → output
{}
// note: → 200 { result: { allow, reason }, llm: false }
```

##### `iam.assume`

- **Summary**: Cloud credential broker: Agents hold no standing cloud credentials.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/iam/assume`

**Example**:

```jsonc
// input
{
  "roleArn": "arn:aws:iam::123456789012:role/deploy",
  "actorDid": "did:web:acme.example:agent:release",
  "sessionName": "release-agent",
  "webIdentityToken": "eyJ…"
}
// → output
{}
// note: → 200 { assumed, leaseId, expirationMs, accessKeyId, secretAccessKey, sessionToken }
```

##### `coordination.halt`

- **Summary**: Emergency stop switches: Stop an agent, a mandate, a resource or the whole workspace in one step, and lift the stop again when it is safe.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/coordination/halt`

**Example**:

```jsonc
// input
{
  "scope": "agent",
  "target": "did:web:acme.example:agent:billing",
  "reason": "runaway writes"
}
// → output
{}
// note: → 200 { ok, halt, created, ledgered }
```

##### `coordination.quarantine`

- **Summary**: Agent quarantine: Take one agent out of play without stopping the rest of the fleet.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/coordination/quarantine`

**Example**:

```jsonc
// input
{
  "did": "did:web:acme.example:agent:billing",
  "warrant": {
    "kind": "dual-control",
    "id": "dc_3a91"
  }
}
// → output
{}
// note: → 200 { ok, did, kind }
```

### `detection` (6 actions)

Collisions found before they turn into outages.

##### `detection.run`

- **Summary**: Conflict detection: Detectors that look for agents getting in each other's way: overlapping claims, flip-flop edits, stampedes, actions that differ from what was declared.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/detection/run`

**Example**:

```jsonc
// input
{
  "id": "lease-overlap",
  "forceInline": true
}
// → output
{}
// note: → 200 { detector, hits, conflicts, llm, filed, suppressed, filedOn }
```

##### `conflict-audit.latest`

- **Summary**: Conflict audit report: Intramedial's own audit of the conflicts your workspace has recorded: who contended, how complete the evidence behind each dataset is, and which resources could move from observe toward enforce.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/conflict-audit/latest`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { report }
```

##### `drills.counterfactual`

- **Summary**: Counterfactual simulation: Rehearse a change before making it.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/drills/counterfactual`

**Example**:

```jsonc
// input
{
  "packId": "pack_counterfactual"
}
// → output
{}
// note: → 200 { packId, probes, before, after, result, llm }
```

##### `drills.frt`

- **Summary**: Turf-war drills: Chaos engineering for agent fleets.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/drills/frt`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { results, llm }
```

##### `watchdog.check`

- **Summary**: Issuance watchdog: An independent check on how fast leases are taken and credentials issued.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/watchdog/check`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { at, findings, scanned, background, watched }
```

##### `conformity.sweep`

- **Summary**: SI/AI disclosure conformity: Whether every agent that may talk to a person carries the SI/AI disclosure label the EU AI Act asks for, and what a change to the fleet would do to that before you make it.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/conformity/sweep`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { report, findings, undeclared, basis, llm }
```

### `arbitration` (6 actions)

How a conflict between agents ends, and who decided.

##### `negotiate.propose`

- **Summary**: Structured negotiation: Where the parties to a conflict try to settle before it goes to an arbiter.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/negotiate/propose`

**Example**:

```jsonc
// input
{
  "id": "neg_1",
  "actorDid": "did:web:acme.example:agent:release",
  "text": "Split the deploy window 60/40"
}
// → output
{}
// note: → 200 { session }
```

##### `arbitration.arbiter`

- **Summary**: Bounded arbiter: When the parties cannot settle, an arbiter rules with bounded authority.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/arbitration/arbiter`

**Example**:

```jsonc
// input
{
  "id": "arb_1",
  "conflictId": "cfl_1"
}
// → output
{}
// note: → 200 { case, precedents, workflowId, llm, appealPath }
```

##### `courts.file`

- **Summary**: Courts and precedent: File a case between agents, add evidence, cite precedent and follow it from hearing to ruling.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/courts/file`

**Example**:

```jsonc
// input
{
  "title": "Deploy slot dispute",
  "parties": [
    "did:web:acme.example:agent:release",
    "did:web:acme.example:agent:cost"
  ]
}
// → output
{}
// note: → 200 { item }
```

##### `civics.forum`

- **Summary**: Resource-bound forum: Discussion between people and agents, bound to the resource it is about.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/civics/forum`

**Example**:

```jsonc
// input
{
  "title": "Freeze on payments deploys"
}
// → output
{}
// note: → 200 { topic, guard, llm, liaison }
```

##### `civics.treaties`

- **Summary**: Treaties between parties: Written agreements between parties: what each side may do on shared ground, in which version, and who has accepted it.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/civics/treaties`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { treaties }
```

##### `civics.asks`

- **Summary**: Human liaison desk: Where agents ask the humans a question instead of guessing.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/civics/asks`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { asks, sla, oncall, you }
```

### `arenas` (6 actions)

Neutral ground where agents meet, deal and work.

##### `parley.open`

- **Summary**: Parley neutral arenas: Neutral ground any agent can summon: a bounded arena where parties meet to negotiate or work out a dispute, under a pack of rules both accept.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/parley/open`

**Example**:

```jsonc
// input
{
  "topic": "deploy freeze"
}
// → output
{}
// note: → 200 { arena } (no `ok` field; `ok: true` is the response envelope, not part of the module's own data)
```

##### `directory.lookup`

- **Summary**: Gatehouse front door: The door other organizations' agents knock on.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/directory/lookup`

**Example**:

```jsonc
// input
{
  "query": "did:web:acme.example"
}
// → output
{}
// note: → 200 { hits } (the `lookup` action returns `hits`; `entries` is what `directory.list` returns)
```

##### `yards.list`

- **Summary**: Registered yards: Persistent, governed environments where a fleet does real work under one constitution.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/yards/list`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { yards }
```

##### `roles.charters`

- **Summary**: Roles and posts: Who holds each post in a yard.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/roles/charters`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { utility, application, names } (there is no `charters` field; `utility` lists the seven frozen posts and `application` lists the ones a yard has declared)
```

##### `previews.list`

- **Summary**: Pull request preview arenas: An arena per pull request, forked from a real yard with participants hidden and only a sample of data.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/previews/list`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { previews, summary } (summary carries live, reaped, expiringWithin24h and oldestLiveKey counts, left out of the catalogue sample)
```

##### `settlement.list`

- **Summary**: Settlement and escrow: When parties seal a commitment that involves money, a settlement holds the evidence: an escrow against an AP2 mandate, what was delivered, and any dispute.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/settlement/list`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { settlements, fundsMoved: false } (list and get always carry the fundsMoved sentinel alongside settlements)
```

### `record` (9 actions)

What happened, who did it, and how to put it back.

##### `civics.records`

- **Summary**: Public records search: Ask the record what happened.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/civics/records`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { projection, disclosureLevel, events } (filtering by resource also adds lastTouch, unknown and why)
```

##### `ledger.blame`

- **Summary**: Ledger, replay and blame: Every intent, lease, action, conflict and ruling lands in an append-only ledger, batched under Merkle roots.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/ledger/blame`

**Example**:

```jsonc
// input
{
  "resource": "repo:payments/main"
}
// → output
{}
// note: → 200 { projection, resource, events, lastTouch, unknown, why } (not a bare { events })
```

##### `ledger-bundles.snapshot`

- **Summary**: Signed evidence bundles: Seal a snapshot of your workspace's audit chain into a signed bundle that an auditor can download and check offline, without asking Intramedial anything.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/ledger-bundles/snapshot`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { bundle }
```

##### `remediation.blast`

- **Summary**: Blast map and remediation: Map what an agent's admitted actions touched downstream, and who consumed it, before you undo anything.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/remediation/blast`

**Example**:

```jsonc
// input
{
  "runId": "run_1"
}
// → output
{}
// note: → 200 { run, blastMap } (no touched field exists anywhere in the module)
```

##### `portmind.memory`

- **Summary**: Agent memory snapshots: Inspect what an agent remembers, add or remove entries, and take a Merkle snapshot of its memory, the exact input a memory receipt would later sign.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/portmind/memory/{agentId}`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { entry: { agentRef, key, value, contentSha256, tags, version, createdAt, updatedAt } } for one key (add ?agentRef=); 404 if no live entry. The no-key list route returns { entries }
```

##### `rehoming.plan`

- **Summary**: Region rehoming: Where this workspace's coordination records live, and a guarded way to move them to another region.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/rehoming/plan`

**Example**:

```jsonc
// input
{
  "to": "weur"
}
// → output
{}
// note: → 200 { from, to, pinDOs, doClasses, targetWorker, euBound, status, workflowId, llm } (flat; the { plan } wrapper is what rehoming.status returns, not rehoming.plan)
```

##### `exit.objectives`

- **Summary**: Exit and export: The no-hostage clause, made checkable.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/exit/objectives`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { objectives, unverified, missed, classes } (no top-level measured field; each objective's measured value is at objectives[].observed)
```

##### `compliance.pack`

- **Summary**: Compliance evidence packs: Fourteen controls mapped to the EU AI Act and NIST AI RMF, measured against evidence this workspace actually has.
- **Safety**: `mutation` (confirmation policy: `ask`)
- **Idempotent**: no
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_invocation`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `POST /api/v1/acp/compliance/pack`

**Example**:

```jsonc
// input
{
  "id": "art12"
}
// → output
{}
// note: → 200 { pack, wraps, invoked, artifacts } (not { controls, gaps } – that shape belongs to coverage and evidence-pack, different actions)
```

##### `outcomes.summary`

- **Summary**: Impact HQ outcomes: Connect governed agent activity to outcomes you can measure.
- **Safety**: `read` (confirmation policy: `none`)
- **Idempotent**: yes
- **Permissions**: _(no permission required)_
- **Audit kind**: `agent_read`
- **Rate class**: `default`
- **Surfaces**: rest, mcp, chatgpt_app, gemini, perplexity, claude_cowork, claude_skill, a2a, nlweb
- **REST endpoint**: `GET /api/v1/acp/outcomes/summary`

**Example**:

```jsonc
// input
{}
// → output
{}
// note: → 200 { window, assumptionVersion, metrics, comparison? } (no top-level outcomes or assumptions; the full assumptions object comes from assumptions.get, assumptions.history or export)
```


---

**Total**: 55 actions across 8 domains.

Generated 2026-09-20T00:00:00.000Z from contracts 0.43.1.
