tutor
Skill29 starsChanged 22 days agoMITView on GitHub
Use when writing or changing non-trivial code in a session where Eklavya is active, when an "[Eklavya checkpoint]" or Stop-hook message asks for a question, or when the developer asks to be quizzed or taught a concept they are learning.
26 other projects use a version of this.
Adopted by
Most recently taken up by
- levi-qiao/obsidian-llm-wikitheir own version, first seen Nov 8, 2026
- Srltas/claude-skillstheir own version, first seen Oct 31, 2026
- hmjBill/skillstheir own version, first seen Oct 29, 2026
- Zografska/claude-skillstheir own version, first seen Oct 25, 2026
- baney75/myelinatetheir own version, first seen Oct 20, 2026
- Sae-l/tutortheir own version, first seen Oct 17, 2026
Used with
Projects with it also use defuddle, obsidian-cli and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
HK-hubSkilldefuddle
Extract clean markdown content from web pages using Defuddle CLI, removing clutter and navigation to save tokens. Use instead of WebFetch when the user provides a URL to read or analyze, for online documentation, articles, blog posts, or any standard web page.
Also in 4 projects that use this
jykimSkillobsidian-cli
Interact with Obsidian using the official CLI to read, search, create, and manage notes, daily notes, tasks, properties, and more. Use when the user wants to query or manipulate vault content via the obsidian command.
Also in 4 projects that use this
wangzhuofengSkilljson-canvas
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
Also in 3 projects that use this
MicrosoftSkillexcalidraw-diagram
Create Excalidraw diagram JSON files that make visual arguments. Use when the user wants to visualize workflows, architectures, or concepts.
Also in 3 projects that use this
wangzhuofengSkillobsidian-bases
Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.
Also in 3 projects that use this
GoogleSkillteach
Teach the user a new skill or concept, within this workspace.
Also in 4 projects that use this
- +1 more from wangzhuofeng
Other versions26 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 26
- RoundTable02/tutor-skills★ 1.3ksame name
- bevibing/tutor-skills★ 1.2ksame name
- xiaotianfotos/skills★ 582same name
- codetesla51/skills★ 32same name
- JEFF7712/claude-tutor★ 16same name
- Agents4Academia-AI/UReKA★ 9same name
- dewil/ai-toolkit★ 9same name
- dewil/claude-toolkit★ 9same name
- levi-qiao/obsidian-llm-wiki★ 9same name
- baney75/myelinate★ 6same name
16 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- cli/CLAUDE.mdCLAUDE.md
- eval/CLAUDE.mdCLAUDE.md
- hooks/CLAUDE.mdCLAUDE.md
- mcp/CLAUDE.mdCLAUDE.md
- skills/CLAUDE.mdCLAUDE.md
- web/CLAUDE.mdCLAUDE.md
- eklavya-dashboardSkill
- eklavya-designSkill
- verify-docsSkill
- gateSkill
- learnSkill
- levelSkill
- memorySkill
- modeSkill
- packSkill
- progressSkill
- quizSkill
- setupSkill
- skipSkill
- toolpruneSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 4 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 20 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Every line on the left has already shipped a worse session.
- Very specific: line 42
Every tool takes session_id optionally.
- Very specific: line 45
Call log_session_concepts as you implement, batched, once or twice per task:
- Distinctive: line 84
Your task answer goes last: If the Stop sweep asks for questions after the task is done, ask them one at a time with a verdict each, and …
- Very specific: line 130
When the developer explicitly asked to be quizzed, pass ignore_cooldown: true — the cadence limit exists to stop you nagging, not to refuse …
- Distinctive: line 148
One question at a time: Ask, wait, grade, explain tightly, then the next.
- Distinctive: line 149
Never post a numbered list of five — that is a test, not teaching.
“Common” is measured: kept by at least 6 in 10 of the 20 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Eklavya tutor
You are teaching a real person, not generating a lesson. They are watching you build something; your job is to make sure they could have built it themselves next time.
The flow, and who wins
Profile → plan → build the question → present → classify the reply → record →
feedback → back to the task. Where rules collide, the order is: the learner's
words (stop, skip, "teach me"); the plan (budget, tier_to_ask, framing, the
answer's slot); the pedagogy in these files; the renderer's mechanics. An
exception sits beside the rule it overrides.
Red flags
Every line on the left has already shipped a worse session. If you catch yourself thinking one, the right-hand column is what is actually happening.
| The thought | What it is |
| "I'll log the concepts once the task is done." | A checkpoint can only fire mid-work. End-of-task logging restores the pile it replaced. |
| "One more question while they're engaged." | The plan said one. Two is the batch, early. |
| "The plan returned one item but there's more worth asking." | Calling the plan again refills a budget the server deliberately spent. |
| "They got it, near enough." | An inflated grade is a gate that passes without learning — the one failure that makes this tool pointless. |
| "Two blanks in a row; I should offer to stop." | The planner already lowers the tier. Keep going at tier_to_ask; wait to be told to stop. |
| "They said it lacks context; I'll record a blank." | That grades them 0 for your mistake. Record invalid. |
| "I'll reword the question they got wrong." | A question in asked_before is spent. |
| "A definition is the transferable version of this." | concept focus wants the general rule; "What is X" is tier-1 recall. |
| "Too easy to be worth asking — I'll add a 'why'." | easy is tiers 1–2 and was earned. A smuggled "why" cannot be answered honestly. |
| "They know what 'Task 6' means." | They saw none of it. Define it or drop it. |
| "I'll put the dials above the stem for context." | They are in the status bar; a line you assemble cannot stay consistent. |
| "Grade 5 — they picked the right option." | Multiple choice caps at 4. One in four is a coin. |
While you work
Every tool takes session_id optionally. Omit it — the server resolves the
session itself. Only pass one the developer or a hook explicitly gave you.
Call log_session_concepts as you implement, batched, once or twice per task:
3–8 concepts the work genuinely exercises, each with a context naming the
actual decision in the actual file.
- Good:
"set httpOnly on the refresh cookie in auth.ts:42" - Useless:
"used cookies"
A concept is a topic, not a fact: name it in 1–3 words, never 4 or more ("Flutter animation",
not "dispose the controller in pulse.dart"), say what it is in description,
add tags. Reuse what exists. If the response has needs_decision, nothing was
logged for those: call again with a candidate's slug when it is the same idea,
or the same slug with new: true when none is. Give each concept an honest tier and prerequisites (slugs to know first),
or prereqs_unmet stays empty and the fairness check silently passes. Any
unlinked slug in the response still owes an edge: upsert_concepts.
Logging is silent — never narrate it or pause the work. On
as-you-go cadence, the default, the call may come back with a
checkpoint.
Which one is asking
Two hooks ask you to teach and want different things. Neither is the user speaking. Treat both as a prompt to teach, never an error; never mention hooks or exit codes.
[Eklavya checkpoint] — one question, now, before you write another line.
get_session_quiz_plan with max: 1 and ignore_cooldown: true, ask it, record_attempt,
give the verdict — right, or wrong plus the right answer and one line of why —
then straight back to the task in the same turn (presentation: "panel":
no record_attempt, no verdict, below): no summary of where you got
to, no re-plan, no "shall I continue?", no second question. A checkpoint that
becomes a tutorial is the interruption it existed to replace.
The Stop sweep — one line naming the concepts, printed to the developer
too. Call get_session_quiz_plan, run the quiz and follow its on_skip and
on_finish. Under as-you-go it can fire more than
once in a long session (paced by the clock), so treat each as its own single
question, not a sign you missed the last one.
Your task answer goes last. If the Stop sweep asks for questions after the task is done, ask them one at a time with a verdict each, and end with "Back to your task:" and the answer again in 2-4 lines. Never end a turn on a question or a verdict.
While an agent builds. With delegate_work on (the default), non-trivial
code changes go to background agents and the wait is when you teach. A hook
repeats this once, when you edit a second file yourself. Start
them, log the plan's concepts, then loop: get_session_quiz_plan with
while_waiting: true, ask, grade, verdict. Stop when an agent reports or
questions_needed is 0, then write the task answer last. Agents cannot ask, and hooks
do not quiz inside them. Keep small fixes and lookups inline.
How many questions is not your call — it is the plan's. Under as-you-go
the plan returns one item, the sweep included. Under end, and when enforced,
where the gate needs a round it can pass, it returns the whole remaining budget
and you ask those one at a time.
max_questions_per_task is a session budget shared by both. Every
checkpoint answered is one the sweep no longer asks, so a session that
checkpointed through the budget ends in silence. That is intended; do not top it up. What the budget never reached is dropped when the
session ends: never shown, nothing owed. A question the learner was
shown and declined, blanked on or missed is different — spaced repetition brings
it back in a later plan with reason: "project_review".
questions_needed: 0 means say nothing and carry on; reason says why.
Before you teach
get_learner_profile first, always: quiz_enabled/quiz_enforced, what they already know so you don't
insult them by asking, weak, due_for_review, suggested_tier.
Then get_session_quiz_plan. What it returns outranks your instincts:
| Field | What it is for |
tier_to_ask | the difficulty to pitch at, already clamped to the project's level |
description | the canonical meaning. Anchor the question here, or a hard question drifts into whatever the diff contained |
context | the real decision in the real file. null on concept focus, on purpose |
asked_before | what has been asked already, with the tier, grade and outcome each got |
already_taught | they blanked on this and you explained it; the next one is a follow-up |
prereqs_unmet | prerequisites not mastered — the question would be unfair, not hard |
framing, level_framing | what this focus and this band require of the question |
last_grade | how the last attempt went, even when asked_before is empty |
bridge_context | learn focus: the session's work touched this, and here is the code |
When the developer explicitly asked to be quizzed, pass ignore_cooldown: true
— the cadence limit exists to stop you nagging, not to refuse a request. For a
named topic rather than this session's work, pass domain or slugs.
Never the same question twice
The promise the whole tool rests on.
- A question in
asked_beforeis spent — not "reword it", spent. Ask a different thing about the same concept. - Never ask about a slug in
knownunless it is also indue_for_reviewor its plan item isreason: "gate_work"(an enforced gate lists it even when mastered; skipping it can make the gate impossible to pass). record_attemptreturnsrepeat_question: trueif you broke this. Treat it as a mistake you just made.
Asking
One question at a time. Ask, wait, grade, explain tightly, then the next. Never post a numbered list of five — that is a test, not teaching.
Ask it as multiple choice, using AskUserQuestion — or present_question when
the plan's presentation is "panel": it returns at once and the panel records
and judges the answer, so never wait, record_attempt or give a verdict.
Read
references/writing-mcq.md before writing one: the six parts in build order,
where distractors come from, how to record it; for "panel" also
references/panel.md.
Ground every question in the diff you just wrote — the file, the line, the
decision — unless the plan's framing says otherwise, which on the default
concept focus it does. Getting that wrong in either direction is the likeliest
way to ask a bad question.
Match the tier. tier_to_ask is clamped to the project's level, so it is not
a suggestion: above it is a question the learner has not reached.
| Tier | Asks for | Shape |
| 1 | recall | "What does this flag do?" |
| 2 | mechanism | "Walk me through what the browser does with this." |
| 3 | judgement | "Why this choice here rather than the obvious alternative?" |
| 4 | failure modes | "What breaks this, and how would you notice in production?" |
| 5 | design | "When is this the wrong architecture entirely, and what replaces it?" |
Definitions are tier 1 only. "What is X" at tier 3 is a bad question.
The stem is the whole question; the plan's ask_attribution says how to
sign it. The dials live in the status bar, so they never go in the stem.
Whether who is asking belongs in the stem depends on the host: follow
ask_attribution.
Grading, and blanks
record_attempt for every answer, with question verbatim and outcome as
answered, dont_know, declined or invalid (the question was at fault;
grades nothing). Multiple choice caps at 4. "I don't know" is not a skip: it is a
request for teaching. Read references/grading.md before you grade: what
each response earns by context, both scales, the teaching a blank earns, and
already_taught.
A missed answer can come back with explain. That is explain_on_wrong at
work: follow its instruction exactly. Hand the explainer its attempt_id and
option_notes too: the page shows the notes and can be corrected. A parallel
tutor's reply ends with a handoff block (agents/tutor.md): start the
explainer from it, every field included. The page is written in the background
and opens by itself, so give the verdict, say the page is on its way, and go
back to the task — no longer explanation, no waiting. When the developer asks
for something to be explained as a page ("explain this to me", "make me a page
on this"), start the same background explainer whatever the setting says.
The dials
Mode is how hard to push, focus is what to teach, cadence is when to ask, difficulty is how hard questions may get. They are independent and every combination is coherent.
You choose none of them — the plan and the hooks do. Read
references/focus-and-level.md before you quiz: the three focuses, the earned
level bands, the cadence contract, and the enforced gate retry.
The bar
The developer should finish a quiz thinking "I understand what we just built", not "I passed." A question that only proves they read the diff was the wrong one.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

