You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hermes Agent hook events reach CodeIsland correctly, but every session card is created and never returns to an idle/done state. The panel shows "N sessions running" indefinitely even when Hermes is idle — display never matches reality.
Install the Hermes integration (hooks injected into ~/.hermes/config.yaml)
Approve the hooks (Hermes consent model — note: unapproved hooks are silently dropped; see related hermes agent 通知不起作用 #226, whose empty hook-events.json had this same root cause on the Hermes side)
Run any Hermes session that performs tool calls (desktop app or CLI)
Observe: a session card appears and shows as active/running
Wait minutes/hours — the card never goes idle, even with zero activity
Root cause
CodeIslands session model assumes a lifecycle: SessionStart → activity → SessionEnd/process exit. Claude Code, Codex, etc. fire events from short-lived CLI processes that exit when the task ends, so CodeIsland knows the session is done.
No idle/done event in the hook set. Hermes fires on_session_start, pre_tool_call, post_tool_call, on_session_end (only on /reset or explicit close), subagent_stop. There is no "response complete" or "idle" event, and on_session_end rarely fires in normal use.
So a card created by the first tool call stays in "running" state forever.
Proposed fixes (any would help; ideally a combination)
Map post_llm_call → internal idle/done. Hermes already has a post_llm_call hook event that fires after every LLM response completes. Mapping it to a "done" state (like TaskRoundComplete for Cline) would return the card to idle after each turn. Users would need to add a post_llm_call hook entry to their config — document it in the Hermes setup.
on_session_reset already maps to SessionEnd — good; but also treat a Hermes session as ended when the user closes the conversation in the desktop app (if the app-side can detect it).
Expected behavior
A Hermes session card should show activity only while Hermes is actually processing (tool calls, LLM calls), and settle to an idle state when the turn completes — mirroring how Claude Code sessions behave. The notch should not accumulate permanent "running" cards.
Happy to provide bridge payloads / diagnostics if useful.
Summary
Hermes Agent hook events reach CodeIsland correctly, but every session card is created and never returns to an idle/done state. The panel shows "N sessions running" indefinitely even when Hermes is idle — display never matches reality.
Environment
servebackend process) +gatewaydaemonSteps to reproduce
~/.hermes/config.yaml)hook-events.jsonhad this same root cause on the Hermes side)Root cause
CodeIslands session model assumes a lifecycle: SessionStart → activity → SessionEnd/process exit. Claude Code, Codex, etc. fire events from short-lived CLI processes that exit when the task ends, so CodeIsland knows the session is done.
Hermes breaks that assumption in two ways:
servebackend; gateway chats run in a daemon. The process never exits, socleanupIdleSessions(dead-PID detection) never removes the session. (Related: CodeIsland repeatedly sends SIGTERM to launchd-managed daemon (Hermes gateway), causing restart loop #243 — the SIGTERM side of this mismatch was fixed, but the "stuck running" display remains.)on_session_start,pre_tool_call,post_tool_call,on_session_end(only on/resetor explicit close),subagent_stop. There is no "response complete" or "idle" event, andon_session_endrarely fires in normal use.So a card created by the first tool call stays in "running" state forever.
Proposed fixes (any would help; ideally a combination)
post_llm_call→ internal idle/done. Hermes already has apost_llm_callhook event that fires after every LLM response completes. Mapping it to a "done" state (likeTaskRoundCompletefor Cline) would return the card to idle after each turn. Users would need to add apost_llm_callhook entry to their config — document it in the Hermes setup.on_session_resetalready maps toSessionEnd— good; but also treat a Hermes session as ended when the user closes the conversation in the desktop app (if the app-side can detect it).Expected behavior
A Hermes session card should show activity only while Hermes is actually processing (tool calls, LLM calls), and settle to an idle state when the turn completes — mirroring how Claude Code sessions behave. The notch should not accumulate permanent "running" cards.
Happy to provide bridge payloads / diagnostics if useful.