hermes - 💡(How to fix) Fix Add agent-wake UDS transport: external processes inject user-turn messages into the active CLI session without keyboard/TTY automation [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#28570Fetched 2026-05-20 04:03:19
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
0
Timeline (top)
labeled ×4cross-referenced ×1

Fix Action

Fix / Workaround

Interim local patch

We are running a local patch in the Smith Crafts Hermes install while this is discussed upstream. The patch is intentionally small: one helper in cli.py, one ensure_agent_wake_socket(self) call after the plugin manager receives the CLI ref, one cleanup hook, and the new tool module. A content-anchored reapply hook keeps the local patch restorable after Hermes updates.

Code Example

def enqueue_external_user_message(self, text: str, source: str = "agent_wake") -> None:
    self._pending_input.put(text)
RAW_BUFFERClick to expand / collapse

Use case

Smith Crafts runs multiple local agent runtimes that need to wake each other when long-running work completes. For OpenClaw we added a local Unix-domain socket wake path so an orchestrator can inject a normal user-turn message into the active CLI session without GUI typing, tmux chunking, or brittle TTY automation. Hermes has the same need for the Stitch seat.

OpenClaw reference issue for the cross-runtime context: openclaw/openclaw#83809.

Relevant Hermes code paths

  • cli.py owns the active interactive HermesCLI object and initializes _pending_input / _interrupt_queue.
  • HermesCLI.run() reinitializes those queues for the TUI and then starts the background process_loop().
  • process_loop() consumes _pending_input and routes normal user turns through chat().
  • tools/code_execution_tool.py already provides a Hermes-native precedent for local UDS IPC with newline-delimited JSON and 0600 socket permissions.

Proposed surface

Add a small public helper on HermesCLI:

def enqueue_external_user_message(self, text: str, source: str = "agent_wake") -> None:
    self._pending_input.put(text)

Add a focused tools/agent_wake_socket.py module that owns:

  • UDS listener lifecycle and cleanup
  • sidecar ownership metadata (pid, session_id, wake_session_id)
  • newline-JSON framing
  • payload validation for agent-wake.v1
  • durable wake-inbox idempotency (consumed_at, consumed_by_run_id, consumed_delivery_mode)
  • active CLI resolution by wake session id

Default delivery should enqueue to _pending_input as the next normal user turn. A future explicit delivery_mode:"steer" can be added later, but the default should not interrupt an in-flight agent turn.

Interim local patch

We are running a local patch in the Smith Crafts Hermes install while this is discussed upstream. The patch is intentionally small: one helper in cli.py, one ensure_agent_wake_socket(self) call after the plugin manager receives the CLI ref, one cleanup hook, and the new tool module. A content-anchored reapply hook keeps the local patch restorable after Hermes updates.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix Add agent-wake UDS transport: external processes inject user-turn messages into the active CLI session without keyboard/TTY automation [1 participants]