Суть
Чтобы делегировать задачу чужому агенту, нужно сначала его найти и понять, подходит ли он. Agent Card — ответ на оба вопроса. Каждый агент, говорящий по A2A, обязан опубликовать такую карточку, причём по предсказуемому адресу: /.well-known/agent-card.json. Логика та же, что у robots.txt — клиент знает, куда смотреть, без предварительной договорённости.
Спецификация (§8.2) описывает три способа обнаружения, а не один: well-known URI, реестры и каталоги агентов, прямая конфигурация URL карточки. Путь /.well-known/agent.json встречается в материалах до v0.3 — это легаси.
Ключевое свойство: карточка описывает агента снаружи, ничего не раскрывая о внутренностях. Это осознанный выбор протокола — он рассчитан на «непрозрачных» агентов от разных поставщиков, где заглядывать внутрь нельзя ни по техническим, ни по коммерческим причинам.
Что внутри
- Идентификация — имя, описание, версия.
- Skills — перечень навыков: что агент берётся делать, с какими входами и выходами. По ним клиент выбирает исполнителя под конкретную задачу.
- Capabilities — поддерживает ли стриминг, push-уведомления, какие типы контента понимает.
- Схема аутентификации — как к нему стучаться легально.
- supportedInterfaces — массив интерфейсов в порядке предпочтения; каждая запись несёт
url,protocolBinding(JSONRPC/GRPC/HTTP+JSON) иprotocolVersion. В версиях до 1.0 на этом месте были плоские поляurl+preferredTransport— их больше нет.
Клиентская сторона забирает карточку (в SDK за это отвечают резолверы вроде A2ACardResolver), сравнивает объявленные навыки с задачей и решает, кому делегировать.
Границы ответственности
Протокол разводит роли явно, и карточка — центр этой договорённости:
- Remote agent обязан опубликовать честную карточку, принять или отклонить задачу, работать в рамках объявленных skills, не просить лишних прав и вернуть артефакт со статусом.
- Client agent формулирует задачу, выбирает исполнителя по карточке, хранит свой контекст, принимает артефакт и решает, доверять ли результату.
Отсюда же вырастает безопасность: карточку подписывают, соединение защищают TLS, права выдают по принципу наименьших привилегий.
Чем подпирается честность карточки
Формулировка «честность карточки — вопрос доверия, а не техники» верна только наполовину: часть проблемы закрывается технически, часть действительно нет.
Что закрывается. Спецификация (§8.4) разрешает подписывать карточку по JWS (RFC 7515), причём перед подписью карточку обязательно приводят к канонической форме по JCS (RFC 8785) — иначе подпись развалится на переупорядочивании ключей. Это делает карточку tamper-evident: подменить её содержимое незаметно нельзя.
Что не закрывается подписью. Red Hat формулирует разрыв точно: карточка несёт метаданные и подпись, но «nothing inherently ties that metadata back to the workload actually serving it at runtime». Подписанная карточка доказывает, что документ не подменили, — но не то, что отдаёт её тот, за кого себя выдаёт. Их аналогия: визитку с надписью «врач» может напечатать кто угодно. Отсюда предложение привязывать карточку к workload-identity через SPIFFE/SPIRE и контролировать вызовы на уровне mesh-identity.
Что не закрывается вообще. Заявленный навык может быть заявлен добросовестно и выполняться плохо. Это вопрос репутации и проверки результата, а не криптографии.
Смежный сдвиг, который стоит держать в голове: discovery в мире агентов идёт не по имени сервиса, а по навыку («найди агента, умеющего разбирать финансовые таблицы»). Старая модель авторизации «может ли сервис A звать сервис B» на это не ложится.
Аналогия
Если MCP — это USB-C для инструментов (один разъём, через который агент дотягивается до базы или API), то A2A с его карточками ближе к телефонной сети: у каждого абонента есть номер и справочник возможностей, а что происходит на той стороне — не ваше дело.
Связано с
- Agent2Agent Protocol — протокол, частью которого является карточка
- A2A Task Lifecycle — что происходит после того, как исполнитель выбран
- MCP — вертикальный протокол; A2A и карточки решают горизонтальную задачу
- Multi Agent Systems — разница между агентами внутри одной системы и чужими агентами
Открытые вопросы
- нужен ли реестр карточек в корпоративном контуре или хватает статических адресов
- как оценивать качество объявленного навыка до первой задачи — тестовым прогоном или репутацией; подпись эту часть не закрывает
- переносится ли связка SPIFFE/SPIRE за пределы Kubernetes, где workload-identity не выдаётся автоматически