Installs into .claude/skills of the current project.
Are you the author of Drill?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/alexiocassanifm-drill)
---
name: drill
description: Spaced-repetition practice on the task statements that are due or weakest, using an SM-2-lite schedule. Use for daily review between study sessions.
argument-hint: [--count N] [--due-only]
---
# Drill
Short spaced-repetition review. `/quiz` is for a topic you choose; `drill` chooses
for you, based on what you are forgetting.
## Resolve the certification first
This repository holds several certification study kits under `certifications/`.
Before reading anything, decide which one you are working in:
- If the user names one (`ccar-f`), use `certifications/<slug>/`.
- If only one directory exists under `certifications/`, use it without asking.
- If several exist and the request is ambiguous, ask which.
Everything below is relative to that certification directory — `wiki/`,
`questions/`, and `progress/` all live inside it.
## Read the schedule
Load `progress/state.json` (create from `progress/state.example.json` if absent).
Each task statement entry carries `confidence` (0–5), `ease`, `interval_days`,
`due`, `seen`, `correct`, and `seen_ids`.
Build the queue in this order:
1. **Overdue** — `due` before today, oldest first.
2. **Due today.**
3. **Never seen** — any of the 30 task statements with no entry.
4. **Weakest** — lowest `confidence`, tie-broken by domain blueprint weight so
Domain 1 gaps surface before Domain 5 gaps.
With `--due-only`, stop after step 2 and say the queue is empty if it is. That is
a good outcome, not a failure — say so.
Default to 10 items. Draw from `questions/bank/`, preferring ids not in that task
statement's `seen_ids`.
## Run
One item at a time, using the same `AskUserQuestion` presentation as `/quiz` —
follow that skill's **Run** section for the call shape, the `multiSelect` rule, and
the handling of **Other**. Feedback immediately after each answer, naming the
distractor family when they miss — described first and named once, as in `/study`'s
**Name things the way a learner can use them** section.
Because this is review rather than first exposure, keep explanations shorter — but
when they miss a task statement they have previously scored well on, stop and ask
what changed. A regression on known material usually means the underlying
distinction was never solid.
## Reschedule
After each task statement's items, update its entry with an SM-2-lite step:
| Result | Change |
|---|---|
| All correct | `ease` += 0.1 (cap 2.8); `interval_days` = round(`interval_days` × `ease`), min 1; `confidence` += 1 (cap 5) |
| Partially correct | `interval_days` unchanged; `confidence` unchanged |
| All wrong | `ease` −= 0.2 (floor 1.3); `interval_days` = 1; `confidence` −= 1 (floor 0) |
New entries start at `ease` 2.5, `interval_days` 1. Set `due` to today +
`interval_days`, and update `last_reviewed`, `seen`, `correct`, `seen_ids`.
## Report
Close with what was drilled, what moved, and what is due next — with the date.
If a task statement has now failed twice in a row, say plainly that drilling is
not working for it and recommend `/study <id>` instead. Repetition does not fix a
misunderstanding.