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)
  • "Set a goal to sleep 7+ hours a night" - Hermes tracks this automatically from your actual logged sleep, no manual progress updates needed
  • "How am I doing on my goals?" / "How does this week compare to last week?"

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 --compare-days 7 --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. Includes a retrospective section comparing this week to last week (--compare-days changes the window size), color-coded by whether the change is favorable - a stress increase shows red, a mood increase shows green.

Example dashboard trend chart

Example output from 28 days of sample data - your own chart will reflect whatever you've actually logged.

Goal Tracking

Goals can track themselves from real data instead of needing manual progress updates - just tell Hermes what to track:

  • "Set a goal to sleep 7+ hours a night" -> auto-tracks against your logged sleep, direction "at_least"
  • "Set a goal to keep stress under 4" -> direction "at_most"
  • "How am I doing on my goals?" -> recomputes and reports current progress

Progress is the average of the linked metric over a rolling window (7 days by default) relative to the target, clamped to 0-100%. Goals without a linked metric keep working exactly as before - a plain percentage you update manually.

Health Data Import

pip install hermes-life-os
hermes-life-os-import --apple-health export.xml
hermes-life-os-import --csv my_data.csv
hermes-life-os-import --csv my_data.csv --dry-run   # preview without writing

Reduces manual one-entry-at-a-time logging by bulk-importing data you already have, with real historical dates preserved (not stamped "today"):

  • Apple Health (export.xml from Health app -> profile icon -> Export All Health Data): imports Sleep Analysis and Dietary Water records, aggregated per day.
  • Generic CSV: any file with a date column (YYYY-MM-DD) plus any subset of sleep_hours, mood, stress, energy, hydration columns - works for a Google Fit CSV export or your own spreadsheet.

Imported entries are tagged so they're distinguishable from entries logged live through chat.

What's New

v1.10.0 - Goal-Metric Linkage, Retrospective Comparison, Health Data Import

  • Goals can now auto-track from real logged data instead of manual progress updates - update_goal accepts metric/target/direction/window_days; new check_goal_progress tool recomputes and reports current progress.
  • New compare_periods tool and a Dashboard "Retrospective" section compare this period to the one before it (week-over-week by default, --compare-days to change the window), color-coded by whether the change is favorable per metric.
  • New hermes-life-os-import CLI: bulk-imports Apple Health export.xml (Sleep Analysis, Dietary Water) or a generic CSV (date + sleep_hours/mood/stress/energy/hydration columns), preserving real historical dates instead of stamping everything "today".
  • write_memory() now only stamps "now" when no timestamp was already provided - unchanged for all real-time logging (which never supplies one), enables historical-dated bulk import.
  • 45 new tests (goal-metric linkage, retrospective comparison, health import) - suite grew from 175 to 220.

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.10.0.tar.gz (80.9 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.10.0-py3-none-any.whl (60.1 kB view details)

Uploaded Python 3

File details

Details for the file hermes_life_os-1.10.0.tar.gz.

File metadata

  • Download URL: hermes_life_os-1.10.0.tar.gz
  • Upload date:
  • Size: 80.9 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.10.0.tar.gz
Algorithm Hash digest
SHA256 2a6a2af45042868decc1408fd4aec0e0ba8d560002b71f48cdf909248e625ee0
MD5 e1f0dd9a3f7668e548aa2fd295ff9f26
BLAKE2b-256 341a4f59f363aa955a3a762fb4cd7454438b058c90599681e059a8d68a42422a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_life_os-1.10.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.10.0-py3-none-any.whl.

File metadata

  • Download URL: hermes_life_os-1.10.0-py3-none-any.whl
  • Upload date:
  • Size: 60.1 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.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 510e864e90061a29eb78b516ed258d4cef1a5e3a419fc3c8039e25c3438a0b61
MD5 49ce2a76d689290d223e98ba8cd94b75
BLAKE2b-256 cae6aeb76ae792cd94a57d45238c23406458dac7e4927ef8b181ae031bfed15b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_life_os-1.10.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