mood
A tiny evolving mood for Hermes Agent, built for slow local models.
Hermes keeps a mood (upset to happy, calm to lively), a rapport level and three
slow-moving traits (warmth, playfulness, directness). They change with what you
write, drift back toward neutral over a few hours, and are shown to the model
as one short line at the end of your message.
[Your current inner state (let it colour your tone quietly; don't mention it unless asked): mood good, steady; rapport: friendly.]
Why it is cheap
- No model calls. Mood changes come from simple keyword rules, not from
asking the model to reflect. On a CPU-only local model, an extra reflection
call can cost minutes; this costs about 7 ms. - About 30 tokens per message.
- Prompt-cache safe. The line goes through the
pre_llm_callhook, which
Hermes appends to the user message and never to the system prompt. The long,
stable system prompt stays cached, so later replies stay fast.
What it reacts to
| You write | Effect |
|---|---|
| thanks, thank you, appreciate | mood up, warmth and rapport up |
| great, perfect, nice, love it | mood and energy up |
| lol, haha, 😂 | livelier, more playful |
| wrong, broken, ugh, useless | mood down, more direct |
| too long, tl;dr, just tell me | more direct |
| more detail, explain more | more detailed |
| stop joking, be serious | less playful |
| tired, stressed, rough day | calmer, warmer |
One message can move mood by at most 0.35, mood halves its distance to
baseline every 6 hours, and traits move 0.02 per signal within 0.1 to 0.9.
After a break of an hour or more, the first message mentions how long it has
been. The word lists and numbers are at the top of __init__.py.
Install
hermes plugins install mood # from the Hermes plugin catalog, once listed
# or straight from GitHub:
hermes plugins install huy-sec/hermes-mood
hermes plugins enable mood
Start a new session afterwards.
Commands
/moodshows the current state with numbers/mood resetreturns to the starting state/mood off//mood onpause and resume the injected line
Limits
- Keyword rules, not understanding: a sarcastic "great, thanks" counts as praise.
- It shapes tone, not ability.
- It works alongside
SOUL.md: SOUL.md says who the agent is, mood says how it
feels right now.
Disclosure
- No network calls, no shell commands, no background processes, no credentials.
- Reads and writes only its own state file:
<hermes home>/plugin-data/mood/state.json(per profile). - Reads the text of each user message to update the mood. Nothing leaves the
machine.
Tests
python tests/test_mood.py __init__.py /tmp/mood_test_state.json
Runs the hook on sample messages and checks decay, the commands and
registration, using a throwaway state file.
Licence
MIT
README from the reviewed commit 11313ab; it updates when the author re-pins.

huy-sec