Skip to content
Security
Skill

/emilia-trust-verification

Verify the authenticity of AI-agent authorization receipts and human-device signoffs. Use this whenever a user shares a "trust receipt", an "authorization receipt", a "signoff", or WebAuthn/passkey approval evidence and asks whether it is valid, genuine, or tampered with. Pairs

BOOST
From plugin
emilia-protocol
6111 skill
Install
$ npx -y skills add emiliaprotocol/emilia-protocol --skill emilia-trust-verification --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/emilia-trust-verification

Context preview

The summary Claude sees to decide when to auto-load this skill.

Verify the authenticity of AI-agent authorization receipts and human-device signoffs. Use this whenever a user shares a "trust receipt", an "authorization receipt", a "signoff", or WebAuthn/passkey approval evidence and asks whether it is valid, genuine, or tampered with. Pairs

SKILL.md

emilia-trust-verification.SKILL.md
name: EMILIA Trust Verification
description: >-
  Verify the authenticity of AI-agent authorization receipts and human-device
  signoffs. Use this whenever a user shares a "trust receipt", an
  "authorization receipt", a "signoff", or WebAuthn/passkey approval evidence
  and asks whether it is valid, genuine, or tampered with. Pairs with the
  public EMILIA Protocol MCP connector (tools prefixed ep_). Verification is
  read-only public-key math; no account is required.
license: Apache-2.0

EMILIA Trust Verification

EMILIA Protocol makes a high-risk AI-agent action carry a device-key signoff plus a **receipt anyone can verify offline**. This skill guides you to verify those artifacts using the public EMILIA MCP connector. It requires the connector to be enabled (server URL `https://www.emiliaprotocol.ai/api/mcp/mcp`, read-only, no auth).

When to use this skill

Engage when the user:

  • Pastes a JSON object with `"@version": "EP-RECEIPT-v1"` (a **trust receipt**),

or asks "is this receipt real / altered / valid?"

  • Pastes an object with a `context` + `webauthn` block (a **device signoff**),

or asks whether the WebAuthn/passkey ceremony and exact-action binding verify.

If the user mentions a receipt or signoff but hasn't pasted it, ask them for the JSON (they can copy a real example from <https://www.emiliaprotocol.ai/verify>).

The two public tools

| Tool | Use it to | |---|---| | `ep_verify_receipt` | Verify an EP-RECEIPT-v1 receipt — Ed25519 signature over canonical JSON + optional Merkle anchor. | | `ep_verify_signoff` | Verify a Class-A device signoff — a WebAuthn (ECDSA P-256) assertion bound to the exact action. |

Each verify tool accepts the JSON object directly; the public key can be passed explicitly or, for self-contained evidence packets, is read from an embedded `issuer_public_key` / `approver_public_key` field.

How to interpret results

**Receipt** — `{ valid, checks: { version, signature, anchor } }`:

  • `valid: true` → the receipt was signed by its issuer and has not been altered.

State this plainly; the user can re-verify it themselves, offline, forever.

  • `valid: false` with `signature: false` → **the receipt does not match its

signature** — it was tampered with, or the wrong key was used. Do not treat a failed receipt as trustworthy. Call out which check failed.

  • `anchor: false` → the Merkle inclusion proof does not reconstruct the claimed

root (the anchor was altered).

**Signoff** — six checks. All must be true for `valid: true`:

  • `challenge_binding` → the signature is bound to **this exact action**; if

false, the action was changed after signing (e.g., the amount).

  • `user_present` + `user_verified` → a real human was present and verified with

a biometric / PIN (Face ID, Touch ID, passkey).

  • `signature` → signed by the approver's enrolled device key.
  • `client_data_type` / `rp_id_hash` → a genuine assertion scoped to the right

relying party.

When a signoff verifies, the precise statement is: *the supplied WebAuthn assertion verifies under the caller-supplied public key, RP ID, and allowed origins; it records user presence and user verification and binds the signed challenge to the supplied exact action.* It does **not** by itself establish legal identity, authority, what the user perceived, or relying-party acceptance. When it fails, name the specific check and what it implies.

Demonstrate tamper-evidence

A compelling, honest demo: after verifying a valid receipt, offer to change one field (e.g. an amount from `82000` to `820000`) and verify again — it will flip to `valid: false`, showing the receipt is cryptographically bound to the exact action. Only do this on example data the user provided.

Boundaries (state these if asked)

  • Verification proves **authenticity and integrity**, not real-world currency:

it does not prove a key wasn't revoked after signing, nor what the human literally saw on screen (the protocol treats presentation/WYSIWYS as a stated residual risk).

  • These tools are **read-only**. Creating receipts, opening signoffs, or gating

agent actions happens through EMILIA's authenticated APIs / the EMILIA Guard Claude Code plugin — not this connector.

  • Rich trust profiles and policy evaluation are authenticated API surfaces and

are deliberately not exposed by this no-auth public connector.

  • The same verifier is open source (Apache-2.0): `npm i @emilia-protocol/verify`

(Node + browser), with JavaScript, Python, and Go implementations proven interoperable. Nothing here requires trusting EMILIA's servers.

Read more
Ships withemilia-protocol

<!-- Discord invite must be set to never expire with unlimited uses. A default Discord invite expires in 7 days and leaves a dead link on this page. -->

Get the whole plugin
Stats
611
Stars
16
Forks
Active
Maintenance
TypeScript
Language
Apache-2.0
License
3d ago
Last commit
7mo ago
Created
1h ago
Added

Repo: emiliaprotocol/emilia-protocol