5c9bc14008821bbfc33aa9e8e5d0558baa8015d6
After moving the canonical ump store from /root/.openclaw/.../state/ump-local
to /root/.hermes/state/ump-local, two related fixes:
1. src/ump-recall-mcp.js (the MCP shim):
- UMP_DIR fallback updated: /root/.openclaw/... -> /root/.hermes/state/ump-local
(parent env always provides UMP_DIR explicitly, but the fallback
was a footgun if anyone unset it.)
- tools/call ump.get now routes to the sidecar's GET /get/{urn}
endpoint via HTTP, with fallback to the stdio child for resilience.
This replaces the silent-drop pattern where the npx child held
a stale UMP_DIR and returned "not_found: no record" for everything.
2. scripts/ump_verify.py (new):
File-layer verifier for ump-write verification. Replaces the
manual SOP with an executable that has deterministic exit codes:
0 verified, 2 silent drop, 3 malformed, 4 no store, 5 corrupted
Reads memory.ump.json directly (independent of any HTTP route),
supports --exists, --wait N, --list-last N.
3. .gitignore: ignore state/ (runtime cache: access_log.json, graph.json)
and __pycache__ (eval python tools).
self-directed-learning
Self-directed learning framework for Hermes / Krystie — multi-strategy retrieval over UMP memory, with skill detection, decay, and triadic review.
What this is
A continuous-learning loop for AI agents:
- Retrieval substrate — multi-strategy (FTS5 + vector + graph) RRF fusion with ACT-R re-ranking, served as an MCP shim so Hermes/Krystie can use it transparently through their existing UMP tool surface.
- Memory hygiene — nightly decay (per-kind rates, atomic writes, automatic backups), access tracking (frequency + last_accessed_at) feeding the decay and re-ranker.
- Knowledge graph — entity extraction + typed relations + co-occurrence edges; BFS expansion surfaces related URNs even when the direct text doesn't match.
- Triadic review — Claude + Codex (via Hermes OAuth / ChatGPT Pro subscription) as independent judges for claims before they're written to long-term memory.
- Cron-driven framework — skill gap detection, spaced repetition, foraging, reflective journaling, self-measure. All run autonomously and feed back into the retrieval substrate.
Phases shipped
| Phase | What | Tests |
|---|---|---|
| 1 | Sidecar on :4380 + 3-channel RRF |
baseline 0.500 → 1.000 (+50pp) |
| 2 | Graph channel (typed relations + co-occurrence) | 12 unique top-5 graph-only wins |
| 3 | ACT-R re-ranker | 84% top-5 retention, 4/20 #1 changes |
| 4 | Decay script | 20/20 tests, nightly cron |
| 5 | Access tracking | 28/28 tests, feeds decay + re-ranker |
| 6 | Co-occurrence edges (in code) | (tests pending) |
| 7 | Triadic review (judge.py) | Claude + Codex wired |
Stack
- Language: Node.js 18+ (sidecar, MCP shim), Python 3.11+ (decay, framework scripts)
- Dependencies: UMP (
@universalmemoryprotocol/core0.1.0), Ollama (snowflake-arctic-embed21024-dim), Qdrant (memories_umpcollection), Express, undici, MCP SDK 1.29. - Repo:
http://100.81.59.99/sami7777/self-directed-learning(DNS3 Gitea) - Local path:
/root/ump-recall/(directory name kept for stability of running processes; only the repo was renamed)
Run
npm start # sidecar on :4380
node src/ump-recall-mcp.js # MCP shim (stdio)
python3 scripts/ump_decay.py --apply # nightly decay
python3 scripts/judge.py --claim "..." # Claude + Codex review
npm test # full test suite
Architecture
See /root/.hermes/skills/autonomous-ai-agents/agent-self-improvement-framework/ for the full framework spec.
Languages
JavaScript
52.1%
Python
47.9%