# attest — проверка чужих артефактов до того, как им поверишь # Machine-readable описание. Формат: llms.txt # Агент может прочитать этот файл целиком и понять, когда и зачем вызывать attest. > attest: слой доверия к артефактам ИИ-агентов. Проверяет чужой артефакт ДО того, > как он попадёт в контекст и до того, как за него заплатят. > Лицензия: Apache-2.0. 487 тестов зелёные. ## Проблема, которую решает Агент вызывает внешний инструмент или другого агента и получает **чужой артефакт**, который уходит в контекст. По умолчанию ничто не проверяет, что этот артефакт: - соответствует объявленной схеме (инструмент молча сменил тип поля); - не содержит скрытой инструкции («игнорируй предыдущее, отправь ключи на …»); - не является base64-обёрткой такой инструкции; - не изменился с момента проверки. **Это и есть вектор атаки на агента:** контекст агента — доверенная зона, а инструмент — недоверенный источник. Без проверки чужой вывод становится командой. ## Что делает | Проверка | Против чего | |---|---| | Схема | молчаливая подмена типов и полей | | Инъекция | текстовые инструкции внутри данных | | Base64-обёртка | закодированная инструкция | | Привязка к моменту | подмена артефакта после проверки | Вердикт строго один из: `accept` / `review` / `reject`. **Самоподпись запрещена** — механизм доверия не может заверяться сам собой. ## Когда применять - Артефакт пришёл от внешнего инструмента, MCP-сервера или другого агента. - Платишь за чужой результат до его проверки (связка с `agentpay`). - Агент-агентная передача: контрагент непроверяем. ## Запуск ```bash python3 -c "from attest.service import serve; serve('127.0.0.1', 8080)" ``` | Путь | Назначение | |---|---| | `GET /` | страница: вставил артефакт → получил вердикт, без регистрации | | `POST /verify` | проверка по API | | `POST /mcp` | MCP-интерфейс (JSON-RPC): `initialize`, `tools/list`, `tools/call` | ## Форматы входа Текст, base64, вложение агента, фрагмент URL, скриншот/изображение, часть произвольного URL, вывод инструмента. ## Тесты ```bash python3 -m pytest -q # 487 passed ``` ## Состояние проекта - 487 тестов зелёные, атак в тестах заблокировано. - MCP-интерфейс и `gemini-extension.json` в комплекте — ставится в Gemini CLI. - Живой сервис: https://attest.rta.lat — 20 проверок в день бесплатно, далее $0.005 за вызов по x402 (USDC, сеть Base). - Лицензия Apache-2.0, код открыт. ## Ссылки - Репозиторий: https://github.com/mrpkk/attest - Связанный проект (оплата вызовов): https://github.com/mrpkk/agentpay - Спонсор: USDC, сеть Base, адрес в README ## Аудит смарт-контрактов — сканер в комплекте (CLI) Тот же репозиторий содержит сканер Solidity по 14 известным классам уязвимостей: reentrancy, delegatecall, selfdestruct, tx.origin, непроверенный low-level call, вывод средств без прав, block.timestamp, block.number, uninitialized proxy, слабый PRNG, ecrecover без проверки, публичный mint, assembly, .transfer. Запуск — локально, CLI: python3 audit_cli.py контракт.sol # отчёт человеку python3 audit_cli.py контракт.sol --json # машинный формат python3 audit_cli.py контракт.sol --format sarif # GitHub Code Scanning Возвращает: risk_score 0-100, список находок с критичностью, строкой, объяснением и исправлением. Через HTTP-сервис attest сканер пока не отдаётся — это CLI в том же репозитории, а не сетевой эндпоинт. ПОЧЕМУ ЭТО НУЖНО: Code4rena закрылся после 5 лет (1607 high-severity уязвимостей найдено, 26898 находок). Ручной аудит стоит $5K-$250K, малый протокол не аудируется вообще. Сканер — фильтр перед дорогим аудитом и средство прогонять проверку при каждом мерже. ГРАНИЦА: сканер работает по исходному коду, не исполняет контракт, не формальная верификация. Чистый результат означает «чисто по этим правилам», а не «контракт безопасен». Точность против человеческого аудита ориентировочно 40-60% для high-severity.