Repository navigation
agents: add the hermes harness (Hermes gateway) (MARSOHS-2451) - #2083
Merged
Merged
Conversation
`--harness hermes` was refused with "unsupported --harness", although `hermes` is an accepted adapter on the `--spec` path. The flag map simply did not list it. Add it, with the credential wiring that makes the session usable: * Resolve `hermes` to the new `hermesAgentName`, display it as "Hermes", and name it in the unsupported-value error. * Write `HARNESS_INFERENCE_MODEL` from the new `defaultHermesModel`. Hermes has no fallback model of its own: render-config.sh renders an empty model into config.yaml and warns that the first turn will fail. * Take the managed-key opt-in, as openhands does, so harness-api mints `HARNESS_INFERENCE_API_KEY`. Hermes reads that key when no native OPENAI_API_KEY is set. The decision is read off the manifest, so a `--spec` file that says `harness: hermes` gets the key too. Hermes does not get the two fields openhands needs. templateForAgentKind already resolves the kind to coding-hermes, and no flipper gates that template per team. keep_warm defaults to true server-side on purpose, because the gateway is driven over a port-forward tunnel that idle-pause cannot see; writing false would undo that. Also correct a stale comment in knownAgentAdapters: hermes has been in isSupportedAgentKind's default set for some time. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
vneema-do
reviewed
Oct 27, 2026
| "openhands": openHandsAgentName, | ||
| "open-hands": openHandsAgentName, | ||
| "hermes": hermesAgentName, | ||
| "none": bareSandboxAgent, |
Contributor
Author
There was a problem hiding this comment.
used when the user is not setting any harness specifically, using a bare sandbox
found more info here
Line 945 in 9379c12
adilhafeez
previously approved these changes
Oct 27, 2026
| openAIAgentsAdapter: "Codex", | ||
| openHandsAgentName: "OpenHands", | ||
| hermesAgentName: "Hermes", | ||
| bareSandboxAgent: "Bare sandbox", |
Contributor
There was a problem hiding this comment.
while you're at it can you remove "Bare sandbox" and rename it to "Sandbox"
vneema-do
reviewed
Oct 27, 2026
vneema-do
left a comment
There was a problem hiding this comment.
should we remove "none": bareSandboxAgent,
Contributor
@vneema-do none is in use today - that is how we communicate that there is no coding harness and that developers are using just the compute sandbox. |
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.
MARSOHS-2451
Problem
--harness hermesis refused:hermesis an accepted adapter on the--specpath, andAGENT_KIND_HERMESis in
isSupportedAgentKind's default allow-set. Only the--harnessflag mapdid not list it.
Change
Add
hermesto the map, with the credential wiring that makes the sessionusable. A bare map entry is not enough: the gateway's
render-config.shwarnsthat the first turn will fail when no key and no model are set, which is
exactly what
--harness hermeswith no other flags would produce.hermesto the newhermesAgentName, display it as "Hermes", andname it in the unsupported-value error.
HARNESS_INFERENCE_MODELfrom the newdefaultHermesModel. Hermes hasno fallback model of its own.
openhandsdoes, so harness-api mintsHARNESS_INFERENCE_API_KEY. Hermes reads that key when no nativeOPENAI_API_KEYis set. The decision is read off the manifest, so a--specfile that says
harness: hermesgets the key too.Hermes does not get the two fields
openhandsneeds:templateForAgentKindalready resolves the kind tocoding-hermes, and no flipper gates that template per team (onlyopenHandsTemplateNameis gated).keep_warm: false. The server defaults hermes to warm on purpose: thegateway is driven over a port-forward tunnel that idle-pause's activity
tracking cannot see, so pausing would break a live conversation.
One stale comment in
knownAgentAdaptersis corrected in passing.Result
That manifest passes
harness-runtime validatewith no warnings.--modeloverrides the default.
Testing
go test ./commands/passes. Three tests are added: harness resolution anddisplay name, the generated manifest shape (model present, no secrets, no
template, no
keep_warm), and the managed-key create path.Not covered: no live session was created, so the minted key and the first turn
are untested end to end.
🤖 Generated with Claude Code