Install
openclaw skills install personal-tutor🎓 Personal Tutor — Your private AI learning coach. 你的私人AI学习导师。 Formerly knowledge-digest, now rebranded and upgraded to v1.0.1. 原名 knowledge-digest,现已全面升级为 personal-tutor v1.0.1。 Full-cycle learning management: start a subject → daily lessons → quizzes → three-layer post-lesson archiving (learning records + memory + knowledge base). 全流程学习管理:开新课→每日上课→测验→三层课后归档(学习记录+记忆+知识库)。 NEW in v1.0.1: Mandatory Post-Lesson Self-Verification Protocol — agent cannot declare "lesson complete" until all three archive layers are verified. v1.0.1 新增:强制课后自查协议——三层归档全部验证通过,agent 才能说"下课"。 Trigger / 触发:"start learning [subject]" / "开始学[科目]" / "continue [subject]" / "继续[科目]" / "update learning records" / "更新学习记录"。 NOT for: casual Q&A, one-off lookups, non-learning conversations. 不适用于:随手问答、一次性查询、非学习类对话。
openclaw skills install personal-tutorPersonal Tutor turns every learning session into structured, searchable, long-term knowledge. It handles three scenarios / 三个场景:
Before executing any workflow, check for a config file at:
{workspace}/.personal-tutor-config.json
If it does not exist, run the onboarding flow / 如不存在则运行引导流程:
Ask the user these questions (one at a time, or all at once if they prefer):
Learning root directory / 学习资料根目录 — Where should subject folders be stored?
D:\Learning\ or ~/Documents/Learning/Knowledge base tool / 知识库工具 — What do you use for long-term notes?
obsidian — wikilinks ([[link]]), vault-basedplain — standard Markdown, folder-based / 纯文件夹notion — notes only (API integration not included)none — skip concept archiving entirely / 跳过概念归档Knowledge base path / 知识库路径 (if tool ≠ none) — Where is your vault/notes root?
D:\Obsidian\MyVault\ or ~/Notes/Archive depth / 归档深度 — How thorough should post-lesson archiving be?
light — update log + syllabus + memory only / 仅更新记录+大纲+记忆full — light + extract concepts to knowledge base + refresh index / 完整归档含概念入库+索引刷新Preferred language / 内容语言 — zh (Chinese), en (English), zh-en (bilingual / 中英双语), or auto (follow user's language)
Knowledge base schema / 知识库规则文件 (if tool = obsidian or plain) — Do you have a rules file that defines how concepts should be structured, named, and linked?
D:\Notes\WIKI-SCHEMA.md). This file will be read before every concept extraction and its rules take priority over built-in defaults.After onboarding, create:
{
"version": "1.0",
"learningRoot": "/path/to/learning/",
"knowledgeBase": {
"tool": "obsidian",
"path": "/path/to/vault/",
"schemaPath": "/path/to/WIKI-SCHEMA.md"
},
"archiveDepth": "full",
"language": "auto",
"subjects": {}
}
The subjects field will be populated as new subjects are added.
User says "start learning [subject name]" or "open a new subject: [name]"。 中文触发:"开启[学科名]学习"、"新建学科[学科名]"。
Read config / 读取配置 — Load .personal-tutor-config.json to get learningRoot and preferences.
Detect category structure / 检测分类结构 — Scan {learningRoot}/ for existing subdirectories:
大学专业知识/, 职业发展/, Academic/, Professional/), they are treated as categories / 分类。Present them to the user and ask which one the new subject belongs to. If none fit, offer to create a new category.{learningRoot}/ is flat (no subdirectories), the subject goes directly under {learningRoot}/.category.Create subject directory / 创建学科目录 — Under {learningRoot}/{category}/ (or {learningRoot}/ if no category), create a folder named after the subject.
Create syllabus file / 创建教学大纲 — {learningRoot}/{category}/{subject}/syllabus.md
⏳ Pending / 待学.Create learning log file / 创建学习记录 — {learningRoot}/{category}/{subject}/learning-log.md
Update config / 更新配置 — Add to subjects:
"subject-name": {
"currentDay": 1,
"category": "大学专业知识",
"syllabusPath": "{learningRoot}/{category}/{subject}/syllabus.md",
"logPath": "{learningRoot}/{category}/{subject}/learning-log.md",
"status": "active",
"startedAt": "YYYY-MM-DD"
}
Update memory / 更新记忆 — If the agent has a memory system (MEMORY.md or equivalent), record the new subject there.
Create knowledge base folder / 创建知识库文件夹 (if archiveDepth = full and knowledgeBase.tool ≠ none) — Create an empty subject folder under {knowledgeBase.path}/ if it doesn't exist.
Report / 汇报 (output in configured language,按配置语言输出):
✅ New subject "[Subject Name]" is ready. / 新学科"[学科名]"已开启。
Created / 已创建:
📋 Syllabus: {category}/{subject}/syllabus.md
📝 Learning log: {category}/{subject}/learning-log.md
⚙️ Config updated / 配置已更新
You're all set for Day 1. Say "start learning [subject]" when ready.
User says "start learning [subject]" or "continue [subject]"。 中文触发:"开始[学科名]学习"、"继续[学科名]学习"。
Read config / 读取配置 — Load current progress from .personal-tutor-config.json.
Read syllabus and log / 读取大纲与记录 — Load syllabus.md and learning-log.md to understand where we are.
Review previous lesson / 回顾上节课 — Briefly summarize the last session's core content (read from the learning log). Keep it under 3 bullet points.
Teach new content / 讲授新知 — Deliver the next topic(s) according to the syllabus. Follow these teaching principles:
Interactive check / 互动测验 (if applicable to the subject) — Ask 2-5 questions to verify understanding. Wait for user's answers, then give feedback and corrections.
Session notes / 课堂记录 — Mentally record: what was covered, what the user struggled with, what needs review.
Post-Lesson Self-Verification / 课后自查(强制执行) — Before telling the user the lesson is complete, run the Post-Lesson Self-Verification Protocol (see dedicated section below). If any layer is missing, fix it immediately. Do NOT say "lesson complete" / "学完了" / "done" until all layers pass.
End prompt / 课堂结束语 (only after self-verification passes, output in configured language):
📚 Today's lesson on [Subject] (Day [N]) is complete. / 今日课程完成。
Covered / 内容: [brief summary]
Mastery / 掌握: [assessment]
Issues / 问题: [any problems noted]
✅ Archive verified / 归档自检:
📁 Learning records: updated
🧠 Knowledge base: [N concepts created/updated, or "no changes"]
⚙️ Config: updated
Ready for Day [N+1]! / 准备好下一课了!
User says "update learning records" or "archive today's learning"。 中文触发:"更新学习记录"、"归档今天的学习"。
This is the most important scenario — it turns a conversation into permanent knowledge. 这是最关键的步骤——把对话变成永久知识。
Append to the learning log (path from config):
## Day [N] — YYYY-MM-DD
**Content / 内容:** [summary of what was covered]
**Mastery / 掌握程度:** [good / okay / needs review]
**Quiz results / 测验成绩:** [scores & wrong answers if applicable]
**Issues / 遇到问题:** [concepts the user struggled with]
**Next / 下一步:** Day [N+1] — [next topic from syllabus]
In syllabus.md, mark the current phase/day as ✅ Complete / 完成. If a milestone was reached, note it.
In .personal-tutor-config.json, update:
"subject-name": {
"currentDay": N+1,
...
}
If the agent has a memory system, update it with the subject's new progress.
Only if archiveDepth = full and knowledgeBase.tool ≠ none.
Follow the Knowledge Base Rules section below. If a custom schemaPath is configured, read that file first — its rules take priority over built-in defaults.
从当日课程提炼核心概念,严格按照下方「知识库规则」章节执行。如配置了自定义 schema 文件,先读取它——其规则覆盖内置默认。
If no new concepts were introduced: note this in the report / 如无新概念,在汇报中说明。
✅ Learning records updated. / 学习记录已更新。
📚 Subject: [Subject Name]
📍 Progress: Day [N] → Day [N+1]
🆕 New concepts: [list, or "none"]
📁 Archived to: {path}
🧠 Knowledge base: [updated / no changes]
⚙️ Config updated / 配置已更新
🚨 THIS IS A RED LINE. DO NOT CROSS IT. 这是红线。不可越界。
Every agent that teaches a lesson via this skill MUST self-verify all three layers below before telling the user "lesson complete" ("学完了"/"done"/etc). If any layer is missing, you are NOT done. There is no exception. There is no "I'll do it later." Fix the gap now.
每个使用此 skill 教课的 agent,在告诉用户"学完了"之前,必须自检以下三层。少一层就不是"学完了"。没有例外。没有"待会补"。现在修。
After every lesson (whether triggered via Scenario 2 or via the agent's own workflow), the agent MUST self-verify the following three layers before declaring the session complete:
| # | Layer / 层 | What to check / 检查内容 | How to verify / 验证方式 |
|---|---|---|---|
| 1 | 📁 Learning Records / 学习记录 | Learning log appended with new knowledge + quiz results; syllabus marked as complete | Read the last few lines of the log file; check syllabus for ✅ mark |
| 2 | 🧠 Agent Memory / 智能体记忆 | MEMORY.md or equivalent updated with current progress | Read the subject's progress line in memory |
| 3 | 📝 Knowledge Base / 知识库 | Each core concept has its own .md file with proper frontmatter, bilingual content, and wikilinks | List files in the subject's knowledge base folder; verify new files exist and are non-empty |
Before saying anything that means "done", mentally run this checklist:
1️⃣ D盘/Learning records → ✅ ?
2️⃣ Agent memory → ✅ ?
3️⃣ Knowledge base → ✅ ?
→ All three checked? NOW you can say "lesson complete."
Only skip knowledge base archiving if:
archiveDepth is set to light (not full), ORknowledgeBase.tool is set to none, ORIn all other cases, Layer 3 is mandatory.
If any verification fails:
If the user catches you skipping a layer (they will notice):
This protocol is designed for environments where different agents may handle different sessions. Each agent is independently responsible for completing all three layers. Do not assume a previous agent already did it — verify.
⚠️ If a custom
schemaPathis configured, read that file before every concept extraction — its rules take priority over the defaults below. 如配置了自定义 schema 文件,每次提取概念前先读取它——其规则优先于以下默认。
When extracting concepts from a lesson, follow these rules strictly: 从课程提炼概念时,严格遵循以下规则:
.md file. Never bundle multiple concepts into one file.{NN}-{ConceptName}.md (e.g., 01-Derivative.md, 01-导数.md){knowledgeBase.path}/.Every concept file must include:
---
aliases:
- ConceptName
- 别名1
- 别名2
---
# ConceptName / 概念名
> One-line summary. 一句话概述。
## Core Content / 核心内容
...
## Related / 关联
- [[path/to/related-concept|Related Concept]] — relationship description
aliases — list synonyms and translations for searchabilitylanguage settinglanguage = zh-en, output bilingual (Chinese + English)Obsidian (wikilink) mode:
[[full/path/to/file|Display Name]] format — full path from vault root, pipe (|) without spaces[[01-Derivative]], not [[Derivative]])[[OtherFolder/SomeFile|Display]]Plain Markdown mode:
[Display Name](../folder/file.md)Bidirectional linking / 双向链接:
💡 方法借鉴 (method reference), 💡 思维模型类比 (mental model analogy)Before creating any new file, check for existing content:
aliases in frontmatter)⚠️ 待确认 and flag to the user / 发现矛盾则标记待确认If the knowledge base has an index file (e.g., 00_概念索引.md) or subject outlines (e.g., XX-XXX总纲.md):
After creating or modifying knowledge base files:
.personal-tutor-config.json| Field | Type | Description |
|---|---|---|
version | string | Config schema version ("1.0") |
learningRoot | string | Absolute path to the learning directory / 学习资料根目录 |
knowledgeBase.tool | string | "obsidian" / "plain" / "notion" / "none" |
knowledgeBase.path | string | Absolute path to vault/notes root / 知识库路径 |
knowledgeBase.schemaPath | string | (Optional) Path to custom knowledge base rules file / 自定义规则文件路径 |
archiveDepth | string | "light" (log + syllabus + memory) or "full" (includes knowledge base + index) |
language | string | "zh" / "en" / "zh-en" / "auto" |
subjects | object | Keyed by subject name, each containing currentDay, category, syllabusPath, logPath, status, startedAt |
{learningRoot}/
├── {Category/分类}/
│ ├── {Subject Name/学科名}/
│ │ ├── syllabus.md
│ │ └── learning-log.md
│ └── {Another Subject}/
│ ├── syllabus.md
│ └── learning-log.md
├── {Another Category}/
│ └── ...
└── ...
{knowledgeBase.path}/
├── {Subject Name}/
│ ├── 01-concept.md
│ ├── 02-concept.md
│ └── ...
└── (existing vault structure preserved / 现有结构保留)
| Situation / 情况 | Handling / 处理方式 |
|---|---|
| User forgot which day they're on / 忘记学到哪了 | Read config → currentDay, confirm with user |
| User wants to skip ahead / 想跳过某天 | Update config to the new day, note in log |
| User restarted a subject from scratch / 重启学科 | Archive old log (rename with date suffix), create fresh files |
| Multiple subjects in one session / 同一会话多学科切换 | Process each archive command independently |
Knowledge base tool is none / 未配置知识库 | Silently skip Steps 5-6 in Scenario 3 |
| Config file is corrupted/missing / 配置文件损坏或缺失 | Re-run onboarding; old learning files are preserved |
| Subject name has special characters / 学科名含特殊字符 | Sanitize for filesystem: replace <>:"/|?* with - |
| Agent skipped knowledge base update / Agent 漏了知识库归档 | v1.0.1 新增。This is the most common failure mode. Recovery: (1) Check if the subject folder exists at {knowledgeBase.path}; (2) Read the latest learning log to identify which concepts were taught; (3) Create/update .md files for each missing concept; (4) Run Post-Lesson Self-Verification Protocol; (5) This failure suggests the agent DID read the skill but skipped verification — after recovery, the agent should update its local rules (SOUL.md, TOOLS.md, etc.) to prevent recurrence. |