CLAUDE.md@skills · git:20260924.fa28c43 · 2026-09-24 · sha256 bb0d0f9b86f491b7

CLAUDE.md@skills git:20260924.fa28c43A

Immutable. This exact content never changes and is served at /api/v1/blob/bb0d0f9b86f491b7.

# 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` and `setup`. 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, 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 is `concept`. Search every skill,
  user skill, agent and manual page when changing a shared setting.
- Planner output is authoritative. Interleaved questions are capped at one only
  when unenforced and without an explicit topic; explicit `max` wins. Unenforced
  Stop hooks can still ask questions.
- Settings belong in `eklavya statusline`, not a hand-composed question header.
  Follow the plan's `ask_attribution` for host-specific `[Eklavya]` attribution;
  never hardcode a terminal-only rendering rule. Do not display tier/counter
  lines above a stem.
- `stripAskHeader` in `ask.ts` remains necessary for old recorded questions and
  stable fingerprints. Removing it changes duplicate detection for history.
- Honor list caps and truncation. Profile `known` is strongest-first, not most
  recent; graph results can be incomplete. Recount seed totals before quoting.
- Keep `declined` distinct from `dont_know`, 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.