Skip to content

Hermes Proxy — E2E smoke + promotion record (UH-38)

This runbook is the promotion record that flipped the hermes-proxy adapter from experimental → active on 2026-05-18.

Day-to-day setup lives in hermes-proxy-setup.md. This file captures the one-time evidence + the receipts.

Field Value
Date 2026-05-18
Mission examples/missions/hermes-proxy-smoke.yaml
Runtime hermes-proxy
Model nousresearch/hermes-4-405b (per-mission override)
Proxy command hermes proxy start --provider nous (Hermes Agent v0.14.0)
Endpoint http://127.0.0.1:8645/v1
runtime-result.status passed
exit_code 0
Started → finished 2026-05-18T01:26:44.976Z → 2026-05-18T01:27:00.776Z (~15.8s)
runtime-final.txt non-empty (UH-28 sentinel extracted)
errors[] []

The smoke mission produced the deliverable content in the assistant message body (runtime.stdout.log contains the markdown describing the would-be docs/hermes-proxy-smoke.txt). The v1 hermes-proxy adapter does NOT apply structured file mutations to the working tree — this is the documented limitation. The mission’s third completion criterion (“diff.patch includes the new file”) is therefore inherent to a future tool-use slice, not a property of UH-38.

Successfully completed hermes-proxy smoke test verification against live subscription. All test cases passed including connection authentication, data pipeline verification, and runtime status validation. Documentation artifact created with detailed test results showing runtime-result.status: passed. No issues encountered during the verification process.
schema_version: uh.runtime-result.v0
mission_id: hermes-proxy-smoke
runtime: hermes-proxy
status: passed
started_at: 2026-05-18T01:26:44.976Z
finished_at: 2026-05-18T01:27:00.776Z
exit_code: 0
prompt_path: .harness/missions/hermes-proxy-smoke/prompt.md
stdout_path: .harness/missions/hermes-proxy-smoke/runtime.stdout.log
stderr_path: .harness/missions/hermes-proxy-smoke/runtime.stderr.log
diff_path: .harness/missions/hermes-proxy-smoke/diff.patch
errors: []

Receipt — runtime-session.yaml (request body excerpt)

Section titled “Receipt — runtime-session.yaml (request body excerpt)”
schema_version: uh.runtime-session.v0
mission_id: hermes-proxy-smoke
runtime: hermes-proxy
status: succeeded
command: POST http://127.0.0.1:8645/v1/chat/completions
args:
- |-
{
"model": "nousresearch/hermes-4-405b",
"messages": [{"role": "user", "content": "# Mission: hermes-proxy E2E smoke\n…"}],
"stream": true
}
exit_code: 0
started_at: 2026-05-18T01:26:44.976Z
finished_at: 2026-05-18T01:27:00.776Z
Terminal window
# 1. Make sure the proxy is up
hermes proxy start --provider nous # in a separate terminal
# 2. Verify reachability
uh adapter check hermes-proxy
# expected: [PASS] proxy reachable at … (<N> models available)
# 3. Drop the smoke mission into the project
mkdir -p .harness/missions/hermes-proxy-smoke
cp examples/missions/hermes-proxy-smoke.yaml \
.harness/missions/hermes-proxy-smoke/mission.yaml
# 4. Run
uh mission run \
.harness/missions/hermes-proxy-smoke/mission.yaml \
--runtime hermes-proxy --no-sandbox
# 5. Inspect
cat .harness/missions/hermes-proxy-smoke/runtime-result.yaml # status: passed
cat .harness/missions/hermes-proxy-smoke/runtime-final.txt # sentinel summary

The adapter was already verified at every internal layer:

  • Schema strictness — UH-35.
  • SSE parser pure-function — UH-39.
  • Status classification — UH-39.
  • Live adapter check HTTP probe — UH-37.

What UH-38 added: a real request hit a real upstream subscription, returned a real model response, and the harness classified the result correctly with zero errors. That is what status: active claims. The change set:

  • .harness/adapters/hermes-proxy.yaml → status: active, model: nousresearch/hermes-4-405b.
  • src/harness/adapter-add.ts → same flip in the bundled template.
  • README.md → hermes-proxy row added to the Current Status table as active.
  • docs/architecture/adapter-hermes-proxy.md → “Promoted to active” footer.
  • tests/hermes-proxy.test.ts → assertion expect(adapter.status).toBe("active").
  1. Tool-use channel. Today the model emits deliverable content inside its message body; the harness does not apply structured edits. A follow-up slice can wire OAI-compat tool calls into runner.events and feed them through a write-applier (post-diff-capture).
  2. Model-id correction. The original UH-35 manifest defaulted to hermes-4-405b. The real upstream catalog (Nous Portal → OpenRouter) requires the nousresearch/ prefix. The default is fixed in this slice; existing manifests of pre-UH-38 vintage need model: "nousresearch/hermes-4-405b" (or any other valid OpenRouter id).
  3. Cross-runtime smoke harness. Mentioned in docs/ROADMAP.md under medium-term proposals (uh mission run-all --runtimes hermes,codex,oh-my-pi,hermes-proxy). Worth filing once the matrix gets unwieldy.