Hermes Learning Loop

Workflows

Self-improving learning loop inspired by Hermes Agent. Automatically extracts successful workflows, creates skills, and persists knowledge across sessions.

Install

openclaw skills install hermes-learning-loop

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

  • After completing complex multi-step tasks
  • When you discover a workflow worth repeating
  • Automatically via heartbeat (periodic nudge)
  • When user says "remember this" or "save this workflow"

Features

  • Periodic Nudge — Auto-reflect every N tasks (default: 5)
  • Skill Extraction — Convert successful workflows to reusable skills
  • 4-Layer Memory — Prompt memory + Session search + Skills + User modeling
  • Curated Memory — Agent decides what's worth keeping (not logging everything)
  • Progressive Disclosure — Only load skill summaries by default, full content on-demand
  • FTS5 Session Search — SQLite-powered historical context retrieval

Quick Start

Install

clawhub install hermes-learning-loop

Manual Trigger

# After completing a task
node learning-loop.js extract --session=<session_id>

# 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 Nudge

**Frequency:** 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/<category>/<name>/   │
│     - Follow agentskills.io specification               │
└─────────────────────────────────────────────────────────┘

4-Layer Memory System

LayerPurposeLocationLoad Timing
Prompt MemoryAlways-on contextMEMORY.md, USER.mdEvery session start
SkillsProcedural memory (how-to)~/.openclaw/skills/On-demand (summary → full)
Session ArchiveEpisodic memory (what happened)SQLite + FTS5Deliberate retrieval
User ModelBehavioral patternsOptional (Honcho-like)Continuous passive

Skill Triggers

Automatically create skill when:

  • ✅ 5+ tool calls in sequence
  • ✅ Recovered from error successfully
  • ✅ User corrected → fixed approach
  • ✅ Non-obvious workflow that worked
  • ✅ Repeated pattern detected (3+ times)

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 #5

Looking 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

VariableDescriptionDefault
LEARNING_NUDGE_INTERVALTasks between nudges5
LEARNING_MIN_TOOL_CALLSMin tool calls for skill5
LEARNING_AUTO_CREATEAuto-create skills (vs approve)false
LEARNING_SKILLS_DIRSkills directory~/.openclaw/skills/
LEARNING_MEMORY_DIRMemory 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
  1. Apply deployment manifest

    kubectl apply -f deployment.yaml
    
  2. Wait for rollout

    kubectl rollout status deployment/app
    
  3. Health check

    kubectl get pods -l app=myapp
    
  4. Verify service

    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

```markdown
## HEARTBEAT.md Update

### Learning 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 audit

# Output includes:
# - Skills created this week
# - Memories curated
# - Nudge effectiveness

Comparison: Hermes vs This Implementation

FeatureHermes AgentThis 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

  • Curated not dumped — Agent decides what's worth keeping
  • Token-efficient — Progressive disclosure keeps context small
  • Portable skills — Follows agentskills.io standard
  • Self-improving — Gets better the more you use it
  • OpenClaw native — Works with existing memory system

Related Skills

  • claude-memory-optimizer: Memory structure and migration
  • task-pua: Task persistence and quality
  • memory-pua: Memory health maintenance

References

License

MIT-0


Version 1.0.0: Initial implementation inspired by Hermes Agent learning loop