codex-hermes-a2a-bridge
Codex Hermes A2A Bridge
Локальный мост, который делает Codex «точкой входа»: Codex вызывает MCP-инструменты через stdio, а bridge преобразует запросы в A2A v1.0/JSON-RPC к профилю Hermes default, после чего сохраняет сопоставления диалогов/задач в SQLite. Hermes по-прежнему остаётся «мозгом», выполняющим agent loop, memory, skills, tools и внутреннюю оркестрацию.
Текущая версия: v0.1.1. Доступен только bind/call для loopback-эндпоинта; нет инструментов для смены модели, плагинов, конфигурации, обновлений, shell или управления сервисом Hermes.
Независимый проект: это независимое программное обеспечение сообщества, не являющееся официальным продуктом, не имеющее спонсорской поддержки и не представляющее Nous Research/Hermes Agent или OpenAI/Codex. Торговые марки используются только для описания совместимости.
Архитектура
Codex client --MCP stdio--> MCP server --> bridge core --> Hermes A2A :9900
\--> SQLite context/task mappingPython 3.11 и отдельное виртуальное окружение, не используется venv Hermes.
Официальный MCP SDK для Python, асинхронный
httpx, Pydantic и стандартная библиотека SQLite.Каждый новый
conversation_keyсопоставляется сcontextIdHermes; последующие витки используют это сопоставление.Исходные промпты не сохраняются; мост хранит fingerprint, маршрут, состояние, результаты и минимизированные ошибки.
Related MCP server: ccg-mcp
Требования и быстрая установка
Python 3.11.
Hermes Agent 0.20.5 с включённым A2A gateway на loopback.
Codex-клиент с поддержкой MCP stdio.
cd /absolute/path/to/codex-hermes-a2a-bridge
python3.11 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/codex-hermes-a2a-bridge doctorКонтрибьютор может установить дополнительные средства тестирования командой python -m pip install -e '.[dev]'. Переопределения описаны в .env.example; не коммитьте настоящий файл .env.
Безопасная конфигурация по умолчанию:
Переменная окружения | Значение по умолчанию | Назначение |
|
| A2A-корень; принимаются только loopback URL. |
| пусто | Bearer-токен берётся из env, через аргументы инструментов не передаётся. |
|
| SQLite с правами |
|
| Таймаут по умолчанию, ограничивается максимум 300 секунд. |
|
| Сколько ждёт |
|
| Предел inline-ожидания для |
|
| Время жизни SSE-воркера, чтобы сохранять A2A-задачи/результаты после начального таймаута. |
|
| Read-only фолбэк, когда in-memory TaskStore больше не доступен. |
|
| Лимит ходов/контекст для предотвращения зацикливания агента. |
|
| Число одновременных исходящих вызовов. |
Включение Hermes A2A и регистрация Codex
На уже установленной локально Hermes 0.20.5:
hermes plugins enable a2a-platform --no-allow-tool-override
hermes config set gateway.platforms.a2a.enabled true
hermes gateway run --no-superviseПри работе через foreground pass можно установить пользовательский сервис (без sudo):
hermes gateway install --start-now --start-on-loginЗарегистрируйте мост в общей конфигурации Codex:
codex mcp add codex-hermes-a2a-bridge -- \
/absolute/path/to/codex-hermes-a2a-bridge/.venv/bin/codex-hermes-a2a-bridge serve
codex mcp get codex-hermes-a2a-bridgeЧтобы новая запись была прочитана, необходимо открыть или перезапустить клиент Style. MCP stdio записывает в stdout только протокольные фреймы; диагностика выводится в stderr.
Семь MCP-инструментов v0.1
Инструмент | Назначение |
| Health, краткая Agent Card, счётчики записей в базе и состояние подключения. |
| Создание/продолжение диалога; |
| Сверка состояния, результата, ошибки или |
| Перечисление «долговечных» bridge-задач по диалогу/состоянию. |
| Ожидание активного потока, подписка на SSE, затем fallback-поллинг. |
| Отправка best-effort cancel; не гарантирует окончание вычислений. |
| Просмотр/инструменты/закрытие сопоставлений; закрытие не удаляет данные Hermes. |
Набор четырёх MVP-операций, упомянутых в исследовании (discover, send, get, continue), — не полный A2A. V0.1 объединяет их в семь высокоуровневых инструментов для работы с диалогами и задачами; более низкоуровневые операции A2A, такие как CRUD для push-уведомлений и администрирование Hermes, напрямую не экспонируются.
Пример рабочего процесса
Codex вызывает
hermes_status.Codex вызывает
hermes_chat(message=..., rescue_key=<стабильный>, mode="auto").Если задача всё ещё выполняется, используйте
hermes_task_waitилиhermes_task_get; не отправляйте вслепую после неоднозначного таймаута.Если
needs_input=true, спросите пользователя и затем вызовитеhermes_chatс тем жеconversation_key/context_id.Следующий виток диалога продолжает то же сопоставление;
hermes_contexts(action="close")закрывает только сопоставление в bridge.
Для операций с побочными эффектами указывайте idempotency_key. Hermes 0.20.5 не поддерживает идемпотентность на сетевом уровне, поэтому мост не отправляет повторно мутирующий send, если результат передачи неясен.
Начиная с v0.1.1, все три режима используют SendStreamingMessage, чтобы получать A2A-идентификаторы задач уже в первом событии. sync ждёт inline не более 30 секунд (или меньше, если задан меньший timeout); поток продолжает жить до correlation timeout. Для старых записей в состоянии outcome_unknown, не содержащих A2A ID, hermes_task_get/hermes_task_wait сначала пробуют ListTasks(contextId), затем читают официальное conversation persistence из Hermes. Восстановление присваивает результат только в том случае, когда есть ровно одна локальная нерешённая задача и ровно один remote/disk-кандидат; неоднозначные случаи оставляются без изменений: без повторной отправки и без догадок. Disk fallback не имеет состояния A2A, поэтому возвращает предупреждение и считает сохранённый ответ Hermes завершённым (completed).
Тестирование и эксплуатация
.venv/bin/pytest --cov=codex_hermes_a2a_bridge --cov-report=term-missing
.venv/bin/codex-hermes-a2a-bridge doctor
.venv/bin/codex-hermes-a2a-bridge smoke \
'Reply with exactly MY_MARKER and nothing else.' \
--conversation-key manual-smoke
.venv/bin/python scripts/live_check.py manual-smokepytest использует фейковый A2A-сервер на случайном loopback-порту и не требует реальной Hermes. doctor и live_check.py доступны только для чтения. Команда smoke отправляет реальный запрос; запускайте её с безобидным содержимым и только осознанно.
Безопасность и конфиденциальность
V0.1.1 отклоняет эндпоинты и Agent Card URL не из loopback, не переходит по редиректам и не принимает токен через MCP-аргументы.
SQLite по умолчанию находится за пределами исходного кода и имеет права
0600; в нём хранятся сопоставления, fingerprint, состояния, результаты и артефакты, а также минимальные ошибки. Результаты могут содержать конфиденциальные данные, поэтому применяйте соответствующие политики хранения и резервного копирования.Исходные промпты мостом не сохраняются, однако Hermes может вести собственные журналы диалогов/аудита. Fallback-восстановление читает только настроенную директорию диалогов Hermes.
MCP-сервер должен запускать доверенный пользователь; семь инструментов могут активировать Hermes, использующий навыки и инструменты с побочными эффектами. Используйте
idempotency_keyи не делайте слепых повторов приoutcome_unknown.Сообщайте об уязвимостях согласно SECURITY.md. Не публикуйте токены, транскрипты или SQLite в issue.
Гарантии и ограничения апстрима
Мост обеспечивает политику loopback, надёжное локальное сопоставление, отсутствие повторных мутирующих send-запросов при неопределённости и честную семантику отмены. Мост не гарантирует, что Hermes остановила вычисления, потоковую передачу на уровне токенов, идемпотентность на уровне протокола или сохранность задач при перезапуске Hermes.
Hermes 0.20.5 использует in-memory TaskStore, SSE-жизленный цикл, а отмена по протоколу не прерывает активный виток. Fallback-восстановление на основе conversation-store со стороны моста является условным и читающим; он не заменяет durable TaskStore ат повышable обновление. Проверенные подробности перечислены в Hermes A2A reference.
Troubleshooting
a2a_unreachable: запуститеhermes gateway statusи проверьте карточкуhttp://127.0.0.1:9900/.well-known/agent-card.json.Плагин A2A отмечен как включённый, но порт не запускается: проверьте
hermes config get gateway.platforms.a2a.enabled, затем перезапустите gateway.Codex не видит инструменты: выполните
codex mcp get codex-hermes-a2a-bridge, затем используйте новый процесс/клиент Codex.outcome_unknown: вызовитеhermes_task_get/hermes_task_wait, чтобы мост выполнил восстановление; если ситуация остаётся неоднозначной, не отправляйте задачу с сайд-эффектами повторно и уточните у пользователя.turn_budget_exceeded: закройте сопоставление и создайте новый диалог; не увеличивайте лимит просто для того, чтобы агент мог повторяться бесконечно.Hermes 0.20.5 теряет in-memory TaskStore при перезапуске; мост сохраняет локальную задачу/результат, но удалённый refresh может сообщить, что задача больше не существует.
macOS: если
launchctl bootstrapвозвращает exit 5, Hermes запускается через detached fallback: она работает, но не стартует и не перезапускается автоматически. Для подтверждения используйтеhermes gateway status.
Откат
См. scripts/rollback.sh. По умолчанию скрипт только выводит план. scripts/rollback.sh --apply удаляет именно zip MCP entry и A2A-конфигурацию/плагин, но сохраняет gateway-сервис, потому что он может обслуживать другие платформы. Добавляйте --include-gateway-service только если gateway был установлен исключительно для этого rollout. Исходные коды, .venv, SQLite и транскрипты Hermes сохраняются как есть.
Бэкапы, ограниченные сферой действия, создаются рядом с файлами конфигурации с суффиксом .pre-codex-hermes-a2a-bridge-v0.1.bak; автоответcтвие автоматического восстановления всего файла не включается, чтобы не затереть более новые изменения пользователя.
Документация
Официальные источники: OpenAI Codex MCP, Hermes A2A guide, NousResearch/hermes-agent. В случае расхождений приоритет отдаётся локальному коду Hermes 0.20.5, commit d736f5d53f1d33fabad5a17cb070eb138b618fb8.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityBmaintenanceBridges MCP clients with local Codex CLI to execute autonomous coding tasks, manage threads, and inspect history via SQLite state.132,5594Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables Claude Code Desktop to call OpenAI Codex/GPT-5 and Gemini APIs via stdio MCP, without requiring local CLI tools.MIT
- AlicenseBqualityBmaintenanceA zero-friction stdio MCP bridge connecting Cursor Desktop to a local Hermes Agent, enabling natural language task delegation with session continuity and profile awareness.42Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables MCP agents to delegate tasks to a local Hermes Agent for terminal, file, browser, and coding operations, and schedule recurring jobs.MIT
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/phamviet86/codex-hermes-a2a-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server