Quiz
Interactive study session for the Claude Certified Architect (CCA-F) certification exam. Use when the user says things like "help me prepare for the Claude certification exam", "quiz me", "let's study for the cert", "practice CCA-F questions", or names an exam domain to drill (agentic architecture, MCP, Claude Code, prompt engineering, context management).From its SKILL.md
npx -y skills add maludb/learn-claude --skill quizAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
6.9 KB, as published. Nobody here has run it
CCA-F Study Session: teach one topic, drill 5 questions, record results
Follow these steps in order. Speak conversationally; never dump raw file contents at the user.
Step 0 — Resolve paths
- Content (read-only):
${CLAUDE_PLUGIN_ROOT}/content/— topic lessons intopics/, question banks inbank/. - User data:
${CLAUDE_PLUGIN_DATA}. If that variable is unset or empty, use~/.claude/plugins/data/learn-claudeinstead. Create the directory if it does not exist. - Progress files live in the data directory:
progress.mdandhistory.md.
Step 1 — Load state (first run: orient and initialize)
Read progress.md. If it does not exist, this is a first run:
- Give a ~30-second orientation: the CCA-F exam is 60 multiple-choice questions in 120 minutes, scored on a 100–1000 scale with 720 to pass. Five domains: D1 Agentic Architecture (27%), D2 Tool Design & MCP (18%), D3 Claude Code (20%), D4 Prompting & Structured Output (20%), D5 Context & Reliability (15%). Questions are framed in production scenarios, not trivia. This plugin teaches a topic, then drills 5 exam-style questions, and tracks your accuracy per topic.
- List the topic files in
${CLAUDE_PLUGIN_ROOT}/content/topics/and createprogress.mdwith one table row per topic file (30 rows), exactly in this format:
# CCA-F Study Progress
## Summary
Total answered: 0 | Overall: 0% | Streak: 0 days | Last session: never
## Topics
| Topic | Domain | Seen | Asked | Correct | Accuracy | Last studied |
|-------|--------|------|-------|---------|----------|--------------|
| d1-01 | 1 | 0 | 0 | 0 | - | - |
- Create
history.mdcontaining only# CCA-F Study Historyfollowed by a blank line.
If progress.md exists but is missing a row for a topic file now present in ${CLAUDE_PLUGIN_ROOT}/content/topics/ (content added in an update), append the missing row(s) with zeroed stats before continuing.
Step 2 — Pick a topic
If the user named a domain or topic (in the skill argument or their message), honor it. Map natural names to domains: "mcp"/"tools" → d2; "claude code" → d3; "prompting"/"structured output" → d4; "context"/"reliability" → d5; "agents"/"orchestration"/"architecture" → d1. If they named something more specific ("tool descriptions", "hooks", "plan mode"), pick the nearest topic id by title. If they named only a domain, pick the best topic within it using the scoring below.
Otherwise, compute a score for every topic from the progress table:
- need = 3 if never seen; 2 if accuracy < 70%; otherwise 1 / (days since last studied + 1)
- score = domain weight × need, where weights are d1=27, d2=18, d3=20, d4=20, d5=15
Pick the highest score; break ties randomly. Tell the user which topic you picked and why in one short line (e.g. "Picking d2-04 (MCP configuration) — never seen, and D2 is 18% of the exam.").
Step 3 — Teach
Read the topic file ${CLAUDE_PLUGIN_ROOT}/content/topics/<id>-*.md. Present the lesson conversationally — do not paste the file. Render the Lesson section as prose in your own flow, then the Key facts as a tight bullet list, then the Exam traps. Keep the whole thing under about one screen. Close with: ready for questions, or want more depth first? If they want depth, expand from the lesson; then proceed.
Step 4 — Drill (5 questions)
- Load
${CLAUDE_PLUGIN_ROOT}/content/bank/domain-<n>.md(n = this topic's domain) and extract this topic's question blocks — headers of the form### Q <topic>-qNN, each with a stem, options A–D, answer, and explanation. - Cross-check
history.md: a question counts as already asked if its ID appears on anyquizsession line. Skip already-asked questions; use only unasked ones. Lines taggedexam-modedo NOT retire questions from drills — re-drilling something met in a mock is good practice. - If fewer than 5 unasked bank questions remain (or the bank file is missing entirely), generate the shortfall yourself: write a scenario-grounded stem set in one of this topic's official scenarios — resolve the topic file's numeric
scenariosfrontmatter via the legend in${CLAUDE_PLUGIN_ROOT}/content/scenarios.md— 4 options, same difficulty band as the bank. Build the three distractors from these archetypes: (a) plausible but documented anti-pattern, (b) right idea applied at the wrong layer, (c) works but violates a stated constraint. Give generated questions IDs<topic>-gNN(g = generated), numbering them so they do not collide with IDs already in history. - Ask ONE question at a time using the AskUserQuestion tool:
- question text = the stem
- exactly 4 options, each labeled with its full text prefixed "A) ", "B) ", "C) ", "D) "
- header = the question ID
- NEVER reveal or hint at the answer before the user picks.
- After each answer, say whether it was correct or incorrect, give the explanation — why the right option is right and why each wrong option is wrong — then move to the next question. Track each result (question ID, user's letter, correct letter).
Mid-quiz edge cases:
- If the user says "skip" or asks a side question, answer briefly, then re-ask the same question. A skipped question they never answer does not count as asked.
- If the user quits mid-session, go to Step 5 immediately and record only the questions actually answered (Asked/Correct reflect the real count, not 5). If they answered zero questions, leave
progress.mduntouched and append nothing to history.
Step 5 — Record and close
After the last question, update progress.md:
- This topic's row: Seen +1; Asked + number answered; Correct + number correct; Accuracy = Correct/Asked as a whole percent; Last studied = today (YYYY-MM-DD).
- Summary line: recompute Total answered (sum of Asked) and Overall (sum Correct / sum Asked as %). Streak: +1 if Last session was yesterday; reset to 1 if it was older (or never); leave unchanged if it was already today. Set Last session = today.
Append ONE line to history.md for the session:
- <YYYY-MM-DD> quiz <topic>: <qid> ✓ B, <qid> ✗ A (correct: C), ...
One entry per question answered: ✓ plus the user's letter when correct; ✗ plus the user's letter and (correct: <letter>) when wrong.
Then show a mini-summary — score on this topic (n/5) and the topic's updated accuracy plus the domain's overall accuracy — and offer three choices: another topic (recompute the Step 2 pick), switch to a domain they name, or stop. If they continue, loop back to Step 2 (or straight to Step 3 if they named the topic).