Skip to content

Compatibility Contract

The optional compatibility hook fills narrowly defined gaps on older Hermes hosts. It is not part of upstream Hermes and must never become a requirement for the default Android connection.

Native routes win

Hermes-Relay probes capabilities and existing routes before registering a compatibility handler. When upstream owns a route, the hook leaves it alone.

SurfacePreferred ownerCompatibility behavior
/api/sessions/* CRUD, messages, fork and chatUpstreamRetired from the hook; never injected
/v1/skills, /v1/toolsetsUpstreamPreferred discovery
GET /api/skillsOlder native/legacy hostAccepted only as a read-only fallback
GET /api/sessions/searchCompatibilityAdded only when absent
/api/memoryCompatibilityOlder-host memory read/write bridge
GET /api/skills/{name}CompatibilityLegacy skill detail
PUT /api/skills/toggleCompatibilityExplicit 501 Not Implemented stub
GET/PATCH /api/configCompatibilityOlder-host model/config bridge
GET /api/available-modelsCompatibilityOlder-host provider-model list
Slash-command middlewareCompatibilityIntercepts supported commands on stateless fallback chat routes

Compatibility is not Relay

The hook runs inside the Hermes API Server process and uses that server's auth. It does not start the Relay server, create Relay sessions, or unlock terminal, voice, media, desktop or phone-control routes.

Operator commands

bash
hermes relay compat status
hermes relay compat install   # older hosts only
hermes relay compat remove

hermes relay doctor --json reports native route reachability, compatibility hook state and the optional Relay server independently.

Client rules

  • Probe /v1/capabilities before legacy routes.
  • Treat compatibility routes as fallbacks, not equivalent proof of a current upstream version.
  • Never infer Relay availability from a compatibility response.
  • Do not inject session CRUD routes when the native session API exists.
  • Preserve unknown fields and ignore unknown stream events.
  • A missing compatibility-only route should disable that feature rather than redirecting a write to a different trust domain.

Removal

Removing the hook does not remove Hermes, its state, or the plugin tree:

bash
hermes relay compat remove --all

Legacy installations may also contain a systemd unit, shell shims, editable Python package or repository clone. Those belong to the legacy installer and are covered by Relay server operations.