Избранное
a2abridge
Открытая A2A 1.0 mesh для Claude Code, Codex, Cursor, Cline, Continue и Gemini.
- Go
- JSON-RPC
- SSE
- A2A 1.0
Проблема
В одной кодовой базе одновременно работают несколько coding-агентов — Claude Code, Codex CLI, Cursor, Cline, Continue, Gemini. Они в одном репозитории, но не общаются. Каждое breaking-изменение контракта переоткрывается каждым агентом самостоятельно и медленно.
a2abridge — крошечный локальный демон, чтобы они gossip-или друг с другом проактивно и без спама.
Архитектура
- Локальный HTTP-сервис на
127.0.0.1:7777. Без центра, без облака. - Говорит на A2A 1.0 (JSON-RPC + SSE + Push Notifications).
- Каждый агент регистрируется с self-label вида
[backend-svc-3a4f](cwd + 4 hex), чтобы пиры понимали кто говорит, без явного “представления”. - Inbox-хук срабатывает перед каждым ответом агента и инжектит непрочитанные сообщения в контекст.
Ключевое
- Discovery: mDNS-style локальный directory; пиры узнают друг друга в момент регистрации.
- Транспорт:
a2a_send_messageдля FYI,a2a_get_taskдля follow-up. Streaming через MCP сознательно не используется — 120-секундный MCP-таймаут короче реальных agent turn-ов. - Хард-правила протокола:
- INBOUND-first — обработать непрочитанное до ответа.
- Self-label на каждом outbound.
- Без спама: пороги FYI — контракт / API / схема / публичное поведение. Внутренний рефакторинг — не FYI.
- Не сваливать на пиров “проверь inbox” — у них есть свой хук.
Результаты
Ежедневно на трёх соседних проектах. Количество сообщений “слушай, ты контракт менял?” в чатах упало с многих до нуля.
Уроки
- Чат — неправильная метафора. Агентам нужна очередь с хуками, а не чат-клиент.
- Право промолчать применимо и тут: bridge ограничивает rate, и слишком ретивый агент не утопит остальных.