Personal 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:
text
{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:
json
{
"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:
json
"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,按配置语言输出):
text
✅ 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):
text
📚 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):
markdown
## 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:
json
"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 / 如无新概念,在汇报中说明。
text
✅ 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 completeRead the last few lines of the log file; check syllabus for ✅ mark2🧠 Agent Memory / 智能体记忆MEMORY.md or equivalent updated with current progressRead the subject's progress line in memory3📝 Knowledge Base / 知识库Each core concept has its own .md file with proper frontmatter, bilingual content, and wikilinksList 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:
text
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:
markdown
---
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#FieldTypeDescriptionversionstringConfig schema version ( "1.0")learningRootstringAbsolute path to the learning directory / 学习资料根目录knowledgeBase.toolstring"obsidian" / "plain" / "notion" / "none"``knowledgeBase.pathstringAbsolute path to vault/notes root / 知识库路径knowledgeBase.schemaPathstring(Optional) Path to custom knowledge base rules file / 自定义规则文件路径archiveDepthstring"light" (log + syllabus + memory) or "full" (includes knowledge base + index)languagestring"zh" / "en" / "zh-en" / "auto"``subjectsobjectKeyed by subject name, each containing currentDay, category, syllabusPath, logPath, status, startedAt
text
{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 userUser wants to skip ahead / 想跳过某天Update config to the new day, note in logUser restarted a subject from scratch / 重启学科Archive old log (rename with date suffix), create fresh filesMultiple subjects in one session / 同一会话多学科切换Process each archive command independentlyKnowledge base tool is none / 未配置知识库Silently skip Steps 5-6 in Scenario 3Config file is corrupted/missing / 配置文件损坏或缺失Re-run onboarding; old learning files are preservedSubject 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.