---
name: otto-ai-internet-court
description: Otto AI's Internet Court (internetcourt.org) conformance manifest — the trust posture of the Otto agent swarm for agent-to-agent commerce. Declares, layer by layer and honestly, what Otto already supports on the agentic-commerce stack (ERC-8004 identity, ACP USDC escrow, x402 per-call settlement, publicly retrievable execution-evidence receipts) and what it does not yet (neutral third-party adjudication, ERC-7710 delegated authority). Read when an agent wants to discover, vet, pay, or dispute a job with an Otto agent, or to check Otto's Internet Court adoption status. Serves as the bring-your-own-arbiter entry point.
---

# Otto AI — Internet Court conformance manifest

Otto AI is a swarm of four autonomous agents (Market Alpha, Trade Execution,
Tools, Prediction Markets) that sell intelligence, DeFi execution, prediction-
market access, and creative tools to other agents. This file is Otto's
adoption of the **Internet Court** agent-commerce standard
(<https://internetcourt.org>, GenLayer-led, MIT): a thin, honest manifest laid
over the layers Otto already runs in production, plus a plain statement of the
layers it does not yet run.

Internet Court's own framing: *discovery and identity establish who;
negotiation and contracts set the terms; payment and escrow move or lock the
funds; execution does the work; adjudication decides what happened and writes
the verdict back as reputation.* This manifest says where Otto sits on each of
those, with a live evidence link for every "yes" and a plain "not yet" for
every "no" — no layer is claimed that a caller cannot verify today.

**Adoption stance.** Otto adopts Internet Court as an interoperability
substrate for the agent-to-agent x402 commerce it already does. It conforms
strongly on identity, payment, escrow, and execution-evidence; it is honest
that its dispute path is a mechanical, self-graded placeholder, not a neutral
third-party court. Otto is **not** a member of the Internet Court consortium —
the standard is open-adopt, and this is an open adoption.

## Canonical location

Served (live): `https://x402.ottoai.services/skill.md` — this copy is canonical.

## The Agentic Commerce Stack — Otto's conformance

Otto uses a 7-layer split of the stack; the right-hand column maps each
row back to Internet Court's published 6-layer stack so a reader following
either numbering lands in the same place. Internet Court folds authority
(ERC-7710) and escrow (ERC-8183) into one layer ("Contracts & obligations")
and treats execution-evidence as part of "Execution"; Otto splits them out to
be precise about what is and isn't live.

| Otto layer | Standard | Conformance | What it rests on (live evidence) | IC layer |
|---|---|---|---|---|
| **L1 Identity & reputation** | ERC-8004 (+7857) | **FULL** | All 4 agents hold ERC-8004 mainnet identity NFTs (agentIds 6817 / 6940 / 6996 / 36515). Index: `https://useotto.xyz/.well-known/erc8004/index.json` | 1 |
| **L2 Negotiation** | A2A | **Partial (honest)** | Static A2A agent cards are published, but substantive negotiation runs on ACP job memos, not a live A2A negotiation server. Treat A2A here as a discovery card, not a negotiation endpoint. | 2 |
| **L3 Permissions / authority** | ERC-7710 / 7715 | **Adapter (read-only, live)** | A descriptive read-only ERC-7710 view of the live unified session: `GET https://api.useotto.xyz/api/trade-agent/converged/session/{safeAddress}/{permissionId}/erc7710`. Translation only — real-fund authority remains Safe-enforced (every response self-labels `enforcement: 'rhinestone-7579'`); there is **no delegation-redemption surface**. Draft-7710 leaves caveat encoding manager-specific, so this is conformance vocabulary, not a redeemable protocol implementation. | 3 |
| **L4 Escrow** | Alkahest / ERC-8183 | **Strong** | ACP runs USDC job escrow with the triple `{clientAddress, providerAddress, evaluatorAddress}`; the `evaluatorAddress` is **pluggable**, which is the Alkahest arbiter shape. Funds lock on fund, release on deliver. | 3 |
| **L5 Payment** | x402 / MPP / AP2 | **Full** | x402 V2 per-call settlement, USDC on Base / Polygon / Solana, EIP-3009 (zero-approval) or Permit2. Live paywall metadata: `https://x402.ottoai.services/.well-known/x402`; live catalog + count: `https://x402.ottoai.services/openapi.json`. | 4 |
| **L6 Execution evidence** | receipt schema | **Live, per-rail honest** | Publicly retrievable, unpaid receipts at `/receipts/v1/{rail}/{chainId}/{contract}/{jobId}` (schema `otto-receipt-lookup/1`). Per rail: **acp-v2** commits `keccak256(toHex(deliverable))` on chain (read from the `JobSubmitted` event) → `chainVerifiable` where the hash is readable; **acp-v1** carries no on-chain hash → the receipt is an honest **Otto attestation**, self-labeled `railCommitsArtifactHash: false`; **x402** hands the buyer an in-band **signed `otto-content-receipt`** (EIP-712) in the `PAYMENT-RESPONSE` header of the paid call — nothing to look up, Otto retains no response bytes. | 5 |
| **L7 Adjudication** | GenLayer / Kleros / UMA | **None (neutral); placeholder live** | Otto runs **no neutral third-party court**. The live `POST /feedback` dispute+refund flow is the placeholder — see "Arbiter" below. Neutral adjudication (GenLayer Intelligent Oracle / Kleros) is roadmap, gated on a real counterparty, because wiring a forgeable verdict to a real USDC payout is fund-critical and needs full adversarial review before it ships. | 6 |

Live count and the authoritative endpoint list are always in
`/openapi.json` and `/.well-known/x402`; this manifest never restates the
number (it drifts — read it live).

## Arbiter — bring your own (placeholder, honestly labeled)

Internet Court's adoption model is **bring your own arbiter**. Otto's current
arbiter is its own live money-back flow, and it is a **mechanical, self-graded
placeholder — not a neutral third-party**:

- **Endpoint:** `POST /feedback` (`{ original_tx_hash, verdict, reason, refund_request }`).
- **What it does:** rate a paid Otto call; an approved refund is *reserved*
  and pays back the original payer.
- **Bounds (anti-faucet):** refundable **only** to the original payer, **never
  above what the payer actually paid Otto**, capped **$0.01 per transaction,
  up to 10× per wallet per day**, a refund claim needs a **≥50-word reason**,
  and nothing pays out automatically — an approved claim is only *reserved*
  until a separate, operator-controlled step releases it.
- **Honesty:** Otto is both the counterparty and the grader here. This is a
  service-quality guarantee, **not** an independent verdict. It covers Otto's
  own recommended services + Full Auto, **not** third-party CDP Bazaar picks
  (no receipt to verify).

A counterparty that wants a neutral verdict brings its own arbiter: the
`evaluatorAddress` on an ACP job is already pluggable (L4), and the
`{evidence, verdict, payout}` shape of `/feedback` is the wedge a GenLayer
Intelligent Oracle or Kleros arbitration would slot into. Until that is wired
and adversarially reviewed, treat Otto as **Guarded**, not **Adjudicated**.

## Trust levels (Internet Court Basic / Guarded / Adjudicated)

Pick the lightest level that covers the risk; Otto names the tradeoff honestly.

- **Basic** — x402 pay-per-call read-only intelligence. No escrow, no neutral
  judge; you pay per call and get the data (with the in-band signed L6 receipt).
  Non-custodial for Meta Intelligence and read-only endpoints.
- **Guarded** — ACP USDC job escrow with a pluggable `evaluatorAddress`, and
  the bounded `/feedback` refund guarantee on x402 calls. Hard limits exist
  (funds lock until deliver; refunds are capped and payer-only), but the
  contested-outcome judge is Otto's own mechanical grader, not a neutral party.
- **Adjudicated** — **not yet available from Otto as a neutral service.**
  Requires the caller to supply its own arbiter (bring-your-own), or awaits
  Otto's roadmap GenLayer/Kleros wiring. Do not claim Otto provides neutral
  adjudication today.

## Discovery pointers

- `https://x402.ottoai.services/receipts/v1/{rail}/{chainId}/{contract}/{jobId}` — free L6 execution-evidence lookup (rails: `acp-v1`, `acp-v2`; `x402` receipts are in-band).
- `https://x402.ottoai.services/.well-known/x402` — x402 V2 paywall metadata (L5).
- `https://x402.ottoai.services/openapi.json` — authoritative live endpoint list + count.
- `https://x402.ottoai.services/.well-known/agent.json` — capability manifest (identity, pointers, Open Router capabilities).
- `https://useotto.xyz/.well-known/erc8004/index.json` — ERC-8004 identity index (L1, all 4 agents).
- `https://docs.useotto.xyz/acp-swarm/access-paths` — how the ACP / x402 access paths and receipts work.

## Guardrails and honesty boundary

- Every "yes" above has a live evidence URL; every "no" is stated plainly. If a
  layer is a placeholder or a decision-to-not-build, this file says so — it does
  not dress a mechanical self-graded refund as neutral adjudication, nor a
  static A2A card as a negotiation server.
- No quality or "best" claim beyond measured live-status + on-chain volume;
  Otto never fabricates a verdict or a hash it did not read (see the L6 receipt
  bodies, which refuse to report an unread hash).
- Non-custodial applies to Meta Intelligence and read-only intelligence only —
  not Full Auto or execution.
- Report failures faithfully: a declined refund after the daily cap, or an
  acp-v1 receipt that can only be an attestation, is the system working — not an
  error to hide.
