feat: add Hermes as a second executor family (backend + CLI)#77
Open
plutoless wants to merge 41 commits into
Open
feat: add Hermes as a second executor family (backend + CLI)#77plutoless wants to merge 41 commits into
plutoless wants to merge 41 commits into
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ed, CLI scope, family selector) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…shared families constant, per-family macOS probe) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…rmat Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Registry create_node and update_node now reject unknown executor families using SUPPORTED_EXECUTOR_FAMILIES as the whitelist. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds hermes to the executor selection prompt (via SUPPORTED_EXECUTOR_FAMILIES) and writes an executors.hermes block with a command key in the resolver loop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…el + dispatch test - Add PEER_CLOSED sentinel to jsonrpc.py; push it in _read_loop finally so consumers unblock on EOF - Fan __gateway_closed__ marker to all session queues in _route_events when peer closes - Handle __gateway_closed__ in _drive_prompt as terminal FAILED (not hang) - Wire timeout_seconds via asyncio.wait_for in _drive_prompt; yields FAILED on TimeoutError - Fix _print_human_probe to use payload executor name instead of hardcoded "Codex" - Add test for cmd_executor routing install-hermes to run_executor_install_hermes Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ect dialog Make the agent-client picker single-select (Codex default), drop the 'Coming soon'/disabled gate on Hermes, and pass the chosen family into createExecutorNode. The family is locked to the bound executor for an existing Bro and once credentials have been issued. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The setup dialog auto-issues connect credentials on mount, which created the node (and locked the family) before the user could choose. Only lock the picker for an existing Bro, while an issue is in flight, or once connected; selecting a different family for a still-pending Bro now deletes the auto-created node and re-issues for the chosen family. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…x_agent, all-family refresh, defensive install) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s, binary start gating) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…h-gating, scoped refresh, no-fallback picker) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add PROBEABLE_EXECUTOR_FAMILIES constant, narrow probe/use argparse choices to it, and make dispatch explicit so acpx is never silently routed to the codex payload. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
`executor_runtime_ready` generic branch now falls back to the family name when no `command` is configured, matching the executor node's own `_build_executors` default, so `executor run --enabled-executor hermes` is config-free when `hermes` is on PATH. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…se/install Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace the single codexStatus/executorProbe/codexSetupLog/codexSetupBusy fields in AppModel with probeByFamily/statusByFamily/setupLogByFamily/ setupBusyByFamily maps. Add ProbeScope helper to compute which families to probe, a refreshProbe(for:) scoped single-family probe method, and a real setUpHermes(for:) mirroring setUpCodex. Update all readers in ExecutorSettingsView and NewbroExecutorApp to use the maps keyed by "codex". Codex diagnosis/settings behavior is unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…n text Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…itor Replace dual codex/acpx toggles with a single Picker over supportedExecutorFamilies; new profiles start unselected and Save is disabled until a family is explicitly chosen; existing profiles with empty/unrecognised families load unselected with a warning flag. Adds initialPickerFamily() helper and a matching test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ermes status row from probe Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tall Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
Author
Update — operator-facing Hermes support added to this branchSince the original adapter, this branch now also includes: Web UI
CLI
macOS menu-bar app (spec §6)
Specs/plans: Verification: Out of scope / follow-ups: web picker no-fallback parity; Hermes thread import / skills / audio / interactive approval wiring. |
|
Vercel preview is ready. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Hermes (Nous Research) as a first-class detached executor family, peer to Codex, driven over Hermes's TUI Gateway JSON-RPC stdio app-server. V1 is core run loop only: create session → submit prompt → stream progress → settled answer → cancel → follow-up.
hermes/adapter (probe,jsonrpcpeer, gatewayclient,session,executor) emitting the genericExecutorEventstream — no Codex multi-message-turn coupling.-m tui_gateway.entry; workspace set viaTERMINAL_CWDat spawn, so gateway processes are keyed by working directory and multiplex sessions byparams.session_id.message.completeselects COMPLETED / CANCELLED / FAILED viapayload.status;approval.request/clarify.request→ terminal BLOCKED. Follow-ups usesession.steeronly (noprompt.submitfallback). Gateway crash/EOF and atimeout_secondsliveness bound both surface as observable FAILED (no silent hangs).supports_follow_up+supports_cancel;supports_pause/supports_resume/supports_thread_listfalse.newbro/executors/families.py::SUPPORTED_EXECUTOR_FAMILIES, aliased byruntime/config.py::SUPPORTED_DETACHED_EXECUTOR_TYPESand referenced by the registry (now validates family membership), both CLI parsers (top-level + detached node), and interactive setup.newbro executor probe/use --executor hermes,install-hermes,--enabled-executor hermes, andexecutor setupwrites theexecutors.hermesblock.docs/protocol/hermes-gateway.md(+ real captured fixture),docs/architecture/executors.md,docs/memories.md.Out of scope (follow-on plan): macOS menu-bar app changes (single-choice executor selector, per-family probe state) — spec §6. Also deferred: Hermes thread import, skills, audio, resume, interactive approval/clarify response wiring.
Design spec:
docs/superpowers/specs/2026-06-09-hermes-second-executor-design.mdImplementation plan:
docs/superpowers/plans/2026-06-09-hermes-second-executor.mdTest Plan
pytestfull suite green (747 passed)ruff checkclean on newhermes/adapter + touched CLIhermesv0.12.0hermesexecutor node end-to-end and drive a Bro turn🤖 Generated with Claude Code