Install
openclaw skills install learning-loop-skillAutonomous structured learning for mastering complex topics through cron-based 5-session feedback loops. Use when user wants to deeply learn a subject (e.g.,...
openclaw skills install learning-loop-skillMaster complex topics through autonomous cron-based learning using the GEARS feedback loop:
| Phase | Session | What Happens |
|---|---|---|
| Gather | S1 | Research concepts, create test questions |
| Execute | S2 | Take the test blind, document failures |
| Analyze | S3 | Diagnose why you failed, research solutions |
| Retry | S4 | Apply fixes, measure improvement |
| Synthesize | S5 | Validate mastery, adjust schedule |
The agent sets up a learning pipeline during an interactive session; isolated cron agents execute the 5 GEARS sessions autonomously using a pre-generated playbook.
When the user says "learn X", the agent:
playbook.md — complete instructions for ALL sessionsstate.json — progress tracker and baton between sessionsCritical design: Isolated cron agents have NO skill context. They read ONLY playbook.md + state.json. The playbook must be completely self-contained.
Extract topic from user input and slugify:
machine-learningdatabase-designdockerSlugify: lowercase, hyphens for spaces, strip special chars.
Use available search tools (web search, Tavily, SerpAPI — try what's available, fall back gracefully) to research the topic. Break into 15-20 subtopics ordered by prerequisites.
Write curriculum to curriculum.md with:
Generate playbook.md from the template in references/playbook-template.md. This is the most important file — customize it for the specific topic but keep the session execution instructions generic and self-contained.
Target: under 200 lines so isolated agents don't hit token limits.
Create the folder structure and initial state.json by running the pipeline creation script. The script is located in this skill's scripts/ directory:
bash <skill-dir>/scripts/create_pipeline.sh <topic-slug> "<Topic Display Name>"
Where <skill-dir> is the directory containing this SKILL.md file. The script respects the OPENCLAW_WORKSPACE env var (defaults to ~/.openclaw/workspace). See references/state-schema.md for all state fields.
Display to user:
Learning Pipeline: [Topic]
Curriculum: [N] subtopics starting with "[first subtopic]"
Sessions per day: S1 (research) -> S2 (test) -> S3 (analyze gaps) -> S4 (retry) -> S5 (synthesize)
Timing:
S1: +30 min from now (research + create test questions)
S2: +4 hours (blind test from memory)
S3: +8 hours (diagnose failures + research gaps)
S4: +12 hours (retry with new understanding)
S5: created by S4 on completion (synthesize + decide next)
Notifications: You'll get updates at S2 (initial score), S4 (retry score), and S5 (summary + next steps).
Confirm to start, or adjust timing/notification preferences.
After user confirms, read ~/.openclaw/cron/jobs.json, append 4 cron jobs (S1-S4) to the jobs array, and write back. The file format is { "version": 1, "jobs": [...] } — always preserve existing jobs. S5 is NOT pre-created — S4 creates it when it completes.
Each cron job entry uses this format:
{
"id": "learning-[topic]-s[N]-day[DD]",
"agentId": "main",
"name": "Learning [Topic] S[N] Day [DD]",
"enabled": true,
"createdAtMs": <timestamp>,
"updatedAtMs": <timestamp>,
"schedule": {
"kind": "once",
"atMs": <calculated_timestamp>
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "You are a learning agent. Read this file for complete instructions: memory/learning/[topic-slug]/playbook.md\n\nThen read state.json in the same folder for current session and subtopic.\n\nYour session: S[N]\n\nExecute the session per playbook instructions. Write outputs, update state.json, handle notifications and follow-up crons as specified."
},
"delivery": {
"mode": "announce",
"channel": "telegram",
"to": "<user-configured>"
}
}
Important: Calculate atMs timestamps based on user-confirmed timing. Default spacing: S1 +30min, S2 +4h, S3 +8h, S4 +12h from setup time.
If the user has notification preferences configured (Telegram, etc.), set delivery accordingly. Otherwise omit delivery and the playbook instructs agents to write notifications to a file.
| GEARS | Session | What | Key Output |
|---|---|---|---|
| Gather | S1 | Research subtopic, create 10-15 test questions WITH answers | s1-research.md |
| Execute | S2 | Answer questions blind (no peeking), score objectively | s2-test.md, s2-failures.md |
| Analyze | S3 | Diagnose each failure, research gaps specifically | s3-analysis.md |
| Retry | S4 | Re-answer using new understanding, compare scores | s4-retry.md + creates S5 cron |
| Synthesize | S5 | Synthesize, update validated knowledge, decide next subtopic | s5-synthesis.md |
For full session details, see references/methodology.md.
For the playbook template that gets customized per topic, see references/playbook-template.md.
For the state.json schema, see references/state-schema.md.
memory/learning/[topic-slug]/
├── playbook.md <- Self-contained instructions for cron agents
├── state.json <- Dynamic progress tracker (baton between sessions)
├── curriculum.md <- Topic breakdown with subtopics
├── sessions/
│ └── day-NN/
│ ├── s1-research.md
│ ├── s2-test.md
│ ├── s2-failures.md
│ ├── s3-analysis.md
│ ├── s4-retry.md
│ └── s5-synthesis.md
└── knowledge/
└── validated.md <- Accumulated mastered knowledge
| S4 Score | Action |
|---|---|
| >= 85% | Mark subtopic mastered, advance to next in curriculum |
| 50-84% | Retry same subtopic tomorrow, focus on remaining gaps |
| < 50% | Flag for user intervention — topic may need prerequisite work |
When S5 detects currentSubtopicIndex >= curriculum.length - 2:
curriculum-preview.mdscripts/create_pipeline.sh <topic-slug> — Create folder structure + initial state.jsonscripts/check_progress.sh [topic-slug] — Show status of active learning topicsPause: User says "pause learning [topic]" → set status to "paused" in state.json, disable pending cron jobs for that topic in jobs.json.
Resume: User says "resume learning [topic]" → set status to "in_progress", read currentSession from state, create cron jobs from the current session onward.
Intervention (score < 50%): When S5 sets status to "needs_intervention":
status back to "in_progress" and currentSession to "S1" to retry