From 1314b4b5415c7ea4453f3412a188a73881b66341 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Tue, 17 Mar 2026 04:17:44 -0700 Subject: [PATCH] feat(hooks): emit session:end lifecycle event (#1725) Based on PR #1432 by @bayrakdarerdem. session:start was already on main; this adds the session:end event. Co-authored-by: bayrakdarerdem --- gateway/hooks.py | 5 +++-- gateway/run.py | 9 ++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gateway/hooks.py b/gateway/hooks.py index 2274b5b91..657c2e449 100644 --- a/gateway/hooks.py +++ b/gateway/hooks.py @@ -8,8 +8,9 @@ Hooks are discovered from ~/.hermes/hooks/ directories, each containing: Events: - gateway:startup -- Gateway process starts - - session:start -- New session created - - session:reset -- User ran /new or /reset + - session:start -- New session created (first message of a new session) + - session:end -- Session ends (user ran /new or /reset) + - session:reset -- Session reset completed (new session entry created) - agent:start -- Agent begins processing a message - agent:step -- Each turn in the tool-calling loop - agent:end -- Agent finishes processing diff --git a/gateway/run.py b/gateway/run.py index d652d01d3..25f69b7dc 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -2178,7 +2178,14 @@ class GatewayRunner: # Reset the session new_entry = self.session_store.reset_session(session_key) - + + # Emit session:end hook (session is ending) + await self.hooks.emit("session:end", { + "platform": source.platform.value if source.platform else "", + "user_id": source.user_id, + "session_key": session_key, + }) + # Emit session:reset hook await self.hooks.emit("session:reset", { "platform": source.platform.value if source.platform else "",