Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

education

A Claude Code plugin that coaches you through learning a subject, across multiple sessions, instead of lecturing at you. It runs a Knowledge → Skills → Wisdom progression grounded in your real goal, and keeps persistent per-topic learning state so each session builds on the last.

Invoke /education:teach with an action for coached, multi-session learning, for example /education:teach topic rust-ownership, /education:teach codebase auth-flow, or /education:teach primer color-grading. For a one-shot plain-language explanation, invoke /education:explain, or just say "I don't get it" and let it auto-invoke. After Claude finishes a change, invoke /education:quiz-me to be quizzed on what was done.

What it does

teach is the multi-session coach; explain and eli5 are its one-shot siblings; quiz-me verifies you absorbed a completed change.

Two one-shot lanes, split by medium. explain is the adaptive prose lane: it starts plain and climbs to high-school then peer level on request. eli5 is the fixed visual lane: one altitude (assumes zero prior knowledge), one medium (a diagram-led HTML artifact). Ask for a simpler wording and you want explain; ask for the picture version and you want eli5.

  • /education:teach topic <subject>. Learn a general subject from external high-trust sources (books, courses, docs, communities).
  • /education:teach codebase <topic>. Learn a concept grounded in the repository you launch it from. It discovers the repo's own docs, conventions, and source at teach-time and teaches from what it finds. Nothing about the project is assumed.
  • /education:teach primer <domain>. A single-session vocabulary primer for an unfamiliar domain, so you can prompt or direct work in it precisely. No workspace.
  • /education:explain [thing]. A one-shot, plain-language explainer. It drops any concept, code, error, architecture, or the previous assistant response to genuinely plain words (concrete analogy, zero jargon), then layers altitude up only on request (high-school, then peer level). An empty argument explains the previous assistant response, so "I don't get it" needs no topic. It closes by offering /education:teach when you want ongoing coaching rather than a single explanation.
  • /education:eli5 [topic]. A picture explainer. It answers the question as a diagram-led HTML artifact written for someone who knows nothing about the topic: one idea per diagram, minimal text, real identifiers kept but demoted to parentheses and monospace. It covers general knowledge and repository topics alike, and grounds itself first (reads the module, finds the decision record, reads the incident writeup) rather than explaining from memory. It wraps the community eli5 skill when that plugin is installed and produces the same explainer itself when it is not.
  • /education:quiz-me. A post-work comprehension check. After a change is complete, it generates a self-contained HTML report of what was done (context, intuition, decisions) with a quiz at the bottom you answer, verifying that you absorbed the work, not just that the artifact is correct. It is non-gating by default; the quiz_policy setting tunes how often a quiz is offered. Its recall <query> action answers "what did we do on <ticket>" from a retained report library first, git and tracker history second.
  • Supporting teach actions: mission, glossary, resources, explain, exercise, assess, resume, status.

The coach asks questions before giving answers, teaches just beyond your current level (the zone of proximal development), and grounds every claim in a source fetched or a file read that session rather than from memory.

How it works

Each topic gets a workspace. A mission (why you're learning this), a glossary, curated resources, and per-concept slices (a lesson, a durable reference cheat-sheet, and optional practice). Learning state is treated as your documents, not machine internals: topic-mode workspaces default to a Claude Learning/ home in your OS Documents folder (when one is eligible), while codebase-mode workspaces stay under ${CLAUDE_PLUGIN_DATA} by default. Their lessons can embed snippets from your repo, and Documents folders are often cloud-synced. Either way the state survives plugin updates, stays out of your project's tree, and lets you resume a topic weeks later; the root is configurable (see Configuration). Durable references are re-verified lazily on revisit (age × domain-velocity) so stale facts get refreshed before they're taught. See the skill body for the full pedagogy.

Requirements

  • Bash + coreutils (sha256sum/shasum, realpath, tr, sed) for the skill's inline mechanics. On native Windows, install Git for Windows so they run under Git Bash, which bundles all of them.
  • For codebase mode, launch it from the repository you want to learn. The plugin reads that repo's own docs and source.
  • topic mode fetches documentation URLs to ground explanations in primary sources; if your setup restricts WebFetch, allow it or seed RESOURCES.md manually.

Install

/plugin marketplace add melodic-software/claude-code-plugins
/plugin install education@<marketplace>

Optional: the upstream eli5 plugin

/education:eli5 works on its own. When the community eli5 plugin is installed it delegates to that skill instead of producing the explainer itself, so the two stay in step rather than drifting apart. To add it:

claude plugin marketplace add anthropics/claude-plugins-community --scope project
claude plugin install eli5@claude-community --scope project

Those flags are what make it repository-wide: a bare marketplace add writes user settings instead. Drop both flags for a machine-wide install, bearing in mind that user scope covers only your own local sessions and remote sessions never load it. Run /reload-plugins or restart afterwards. Installing it manually also satisfies a dependency constraint, so nothing here requires a declared dependency.

This plugin deliberately does not declare eli5@claude-community in dependencies: a hard dependency would install a second marketplace's plugin for everyone who wants teach or quiz-me, and an unresolved one disables the whole plugin. A downstream marketplace that republishes this plugin and does want the hard dependency adds claude-community to its own root marketplace.json under allowCrossMarketplaceDependenciesOn, which is a publisher-side allowlist rather than a consumer setting.

Configuration

All settings are optional, with defaults that preserve zero-config behavior:

Setting Type Default What it does
quiz_policy string on-request When quiz-me offers a quiz: off (never), on-request (only when asked), always (after each completed change), above-threshold (when the change is large). Offer cadence only, a report is never generated without your confirmation. Unknown values act as on-request.
report_library_dir directory (unset) Where quiz-me stores reports. Unset uses the plugin's own ${CLAUDE_PLUGIN_DATA}; set it to a corpus checkout to redirect the library root there. Reports never land in the repo you are working in.
workspace_root directory (unset) Where teach roots learning workspaces. Unset resolves a ladder: a project declaration, this setting, a one-time ask, the OS Documents Claude Learning/ home (topic mode only), then ${CLAUDE_PLUGIN_DATA}. Codebase-mode workspaces stay under plugin data unless explicitly rooted elsewhere. Values inside the repo you are working in are refused.

Configure them through the /plugin dialog, or headless at install time with claude plugin install education@<marketplace> --config quiz_policy=always. A literal non-home report_library_dir may be rejected by the hardcoded-path guardrails until the #798 path-indirection work lands.

Run /education:setup to validate the effective quiz_policy, report-library root, and teach workspace root without reading settings files.

Options reference

Generated from this plugin's .claude-plugin/plugin.json. Every option Claude Code will prompt for when the plugin is enabled, with the environment variable each hook reads it from.

Option Type Default Environment variable Description
quiz_policy string "on-request" CLAUDE_PLUGIN_OPTION_QUIZ_POLICY When quiz-me offers a post-work comprehension quiz. One of: off (never offers), on-request (only when asked), always (after each completed change), above-threshold (when the change is large). Governs offer cadence only. A report is never generated without your confirmation. Unknown values are treated as on-request.
report_library_dir directory (none) CLAUDE_PLUGIN_OPTION_REPORT_LIBRARY_DIR Where quiz-me stores generated reports and quizzes. Unset uses the plugin's own persistent data directory; set it to a corpus checkout to redirect the library root there. Artifacts never land in the consuming repo's tree.
workspace_root directory (none) CLAUDE_PLUGIN_OPTION_WORKSPACE_ROOT Where /education:teach stores learning workspaces. Unset resolves a ladder: project declaration, this setting, a one-time ask, the OS Documents folder's 'Claude Learning' home (topic mode only), then the plugin's persistent data directory. Codebase-mode workspaces stay under plugin data unless a project declaration or this setting names a root, since their lessons can embed private-repo snippets and Documents roots are often cloud-synced. Grammar: absolute, ~-home-relative, or ${NAME} / %NAME% environment references; a relative value resolves against the project; a value inside the consuming repo is refused. Declare an in-repo root in the project's own CLAUDE.md or rules instead.

How to set these

Three supported routes, in the order most people want them:

  1. Interactively. Claude Code prompts for declared options when you enable the plugin. To change them later: /plugin configure education@<marketplace>.

  2. Headless. Repeat --config for each option. Replace <marketplace> with the marketplace you installed this plugin from:

    claude plugin install education@<marketplace> -s <scope> --config quiz_policy=<value>

    The same command reconfigures a plugin that is already installed: it prints already installed and still writes the value. The short-circuit message is about the install, not the config write. Do not claude plugin uninstall to reconfigure: uninstalling drops this plugin's whole stored pluginConfigs entry, resetting every option in the table above to its default. -s defaults to user, so pass the scope claude plugin list reports for this plugin. The verified-version record lives in the plugin-reconfiguration convention.

    The value is stored immediately; the session you are in does not change. Hooks are handed their CLAUDE_PLUGIN_OPTION_* when the session starts, so start a fresh Claude Code session before expecting new behavior. A check run in the old session still reports the old value, and that is not a failed write.

  3. By hand, in settings. Add the value under pluginConfigs in your user settings (~/.claude/settings.json):

    {
      "pluginConfigs": {
        "education@<marketplace>": {
          "options": {
            "quiz_policy": <value>
          }
        }
      }
    }

    Plugin option values are read from user, --settings, and managed settings only, not from a project's .claude/settings.json. To vary behavior per repository, enable or disable the plugin in that project's enabledPlugins instead of setting an option there.

Do not set the CLAUDE_PLUGIN_OPTION_* variables yourself. They are how Claude Code hands a configured value to a hook process; the value comes from the routes above.

Upstream documentation

License

MIT (SPDX-License-Identifier: MIT).