The personal OS that grows with you - mood, sleep, nutrition and habit tracking with pattern detection, built for Ollama/OpenAI/Anthropic/OpenRouter.
Project description
Hermes Life OS 🧠
The personal OS that grows with you.
Built for the NousResearch "Show us what Hermes Agent can do" hackathon.
Most productivity tools forget you the moment you close them. Hermes Life OS remembers everything - your mood, your meals, your sleep, your stress, your wins and your struggles - and gets smarter about you every single day.
What It Does
Tell it how you feel. Log what you ate. Track your sleep. Over time it starts connecting dots you haven't: energy crashes after poor sleep, mood dips on low-hydration days, focus drops when stress spikes. Every morning it briefs you. Every evening it reflects with you. Every week it tells you what the data says about your life.
The longer you use it, the more it knows. The more it knows, the more useful it becomes.
Architecture
flowchart TD
A([👤 You share something]) --> B
B[🧠 REMEMBER<br/>Mood · Sleep · Meals<br/>Stress · Focus · Habits] --> C
C[🔍 RECALL<br/>Search memory<br/>for context] --> D
D[📊 DETECT PATTERNS<br/>Correlations across<br/>all life dimensions] --> E
E[📋 BRIEF<br/>Personalized insight<br/>based on YOUR data] --> F
F([🌱 Hermes knows you<br/>a little better today])
G([⏰ Cron Schedule<br/>07:00 Morning<br/>12:00 Midday<br/>18:00 Evening<br/>23:00 Consolidate<br/>Mon 08:00 Weekly]) --> C
style A fill:#2980b9,color:#fff
style F fill:#27ae60,color:#fff
style G fill:#8e44ad,color:#fff
style D fill:#e67e22,color:#fff
Hermes Features Used
| Feature | How It's Used |
|---|---|
| Memory | Stores every mood, meal, sleep entry, workout, stress log - recalls before every response |
| Skills | Life OS playbook defines daily rhythm, pattern detection rules, and briefing format |
| Cron | Automated briefings at 07:00, 12:00, 18:00, 23:00, and weekly Monday reviews |
| Gateway | Delivers briefings via terminal - extensible to Telegram, email, SMS |
| Subagents | Pattern detection runs across all health dimensions in parallel |
| Atropos RL | Reward function trains Hermes to be more personal and memory-driven over time |
Tracking Capabilities
| Category | What Hermes Tracks |
|---|---|
| 🥗 Nutrition | Meals, calories, protein/carbs/fat, daily totals |
| 😴 Sleep | Duration, quality score, 7-day averages |
| 💧 Hydration | Daily water intake with progress bar |
| 💪 Fitness | Workouts, duration, intensity, weekly count |
| 🧘 Mental | Stress levels, meditation sessions, gratitude logs |
| 🎯 Focus | Deep work sessions, distractions, quality scores |
| ✅ Habits | Streaks, best streaks, completion tracking |
| 🎯 Goals | Progress percentages, milestones, notes |
| 😊 Mood & Energy | Daily scores, trend detection, dip alerts |
Pattern Detection
Hermes automatically detects and surfaces:
- Mood dips lasting 3+ consecutive days
- Sleep deprivation affecting focus and mood
- Energy crashes correlated with nutrition gaps
- Stress spikes and their triggers
- Habit streaks worth celebrating
- Goal stalls that need a nudge
- Hydration gaps on high-stress days
Correlation Engine
demo/analytics.py computes real Pearson correlation coefficients between
tracked metrics (mood, sleep, stress, energy, hydration) using daily-averaged
values from memory. A pair is only surfaced when there's enough data
(4+ overlapping days by default) and the relationship is meaningful
(|r| >= 0.4). Each result reports the direction (positive/negative), strength
(weak/moderate/strong), and the number of days behind it - no external
dependencies required (pure Python stdlib).
Reward Function
pie title Life OS Reward Components
"Briefing Sent - Delivered via send_briefing?" : 30
"Memory Used - Recalled AND remembered?" : 25
"Pattern Detected - Called detect_patterns?" : 20
"Personalization - Referenced real context?" : 15
"Tool Coverage - Used expected tools?" : 10
Quick Start
Works with four LLM backends - pick whichever you already have. The
provider is auto-detected from whatever key is set (or force one with
--provider).
pip install "hermes-life-os[all]"
# Option A - free, fully local, no API key:
ollama serve
ollama pull llama3.1
# Option B / C / D - pick one:
set ANTHROPIC_API_KEY=sk-ant-...
set OPENAI_API_KEY=sk-...
set OPENROUTER_API_KEY=sk-or-...
hermes-life-os --mode onboard
hermes-life-os --mode morning
hermes-life-os --mode chat
# force a specific backend regardless of which keys are set:
hermes-life-os --mode morning --provider anthropic
Prefer running from source instead of installing? Clone the repo and use
python demo/demo_life_os.py ... in place of hermes-life-os ... above
(same flags, same behavior) - see Project Structure.
Or run it with Docker - zero Python setup
# pull the pre-built image - no clone needed:
docker run --rm -it -e ANTHROPIC_API_KEY=sk-ant-... \
-v hermes-life-os-data:/root/.hermes \
ghcr.io/lethe044/hermes-life-os:latest --mode morning
Or build it yourself, and get a fully free trial paired with a local Ollama container (no API key at all):
git clone https://github.com/Lethe044/hermes-life-os.git
cd hermes-life-os
docker compose up -d ollama
docker compose exec ollama ollama pull llama3.1
docker compose run --rm hermes-life-os --mode onboard
All Demo Modes
| Mode | What Happens |
|---|---|
onboard |
First-time setup - Hermes learns who you are |
morning |
Daily briefing based on all your patterns |
checkin |
Midday log - mood, habits, quick nudge |
evening |
Evening reflection - wins, struggles, patterns |
weekly |
Sunday review - what this week says about you |
nutrition |
Log meals and get nutrition insights |
sleep |
Log sleep and get sleep analysis |
fitness |
Log workouts and track fitness patterns |
mental |
Log stress, meditation, and gratitude |
focus |
Log deep work sessions and productivity |
health |
Full health dashboard - all data in one view |
dream |
Dream journal - log dreams, detect patterns, sleep/stress correlation |
chat |
Interactive conversation - type anything |
Chat Mode
python demo/demo_life_os.py --mode chat
Type naturally. Hermes responds using everything it knows about you.
Type exit to leave.
Example conversations:
- "I feel stressed today, any advice?"
- "Log my lunch - grilled chicken and rice, about 600 calories"
- "How has my sleep been this week?"
- "I just ran 5km, log it"
- "What patterns are you seeing in my data?"
- "I logged 4 hours of sleep by mistake, it was actually 7" - Hermes recalls the entry and corrects it
- "Delete that last mood entry, I misclicked" - Hermes finds and removes it (asks for confirmation first)
Multi-Profile (shared households)
python demo/demo_life_os.py --mode morning --profile alex
python demo/dashboard.py --profile alex
By default everything lives at ~/.hermes/life-os/ (unchanged, single
person). Passing --profile <name> (or setting LIFE_OS_PROFILE) fully
isolates that person's data under ~/.hermes/life-os/profiles/<name>/ -
so a household can share one install without mixing anyone's mood/sleep/
habit data. Omitting --profile always keeps working exactly as before.
Encryption at Rest (optional)
set LIFE_OS_ENCRYPTION_KEY=your-passphrase-here
python demo/demo_life_os.py --mode morning
Off by default - nothing changes unless you set this. When set, every
data file (profile, habits, goals, nutrition, sleep, etc.) and every line
of memory.jsonl is encrypted at rest with a key derived from your
passphrase (PBKDF2-HMAC-SHA256 + Fernet/AES). Existing plaintext data is
read transparently and gets encrypted the next time it's written - no
separate migration step. There is no password recovery - if you lose
the passphrase, that data is unrecoverable by design. Requires
pip install "hermes-life-os[encryption]" (or pip install cryptography
if running from source).
Project Structure
graph LR
A[hermes-life-os] --> B[skills/]
A --> C[environments/]
A --> D[demo/]
A --> E[tests/]
A --> F[docs/]
B --> B1[life-os/SKILL.md<br/>Daily rhythm playbook]
C --> C1[life_os_env.py<br/>Atropos RL environment]
C --> C2[life_os_config.yaml<br/>Training config]
D --> D1[demo_life_os.py<br/>CLI / chat / voice orchestration]
D --> D2[storage.py<br/>Persistence layer]
D --> D3[patterns.py<br/>Trend detection]
D --> D4[analytics.py<br/>Pearson correlation engine]
D --> D5[tools.py<br/>dispatch_tool + TOOLS schema]
D --> D6[scheduler.py<br/>Cron-style trigger engine]
D --> D7[notifications.py<br/>console/webhook/Telegram/email]
D --> D8[run_scheduler.py<br/>Production scheduler entry point]
E --> E1[test_life_os_env.py]
E --> E2[test_analytics.py]
E --> E3[test_storage.py]
E --> E4[test_tools.py]
E --> E5[test_scheduler.py]
E --> E6[test_notifications.py]
style B1 fill:#27ae60,color:#fff
style C1 fill:#8e44ad,color:#fff
style D1 fill:#2980b9,color:#fff
style D6 fill:#e67e22,color:#fff
style D7 fill:#e67e22,color:#fff
demo_life_os.py used to be a single ~1600-line file. It's now a thin
CLI/chat/voice orchestration layer that imports its storage, pattern
detection, and tool-dispatch logic from focused sibling modules -
each independently testable and reusable.
Scheduling & Notifications
demo/scheduler.py implements the "Daily Rhythm" cron table from
skills/life-os/SKILL.md (07:00 morning, 12:00 midday, 18:00 evening,
Monday 08:00 weekly) as a dependency-free polling loop. The scheduling
logic itself (due_entries) is pure and fully unit tested; the actual
briefing generation and delivery are injected as callables, so the
core engine has no dependency on the OpenAI client or network access.
demo/notifications.py delivers briefings through a pluggable channel,
selected via HERMES_NOTIFY_CHANNEL: console (default), webhook,
telegram, or email (SMTP). All channels are stdlib-only. A failed
remote channel never crashes the scheduler - it's caught, logged, and
the briefing still prints to console.
To run the scheduler in production:
set ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY / OPENROUTER_API_KEY / a running ollama
set HERMES_NOTIFY_CHANNEL=telegram
set TELEGRAM_BOT_TOKEN=...
set TELEGRAM_CHAT_ID=...
python demo/run_scheduler.py
Voice Mode
python demo/demo_life_os.py --voice
# or pin a backend/model explicitly:
python demo/demo_life_os.py --voice --provider anthropic --model claude-sonnet-5
Speak to Hermes directly. It listens via microphone, processes your input using everything it knows about you, and responds out loud via system TTS.
No extra API key needed - uses built-in Windows/Linux speech synthesis.
To stop: say or type exit
Dashboard
pip install "hermes-life-os[dashboard]" # or: pip install matplotlib (running from source)
hermes-life-os-dashboard
hermes-life-os-dashboard --days 60 --out my-report.html
Turns your logged mood/sleep/stress/energy/hydration data and the correlations Hermes already detects (e.g. "poor sleep tracks with lower mood, r=0.62") into a single self-contained HTML report with charts - opens straight in your browser, no server, nothing leaves your machine. Needs no LLM/API key at all - it's pure local data analysis.
Example output from 28 days of sample data - your own chart will reflect whatever you've actually logged.
What's New
v1.9.0 - Multi-Profile, Encryption at Rest, Correcting/Deleting Entries
--profile <name>(orLIFE_OS_PROFILE) isolates all data per person under~/.hermes/life-os/profiles/<name>/- for shared households. Omitting it keeps the original single-profile layout unchanged.LIFE_OS_ENCRYPTION_KEY- optional encryption at rest (PBKDF2-HMAC-SHA256- Fernet/AES) for every data file and every memory.jsonl line. Off by default; existing plaintext data reads transparently and gets encrypted on next write, no separate migration needed.
- Every memory entry now has a stable id. New
correct_entry/delete_entrytools let you fix a mistake or remove a bad log entry through normal conversation ("that sleep entry was wrong, it was actually 7 hours" / "delete that last entry") instead of it being stuck in an append-only log. - 39 new tests (12 profiles, 10 encryption, 12 memory edit/delete at the storage layer, 5 for the correct_entry/delete_entry chat tools) - suite grew from 136 to 175 tests.
v1.8.0 - PyPI Package, GHCR Image, Contributor Docs
pip install hermes-life-os- real PyPI packaging viapyproject.toml, with CLI commandshermes-life-os,hermes-life-os-dashboard,hermes-life-os-scheduler. Source layout (demo/) unchanged, so existingpython demo/demo_life_os.pyusage still works exactly the same. Auto-published to PyPI on every GitHub Release.ghcr.io/lethe044/hermes-life-os- pre-built Docker image, auto-published on every push tomainand every release. Nogit cloneneeded to try it.- Example dashboard chart embedded in the README (see the Dashboard section).
CONTRIBUTING.mdand GitHub issue templates (bug report / feature request) for contributors.
v1.7.0 - CI, Docker & Dashboard
- GitHub Actions workflow runs the full test suite on every push/PR across Python 3.10/3.11/3.12, with a status badge in this README
Dockerfile+docker-compose.ymlfor a zero-install trial - pairs with a local Ollama container for a completely free, no-API-key run- New
demo/dashboard.py: generates a self-contained HTML report with charts of your mood/sleep/stress/energy/hydration trends and the correlations Hermes detects - pure local data analysis, no LLM call - 7 new tests for the dashboard - suite grew from 129 to 136 tests
v1.6.0 - Multi-Provider LLM Support
- New
demo/llm_providers.py: provider-agnostic client layer supporting Ollama (free, fully local, no API key), OpenAI, Anthropic, and OpenRouter, with auto-detection from whichever key is set --providerflag /LIFE_OS_PROVIDERenv var to force a specific backend- Friendly troubleshooting output on connection/auth failures instead of raw tracebacks
- 16 new unit tests (
test_llm_providers.py) covering provider resolution and the Anthropic <-> OpenAI message/tool format adapter - total suite grew from 113 to 129 tests, all passing
v1.5.0 - Modular Architecture, Scheduler & Notifications
- Split the ~1600-line
demo_life_os.pymonolith into focused, independently testable modules:storage.py,patterns.py,tools.py(demo_life_os.py is now the CLI/chat/voice orchestration layer only) - New
demo/scheduler.py: dependency-free cron-style engine implementing the Daily Rhythm table (07:00 morning, 12:00 midday, 18:00 evening, Monday 08:00 weekly), with pure, fully unit-tested scheduling logic - New
demo/notifications.py: pluggable delivery via console, webhook, Telegram, or email (SMTP) - stdlib only, never crashes on missing config - New
demo/run_scheduler.py: production entry point wiring the scheduler to real briefing generation and delivery - 77 new unit tests (
test_storage.py,test_tools.py,test_scheduler.py,test_notifications.py) - total suite grew from 36 to 113 tests, all passing
v1.4.0 - Real Correlation Engine
- New
demo/analytics.pymodule: pure-stdlib Pearson correlation analysis across mood, sleep, stress, energy, and hydration detect_patterns()now computes actual daily-aggregated correlations (r-value, day count, direction, strength) instead of a static placeholder message ("correlation analysis active")- Correlation insights are surfaced automatically in
detect_patternstool output, feeding into morning/evening/weekly briefings - 14 new unit tests covering the correlation engine (
tests/test_analytics.py)
v1.3.0 - Dream Journal
- Dream logging mode with symbol, emotion, tone and vividness tracking
- Sleep/mood/stress/dream correlation detection
- Recurring symbol pattern detection across 30 days
- Morning briefing includes dream analysis
v1.2.0 - Voice & Performance
- Voice mode - speak to Hermes, hear responses via system TTS
- Concurrent tool execution - read-only tools run in parallel threads
- Microphone input via SpeechRecognition
v1.1.0 - Health & Wellness Expansion
- Nutrition, sleep, hydration, fitness, mental, focus tracking
- Full health dashboard and weekly health report
- Interactive chat mode
v1.0.0 - Initial Release
- 12 demo modes covering every life dimension
- Pattern detection across mood, sleep, nutrition, stress, focus
- Memory-driven briefings, Atropos RL environment
Running Tests
python -m pytest tests/ -v
python -c "from environments.life_os_env import smoke_test; smoke_test()"
Why This Is Different
Every other agent in this hackathon does something for you. Hermes Life OS becomes something with you.
It tracks nutrition, sleep, fitness, stress, focus, hydration, habits, and goals - and connects them all. Bad Monday? It checks if you slept poorly Sunday. Energy crash at 3pm? It looks at what you ate for lunch. Mood dip this week? It finds the pattern you missed.
That is not a tool. That is a presence that accumulates.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_life_os-1.9.0.tar.gz.
File metadata
- Download URL: hermes_life_os-1.9.0.tar.gz
- Upload date:
- Size: 68.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73200cc940444c6f5dfa90a12fa60e02fa5b943ea2980931ce9e497ed3a6f557
|
|
| MD5 |
b965fd95258bdbde1f94770bf792542f
|
|
| BLAKE2b-256 |
456c0a4cca6ca3eaaa856f9285a20192c16361af5d73fe9c84dcda5e4f0f35e6
|
Provenance
The following attestation bundles were made for hermes_life_os-1.9.0.tar.gz:
Publisher:
publish-pypi.yml on Lethe044/hermes-life-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_life_os-1.9.0.tar.gz -
Subject digest:
73200cc940444c6f5dfa90a12fa60e02fa5b943ea2980931ce9e497ed3a6f557 - Sigstore transparency entry: 2239239561
- Sigstore integration time:
-
Permalink:
Lethe044/hermes-life-os@d4c74b150cde8d66dfe328626e27ec3f53400b84 -
Branch / Tag:
refs/tags/v1.9.0 - Owner: https://github.com/Lethe044
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d4c74b150cde8d66dfe328626e27ec3f53400b84 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hermes_life_os-1.9.0-py3-none-any.whl.
File metadata
- Download URL: hermes_life_os-1.9.0-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ce552db6b88126e8d42c42450fc57befe694bc7078f3a2f146b69836e9e8df1
|
|
| MD5 |
fb782d6a3f9fa7c2336c364d829d172e
|
|
| BLAKE2b-256 |
88435041bf0b50e1282ea9bb2c213f82aec08d0ded7a266bd349e419b486c045
|
Provenance
The following attestation bundles were made for hermes_life_os-1.9.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on Lethe044/hermes-life-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_life_os-1.9.0-py3-none-any.whl -
Subject digest:
4ce552db6b88126e8d42c42450fc57befe694bc7078f3a2f146b69836e9e8df1 - Sigstore transparency entry: 2239239791
- Sigstore integration time:
-
Permalink:
Lethe044/hermes-life-os@d4c74b150cde8d66dfe328626e27ec3f53400b84 -
Branch / Tag:
refs/tags/v1.9.0 - Owner: https://github.com/Lethe044
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d4c74b150cde8d66dfe328626e27ec3f53400b84 -
Trigger Event:
release
-
Statement type: