Skill: netanel-abergel/heleni-self-learning (version 1.0.0)

--- name: self-learning description: "Continuous self-improvement through systematic logging, pattern detection, and behavioral updates. Use when: the owner corrects you, a task fails, you discover a better approach, you notice a recurring pattern, or during weekly reflection sessions. Builds on .learnings/ files to drive durable behavioral change." --- # Self-Learning Skill ## Minimum Model Any model for logging. Use a medium model for writing behavioral rules to SOUL.md. --- ## The Learning Loop ``` Event happens → Log it immediately → Weekly: find patterns → Promote to config → Verify next week ``` --- ## Part 1 — Log Events (Do Immediately) ### When to Log | Trigger | File | Category | |---|---|---| | Owner corrects you | LEARNINGS.md | `correction` | | Task fails | ERRORS.md | — | | Better approach found | LEARNINGS.md | `best_practice` | | Owner asks for missing capability | FEATURE_REQUESTS.md | — | | Information was outdated | LEARNINGS.md | `knowledge_gap` | | Same mistake twice | LEARNINGS.md | `pattern` | | Owner praises something | LEARNINGS.md | `positive_signal` | | Acted outside role | LEARNINGS.md | `scope_error` | | Forgot past context | LEARNINGS.md | `memory_gap` | **Rule:** Log the event before replying to the owner. Don't delay. ### Log Format ```markdown ## [YYYY-MM-DD] | category | short title **Trigger:** What happened **Context:** What I was trying to do **What went wrong / what worked:** **Root cause:** **Correct behavior going forward:** **Applied to:** [SOUL.md / AGENTS.md / TOOLS.md / none yet] ``` ### Quick Log Script ```bash #!/bin/bash set -e LEARNINGS_DIR="$HOME/.openclaw/workspace/.learnings" mkdir -p "$LEARNINGS_DIR" LOG_FILE="$LEARNINGS_DIR/LEARNINGS.md" DATE=$(date +%Y-%m-%d) # First arg: category (default: correction) CATEGORY="${1:-correction}" # Second arg: short title TITLE="${2:-Short description}" # Append a new entry to the log cat >> "$LOG_FILE" << EOF ## [$DATE] | $CATEGORY | $TITLE **Trigger:** **Context:** **What went wrong:** **Root cause:** **Correct behavior:** **Applied to:** none yet EOF echo "Logged to $LOG_FILE" ``` Usage: ```bash ./quick-log.sh "correction" "Sent message without confirming with owner" ``` --- ## Part 2 — Weekly Reflection Run every 7 days. Find patterns across log entries. ### Pattern Detection Script ```bash #!/bin/bash set -e LEARNINGS_FILE="$HOME/.openclaw/workspace/.learnings/LEARNINGS.md" # Exit cleanly if no file yet if [ ! -f "$LEARNINGS_FILE" ]; then echo "No learnings file at $LEARNINGS_FILE" exit 0 fi echo "=== Corrections (most common) ===" grep "correction" "$LEARNINGS_FILE" \ | sed 's/.*| //' \ | sort \ | uniq -c \ | sort -rn \ | head -10 echo "" echo "=== All Categories ===" grep -oP '\| \K\w+(?= \|)' "$LEARNINGS_FILE" \ | sort \ | uniq -c \ | sort -rn ``` ### Weekly Reflection Template ```markdown # Weekly Reflection — YYYY-MM-DD ## Stats - Corrections logged: X - Errors logged: X - Best practices logged: X ## Top Patterns (appeared 2+ times) 1. 2. ## Priority Fixes Applied This Week - [ ] Updated SOUL.md: - [ ] Updated AGENTS.md: - [ ] Updated TOOLS.md: ## Positive Signals (do more of this) - ``` --- ## Part 3 — Promote Learnings to Config After identifying a pattern, update the right config file. ### Where to Promote | Learning Type | Promote To | |---|---| | Communication rule | SOUL.md → Communication section | | Behavior pattern | SOUL.md → Execution rules | | Workspace convention | AGENTS.md | | Tool-specific note | TOOLS.md | | Contact / credentials | MEMORY.md | | Recurring task improvement | HEARTBEAT.md | **Rule:** If the same mistake appears 2+ times → promote it. Once is a log; twice is a rule. ### Promote Script ```bash #!/bin/bash set -e SOUL_FILE="$HOME/.openclaw/workspace/SOUL.md" LEARNINGS_FILE="$HOME/.openclaw/workspace/.learnings/LEARNINGS.md" DATE=$(date +%Y-%m-%d) # Replace this placeholder with the actual rule text before running RULE="[Replace this with the actual rule text]" # Verify SOUL.md exists if [ ! -f "$SOUL_FILE" ]; then echo "ERROR: SOUL.md not found at $SOUL_FILE" exit 1 fi # Append the new learned rule to SOUL.md printf "\n## Learned Rule — %s\n- %s\n" "$DATE" "$RULE" >> "$SOUL_FILE" echo "Added rule to SOUL.md" # Mark the entry as applied in LEARNINGS.md (Linux and macOS compatible) if [ -f "$LEARNINGS_FILE" ]; then if sed --version 2>/dev/null | grep -q GNU; then # Linux (GNU sed) sed -i "s/Applied to: none yet/Applied to: SOUL.md ($DATE)/" "$LEARNINGS_FILE" else # macOS (BSD sed) sed -i '' "s/Applied to: none yet/Applied to: SOUL.md ($DATE)/" "$LEARNINGS_FILE" fi echo "Marked as applied in LEARNINGS.md" fi ``` --- ## Part 4 — Verify (Next Week) Check: did the behavior actually change? ```markdown ## Verification Check — YYYY-MM-DD | Learning | Applied? | Behavior Changed? | Notes | |---|---|---|---| | [Title] | ✅ | ✅ | Working | | [Title] | ✅ | ❌ | Needs a stronger rule | ``` If behavior didn't change → revise the rule with more explicit wording and re-apply. --- ## Monthly Combined Report ```bash #!/bin/bash LEARNINGS_DIR="$HOME/.openclaw/workspace/.learnings" echo "=== Monthly Learning Report ===" LEARNINGS_FILE="$LEARNINGS_DIR/LEARNINGS.md" ERRORS_FILE="$LEARNINGS_DIR/ERRORS.md" FEATURES_FILE="$LEARNINGS_DIR/FEATURE_REQUESTS.md" # Helper: count matching lines (returns 0 if file missing) count_matches() { local file="$1" local pattern="$2" grep -c "$pattern" "$file" 2>/dev/null || echo 0 } # Print counts per file if [ -f "$LEARNINGS_FILE" ]; then echo "Corrections: $(count_matches "$LEARNINGS_FILE" 'correction')" echo "Positive signals: $(count_matches "$LEARNINGS_FILE" 'positive_signal')" fi if [ -f "$ERRORS_FILE" ]; then echo "Error entries: $(wc -l < "$ERRORS_FILE")" fi if [ -f "$FEATURES_FILE" ]; then echo "Feature requests: $(count_matches "$FEATURES_FILE" '^##')" fi ``` --- ## Cost Tips - **Cheap:** Logging a single correction — very few tokens. - **Expensive:** Writing nuanced behavioral rules — use a medium model for this step. - **Batch:** Review all weekly logs at once during the monthly reflection, not one by one. - **Small model OK:** Pattern detection is mostly grep — no model needed for that step. --- ## Phase 2: Reflection (Merged from self-reflection skill) When the owner wants to improve how you operate, follow this structured process. Goal: turn vague dissatisfaction into specific, technical changes. ### Reflection Process **1. Understand the Problem (2–3 questions max)** Ask focused questions to pin down: - What specifically is wrong? (Get a concrete example) - What would "good" look like? (Expected vs actual behavior) - How important is this? (Tweak vs fundamental change) If the complaint is clear enough, skip to step 2. **2. Deep System Scan** Read ALL relevant parts before changing anything: - Core identity: SOUL.md, AGENTS.md, USER.md, MEMORY.md, TOOLS.md - All active skills (custom + bundled + workspace) - Configuration (model, tools, channels, heartbeat, cron jobs) Read broadly, change surgically. **3. Diagnose & Propose** Present findings: 1. Root cause — what causes the unwanted behavior 2. Proposed changes — specific files and edits 3. Side effects — anything else affected 4. Alternatives — if multiple approaches exist **4. Implement (after approval)** - Edit workspace files (persona, memory, etc.) - Edit/create/modify skills - Update config and cron jobs - Every change must be technically concrete. "I'll be more careful" is NOT a valid change. **5. Verify & Document** - Test the change if possible - Document what changed and why - Commit workspace changes **Key principles:** - Scan everything, change only what's needed - No fake fixes — if no technical change is possible, say so - Compound improvements — each reflection makes the system permanently better --- ## Part 4 — HOT.md (Rules You Keep Breaking) Inspired by [Jarvis](https://jarvis.ripper234.com/learn.html). ### What It Is `HOT.md` is a short file (≤20 lines) read **before every reply**. It contains only rules you've broken 2+ times. Not documentation — active behavioral correction. ### When to Create / Update - A rule appears in Part 1 logs **twice or more** → promote to HOT.md - HOT.md grows beyond 20 lines → you have a discipline problem, not a documentation problem. Fix the behavior, don't add more lines. - A rule stays unbroken for 30+ days → move it to SOUL.md permanently, remove from HOT.md ### Format ```markdown # HOT.md — Rules I Keep Breaking _Read before every reply. Max 20 lines. If it's not here, it doesn't count._ - [Rule 1 — short, imperative] (broken N times) - [Rule 2] (broken N times) ``` ### Promotion Flow ``` Log (Part 1) → Pattern 2x (Part 3 weekly) → HOT.md → 30 days clean → SOUL.md permanent ``` ### Key Rule **If it should apply to EVERY interaction → SOUL.md.** **If you keep forgetting it → HOT.md first, SOUL.md after 30 clean days.** This is also why `dynamic-temperature` and `proactive-pa` were merged into SOUL.md — rules for every interaction don't belong in skills.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)