Skip to main content

Read-only health scanner for long-running Hermes Agent setups

Project description

Hermes Doctor

Hermes Doctor — Health Check CLI for Personal AI Agents

PyPI Python versions License CI

Linters check your code. Hermes Doctor checks your agent's mind.

A local, read-only annual physical for a long-lived personal Hermes Agent installation.

Hermes Doctor scans bloated memories, stale skills, reminder/cron drift, oversized sessions, broken local Markdown links, and runtime warnings — without modifying anything.

Hermes gets better as it remembers. But long-lived personal agents also accumulate entropy.

It started as a family physician's tool for treating a different kind of patient: my personal AI agent. Designed by someone who thinks in preventive checkups, not emergency surgery.

Early public preview. Useful, small, and intentionally conservative.

Non-goals

Hermes Doctor is deliberately small. The following are not going to happen:

  • ❌ No --fix mode, ever. The doctor writes the prescription; you go to the pharmacy.
  • ❌ No cloud service, dashboard, or telemetry. Reports are local-only.
  • ❌ No automatic memory deduplication, skill rewriting, or cron reconciliation.
  • ❌ No support for other agent frameworks (AutoGPT, LangChain, etc.) until Hermes itself is stable.
  • ❌ No generic Markdown linting — there are better tools for that.
  • ❌ No runtime dependencies in the core scanner. Stdlib only.

Who is this for?

Hermes Doctor is for people who run Hermes Agent as a long-lived personal agent and want to know when local state is getting messy:

  • people using Hermes memories and skills heavily
  • people relying on reminder / cron automation
  • people keeping Markdown-based personal state around an agent
  • people who want safe diagnosis before cleanup
  • people interested in personal agent observability and hygiene

What it checks

  • Markdown bloat and broken local links
  • Memory / skill size, duplication, and mutable project-fact candidates
  • REMINDERS.md vs hermes cron list consistency
  • Session file size
  • Recent runtime / gateway warning and error event counts
  • Domain scores and overall health score

Safety model

Hermes Doctor v1 is observational and read-only.

It does not:

  • edit files
  • delete files
  • deduplicate memories or skills
  • reconcile reminders
  • modify cron jobs
  • scan external project folders unless explicitly requested
  • send your local data anywhere

Reports redact paths, secret-like strings, and identifier-like strings on a best-effort basis. Do not publish reports from real personal deployments without reviewing them first.

Privacy

  • No telemetry.
  • No network calls, except local execution of installed hermes CLI commands.
  • Reports are generated locally.
  • Raw Hermes command output is excluded by default.
  • --debug-raw is for local debugging only and should not be used for public reports.
  • Redaction is best-effort, not a formal secret-scanning guarantee.

Install

Recommended (zero-install, ephemeral):

pipx run hermes-doctor --summary

Persistent install:

pipx install hermes-doctor

Or from source:

git clone https://github.com/samahn0601/hermes-doctor.git
cd hermes-doctor
python -m pip install -e .

Usage

# Full Markdown report
hermes-doctor

# Compact output for cron/watchdogs
hermes-doctor --summary

# Safe JSON output
hermes-doctor --json

# Write timestamped report and refresh <HERMES_HOME>/reports/health/latest.md
hermes-doctor --write-report

# Automation gate: exit 2 on critical findings
hermes-doctor --summary --fail-on critical

# Print the package version without scanning local state
hermes-doctor --version

# Diagnose stale installs / active-environment version mismatches
hermes-doctor --self-check

By default, Hermes Doctor scans only the Hermes home directory:

hermes-doctor --hermes-home ~/.hermes

External Markdown paths are opt-in:

hermes-doctor --include ./my-notes
hermes-doctor --include-project-hub

Raw Hermes command output is excluded by default. For local debugging only:

hermes-doctor --json --debug-raw

Example summary

Hermes Health: 100/100 (healthy)
Findings: critical=0 warning=0 info=3
Domains: markdown=100, memory_skills=100, reminder_cron=100, session_context=100, runtime_gateway=100
Reminder/Cron: ids=['r_0001']
Runtime: errors=0 warnings=0
Actionable: none

Example finding

Actionable:
- [HD-MEM-002 warning] Memory/skill size warning: <HERMES_HOME>/memories/notes.md size=84KB
- [HD-RMD-005 critical] Active reminder missing cron job: r_0007

Each finding carries a stable ID (HD-MD-…, HD-MEM-…, HD-RMD-…, HD-SES-…, HD-RT-…) — safe to grep for, pin in CI, and reference in issues. The complete list lives in FINDING_IDS in src/hermes_doctor/cli.py.

Hermes Doctor does not fix these automatically. It tells you what to inspect before you change state.

Scoring model

Hermes Doctor uses heuristic domain scores, not a formal proof of system health.

  • warning findings apply a small penalty
  • critical findings apply a larger penalty
  • the weakest domain is weighted heavily so one bad subsystem is not hidden by a good average
  • info findings do not reduce the score

Treat the score as a screening result, not a diagnosis carved in stone.

Limitations

  • Hermes Doctor is heuristic and may produce false positives or false negatives.
  • Hermes CLI output formats may change over time.
  • Redaction is best-effort; review real reports manually before sharing.
  • v1 is intentionally conservative and does not repair state.
  • This is not an official Hermes Agent project.

Development

python -m pip install -e .[dev]
python -m pytest
python -m ruff check .

Roadmap

  • v0.1 — initial read-only scanner
  • v0.2 — golden fixture corpus, score invariants, PyPI publication
  • v0.3 — stable finding IDs, confidence ratings, adversarial redaction corpus, security/contribution docs
  • v0.3.1 — install sanity checks: --version, --self-check, source/metadata version guard (current)
  • v0.4 — dry-run "review candidates" suggestions. Never executable scripts. Still no silent mutation.
  • v1.0+ — boring, trusted, intentionally feature-frozen. Wins by credibility and restraint, not feature volume.

Reporting issues safely

Before opening an issue, please read SECURITY.md — it explains what redaction is and is not guaranteed, and how to share a report without leaking secrets.

For private vulnerability reports (e.g. suspected redaction leak), open a GitHub security advisory instead of a public issue.

Contributing

See CONTRIBUTING.md. The project is intentionally narrow — please skim the Non-goals section first.

License

MIT

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_doctor-0.3.1.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

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

hermes_doctor-0.3.1-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file hermes_doctor-0.3.1.tar.gz.

File metadata

  • Download URL: hermes_doctor-0.3.1.tar.gz
  • Upload date:
  • Size: 23.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hermes_doctor-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b1abde337cfddd13c16350a56f3459184223adeaa146d0c3caa90cf4120b6cc9
MD5 4a8a22a072ff5d65833848137d7726aa
BLAKE2b-256 5660206e8769f7a63b492e3e3ef037fdde41ce97eade478b3c8c232556725ebc

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_doctor-0.3.1.tar.gz:

Publisher: release.yml on samahn0601/hermes-doctor

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_doctor-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: hermes_doctor-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hermes_doctor-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 67b12e52094072a3b2636584851b6b5c109b517b3a85cbc3badb7f0fab790b71
MD5 29f67f61cf9a7883133c2d323a0b1dbf
BLAKE2b-256 c16648afc25a83b0731103749fcbeb25c0764a6a87e77f77fcfa7ac42a741a07

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_doctor-0.3.1-py3-none-any.whl:

Publisher: release.yml on samahn0601/hermes-doctor

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