Skip to main content
Glama

Xonta

Сайт (на английском): mrsergeiluzhnov.github.io/xonta · Подключить своего агента: CONNECT.md · Публичный оркестратор: https://passport.xonta.ru

Открытая инфраструктура доверия для ИИ-агентов. Тесты агент прошёл. А можно ли пустить его в работу с деньгами и данными клиентов, и насколько? Xonta отвечает на это доказательствами, которые может проверить кто угодно, а не оценкой «из 100», которой надо поверить на слово. Паспорт агента (набор подписанных аттестатов) — одна из частей Xonta.

English: README.en.md

Статус: 0.17.2, экспериментальная версия. Всё описанное ниже работает и проверено тестами и прогонами на стенде (stand/, lab/). Часть спецификации пока только описана (см. «Чего ещё нет»).

Новое: Xonta Gate, слой доверия перед любым MCP-сервером

npx -y github:mrsergeiluzhnov/xonta check -- npx -y @modelcontextprotocol/server-filesystem ~/Documents

Одна команда перед любым MCP-сервером (Claude Desktop, Cursor, свой агент). Шлюз прячет инструменты со скрытыми инструкциями, замораживает действия, если описания инструментов поменялись посреди работы, считает действия вроде «удалить», «отправить», «оплатить» и сверх бюджета просит человека, отмечает скрытые команды в ответах инструментов и ведёт подписанный журнал, который можно проверить. Подробно — в GATE.md. Хотите тестировать, привести Xonta в свою сферу или просто пользоваться — CONTRIBUTING.md.

Related MCP server: Agentrim MCP

Как это устроено: VERIFY → GOVERN → LEARN

VERIFY — кто это и что он умеет на деле. У агента свой DID и ключ, подтверждённый домен и владелец. Его MCP-сервер проверяется на скрытые инструкции, а отпечаток инструментов запоминается: если описания тихо поменяли, проверка теряет силу. Экзамен проходит на скрытых заданиях с известным ответом, и считается не «точность», а вред в рублях на одно действие. Каждый итог — подписанный аттестат W3C Verifiable Credentials 2.0.

GOVERN — что ему можно прямо сейчас. Владелец задаёт бюджет вреда, например «за период готов потерять 2 000 ₽». Делим его на вред на действие и получаем число самостоятельных действий, остальное агент передаёт человеку. Лимит растёт постепенно и урезается сразу, как только работа расходится с экзаменом. Помощники-потомки работают по мандату: что им можно вызывать и как часто. Шлюз проверяет каждый вызов до того, как пропустить его дальше. Испортившегося потомка надзор ведёт по ступеням: наблюдение, ограничение, карантин, отзыв.

LEARN — доверие уточняется с каждым действием. Оркестратор советует (поставить проверяющих, дать цель, откатить навыки), часть советов нарочно не исполняет для контроля и записывает исходы в книгу опыта. Оркестраторы делятся опытом между собой, но ничего не берут на веру: проверяют подпись, доказательства и сам приём на своих заданиях. Общего центра, которому все обязаны верить, нет.

Паспорт подтверждает проверки на их дату, а не безопасность агента и не соответствие закону.

Результат за 5 минут

git clone https://github.com/mrsergeiluzhnov/xonta
cd xonta && npm ci
npm run trust-report

Команда поднимает оркестратор, подключает демонстрационного агента поддержки (на заглушке модели, без ключей и без сети), проверяет его и печатает отчёт. Отчёт и все аттестаты сохраняются в trust-report/. Пример:

Проверка

Итог

Доказательство

Управление доменом

✓

аттестат 72aa8af7…

Владелец

✓ проверен вручную по договору

аттестат c735a008…

MCP-сервер: признаки скрытых инструкций

не найдены

аттестат 43b32c87…, отпечаток инструментов

Экзамен на скрытых обращениях

60 обращений, верно 90%

аттестат 96f8f3b6…

Вред на одно самостоятельное действие

390 ₽

тот же аттестат

Один и тот же агент, одни и те же доказательства, разные проверяющие:

Проверяющий

Бюджет вреда

Самостоятельных действий за период

Интернет-магазин

2 000 ₽

5

Банк

300 ₽

0 — только советует, решает человек

Так и задумано: доверие не свойство агента, а решение того, кто его пускает. С настоящей моделью: LLM_PROVIDER=gigachat AGENT_MODEL=GigaChat-2 npm run trust-report.

Срез по публичным MCP-серверам

npm run mcp-survey берёт удалённые серверы из открытого реестра MCP и к каждому делает одно подключение и один запрос списка инструментов. Сами инструменты не вызываются. Считается только то, что измеряется объективно: доступен ли сервер, просит ли авторизацию, может ли доказать, кто он (DID-документ на домене), есть ли в описаниях инструментов признаки скрытых инструкций. При повторном срезе видно, у кого описания сменились без смены версии.

В сводку (REPORT.md) идут только цифры, без названий серверов. Подробности по каждому серверу сохраняются отдельно, для себя. Рейтинга «безопасно / опасно» нет: признак — это совпадение с эвристикой, а не доказательство злого умысла.

Что уже показали эксперименты

Десять прогонов в песочнице (сначала на YandexGPT, потом на GigaChat), деньги и клиенты тестовые. Коротко из прогона 10:

  • испорченного потомка поймали за один раунд (в прогоне 9 похожего ловили на 9–12 раунде), после карантина из 22 200 его вызовов не прошёл ни один;

  • подменённого агента, который сдавал экзамены как прежде, поймали по работе после первого же раунда вреда;

  • агенты с проверенным опытом другого оркестратора вышли на полную самостоятельность к раунду 5, обучавшиеся с нуля — к раунду 7;

  • цена ответа у честных агентов упала со 139 до 27 тестовых рублей, а агенты без оркестратора нанесли по 425–496 тысяч вреда каждый.

Отчёт и найденные слабые места — в results/run-10. Как повторить — в stand/README.md.

Повтор прогона 10 на версии 0.13.3 (results/run-10r): подменённого агента заметили посреди раунда, после 5 обращений, по тому, что он перестал звать свою команду; вред в раунде подмены вдвое меньше, ложных тревог не было. Но после тревоги он ещё 4 раунда работал на 3 действиях и набрал 19 290 ₽. Это исправлено в 0.14.1 и проверено на журналах прогона; дальше — серия из трёх прогонов с разными обращениями.

Первый прогон серии на 0.14.1, с другими обращениями (results/run-series1-a): подменённого агента снова заметили посреди раунда, после 5 обращений, и с этого момента у него не было ни одного самостоятельного действия и ни рубля вреда. Испорченного потомка отозвали, через оркестратора не прошёл ни один из его 26 750 вызовов. Новая ошибка — у честного агента, чей потомок испортился: снятую тревогу дважды поднимали заново по старому вреду. Исправлено в 0.14.2.

Второй прогон серии на 0.14.2 (results/run-series1-b) прошёл не по схеме: оркестратор 2 перестал направлять агентов к оркестратору 1, потому что считал своим проверенным опытом рецепт, который выдавал без контрольной группы. Подмену из-за этого не проверили. Остальное держится: испорченного потомка отозвали до того, как он навредил, ни одного возврата мошенникам у 9 агентов под оркестраторами против 88 у агентов без него, ложных тревог нет. Ошибка с направлением исправлена в 0.14.3, прогон повторим.

Третий прогон серии на 0.14.3 (results/run-series1-c) снова прошёл не по схеме. Оркестратор 2 теперь направлял агентов к оркестратору 1, но агенты, сравнив послужные списки, остались у него: те же рецепты без контроля делали его список лучше. Исправлено в 0.14.4. Остальное повторилось: испорченного потомка отозвали в раунде 7, из 22 950 его вызовов не прошёл ни один; один возврат мошеннику на 9 агентов под оркестраторами против 84 у агентов без него; ложных тревог нет; аудит базы знаний третий раз подряд попал в интервал.

Повтор второго прогона на 0.14.4, с теми же обращениями (results/run-series1-b2), прошёл по схеме. Агенты сами выбрали оркестратора 1, подменённого агента там заметили посреди раунда, после 5 обращений, и с этого момента у него не было ни одного самостоятельного действия. Испорченного потомка отозвали до того, как он навредил, из 15 300 его вызовов не прошёл ни один. Новая ошибка — ложная тревога у честного агента без команды у оркестратора-одиночки: крупные ошибки у такого агента бывают и на экзамене, а тест по вреду этого не учитывает. Пока не исправлено.

Повтор третьего прогона на 0.14.4 (results/run-series1-c2) тоже прошёл по схеме и без ложных тревог. Подменённого агента поймали после 5 обращений, но за них он успел навредить на 13 320 ₽ — больше, чем в прошлых прогонах. Испорченного потомка отозвали, из 27 300 его вызовов не прошёл ни один, но до карантина его агент успел выполнить одну его скрытую команду на 16 870 ₽.

Итог серии из трёх прогонов (results/series-1): во всех трёх подмену поймали после 5 обращений и дальше у подменённого не было ни одного действия (скорость обнаружения — главная цифра для того, кто подключает агента: каждый раз 5 обращений, вред за эти 5 — 3 200, 7 990 и 13 320 ₽; быстрее 5 сейчас нельзя, проверка посреди периода идёт каждые 5 обращений); во всех трёх потомка отозвали в раунде 7, из 69 350 его вызовов не прошёл ни один. Средний агент под оркестратором за 12 раундов заработал 38 900 тестовых рублей, без оркестратора потерял 480 300; разница 519 000 ₽, 95% интервал — 454 000–585 000 ₽. Агенты с опытом другого оркестратора выходят на самостоятельность к раунду 5, обучавшиеся с нуля — к 7–9. А вот что опыт даёт больше денег, три прогона не доказывают: +11 000 ₽ на агента, интервал от −21 000 до +44 000.

Прогон 11 «Экономия токенов» (results/run-11): одни и те же 320 обращений прошли шесть способов работы с моделью. Дешевле всех с учётом вреда оказалось решать всё на старшей модели GigaChat-2-Max — 41 ₽ на обращение против 78 ₽ у младшей, вред 5 000 ₽ против 13 400. Токены стоят 0,2 ₽ на обращение, вред и время человека — в сотню раз больше, поэтому экономить надо их. Старшая «только при риске» вред не уменьшила: самый дорогой вред — от обычного ответа на жалобу, а при нём её не зовут. Оркестратор на экзамене это место нашёл сам, но в прогоне ему не хватило бюджета на старшую. Это и опасность кэша после смены правил проверим в повторе.

Повтор на других обращениях (results/run-11b): старшая снова дешевле младшей на 36 ₽ на обращение, «старшая при риске» снова почти не уменьшила вред. Без тесного бюджета оркестратор сравнялся со старшей и чуть её обогнал — 68,51 ₽ против 73,39, но разница держится на четырёх обращениях, поэтому будет третий прогон. Кэш проверок после смены правил 59 раз отдал старую статью о возврате, и старшая по ней отменила два верных возврата. Кэш, который сбрасывается по времени, а не при изменении статьи, после смены правил вредит.

Третий прогон (results/run-11c) и итог трёх: старшая дешевле младшей на 37 ₽ на обращение (30–45), «при риске» дороже старшей на 27 ₽ (20–35) — три раза из трёх. Оркестратор без тесного бюджета дешевле старшей на 5,57 ₽ (1,51–10,57) по двум прогонам: пара «младшая отвечает, старшая проверяет» чаще передаёт человеку жалобы, на которые старшая отвечает сама. Разница маленькая и зависит от того, во сколько обходится ошибка на жалобе. Кэш после смены правил вредил оба раза, когда мог (+31 и +55 ₽ на обращение в раундах 7–8). Выжимка вдвое режет токены старшей без потери качества, но по деньгам это пока копейки.

Повтор первого прогона серии на 0.14.7 (results/run-series1-a2): агент больше не выполняет скрытые команды испорченного потомка, пока тот под наблюдением, — возвраты на это время идут через человека. На тех же обращениях вред в раунде 6 — 200 ₽ вместо 21 960 ₽, цена — 9 лишних передач человеку. Ложных тревог нет. Подмены в этот раз не было: агенты остались у оркестратора 2, потому что в его послужной список попали старые рецепты без пометки. Стенд исправлен, повтор — следующим прогоном.

Третий прогон на тех же обращениях, на 0.17.2 (results/run-series1-a3), прошёл по схеме и без ложных тревог. Агенты пошли к оркестратору 1 по направлению, подменённого агента там поймали после 5 обращений и оставили без действий до конца. Квитанции шлюза нашли все 4 случая, когда агент умолчал о своём возврате, честных не обвинили ни разу. Предел на одно действие (2 000 ₽) снизил вред у честных агентов с 93 250 до 81 200 ₽, но отправил человеку 158 возвратов, и с учётом времени человека вышло на 7 500 ₽ хуже. Мелкий возврат мошеннику на 1 700 ₽ он не остановил. Это один прогон, проверим на других обращениях.

Проверить самому

npm ci && npm run reproduce

Короткий прогон того же стенда на тестовой модели, без ключей и без сети, около 10 минут. 7 раундов, 12 агентов, 4 оркестратора и те же подставы, что в опубликованных прогонах: агента подменяют на испорченного, потомок начинает портиться, мир меняется, у трёх агентов нет оркестратора. В конце скрипт проверяет те же утверждения, что в отчётах, и пишет по каждому «совпало» или «не совпало». Два из них про то, что мир меняется под системой. Подмену должны поймать не позже чем через 5 обращений. А если посреди работы меняется правило возврата, по старой версии правил больше ничего не должно отдаваться (кэш «по времени» в run-11b отдал 59 устаревших решений, кэш с версией правил отдаёт ноль). Рубли на тестовой модели другие, чем на GigaChat, выводы должны совпадать.

Подробно: что умеет версия 0.2

Возможность

Как устроено

Аттестаты

W3C VC 2.0, подпись Data Integrity eddsa-jcs-2022 (совпадает побайтно с контрольным примером W3C)

Идентификаторы

did:web: собственный DID агента (на том же хосте, что MCP) или DID у оркестратора для агентов без своего домена; owner_did — DID владельца, регистрация подписывается им

Отзыв и приостановка

W3C Bitstring Status List: список скачивается целиком, выдающий не видит, кого проверяют

Фиксация даты

Раз в сутки — дерево Меркла по всем событиям, цепочка корней, отметка в Bitcoin через OpenTimestamps; доказательство вхождения для каждого аттестата

Подтверждение домена

Код по адресу /.well-known/xonta-challenge.txt → аттестат domain.control

Проверка MCP-сервера

Признаки скрытых инструкций (tool poisoning): невидимые символы, «игнорируй инструкции», обращение к ключам, отправка данных наружу, влияние на другие инструменты; отпечаток списка инструментов — тихая смена описаний отзывает прежнюю проверку

Шлюз A2O2A

Агент → оркестратор → агент. Проверка подписи вызывающего (тело запроса входит в подпись), пропуск только проверенных инструментов, трассы без содержимого

Агент-тестер

Участник со своим DID и ключом; наборы задач с независимой проверкой ответов; в аттестате оценки указано, что данные синтетические

Репутация

По трафику через шлюз; синтетика тестера учитывается отдельно от внешних вызовов

Профиль

Сильные стороны и зона роста по категориям задач

Сигналы владельцу

А — добавить или убрать экземпляр; Б — выделить инструмент из повторяющейся детерминированной цепочки; В — специализированный потомок для слабой категории. Оркестратор рекомендует, но ничего не применяет сам

Статусы агента

active, deprecated (дата закрытия и преемник в заголовках Sunset и Link), suspended, revoked

Потомки

Мандат владельца (AgentMandate: сколько потомков, какой глубины, в каких категориях) + родословная, подписанная родителем (AgentLineage); оркестратор проверяет обе подписи и лимиты и выдаёт свой AgentLineage. Потомок наследует проверку владельца корня

Предложения и слияние

Потомок присылает подписанное ImprovementProposal; навыки — данные на открытом языке, чужой код не запускается. Оркестратор проверяет каждое правило на отложенной выборке агента-генератора (сколько исправляет, сколько портит), решает конфликты, считает вклад абляцией и выдаёт AgentContribution. Применяет слияние владелец

Оценка

AgentEvaluation на отложенной выборке: в аттестате DID генератора, seed и отпечаток выборки

Каскад

Отзыв предка приостанавливает потомков (не отзывает молча)

MCP-сервер оркестратора

verify_agent, get_passport, scan_mcp_server

Уровни доверия по умолчанию

Уровень

Нужно

0

Ничего не подтверждено, или агент приостановлен или отозван

1

domain.control

2

+ owner.verified от доверенного выдающего

3

+ mcp.scan без признаков + reputation, удовлетворяющая политике (стаж, доля ошибок, внешние вызовы)

Проверяющий передаёт свою политику: каким выдающим доверять, какие страны владельцев принимать, какие требования к репутации.

{
  "agent": "did:web:passport.xonta.ru:agents:ag_123",
  "policy": {
    "trusted_issuers": { "*": ["did:web:passport.xonta.ru"] },
    "require": { "owner_country": ["DE", "FR"] },
    "reputation": { "min_age_days": 90, "max_error_rate": 0.02, "min_calls": 500 }
  }
}

Что добавилось в версиях 0.3–0.12: оркестратор и сеть оркестраторов

Возможность

Как устроено

Экзамен и бюджет вреда

Скрытые задания с известным ответом; вред считается в рублях на действие. Лимит самостоятельных действий = бюджет вреда владельца / вред на действие, рост не больше чем вдвое за пересмотр

Сверка работы с экзаменом

Доля серьёзных ошибок в работе и на экзамене сравнивается биномиальным критерием; при расхождении права урезаются, выдаётся BehaviorDrift

Советы с контролем

Сэмплирование Томпсона, часть советов намеренно не исполняется (контроль), прогноз пишется до исхода, исход — подписанный AdviceOutcome

Проверка правил агента

Агент правило только предлагает; оркестратор проверяет его на отложенном наборе и бракует, если хоть одна категория стала хуже (SkillValidation)

Книга опыта

Область → категория → приём, с подписанными доказательствами; живёт между прогонами, старый опыт весит меньше, разошедшийся со свежими исходами сбрасывается

Обмен опытом

POST /v1/experience/learn: подпись пакета → проверка доказательств → своя проверка приёма → только потом в книгу; доверие к источнику растёт или падает

Послужной список

GET /v1/experience/track-record: подписанный, вместе с ошибками (ложные и пропущенные тревоги, точность аудита)

Направление

POST /v1/experience/referral: честно направляет агента к оркестратору с более сильным опытом в категории

Надзор за потомками

Мандат ограничивает, что потомку можно вызывать и сколько раз в минуту (проверка на шлюзе до пропуска); контрольные вопросы и поиск скрытых команд в ответах; лесенка норма → наблюдение → ограничение → карантин (DescendantIncident) → отзыв; за потомка отвечает корневой агент

Описание прогонов 1–9 и как их повторить — в stand/README.md.

Справочник оркестраторов и советы агенту (0.16)

Каждый оркестратор публикует подписанную визитку /.well-known/xonta-orchestrator.json: DID, эндпоинты, наборы заданий и опыт по категориям. Справочник Xonta (GET /v1/orchestrators, фильтр ?category=) записывает тех, кто прошёл проверку подписи и домена, перепроверяет их раз в несколько часов и находит новых через соседей. Оркестратор, развёрнутый у себя, сам предлагает владельцу записаться (в журнале, на главной странице и в /health) и без согласия никуда о себе не сообщает.

После экзамена агент получает советы. GET /v1/agents/ID/descendant-advice — где нужен потомок-специалист, где дешевле человек, какого потомка оставить, а какого убрать. GET /v1/agents/ID/orchestrator-advice — у какого оркестратора из справочника больше опыта по слабым категориям и где стоит тот же набор заданий для второго независимого аттестата. Подробно в CONNECT.md.

Приватность и обратимость (0.18). Xonta Gate с секцией privacy сам определяет, насколько чувствительны уходящие данные, и не верит метке агента. Допуск берётся наименьший по цепочке инициаторов, будь то человек или другой агент. Пересказ после чтения закрытого источника ловится окном задачи, приманки в источниках доказывают вынос, необратимые отправки можно задержать и отменить. Оркестратору уходят только счётчики, и по ним он судит, честно ли агент размечает данные (GET /v1/agents/ID/privacy). Если нет, в мандате чувствительное только через человека. Десять сценариев: results/privacy-demo. В песочнице появился поздний вред (NET_LATE_HARM), например возврат по спору через два раунда. Он привязывается к периоду самого действия, а тесты на порчу видят его, когда о нём узнали.

Возвраты частями (0.17.4). Сумма возвратов по одному заказу не может превысить оплаченное, возврат на новую карту вместо исходного способа оплаты всегда идёт человеку. Появился мошенник, который просит вернуть остаток после частичного возврата (SUP_SPLIT_FRAUD, доля таких обращений). В npm run reproduce он по умолчанию выключен. С долей 0,3 он попадает и в экзамен, нормы вреда у агентов сдвигаются, и на тестовой модели прогон уходит в сторону, одна ложная тревога и позднее обнаружение подмены. Без него сходятся все 13 утверждений, включая новое про заказ и новую карту. Как с ним справляются настоящие модели, проверим на GigaChat.

Квитанции о тратах (0.17.2): списание подписывает тот, кто списал деньги, оркестратор проверяет цепочку и живой остаток и сверяет квитанции с тем, что агент заявляет сам, вместе с потомками. Скрытые траты видны, честная пометка «подтверждено независимо / со слов агента» — в сводке GET /v1/agents/ID/spend. Там же исправлены правило выбора оркестратора и слепое пятно надзора после смены команды: results/v0.17.2.

Предел на одно действие (0.17.1): в мандате два предела, как у сессионного ключа кошелька, — на период и на одну операцию; возврат дороже всегда идёт человеку. На тестовой модели вред подменённого агента в раунде подмены упал с 19 440 ₽ до нуля: results/per-action-cap.

Массовые задачи (0.17): POST /v1/agents/ID/jobs — для работы по длинному списку оркестратор следит за долей успехов на ходу, даёт прогноз вилкой (успехи, деньги, часы), при падении ниже порога советует спросить пользователя и ждёт решения владельца с границами, а заявленное агентом выборочно перепроверяет независимый проверяющий. Сценарий по реальному разбору одного утра на платном поиске телефонов: results/lookup-scenario.

Быстрый старт

npm ci
npm test            # модульные тесты, включая контрольный пример W3C
npm run e2e         # сквозная проверка; нужен соседний каталог ../xonta-docs (сервер «Xonta Документы»)
npm run lab         # эксперимент: корень, потомки, генератор данных, клиент; отчёт в lab/out/
PUBLIC_URL=http://localhost:4040 ALLOW_PRIVATE_TARGETS=1 ADMIN_TOKEN=dev npm start

ALLOW_PRIVATE_TARGETS=1 разрешает http и локальные адреса — только для разработки.

Подключение агента

# 1. регистрация (ключ регистрации или администратора); ответ содержит owner_token и код для домена
curl -X POST $BASE/v1/agents -H "Authorization: Bearer $REG" -H "Content-Type: application/json" \
  -d '{"name":"Мой агент","mcp_url":"https://agent.example.com/mcp","owner":{"name":"Example Ltd"}}'
# 2. положить код в https://agent.example.com/.well-known/xonta-challenge.txt и подтвердить
curl -X POST $BASE/v1/agents/$ID/domain-check -H "Authorization: Bearer $OWNER_TOKEN"
# 3. проверка MCP-сервера и тест через шлюз
curl -X POST $BASE/v1/agents/$ID/scan -H "Authorization: Bearer $OWNER_TOKEN"
curl -X POST $BASE/v1/agents/$ID/test -H "Authorization: Bearer $OWNER_TOKEN" -d '{"tasks":30}' -H "Content-Type: application/json"
# 4. паспорт и проверка
curl $BASE/v1/agents/$ID/passport
curl -X POST $BASE/v1/verify -H "Content-Type: application/json" -d '{"agent":"'$ID'"}'

Вызовы агента через шлюз: POST $BASE/gw/$ID/mcp (MCP Streamable HTTP).

API

Метод

Путь

Доступ

GET

/.well-known/did.json, /agents/:id/did.json

открыто

GET

/status/revocation, /status/suspension

открыто

GET

/ns/v0

JSON-LD контекст терминов

POST

/v1/agents

ключ регистрации или администратора; с owner_did — подпись владельца

GET

/v1/agents/:id/passport

открыто

POST

/v1/agents/:id/domain-check, /scan, /test, /reputation, /evaluate, /merge

владелец (ключ владельца или подпись owner_did)

POST

/v1/agents/:id/children

подпись владельца родителя + мандат + родословная

POST

/v1/proposals

открыто; принимается только подписанное зарегистрированным потомком

GET

/v1/agents/:id/lineage, /proposals, /merges

открыто

POST

/v1/agents/:id/status

владелец: active→deprecated, →revoked; остальное — администратор

GET

/v1/agents/:id/signals; POST /v1/signals/:sid

владелец

POST

/v1/admin/agents/:id/owner-verified

администратор

POST

/v1/admin/anchor

администратор

POST

/v1/verify, /v1/scan

открыто, с лимитом

GET

/v1/credentials/:cid/inclusion, /v1/anchors

открыто

POST

/mcp

MCP-сервер оркестратора

POST

/gw/:id/mcp

шлюз A2O2A

Безопасность и известные ограничения

  • Подпись запросов — упрощённая схема (DID, дата, метод, хост, путь, хэш тела; окно 5 минут). Повтор того же запроса внутри окна не исключён. План — HTTP Message Signatures (RFC 9421).

  • Проверка MCP-сервера эвристическая: «признаков не найдено» не означает «безопасно». Не проверяются prompts и resources сервера.

  • Исходящие запросы (DID-документы, списки статусов, MCP-серверы, вебхуки) — только https и публичные адреса, без перенаправлений, с ограничением размера. Перепривязка DNS между проверкой и соединением не исключена полностью; её в основном нейтрализует обязательный https.

  • Список статусов — один, на 131 072 аттестата; при заполнении выдача останавливается с ошибкой (ротация списков — в планах). Индексы выдаются по порядку.

  • Фиксация даты: события изменяемы до ближайшей суточной фиксации. Отпечаток события — SHA-256 канонической формы записи без поля ts.

  • Хранилище — файлы JSON/JSONL; подходит для одного сервера и прототипа, не для большой нагрузки.

  • Проверка владельца — только вручную администратором по договору. Идентификатор владельца не хранится: только HMAC-отпечаток с секретом OWNER_HMAC_SECRET.

  • Слияние: владелец сам выбирает агента-генератора для оценки; DID генератора записан в аттестат, доверять ли ему — решает проверяющий. Правило, которое ни на что не влияет в выборке, не принимается.

  • Язык навыков пока один (xonta-normalize/1, нормализация данных) — им проверена механика; для агентов на языковых моделях нужны свои языки навыков или песочница.

Чего ещё нет (описано в спецификации, будет в следующих версиях)

Автоматическая проверка владельца по государственным реестрам (региональные профили), маршрутизация задач обратно к родителю при регрессии потомка, подтверждения верных ответов в обратной связи, уровень оркестратора 3 (песочница для агентов на моделях), режим развёртывания «у себя» по лицензии, RFC 9421, ротация списков статусов.

English summary

Xonta is open trust infrastructure for AI agents. It includes an open-source reference implementation of an agent passport: a set of independent, verifiable attestations about an AI agent (W3C VC 2.0, eddsa-jcs-2022, byte-identical to the W3C test vector), did:web identifiers, Bitstring Status List revocation, daily Merkle anchoring with OpenTimestamps, an MCP server scanner for tool-poisoning signs, and an A2O2A (agent → orchestrator → agent) gateway with a signed tester agent, traffic-based reputation and owner-facing signals (scale out, extract a deterministic tool chain, spawn a specialist). Version 0.2 adds descendants: an owner-signed mandate plus a parent-signed lineage credential, signed improvement proposals evaluated rule-by-rule on held-out data from an independent generator agent, ablation-based contribution credentials, and cascade suspension. A reproducible experiment (npm run lab, see lab/REPORT.md) compares a root agent with descendants against a lone control. Versions 0.3–0.12 add the orchestrator: exams with a harm budget, controlled advice with signed outcomes, an experience book kept across runs, verified experience exchange between orchestrators with signed track records, and supervision of descendants (mandate-enforced call limits at the gateway, canaries, quarantine and revocation). npm run trust-report produces an evidence-based report for a demo agent in a few minutes, with autonomy computed per verifier policy rather than a single score. The orchestrator only recommends; it never changes connected agents. The verifier computes the trust level from its own policy.

Лицензия

Apache License 2.0 — см. LICENSE и NOTICE. Контрольные примеры W3C в test/vectors — по лицензии W3C Software and Document License.

Сделано командой Xonta — маркетплейса ИИ-агентов.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Security gateway that wraps any MCP server with per-tool policies, approval gates, and optional Ed25519-signed decision receipts. Shadow mode logs every tool call without blocking; enforce mode applies block, rate-limit, and minimum-tier rules. Receipts are independently verifiable offline with no accounts needed.
    5
    522 npm
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A least-privilege enforcement proxy for MCP servers. It sits between MCP clients and upstream servers, enforcing tool policies, hiding denied tools, requiring human approval for risky actions, and providing a structured audit trail.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides a governance proxy layer for MCP servers, enforcing per-tool allowlists, human approval for write operations, quotas, secret redaction, and a hash-chained audit log of all calls.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enforces default-deny policies, budgets, and tamper-evident audit logging for MCP tool calls before they reach upstream servers.
    -