Skip to main content

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 🧠

Tests PyPI Python 3.10+ License: MIT

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 dashboard trend chart

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> (or LIFE_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_entry tools 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 via pyproject.toml, with CLI commands hermes-life-os, hermes-life-os-dashboard, hermes-life-os-scheduler. Source layout (demo/) unchanged, so existing python demo/demo_life_os.py usage 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 to main and every release. No git clone needed to try it.
  • Example dashboard chart embedded in the README (see the Dashboard section).
  • CONTRIBUTING.md and 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.yml for 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
  • --provider flag / LIFE_OS_PROVIDER env 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.py monolith 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.py module: 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_patterns tool 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hermes_life_os-1.9.0.tar.gz (68.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hermes_life_os-1.9.0-py3-none-any.whl (52.4 kB view details)

Uploaded Python 3

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

Hashes for hermes_life_os-1.9.0.tar.gz
Algorithm Hash digest
SHA256 73200cc940444c6f5dfa90a12fa60e02fa5b943ea2980931ce9e497ed3a6f557
MD5 b965fd95258bdbde1f94770bf792542f
BLAKE2b-256 456c0a4cca6ca3eaaa856f9285a20192c16361af5d73fe9c84dcda5e4f0f35e6

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for hermes_life_os-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ce552db6b88126e8d42c42450fc57befe694bc7078f3a2f146b69836e9e8df1
MD5 fb782d6a3f9fa7c2336c364d829d172e
BLAKE2b-256 88435041bf0b50e1282ea9bb2c213f82aec08d0ded7a266bd349e419b486c045

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page