eklavya / skills
CLAUDE.md29 starsChanged 22 days agoMITView on GitHub
Skills define model behavior; the runtime owns data and arithmetic. A stale sentence can change the product without raising an error. Read the root CLAUDE.md, then verify instructions against the tool implementation. Each skill has a directory and SKILL.md with name and description. disable-model-invocation: true makes the entry user-invoked only. The shipped slash commands are gate, learn, level, memory, mode, pack, progress, quiz, setup, skip and toolprune. Recount from frontmatter when changing this inventory. Never move user-skill/ entries into skills/:…
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
- web/CLAUDE.mdCLAUDE.md
- eklavya-dashboardSkill
- eklavya-designSkill
- verify-docsSkill
- gateSkill
- learnSkill
- levelSkill
- memorySkill
- modeSkill
- packSkill
- progressSkill
- quizSkill
- setupSkill
- skipSkill
- toolpruneSkill
- tutorSkill
The file
We split this CLAUDE.md into the rules it gives an agent
12 rules. About 0 are common, 5 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Never move user-skill/ entries into skills/: they would register twice.
- Distinctive: line 23
Keep artifact design instructions and the explainer's summary aligned.
- Very specific: line 39
Use an explicit ID only when supplied by the host or required by the task.
- Very specific: line 52
Read defaults from mcp/src/config.ts: focus is concept.
- Distinctive: line 56
Stop hooks can still ask questions.
- Very specific: line 58
Follow the plan's ask_attribution for host-specific [Eklavya] attribution.
- Very specific: line 71
Keep declined, dont_know and invalid (the question's fault, grades nothing) distinct, MCQ grading capped as the runtime requires, and …
- Distinctive: line 83
Keep the entry point within the packaging test's 2,000-whitespace-token limit.
- Distinctive: line 84
Every referenced file must exist and every reference file must be reachable from the entry point.
- Very specific: line 108
Update the corresponding manual page in the same PR: commands in commands, settings in dials/configuration, grading in grading-engine, …
- Distinctive: line 111
Update the landing command list if the public command set changes.
- Very specific: line 114
Run the relevant packaging, CLI and tool tests from mcp/ through npm test so bundled assets are rebuilt.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Editing skills and agent instructions
Skills define model behavior; the runtime owns data and arithmetic. A stale
sentence can change the product without raising an error. Read the root
CLAUDE.md, then verify instructions against the tool implementation.
Entry points and ownership
Each skill has a directory and SKILL.md with name and description.
disable-model-invocation: true makes the entry user-invoked only. The shipped
slash commands are gate, learn, level, memory, mode, pack, progress,
quiz, setup, skip and toolprune. Recount from frontmatter when changing this inventory.
| Location | Responsibility |
skills/tutor/ | Shared pedagogy; commands defer to it rather than duplicate it |
user-skill/eklavya/ | Plain-chat configuration and CLI help, and drafting a GitHub issue when someone reports a problem with Eklavya itself (shown in full, filed only after a clear yes), installed to ~/.claude/skills/; does not teach |
user-skill/eklavya-artifacts/ | Create pages through eklavya artifacts new, which owns paths, metadata and template |
agents/tutor.md | Read-only file access and selected learning/memory tools; teaches builder-logged concepts and uses lettered text without AskUserQuestion |
agents/explainer.md | Background artifact writer; no Eklavya MCP tools, grading or concept logging |
Never move user-skill/ entries into skills/: they would register twice.
Keep artifact design instructions and the explainer's summary aligned.
Model-invocable descriptions should state triggering conditions, in third person, starting “Use when”; put workflow, tool order and grading in the body. A summary in the description invites the model to skip reading the rules. User-invoked command descriptions instead serve as concise help. Agent descriptions also need their role so they can be selected from a roster.
Check the API before writing instructions
Open the relevant file in mcp/src/tools/ before saying “call X with Y”. Verify
the input schema and every returned field the instruction uses. Learning tools
mostly have individual files; config, memory read/write, code and collections
tools are grouped. tools/index.ts is the advertised inventory.
Normally omit session_id: tools that support it resolve the current session.
Use an explicit ID only when supplied by the host or required by the task.
log_session_concepts, upsert_concepts, get_session_quiz_plan,
record_attempt, get_gate_status, get_config and set_config accept it for
session resolution. memory_timeline also accepts it, but as a filter: omitting
it shows the whole project. Check each schema instead of assuming all tools
accept the same fields.
Memory follows “search, choose, then get”. Search returns a small index;
memory_get returns the chosen narrative. Hydrating every result defeats the
context-saving design.
Preserve the tutoring contract
- Read defaults from
mcp/src/config.ts: focus isconcept. Search every skill, user skill, agent and manual page when changing a shared setting. - Planner output is authoritative. As-you-go questions are capped at one only
when unenforced and without an explicit topic; explicit
maxwins. Unenforced Stop hooks can still ask questions. - Settings belong in
eklavya statusline, not a hand-composed question header. Follow the plan'sask_attributionfor host-specific[Eklavya]attribution; never hardcode a terminal-only rendering rule. Do not display tier/counter lines above a stem. stripAskHeaderinask.tsremains necessary for old recorded questions and stable fingerprints. Removing it changes duplicate detection for history.- Honor list caps and truncation. Profile
knownis strongest-first, not most recent; graph results can be incomplete. Recount seed totals before quoting. presentationin the plan decides the tool:"tool"isAskUserQuestion(followask_attribution, thenrecord_attemptand the verdict);"panel"ispresent_question(no attribution, norecord_attempt, no verdict, no waiting). The panel instructions live intutor/references/panel.md, not inwriting-mcq.md, so a card question never reads them. The tutor subagent has nopresent_questionand ignores"panel".- Keep
declined,dont_knowandinvalid(the question's fault, grades nothing) distinct, MCQ grading capped as the runtime requires, and one-question/resume behavior intact.
The tutor entry point chooses whether to act and points to required references:
| Reference | Read before |
tutor/references/writing-mcq.md | Writing the stem, options and recorded question |
tutor/references/grading.md | Grading, feedback, blanks and repeated teaching |
tutor/references/focus-and-level.md | Applying focus, earned levels, cadence and gate retries |
Mark references REQUIRED at their point of use. Do not use eager @ imports.
Keep the entry point within the packaging test's 2,000-whitespace-token limit.
Every referenced file must exist and every reference file must be reachable from
the entry point; the packaging test checks both directions.
For craft, describe the desired shape in build order, followed by a checklist. For pressure failures such as grade inflation, retain explicit prohibitions and the rationalization they prevent. Avoid vague exceptions that let the model renegotiate a recipe; genuine framing exceptions belong in planner output.
Bundling and host limits
copy-assets.mjs bundles the tutor directory. eklavya export-rules strips
frontmatter and inlines reference files alphabetically for consumers that do
not load them on demand. Missing references must fail export, not emit partial
pedagogy. Keep shared tutor material independent of plugin paths, hook mechanics
and slash commands; the tutor agent supplies the plain-text fallback for
AskUserQuestion.
Rule export does not provide another editor with Claude Code hooks. Do not
advertise equivalent ambient learning on a host without that integration.
Delegation policy lives in docs/subagent-policy.md; the tutor exemption from
the implementer's “do not ask” directive must remain deliberate.
Documentation and checks
Update the corresponding manual page in the same PR: commands in commands,
settings in dials/configuration, grading in grading-engine, levels in
levels-and-tiers, artifacts in dashboard, and setup in first-run.
Update the landing command list if the public command set changes. Search other
skills for duplicated claims rather than fixing only the entry you touched.
Run the relevant packaging, CLI and tool tests from mcp/ through npm test
so bundled assets are rebuilt. Tutor behavior changes also require before/after
evaluation (eval/README.md) and the live checkpoint acceptance check
(CONTRIBUTING.md). A successful build alone cannot verify prompt behavior.
Build web/ for documentation edits and record any check not run.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

