Self-improvement layer for Hermes Agent — installs loud, degrades loud, never silently no-ops.
Project description
Eidolon — Universal Self-Improvement Layer for Hermes Agents
Eidolon is a drop-in layer that hardens a Hermes agent's native dream, reflection, and memory loops into a disciplined, anti-fragile, self-improving system. Zero human babysitting: it runs autonomously, improves itself every session and on a schedule, and refuses to guess or gaslight. Deploy once and forget it.
What it does
- Clear SOUL.md contract — a plain, zero-guess identity and operating contract the agent loads every session. No manual sealing or hashing to maintain.
- Risk-gated self-improvement — low-risk fixes auto-apply; high-risk changes are shadow-tested first; regressions auto-roll-back.
- Dream cycle — autonomous post-session and scheduled reflection that mines hindsight memory, extracts lessons, and proposes improvements.
- Integrity watchdog — detects when upstream Hermes changes (skills paths, hooks, cron) break your setup and alerts the operator once per incident, without blocking sessions.
Principles
- No guessing. If a fact is unknown, the agent says so and verifies before acting.
- No gaslighting. It never rewrites history or denies prior state.
- Anti-fragile. Drift and breakage make the system stronger, not silent.
- Autonomous. Self-improvement requires zero approvals and zero reminders.
- Immutable safety. Security invariants are never modified by self-improvement.
Layout
SOUL.md Identity + operating contract (plain, no seal)
OPERATOR.md Human-facing setup + control guide
skills/dream-cycle/ Autonomous reflection + RL loop
skills/integrity-watchdog/ Drift detection + one-time alerting
tests/ Adversarial harness + test plan
The eidolon CLI
Eidolon ships a canonical command that never silently no-ops. Every subcommand
returns 0 on PASS, 2 on DEGRADED (loud reduced mode), and 1 on FAIL.
eidolon doctor # preflight checks (JSON via --json, --model-check)
eidolon verify # post-install end-to-end CLI smoke test (--json, --strict)
eidolon report --since 24h # measurable deltas: sessions, lessons, proposals, rollbacks
eidolon rollback --dry-run # restore from last-known-good snapshot
eidolon version # print semver
Every Eidolon component emits structured events into $EIDOLON_HOME/events.jsonl
(default: ~/.hermes/state/eidolon/events.jsonl). eidolon report reads that
log and prints integers you can plot. Empty state prints zeros with a first-run
banner — never null, never N/A.
Install
One-liner (macOS + Linux, Python 3.10–3.13):
curl -fsSL https://raw.githubusercontent.com/shagghiesuperstar/Eidolon-Soul-For-Hermes-Agent-Universal/main/install.sh | bash
What that does:
- Detects Python 3.10–3.13 (aborts loudly if absent — no silent guessing).
pip install --usertheeidolon-hermespackage from the pinned git ref.- Runs
eidolon doctorat the end. If doctor says FAIL, the installer exits non-zero. If DEGRADED (no host Hermes yet), install succeeds and the operator is told exactly why.
Once REC-007 (PyPI publish) lands, the one-liner becomes pip install eidolon-hermes.
Homebrew (macOS + Linuxbrew)
After the first stable release lands on PyPI, Eidolon is also available via a Homebrew tap:
brew tap eidolon-hermes/eidolon
brew install eidolon
See docs/install-brew.md for details, upgrade, and uninstall. The formula lives at packaging/homebrew/eidolon.rb in this repo; the tap repo mirrors it on every release.
Installer environment overrides (all optional):
| Var | Purpose | Default |
|---|---|---|
EIDOLON_REF |
Git ref to install | main |
EIDOLON_METHOD |
pip or src (clone-then-install) |
pip |
EIDOLON_PYTHON |
Interpreter to bind to | Auto-detected |
EIDOLON_SKIP_DOCTOR |
1 skips the final doctor gate |
0 |
HERMES_HOME |
Host Hermes home | $HOME/.hermes |
EIDOLON_HOME |
Eidolon state root | $HERMES_HOME/state/eidolon |
After install, verify anytime:
eidolon doctor # environment health
eidolon verify --strict # end-to-end CLI smoke; --strict promotes DEGRADED to exit 2
python tests/adversarial.py # S1–S3 guarantees
PYTHONPATH=src python -m unittest discover -s tests/unit # full unit suite
Don't want the installer script? Drop the skills/ directory into your
Hermes skills path and point your sessionend hook + cron at the
dream-cycle and integrity-watchdog handlers. See OPERATOR.md.
PII sanitization hook (REC-011)
CI runs scripts/sanitize_check.py on every PR. To catch leaks locally
before they hit CI, wire up the pre-commit hook once per clone:
git config core.hooksPath .githooks
Add a new pattern by appending to .sanitize-patterns.yml; the reader is
stdlib-only. Every pattern MUST ship with <name>_positive.txt and
<name>_clean.txt fixtures under tests/fixtures/sanitize_selftest/.
Bypass with git commit --no-verify only in emergencies — CI still enforces.
Releases & DOI
Eidolon uses SemVer (vX.Y.Z); host Hermes uses CalVer. The hermes_version
doctor check reasons over dates, not SemVer — see
src/eidolon/checks/hermes_version.py. Stable tags are minted on Zenodo
(.zenodo.json at repo root is the source of truth). Prereleases skip DOI
minting. See RELEASING.md for the full tagging + DOI policy.
Cite this
If Eidolon supports academic work, cite it via
CITATION.cff. BibTeX and APA-style examples live in
docs/citing.md. GitHub renders the CFF as a
"Cite this repository" widget on the project page.
License
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 eidolon_hermes-1.0.0.tar.gz.
File metadata
- Download URL: eidolon_hermes-1.0.0.tar.gz
- Upload date:
- Size: 96.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbffc9227cb63f9a36b53311b39f14aba4947580cc4bbf606e9b8f79cce7ee4c
|
|
| MD5 |
0bf287d269a753b86d01093a89f43f04
|
|
| BLAKE2b-256 |
82e0af3a88877fdc0a14f33031335d4b99fa7e089243a565a3eed4eb6e7edd91
|
Provenance
The following attestation bundles were made for eidolon_hermes-1.0.0.tar.gz:
Publisher:
release.yml on shagghiesuperstar/Eidolon-Soul-For-Hermes-Agent-Universal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eidolon_hermes-1.0.0.tar.gz -
Subject digest:
bbffc9227cb63f9a36b53311b39f14aba4947580cc4bbf606e9b8f79cce7ee4c - Sigstore transparency entry: 2112409935
- Sigstore integration time:
-
Permalink:
shagghiesuperstar/Eidolon-Soul-For-Hermes-Agent-Universal@4a152c476bceed65245df5afc5b2047d9176b581 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/shagghiesuperstar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a152c476bceed65245df5afc5b2047d9176b581 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eidolon_hermes-1.0.0-py3-none-any.whl.
File metadata
- Download URL: eidolon_hermes-1.0.0-py3-none-any.whl
- Upload date:
- Size: 67.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d5640c96d2a900b6413ea81446a693135c453096820d1c0c6cf84151fc01af1
|
|
| MD5 |
56e358fb2974643cad23b746ea1a3dea
|
|
| BLAKE2b-256 |
78949aa91f4caa2f151a080a86495e341e94fe4b9f741a70ebdaa95c83280b40
|
Provenance
The following attestation bundles were made for eidolon_hermes-1.0.0-py3-none-any.whl:
Publisher:
release.yml on shagghiesuperstar/Eidolon-Soul-For-Hermes-Agent-Universal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eidolon_hermes-1.0.0-py3-none-any.whl -
Subject digest:
7d5640c96d2a900b6413ea81446a693135c453096820d1c0c6cf84151fc01af1 - Sigstore transparency entry: 2112409976
- Sigstore integration time:
-
Permalink:
shagghiesuperstar/Eidolon-Soul-For-Hermes-Agent-Universal@4a152c476bceed65245df5afc5b2047d9176b581 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/shagghiesuperstar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a152c476bceed65245df5afc5b2047d9176b581 -
Trigger Event:
push
-
Statement type: