Skip to main content

Governed runtime + skills for a multi-domain personal health agent (recovery, running, sleep, stress, strength, nutrition).

Project description

Health Agent Infra

A governed local agent runtime for personal health data. Claude Code + Garmin today; MCP-portable and multi-source on the roadmap.

A Claude Code agent reads your own health data, emits per-domain proposals bounded by codified rules, and commits auditable recommendations you review the next day. Every decision is logged to a local SQLite database on your machine; nothing leaves your device.

For technical users comfortable with a CLI who use Claude Code and want agent recommendations they can audit, reproduce, and keep local.

  • Local-first. State lives in a SQLite file under your home directory. No cloud, no account, no remote telemetry.
  • Governed, not generative. Python owns mechanical decisions (classification bands, policy rules, transactional commits); markdown skills own rationale and uncertainty. Skills never change an action; code never writes prose.
  • Auditable by construction. Pulls, proposals, rule firings, synthesis, and final recommendations all land in typed tables. Inspect anytime with hai doctor, hai explain, hai stats, or plain SQL.

Install

pipx install health-agent-infra                      # or: pip install -e .
hai init --with-auth --with-first-pull               # scaffolds state + config + skills,
                                                     # prompts for Garmin credentials,
                                                     # backfills the last 7 days
hai daily                                            # tomorrow morning: pull → clean → propose → synthesize → commit
hai stats                                            # local funnel: syncs, recent runs, daily streak

Prefer the non-interactive path? Run hai init on its own, then hai auth garmin separately. hai init is idempotent and safe to re-run. Full CLI surface in reporting/docs/agent_cli_contract.md.

Six domains in v1

recovery · running · sleep · stress · strength · nutrition

Each domain ships its own schemas, classification bands, policy rules, and a readiness skill, and is wired into the synthesis X-rule catalogue that reconciles across domains. Nutrition is macros-only in v1 — see reporting/docs/non_goals.md.

Local-first runtime at a glance

pull / intake  →  projectors  →  accepted_*_state_daily tables
                                        │
                                        ▼
                         hai state snapshot --as-of <date>
                                        │
                                        ▼
                 domain skills emit DomainProposal × 6
                                        │ hai propose
                                        ▼
                              proposal_log
                                        │
                                        ▼
   Phase A X-rules (X1–X7) → runtime applies mutations to drafts
                                        │
                                        ▼
             daily-plan-synthesis skill overlays rationale
                                        │
                                        ▼
         Phase B X-rules (X9) → action_detail adjustments
                                        │
                                        ▼
  ATOMIC COMMIT: daily_plan + x_rule_firings + N recommendations
                                        │
                                        ▼
             hai review schedule / record / summary
  • Local state memoryaccepted_*_state_daily tables hold the canonical per-domain day-level state the runtime reasons over.
  • Decision memoryproposal_log, daily_plan, x_rule_firing, and recommendation_log preserve what the agent proposed, what synthesis changed, and what was finally committed.
  • Outcome memoryreview_event and review_outcome record how the plan went, so the full decision/outcome history stays on-device.

See reporting/docs/architecture.md for the full pipeline and the code-vs-skill boundary.

Roadmap

  • Runtime portability via MCP. Expose the agent-safe CLI surface as an MCP server so any agentic runtime (Claude Code, Codex, others) can drive it. Today the project is Claude Code–native; the CLI contract is already annotated agent-safe vs. interactive, which maps cleanly onto MCP tool schemas.
  • Multi-source wearables. Apple Health, Oura, Whoop. The adapter protocol (core/pull/protocol.py) is already source-agnostic; the per-domain evidence contract needs to broaden before additional sources land. Community adapters welcome — see reporting/docs/how_to_add_a_pull_adapter.md.
  • Skill-narration eval harness. Currently deferred; see safety/evals/skill_harness_blocker.md.

What this is not

  • Not a medical device, not hosted, not multi-user, not an ML loop. See reporting/docs/non_goals.md.
  • Not meal-level nutrition in v1 — macros only.
  • Not an MCP server yet (see Roadmap).
  • Not a skill-narration eval harness yet (see Roadmap).

Dig deeper

  1. Positioning & role mapreporting/docs/personal_health_agent_positioning.md
  2. Query taxonomyreporting/docs/query_taxonomy.md
  3. Memory modelreporting/docs/memory_model.md
  4. Architecture overviewreporting/docs/architecture.md
  5. Explainability surfacereporting/docs/explainability.md
  6. X-rule cataloguereporting/docs/x_rules.md
  7. Non-goals (scope discipline)reporting/docs/non_goals.md
  8. State schemareporting/docs/state_model_v1.md
  9. 10-minute reading tourreporting/docs/tour.md
  10. Extension path — pull adapterreporting/docs/how_to_add_a_pull_adapter.md
  11. Extension path — new domainreporting/docs/how_to_add_a_domain.md
  12. Eval capturereporting/artifacts/flagship_loop_proof/2026-04-18-multi-domain-evals/

CLI surface

# Evidence + intake
hai pull [--live] --date <d>                   # Garmin CSV / live pull
hai clean --evidence-json <p>                  # raw → CleanedEvidence + RawSummary
hai intake gym|exercise|nutrition|stress|note|readiness ...

# State
hai state init | migrate | read | snapshot | reproject

# Per-domain debug
hai classify --domain <d> --evidence-json <p>
hai policy   --domain <d> --evidence-json <p>

# Agent flow (use `hai daily` for the whole loop)
hai daily                                       # morning orchestrator
hai propose  --domain <d> --proposal-json <p>
hai synthesize --as-of <d> --user-id <u>

# Persistence + review
hai writeback --recommendation-json <p>         # recovery-only legacy direct path
hai review schedule | record | summary [--domain <d>]

# Auth + config + helpers
hai auth garmin | status
hai config init | show
hai doctor                                      # freshness + health checks
hai stats                                       # local funnel (sync + command history, daily streak)
hai exercise search --query <free-text>

# Evals
hai eval run --domain <d> | --synthesis [--json]

Repo layout

For a one-page orientation of every top-level entry (active vs historical vs generated) see REPO_MAP.md. The package itself:

src/health_agent_infra/
├── cli.py                          # hai dispatcher
├── core/
│   ├── schemas.py  validate.py  config.py
│   ├── synthesis.py  synthesis_policy.py
│   ├── writeback/  state/  clean/  pull/  review/
│   ├── memory/  explain/  research/
│   └── intake/
├── domains/
│   ├── recovery/  running/  sleep/  stress/  strength/  nutrition/
│   └── each: schemas.py classify.py policy.py [+ signals/intake]
├── skills/
│   ├── recovery-readiness/  running-readiness/  sleep-quality/
│   ├── stress-regulation/  strength-readiness/  nutrition-alignment/
│   ├── daily-plan-synthesis/  intent-router/  expert-explainer/
│   └── strength-intake/  merge-human-inputs/  writeback-protocol/
│       reporting/  safety/
├── evals/                          # packaged eval runner + scenarios
└── data/garmin/export/              # committed CSV fixture
reporting/                          # see reporting/README.md
├── docs/                            # architecture, x_rules, non_goals, ...
├── artifacts/flagship_loop_proof/   # eval runner captures
├── plans/                           # post-v0.1 roadmap + historical phase docs
└── experiments/                     # frozen Phase 0.5 / 2.5 prototypes
safety/                             # see safety/README.md
├── tests/                           # 1200+ unit + contract + integration
├── evals/                           # eval-doc reference + skill-harness pilot
└── scripts/                         # legacy pre-rebuild demo shim

What's proven in v1

  • Six domains end-to-end: classify → policy → skill proposal → synthesis → writeback → review.
  • Ten X-rule evaluators across two phases with atomic transactional commits.
  • Garmin live pull via OS keyring (hai auth garmin + hai pull --live).
  • Idempotent synthesis with optional --supersede versioning.
  • 28 eval scenarios (18 domain + 10 synthesis); skill-narration axis explicitly deferred (see safety/evals/skill_harness_blocker.md).
  • 1200+ tests covering every band, every R-rule, every X-rule, atomic transaction semantics, writeback invariants, and skill-boundary contracts.

Contributing

See CONTRIBUTING.md.

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

health_agent_infra-0.1.1.tar.gz (296.1 kB view details)

Uploaded Source

Built Distribution

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

health_agent_infra-0.1.1-py3-none-any.whl (373.6 kB view details)

Uploaded Python 3

File details

Details for the file health_agent_infra-0.1.1.tar.gz.

File metadata

  • Download URL: health_agent_infra-0.1.1.tar.gz
  • Upload date:
  • Size: 296.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for health_agent_infra-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5df22c2dca2c77f44e60195b6543dc2d18abc3838549bd1062c948240dd74387
MD5 1efecb5b7ae940ae54bcfd0d40ac2eb2
BLAKE2b-256 fb18ca6d083da88aed20e984e0036c6ab65b4a1a28be17d952386ee06efb6d45

See more details on using hashes here.

File details

Details for the file health_agent_infra-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for health_agent_infra-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e9530205463f744f805e110d597989f11b2e346d7d76832edb9ba730b0d70dd7
MD5 d321152e082b3af893229ec9c33bb3cf
BLAKE2b-256 ea5819c2f7f7774c7c3c6fa1ab7c4361d5eddf13e47d6bfd84458e149b5b465a

See more details on using hashes here.

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