Hermes Learning Loop
by @mystour
Self-improving learning loop inspired by Hermes Agent. Automatically extracts successful workflows, creates skills, and persists knowledge across sessions.
clawhub install hermes-learning-loopπ About This Skill
name: hermes-learning-loop description: Self-improving learning loop inspired by Hermes Agent. Automatically extracts successful workflows, creates skills, and persists knowledge across sessions. tags: learning, self-improvement, memory, skill-creation, automation, hermes version: 1.0.0
Hermes Learning Loop for OpenClaw
Inspired by: NousResearch/hermes-agent (Self-improving AI agent)
Implements Hermes Agent's core learning loop in OpenClaw β automatically extracts successful workflows, creates reusable skills, and persists curated knowledge across sessions.
When to Use
Features
Quick Start
Install
clawhub install hermes-learning-loop
Manual Trigger
# After completing a task
node learning-loop.js extract --session=Create skill from workflow
node learning-loop.js create-skill --name="my-skill" --description="What it does"Periodic nudge (heartbeat)
node learning-loop.js nudge
Auto-Trigger (Integration)
Add to HEARTBEAT.md:
## Learning Loop - Periodic NudgeFrequency: Every 5 tasks or 30 minutes
Task:
1. Run node learning-loop.js nudge
2. Review extracted memories
3. Approve/reject skill creations
Architecture
Learning Loop Cycle
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Task Execution β
β - Agent completes task β
β - Track tool calls, decisions, outcomes β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 2. Periodic Nudge (every 5 tasks) β
β - System prompt: "Reflect on recent activity" β
β - Agent evaluates: Is this worth persisting? β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 3. Memory Extraction β
β - If valuable β Write to MEMORY.md / USER.md β
β - If workflow β Create skill file β
β - If context β Index in session archive β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 4. Skill Creation β
β - Extract steps, tool calls, file references β
β - Write to ~/.openclaw/skills/// β
β - Follow agentskills.io specification β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4-Layer Memory System
| Layer | Purpose | Location | Load Timing |
|-------|---------|----------|-------------|
| Prompt Memory | Always-on context | MEMORY.md, USER.md | Every session start |
| Skills | Procedural memory (how-to) | ~/.openclaw/skills/ | On-demand (summary β full) |
| Session Archive | Episodic memory (what happened) | SQLite + FTS5 | Deliberate retrieval |
| User Model | Behavioral patterns | Optional (Honcho-like) | Continuous passive |
Skill Triggers
Automatically create skill when:
Usage Examples
Example 1: Post-Task Skill Extraction
# After completing complex deployment
export SESSION_ID="2026-04-03-deploy"
export TASK_OUTCOME="success"
export TOOL_CALLS="15"node learning-loop.js extract
Output:
π Learning Loop Analysisβ
Task completed successfully
π Tool calls: 15
β οΈ Error recovery: 2 instances
π‘ User corrections: 1
π― Skill-worthy detected: YES
Proposed skill:
Name: deploy-to-k8s
Description: Deploy application to Kubernetes with health checks
Steps: 7
Tool calls: 15
π Created: ~/.openclaw/skills/devops/deploy-to-k8s/SKILL.md
Example 2: Periodic Nudge
# Heartbeat triggers this
node learning-loop.js nudge
Output:
π Periodic Nudge - Task #5Looking back at tasks 1-5...
Task 1: β
Simple (no extraction needed)
Task 2: β
Complex workflow detected
β Extracted: "github-pr-workflow"
Task 3: β
Error recovery pattern
β Extracted: "debug-python-import"
Task 4: β
Simple
Task 5: β
User correction applied
β Updated: "github-pr-workflow" (v1.0.1)
π Summary:
- New skills: 2
- Updated skills: 1
- Memory entries: 3
Example 3: Memory Curation
# Review what's worth keeping
node learning-loop.js curate --session="2026-04-03"
Decision Framework:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Should this be persisted? β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β Chat pleasantries β Discard β
β β Failed attempts β Discard (keep only success) β
β β
Successful workflows β Extract as skill β
β β
User preferences β Add to USER.md β
β β
Project context β Add to MEMORY.md (project/) β
β β
Corrections/feedback β Add to MEMORY.md (feedback/)β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Configuration
Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| LEARNING_NUDGE_INTERVAL | Tasks between nudges | 5 |
| LEARNING_MIN_TOOL_CALLS | Min tool calls for skill | 5 |
| LEARNING_AUTO_CREATE | Auto-create skills (vs approve) | false |
| LEARNING_SKILLS_DIR | Skills directory | ~/.openclaw/skills/ |
| LEARNING_MEMORY_DIR | Memory directory | ~/.openclaw/memory/ |
Config File
# ~/.openclaw/learning-loop.yaml
learning:
nudge:
enabled: true
interval: 5 # tasks
skill_creation:
auto_approve: false # Review before creating
min_tool_calls: 5
categories:
- devops
- research
- productivity
memory:
max_prompt_chars: 3575 # Hermes-style tight limit
archive_enabled: true
fts5_enabled: true
Skill File Format
Follows agentskills.io specification:
---
name: deploy-to-k8s
description: Deploy application to Kubernetes with health checks
version: 1.0.0
platforms: [linux, macos]
metadata:
tags: [kubernetes, devops, deployment]
category: devops
created_from: session-2026-04-03
deploy-to-k8s
Overview
Deploy any application to Kubernetes cluster with automated health checks and rollback.
Prerequisites
kubectl configured
Kubernetes cluster access
Docker image ready Steps
1. Validate cluster connection
bash
kubectl cluster-info
2. Apply deployment manifest
bash
kubectl apply -f deployment.yaml
3. Wait for rollout
bash
kubectl rollout status deployment/app
4. Health check
bash
kubectl get pods -l app=myapp
5. Verify service
bash
kubectl get svc app-service
Tool Calls Used
exec: kubectl commands
read: deployment.yaml
web_search: Kubernetes docs (if errors)Related Skills
docker-build-optimization
k8s-troubleshooting
Integration with OpenClaw
Heartbeat Integration
## HEARTBEAT.md UpdateLearning Loop - Periodic Nudge
Frequency: Every 5 tasks
Steps:
1. Check task counter
2. If counter % 5 == 0 β Run nudge
3. Review proposed skills/memories
4. Approve/reject
5. Reset counter
PUA Integration
# Task PUA can trigger learning loop
if task.failed && task.recovered:
node learning-loop.js extract --reason="error-recovery"
if task.pua_level >= "L2":
# Complex task β likely skill-worthy
node learning-loop.js nudge
Memory PUA Integration
# Memory health check includes learning loop status
node memory-pua.js auditOutput includes:
- Skills created this week
- Memories curated
- Nudge effectiveness
Comparison: Hermes vs This Implementation
| Feature | Hermes Agent | This Skill | |---------|--------------|------------| | Periodic Nudge | β Built-in | β Via heartbeat | | Skill Auto-Creation | β Full auto | β οΈ Opt-in approval | | 4-Layer Memory | β SQLite + FTS5 | β οΈ Markdown + optional SQLite | | Progressive Disclosure | β Summary β Full | β Same pattern | | User Modeling (Honcho) | β Optional | β Not implemented | | Gateway Integration | β Multi-platform | β οΈ OpenClaw channels only | | Context Compression | β Lineage-aware | β οΈ Basic summarization |
Benefits
Related Skills
References
License
MIT-0
*Version 1.0.0: Initial implementation inspired by Hermes Agent learning loop*
β‘ When to Use
π‘ Examples
Install
clawhub install hermes-learning-loop
Manual Trigger
# After completing a task
node learning-loop.js extract --session=Create skill from workflow
node learning-loop.js create-skill --name="my-skill" --description="What it does"Periodic nudge (heartbeat)
node learning-loop.js nudge
Auto-Trigger (Integration)
Add to HEARTBEAT.md:
```markdown
βοΈ Configuration
Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| LEARNING_NUDGE_INTERVAL | Tasks between nudges | 5 |
| LEARNING_MIN_TOOL_CALLS | Min tool calls for skill | 5 |
| LEARNING_AUTO_CREATE | Auto-create skills (vs approve) | false |
| LEARNING_SKILLS_DIR | Skills directory | ~/.openclaw/skills/ |
| LEARNING_MEMORY_DIR | Memory directory | ~/.openclaw/memory/ |
Config File
# ~/.openclaw/learning-loop.yaml
learning:
nudge:
enabled: true
interval: 5 # tasks
skill_creation:
auto_approve: false # Review before creating
min_tool_calls: 5
categories:
- devops
- research
- productivity
memory:
max_prompt_chars: 3575 # Hermes-style tight limit
archive_enabled: true
fts5_enabled: true