feat(education): add explain skill — one-shot plain-language altitude drop with teach handoff#739
Conversation
… drop with teach handoff Add `/education:explain`, a one-shot plain-language sibling to the multi-session `teach` coach. 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 targets the previous assistant response (anaphora), so "I don't get it" needs no topic named. Unlike `teach`, it enables model auto-invocation (colloquial triggers in the description), runs a Feynman gap check that surfaces an understanding gap instead of papering over it, and closes by offering `/education:teach topic <x>` for ongoing coaching. Bumps education 0.3.1 -> 0.4.0 with a CHANGELOG entry, adds evals, and regenerates the root catalog for the updated plugin description. Closes #303 Co-Authored-By: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 8s —— View job PR Review:
|
| Area | Status |
|---|---|
| Frontmatter valid (name, description, argument-hint, user-invocable) | ✅ |
disable-model-invocation absent (intentional, enables auto-invoke) |
✅ |
| Description length within limits (643/1536) | ✅ |
| Skill body ≤ 500 lines (109/500) | ✅ |
Evals schema-valid (all 6 cases have id, prompt, kebab-case name) |
✅ |
| Evals cover all key mechanics (anaphora, plain-first, altitude, Feynman, handoff, auto-invoke) | ✅ |
| Version bump semver-correct (minor, additive) 0.3.1 → 0.4.0 | ✅ |
CHANGELOG entry matches [0.4.0] header |
✅ |
| README updated for both skills, namespace disambiguation present | ✅ |
marketplace.json tags updated (explain, eli5 added) |
✅ |
Teach handoff command syntax correct (/education:teach topic <x>) |
✅ |
| Collision registry clean (no new unregistered leaf-name collision) | ✅ |
| Cold-start guard for anaphora when no prior assistant message exists |
When explain is invoked with an empty/anaphora argument but there is no prior assistant message to resolve against (first turn of a new conversation), the skill now asks "What would you like explained?" instead of proceeding blind and risking a hallucinated referent. Adds a covering cold-start eval case.
|
Claude finished @kyle-sexton's task in 1m 39s —— View job PR Review:
|
| Area | Status |
|---|---|
| Frontmatter valid (name, description, argument-hint, user-invocable) | ✅ |
disable-model-invocation absent (intentional, enables auto-invoke) |
✅ |
| Description length within limits (643/1536) | ✅ |
| Skill body ≤ 500 lines (109/500) | ✅ |
Evals schema-valid (all 7 cases have id, prompt, kebab-case name) |
✅ |
| Evals cover all key mechanics (anaphora, plain-first, altitude, Feynman, handoff, auto-invoke, cold-start) | ✅ |
| Version bump semver-correct (minor, additive) 0.3.1 → 0.4.0 | ✅ |
CHANGELOG entry matches [0.4.0] header |
✅ |
| README updated for both skills, namespace disambiguation present | ✅ |
marketplace.json tags updated (explain, eli5 added) |
✅ |
Teach handoff command syntax correct (/education:teach topic <x>) |
✅ |
| Collision registry clean (no new unregistered leaf-name collision) | ✅ |
| Cold-start guard for anaphora when no prior assistant message exists | ✅ Fixed in 1d5d8fe |
|
Post-green review pass complete (rule 8). Bot review confirms the medium finding (cold-start anaphora guard) is correctly fixed. One new minor observation (evals #1/#7 share identical prompt text, a limitation of the eval format not the skill logic) plus prior nits — all non-blocking. No threads to resolve, CI fully green (18/18). Flipping to ready for review; handing off to the babysit lane for merge. |
|
Claude finished @kyle-sexton's task in 1m 13s —— View job PR Review:
|
| Area | Status |
|---|---|
| Frontmatter valid (name, description, argument-hint, user-invocable) | ✅ |
disable-model-invocation absent — auto-invoke intentionally enabled |
✅ |
| Description length within limits (643/1536) | ✅ |
| Skill body ≤ 500 lines (113/500) | ✅ |
| Evals schema-valid (all 7 cases, kebab-case names) | ✅ |
| Evals cover all key mechanics (anaphora, plain-first, altitude, Feynman, handoff, auto-invoke, cold-start) | ✅ |
| Cold-start guard present and correctly scoped | ✅ Fixed in 1d5d8fe |
| Version bump semver-correct (minor, additive) 0.3.1 → 0.4.0 | ✅ |
CHANGELOG [0.4.0] entry present and accurate |
✅ |
| README updated, namespace disambiguation present | ✅ |
marketplace.json tags updated (explain, eli5 added) |
✅ |
| Teach handoff command syntax correct | ✅ |
| Collision registry clean | ✅ |
| CI green (18/18) | ✅ |
Verdict: ready to merge.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1d5d8febbd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…plain-skill # Conflicts: # plugins/education/.claude-plugin/plugin.json # plugins/education/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 2m 17s —— View job PR Review:
|
| Area | Status |
|---|---|
| Merge clean — no conflicts, no regressions | ✅ |
| Frontmatter valid (name, description, argument-hint, user-invocable) | ✅ |
disable-model-invocation absent — auto-invoke intentionally enabled |
✅ |
| Description length within limits (643/1536) | ✅ |
| Skill body ≤ 500 lines (113/500) | ✅ |
| Evals schema-valid (all 7 cases, kebab-case names) | ✅ |
| Evals cover all key mechanics (anaphora, plain-first, altitude, Feynman, handoff, auto-invoke, cold-start) | ✅ |
| Cold-start guard present and correctly scoped | ✅ Fixed in 1d5d8fe |
Version bump semver-correct: 0.3.2 → 0.4.0 (minor, additive) |
✅ |
CHANGELOG [0.4.0] entry present and accurate |
✅ |
| README updated, namespace disambiguation present | ✅ |
marketplace.json tags updated (explain, eli5 added) |
✅ |
| Teach handoff command syntax correct | ✅ |
| Collision registry clean | ✅ |
| Eval #1/#7 identical-prompt issue |
Verdict: ready to merge. No new issues from the sync; all prior findings carry forward at non-blocking status.
|
Claude finished @kyle-sexton's task in 1m 45s —— View job Security Review:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b3fc172a7d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Summary
Adds
/education:explain, a one-shot plain-language sibling to the multi-sessioneducation:teachcoach (issue #303, design locked in triage 2026-07-17). Whereteachcoaches across sessions with persistent state,explaindoes a single altitude drop: it explains the given thing — a concept, code, an error, an architecture, or the assistant's own previous output — in genuinely plain words (concrete analogy, zero jargon), then layers altitude back up only on request (high-school, then peer level).Key behaviors from the locked design:
teach(disable-model-invocation: true),explainenables auto-invoke and carries the colloquial triggers ('I don't get it','what does this actually do/mean','explain simply','ELI5','rephrase that') so those phrases reach it without a named command. Explicit/education:explainstays the guaranteed path./education:teach topic <x>for a multi-session deeper dive (first-party sibling, same plugin).Fix
plugins/education/skills/explain/SKILL.md(109 lines) implementing the locked design, matchingteach's frontmatter/structure conventions but enabling model auto-invocation.plugins/education/skills/explain/evals/evals.json— 6 evals (anaphora default, plain-first pass, altitude-on-request, Feynman gap check, teach handoff, auto-invocation) followingteach's eval schema.education0.3.1→0.4.0with a top-insertedCHANGELOG.mdentry.plugin.json) andplugins/education/README.mdto cover the new sibling; addedexplain/eli5keywords toplugin.jsonand marketplace tags.README.mdcatalog block for the updated description (node scripts/generate-catalog.mjs).Disambiguation note:
education:teachalready has anexplainaction (writes a lesson into an active learning workspace). It is namespace-distinct from this standalone/education:explainskill; the SKILL.md calls this out, and only the new skill auto-fires on "I don't get it" sinceteachdisables model invocation.Verification
All commands run in the worktree against
origin/main.Skill-quality gate (
scripts/check-changed-skills.sh origin/main):markdownlint-cli2 (changed markdown):
Summary: 0 error(s)Catalog parity (
node scripts/generate-catalog.mjs --check):Catalog is in sync with the manifests.Changelog parity (
scripts/check-changelog-parity.sh --check-bump origin/main):Every plugin whose version changed vs origin/main has a '## [<version>]' CHANGELOG.md entry.Skill leaf-name collisions (
scripts/check-skill-leaf-names.sh --check):All 8 cross-plugin skill leaf-name collisions are registered.(explainintroduces no new collision.)Plugin contracts (
node scripts/validate-plugin-contracts.mjs):Plugin contracts validated: 33 setup skills and 1826 plugin files checked.JSON parse of
marketplace.json,plugin.json,evals.json: OK.evals.jsonvalidated againstplugins/skill-quality/reference/evals.schema.json(only allowed keys; kebab-casename).Closes #303
Related
plugins/education/skills/teach/SKILL.mdplugins/skill-quality/reference/evals.schema.json