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
Showcase: hermes-companion — persona evolution + emotion state + ambient processing + proactive check-ins as a single zero-patch plugin (refs #11919 #22136 #9645 #13529) #28893
I built hermes-companion, a zero-patch plugin that bundles several long-standing community requests (persona evolution, ambient processing, proactive check-ins, emotional state exposure) into one cohesive "AI companion" layer on top of Hermes v0.12+.
This is a showcase / reference implementation, not a feature request — opening this so people watching the related issues below can find a working example, and so the Hermes team / community can give feedback or pull anything useful upstream.
What it implements (and which existing issues it relates to)
Feature
Relates to
EMOTION_STATE.md injected into system prompt; valence/arousal/dominance auto-decays each turn; auto-inferred from conversation via the auxiliary LLM; drops on tool failure; /mood, /mood-set commands
#13529 (Agent Activity API & Emotional State Exposure)
daily_seed (method C): fixed anchor events + persona-driven LLM augmentation written into world_state/events.json at each day rollover — SOUL.md effectively evolves day-to-day through lived events instead of being static
All wired through the official plugin hook surface (pre_llm_call / post_llm_call / post_tool_call / on_start / on_shutdown) + slash commands — zero patches to Hermes core
—
87 unit tests, no external deps in the test path. Verified against the v0.12.x plugin hook surface.
Why post here
The features above each have their own open issue/discussion, but nobody (that I could find) has tried to wire them together end-to-end as a single plugin. Maybe this saves someone time, or surfaces gaps in the current plugin API that would be worth addressing upstream — e.g.:
post_llm_call is the only practical hook for cheap auxiliary-LLM emotion inference; if auxiliary_client shape changes between versions, plugins like this break silently. A small stability contract there would help.
Happy to split anything useful into separate, focused issues if there's interest.
TL;DR
I built hermes-companion, a zero-patch plugin that bundles several long-standing community requests (persona evolution, ambient processing, proactive check-ins, emotional state exposure) into one cohesive "AI companion" layer on top of Hermes v0.12+.
Repo: https://github.com/gejifeng/Hermes_Soul_patch
This is a showcase / reference implementation, not a feature request — opening this so people watching the related issues below can find a working example, and so the Hermes team / community can give feedback or pull anything useful upstream.
What it implements (and which existing issues it relates to)
EMOTION_STATE.mdinjected into system prompt; valence/arousal/dominance auto-decays each turn; auto-inferred from conversation via the auxiliary LLM; drops on tool failure;/mood,/mood-setcommandsdaily_seed(method C): fixed anchor events + persona-driven LLM augmentation written intoworld_state/events.jsonat each day rollover — SOUL.md effectively evolves day-to-day through lived events instead of being staticheartbeatthread: idle-time emotion drift, periodic daydream candidates, arousal-threshold triggered proactive messagesagenda_add,agenda_done,agenda_ambient),/recallfor past-day briefhermes_time._resolve_timezone_name()— respectsHERMES_TIMEZONEenv /~/.hermes/config.yaml— no duplicated logicpre_llm_call/post_llm_call/post_tool_call/on_start/on_shutdown) + slash commands — zero patches to Hermes core87 unit tests, no external deps in the test path. Verified against the v0.12.x plugin hook surface.
Why post here
The features above each have their own open issue/discussion, but nobody (that I could find) has tried to wire them together end-to-end as a single plugin. Maybe this saves someone time, or surfaces gaps in the current plugin API that would be worth addressing upstream — e.g.:
ctx.inject_messagefrom inside the process or a file-queue picked up by an external watcher; a first-class "plugin → gateway outbound" path (similar to Plugin system lacks webhook delivery extension point — plugins must patch core source code #15006) would make this much cleaner.post_llm_callis the only practical hook for cheap auxiliary-LLM emotion inference; ifauxiliary_clientshape changes between versions, plugins like this break silently. A small stability contract there would help.Happy to split anything useful into separate, focused issues if there's interest.
中文版
我做了一个零侵入的 Hermes 插件 hermes-companion,把社区里几个长期 open 的 feature request 拼接成一个完整的"AI 陪伴层",跑在 Hermes v0.12+ 上。
仓库:https://github.com/gejifeng/Hermes_Soul_patch
这不是新的 feature request,而是一个 showcase / 参考实现,发在这里是让关心下面这些 issue 的人能找到一个可运行的样例,也欢迎 Hermes 团队和社区给反馈或抽取有用的部分到上游。
对应到现有 issue:
EMOTION_STATE.md到 system prompt;valence/arousal/dominance 每轮自动衰减;通过 auxiliary LLM 在post_llm_call中自动推断;工具失败时 valence 下降;提供/mood/mood-set。daily_seed(方法 C):固定锚点事件 + 由 SOUL 驱动的 LLM 增强写入world_state/events.json,让 SOUL 通过"日常经历"逐日演化,而不是一次性初始化。heartbeat线程:idle 期情绪漂移、周期性 daydream 候选、arousal 阈值触发主动消息。hermes_time._resolve_timezone_name(),不重复造时区逻辑(参见姐妹仓库 https://github.com/gejifeng/hermes-time_perception-extension)。pre_llm_call/post_llm_call/post_tool_call/on_start/on_shutdown)+ slash command 实现,Hermes 核心零修改。87 个单测,测试路径无外部依赖。已对 v0.12.x 插件 hook 表面验证。
做这个过程中发现两个可能值得上游处理的小痛点:
ctx.inject_message或落文件队列+外部进程消费,缺一条"插件 → gateway 出站"的官方通路(与 Plugin system lacks webhook delivery extension point — plugins must patch core source code #15006 思路类似)。post_llm_call是做廉价 auxiliary LLM 情绪推断的唯一可用 hook;如果auxiliary_client形状跨版本变动,这类插件会静默失效。有个轻量的稳定性约定会很有帮助。如果其中任何一点有兴趣继续推进,我可以拆成单独的 focused issue。