Навыки агента и A2A
Этот блок про две вещи, которые часто путают с MCP. Навыки агента (agent skills) дают ему знания, которые он загружает по мере надобности. Протокол Agent2Agent (A2A) позволяет агенту передать работу другому агенту, которым вы не управляете.
У Northwind две потребности. Сотрудники поддержки постоянно вставляют в промпт правила выдачи компенсационных ваучеров, а в них 30 шагов. А когда посылка теряется, надо открыть претензию у перевозчика, и у того свой агент.
Полка с папками
У коллеги на телефоне стоит полка с папками, на корешках подписи. В начале разговора он читает только корешки. Когда речь заходит о ваучере, он снимает эту папку. Если в ней написано «для корпоративных клиентов смотри приложение», он открывает приложение.
Это и есть навык. На диске это папка с файлом SKILL.md:
---
name: issuing-goodwill-vouchers
description: Applies Northwind's goodwill voucher policy, including amounts by delay, limits per customer and wording. Use when a customer complains about a late, damaged or lost order, even if they do not ask for compensation.
---
# Goodwill vouchers
1. Find the delay in days from the order.
2. Take the amount from the table in `references/amounts.md`.
3. Run `scripts/check_limit.py` before offering anything.Загрузка идёт по уровням. На платформе Anthropic это работает так:
Уровень | Содержимое | Когда загружается |
|---|---|---|
1 | | При запуске, около 100 токенов на навык |
2 | Тело | Когда навык сработал, желательно меньше 5000 токенов |
3 | Другие файлы | Когда модель их открывает; код скрипта остаётся снаружи, приходит только его вывод |
Формат опубликован как открытая спецификация на agentskills.io, и обязательны в нём name и description. Как навык регистрируется и находится, зависит от клиента.
Навык хранит знание о том, как что-то делать. Инструмент выполняет действие. Навык про ваучеры говорит, когда и сколько, а issue_voucher остаётся инструментом с проверками в коде.
Главный риск: папку никто не открыл
Когда модель решает, у неё есть только описание. Руководство к спецификации говорит, что на описании держится всё срабатывание. Расплывчатое описание означает навык, которым никогда не воспользуются, причём без единой ошибки. Слишком широкое описание срабатывает там, где не надо. Даже хорошее описание может не сработать на простой просьбе в один шаг, с которой агент справится сам.
Срабатывание недетерминировано, поэтому проверяют его так:
- Напишите около 20 настоящих запросов: половина должна срабатывать, половина нет.
- Отрицательные примеры берите близкие. Для навыка про ваучеры запрос «какая у вас политика возврата по подарочным картам» содержит похожие слова, а нужно ему другое.
- Запустите каждый запрос несколько раз и считайте долю срабатываний. Руководство предлагает для начала 3 запуска и порог 0,5.
Навык — это инструкции и код, которым агент будет следовать. Anthropic советует брать навыки только из доверенных источников, проверять каждый вложенный файл и относиться к установке навыка как к установке программы.
Звонок в другую компанию
Отдел претензий перевозчика находится в другой компании. Вы не видите их экранов и не знаете, как они принимают решения. Вы звоните по номеру с их сайта, рассказываете о случае и получаете номер заявки. Потом они могут перезвонить и попросить фото коробки.
Это и есть A2A. На 2026-11-10 спецификация имеет версию 1.0: на её сайте указано 1.0.0, а последний релиз на GitHub — исправительный v1.0.1. Другой агент остаётся закрытым: он сотрудничает, не раскрывая свою память и инструменты.
| MCP | A2A |
|---|---|---|
Что соединяет | Агента с инструментами и данными | Агента с другим агентом |
На другой стороне | Функции с заданным входом | Система, которая рассуждает и может переспросить |
Как узнать возможности | | Agent Card |
Единица работы | Один вызов и его результат | Task с жизненным циклом |
В одной системе могут быть оба. Агент Northwind говорит с перевозчиком по A2A, а внутри каждой компании агент использует MCP для своих инструментов.
Всё начинается с Agent Card — документа JSON, который обычно лежит по адресу /.well-known/agent-card.json:
{
"name": "Carrier Claims Agent",
"description": "Opens and tracks claims for lost or damaged parcels.",
"version": "1.2.0",
"supportedInterfaces": [
{
"url": "https://claims.example.com/a2a/v1",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"defaultInputModes": [
"text/plain"
],
"defaultOutputModes": [
"application/json"
],
"skills": [
{
"id": "open-claim",
"name": "Open a claim",
"description": "Opens a claim for a lost parcel.",
"tags": [
"claims",
"parcels"
]
}
]
}Обратите внимание на слово skills. Навык в A2A — это заявленная возможность в карточке. С папкой SKILL.md у него нет ничего общего.
Чтобы начать работу, клиент отправляет сообщение. A2A может работать через разные привязки (bindings), то есть форматы передачи. В привязке HTTP+JSON это POST /message:send, а в привязке JSON-RPC метод называется SendMessage. Параметры одни и те же:
{
"message": {
"role": "ROLE_USER",
"messageId": "msg-5120-1",
"parts": [
{
"text": "Parcel for order 5120 is lost. Open a claim."
}
]
}
}Агент может ответить обычным сообщением или задачей Task, у которой есть id и состояние:
Когда перевозчику нужно фото, Task переходит в TASK_STATE_INPUT_REQUIRED. Код Northwind отправляет ещё одно сообщение с теми же taskId и contextId, и задача продолжается. Для долгой работы клиент может получать поток через SendStreamingMessage, опрашивать через GetTask или зарегистрировать вебхук для push-уведомлений, если карточка заявляет такую поддержку.
Считайте всё, что приходит от другого агента, недоверенным текстом, как результат инструмента. A2A требует шифрованного транспорта в продакшене, а клиентам следует проверять подпись карточки, если она есть. Верная подпись говорит, кто опубликовал карточку. О том, безопасно ли выполнять написанное в Task, она ничего не говорит.
Вывод
- Навык — это знание, которое загружается по уровням, и он молча не работает, если описание не заставило его открыть.
- MCP соединяет агента с инструментами. A2A соединяет его с другими агентами, которые остаются закрытыми и работают через Task.
- Текст навыка или другого агента может управлять вашим, поэтому ограничивайте, до чего он дотягивается.