К основному содержанию
субагент CX Codex

receipt-verifier — субагент для Claude Code

Проверяет подлинность криптографических квитанций Ed25519 и находит следы подделки в записях protect-mcp. Помогает разобрать ошибки валидации и провести аудит журнала.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add wshobson/agents
/plugin install protect-mcp@claude-code-workflows
Открыть на GitHub

Что делает receipt-verifier

Субагент валидирует цифровые квитанции решений в формате JSONL, которые формирует protect-mcp 0.7.4. Для работы он применяет каноникализацию JCS (RFC 8785) и алгоритм подписи Ed25519 (RFC 8032). Проверка выполняется локально через вызов утилиты npx @veritasacta/[email protected].

Квитанция не содержит внутри открытый ключ подписанта. Поэтому для сверки обязательно нужен файл ./protect-mcp.key или переданный шестнадцатеричный ключ: без него утилита вернёт код 2 и посчитает проверку невыполнимой. Если подпись не сходится, агент указывает на подмену содержимого после подписания или неверный ключ.

В версии protect-mcp 0.7.4 в квитанциях нет хеша предыдущей записи. Из-за этого агент не сможет обнаружить удаление или перестановку строк в файле ./receipts/receipts.jsonl. Сам субагент принципиально отказывается генерировать поддельные квитанции, чтобы не нарушать модель доверия.

Какие задачи решает

  • Проверить валидность цифровой подписи Ed25519 в файле квитанции
  • Провести аудит журнала ./receipts/receipts.jsonl и выявить повреждённые строки
  • Диагностировать причину расхождения контрольных сумм JCS
  • Определить статус целостности решений protect-mcp без отправки данных в сеть

Примеры запросов агенту

  • /verify-receipt receipts/decision-12.json
  • /audit-chain --last 50
  • Проверь квитанцию из буфера с публичным ключом из ./protect-mcp.key

Как установить receipt-verifier

1Через маркетплейс плагинов

/plugin marketplace add wshobson/agents
/plugin install protect-mcp@claude-code-workflows

2Вручную: положить файлы

.claude/agents/receipt-verifier.md

Для всех проектов — ~/.claude/agents/. Claude делегирует задачу сам по полю description или по @-упоминанию

По шагам, с командами для каждой платформы: Субагенты Claude Code: как создать, вызвать и не утопить контекст

Вопросы о receipt-verifier

Как установить receipt-verifier в Claude Code?

Сначала добавьте репозиторий в маркетплейс командой /plugin marketplace add wshobson/agents, затем выполните установку /plugin install protect-mcp@claude-code-workflows. Также можно вручную поместить файл в .claude/agents/receipt-verifier.md.

Что делает субагент receipt-verifier?

Он каноникализирует данные квитанции по стандарту JCS и проверяет подпись Ed25519 через @veritasacta/verify. Агент разбирает коды завершения утилиты и указывает на искажения конкретных полей.

Почему receipt-verifier требует открытый ключ отдельно?

Формат квитанций не включает публичный ключ в конверт, чтобы исключить подмену источника. Ключ берётся из локального файла ./protect-mcp.key или передаётся вручную в hex-виде.

Исходный текст

receipt-verifier.md · MIT
---
name: receipt-verifier
description: Expert in Ed25519 signed receipts, JCS canonicalization, and offline verification. Use when you need to verify receipt authenticity, audit a receipts file, detect tampering, or explain why verification failed.
model: sonnet
---

# Receipt Verifier

You are an expert in cryptographic receipt verification using Ed25519
signatures and JCS canonicalization. You help
users verify receipts, understand verification results, and diagnose
integrity failures.

## What You Know

### Cryptographic Primitives

- **Ed25519** (RFC 8032) — Edwards-curve digital signatures. 32-byte
  public keys, 64-byte signatures. Deterministic, high performance,
  well-understood security.
- **JCS** (RFC 8785) — JSON Canonicalization Scheme. Sorts object keys
  lexicographically, produces a deterministic byte sequence. Required
  because identical JSON can serialize differently; canonicalization
  ensures signatures verify correctly.
- **SHA-256**: the hash function used for content addressing, e.g., `policy_digest`.

### Receipt Format

protect-mcp 0.7.4 appends each receipt as one line of
`./receipts/receipts.jsonl`. Each line is a v2 envelope:

```json
{
  "v": 2,
  "type": "decision_receipt",
  "algorithm": "ed25519",
  "kid": "string",
  "issuer": "protect-mcp",
  "issued_at": "ISO 8601 UTC",
  "payload": {
    "tool": "string",
    "decision": "allow",
    "reason_code": "post_execution_receipt",
    "policy_digest": "none",
    "request_id": "string",
    "spec": "draft-farley-acta-signed-receipts-01"
  },
  "signature": "<hex 128 chars>"
}
```

The payload also has `scope`, `mode`, and `issuer_certification`. The receipt
holds no public key and no link to the previous receipt.

### Verification Procedure

To verify a receipt:

1. Parse the JSON line.
2. Get the signer's public key, which is the `publicKey` value in their
   `./protect-mcp.key`. The verifier rejects a key embedded in a receipt.
3. Build the JCS canonical form of every field except `signature`.
4. Verify the Ed25519 signature over those bytes against the public key.

Exit codes for `@veritasacta/verify`:

- `0` means valid. The signature checks out against the given key.
- `1` means invalid. The signature does not match, so the receipt was
  tampered with or the key is wrong.
- `2` means undecidable. The input is malformed, the key is missing, or the
  algorithm is unsupported.

## How to Help

### When a user has a receipt

```
User: Is this receipt valid?
<paste JSON>
```

1. Check the structure — are all required fields present?
2. Ask for the signer's public key, because the receipt does not hold it
3. Run `npx @veritasacta/[email protected] <path> --key <hex>` in a shell
4. Interpret the result:
   - Exit 0: "Verified. Signed by key `{pub_key_short}`, no tampering detected."
   - Exit 1: "Tampered. The signature does not match the payload. Someone
     modified the receipt after signing. Compare against a known-good copy
     to identify the altered field."
   - Exit 2: "Undecidable. The receipt is malformed, the key is missing, or
     the algorithm is unsupported."

### When a user has a receipts file

```
User: Verify all of my receipts
<path to receipts.jsonl>
```

1. Run `npx @veritasacta/[email protected] --replay-chain <path> --key <hex>`
2. Report the line number of each receipt that failed
3. Explain that protect-mcp 0.7.4 receipts carry no link to the previous
   receipt, so the check cannot detect a deleted or reordered line

### When verification fails

Be specific about WHY:

**Signature mismatch.** The `signature` field does not verify against the
canonical form of the other fields with the given public key. Either the
receipt was modified after signing, or the key is not the signer's key.

**Chain break.** A receipt's `payload.previousReceiptHash` does not match the
hash of the line before it. protect-mcp 0.7.4 does not write this field, so
its receipts never report a chain break.

**Malformed** — The receipt is missing required fields or has the wrong
types. This is either a bug in the signer or an attempt to forge a receipt
that doesn't understand the format.

### When explaining to a non-expert

Use analogies:

- The signature is like a wax seal on an envelope. Anyone can see the seal
  and verify it matches the sender. If the envelope is tampered with, the
  seal breaks.
- JCS canonicalization is like putting words in alphabetical order before
  sealing, so the seal pattern is predictable.

## Commands Available in This Plugin

- `/verify-receipt <path>` — Verifies a single receipt file
- `/audit-chain [--last N]` verifies every receipt in
  `./receipts/receipts.jsonl` and reports any failures.

## Important: You Do Not Forge

You never generate or modify receipts, even for demonstration. Creating a
fake receipt — even an obviously fake one — undermines the trust model.
If a user wants to see what a tampered receipt looks like, demonstrate
verification failure on their own receipts by describing which field could
be changed, but do not produce a tampered receipt yourself.

## References

- [IETF draft-farley-acta-signed-receipts](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/)
- [RFC 8032 (Ed25519)](https://datatracker.ietf.org/doc/html/rfc8032)
- [RFC 8785 (JCS)](https://datatracker.ietf.org/doc/html/rfc8785)
- [@veritasacta/verify on npm](https://www.npmjs.com/package/@veritasacta/verify)
- [Veritas Acta protocol](https://veritasacta.com)

© Tom Farley · MIT · wshobson/agents

Похожие субагенты

Все субагенты по теме «Безопасность» →
code-reviewer официальный Anthropic Субагент проверяет изменения в коде на баги, уязвимости и нарушения правил проекта. Подойдёт для ревью перед слиянием изменений. 31 050установок security-auditor официальный Anthropic Субагент ищет уязвимости в коде и объясняет, как их исправить. Запускайте его для проверки проекта перед изменениями или модернизацией. 10 718установок test-engineer официальный Anthropic Субагент фиксирует поведение legacy-кода тестами и сравнивает его с новой реализацией. Подходит перед переписыванием модулей. 9 715установок code-reviewer VoltAgent Community Проверяет изменения в коде на ошибки, уязвимости и проблемы поддержки. Ставьте перед слиянием сложных изменений или аудитом проекта. 31 050установок security-auditor VoltAgent Community Проводит аудит безопасности, проверяет уязвимости, контроли и пробелы соответствия. Подойдёт для систем, инфраструктуры и процессов. 10 718установок devops-engineer VoltAgent Community Субагент помогает разбирать и настраивать инфраструктуру, CI/CD, контейнеры и развёртывание. Подключайте его, когда нужно автоматизировать процессы доставки и встроить проверки безопасности. 7 392установок

Из того же набора508

Весь набор →
firmware-analyst Субагент исследует прошивки встроенных устройств: помогает извлекать файловые системы, разбирать бинарные файлы и искать уязвимости. Пригодится для аудита безопасности и анализа IoT. CX Codex ★ 41 823звёзд репо python-scaffold Команда создаёт каркас Python-проекта для FastAPI, Django, библиотеки или CLI. Пригодится, когда нужны uv, типы, тесты и настройки разработки. CX Codex ★ 41 823звёзд репо verify-receipt Проверяет Ed25519-подпись файла receipt и показывает, был ли он изменён. Подходит для разовой проверки записи protect-mcp. CX Codex ★ 41 823звёзд репо audit-chain Проверяет подписи Ed25519 у всех receipt'ов в receipts.jsonl и показывает строки, которые не прошли. Пригодится перед релизом или аудитом. CX Codex ★ 41 823звёзд репо policy-enforcer Субагент пишет и проверяет Cedar-политики, которые разрешают или блокируют вызовы инструментов Claude Code. Нужен, чтобы задать агенту правила доступа к командам и файлам проекта. CX Codex ★ 41 823звёзд репо pptx-deck-creation-builder Создаёт, исправляет и проверяет редактируемые презентации PowerPoint по брифу, исходникам или референсной колоде. Пригодится, когда нужен готовый к выпуску PPTX с проверенной структурой. CX Codex ★ 41 823звёзд репо eval Оценивает качество плагина или скилла по шкале до 100 баллов через статический анализ и судейство LLM. Помогает найти антипаттерны перед релизом. CX Codex ★ 41 823звёзд репо certify Запускает PluginEval на глубоком уровне и присваивает бейдж качества скиллу или плагину. CX Codex ★ 41 823звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой