| name | mock-exam |
| description | Full-length timed mock exam for the Claude Certified Architect (CCA-F) certification. Use when the user says "mock exam", "practice exam", "exam simulation", "test me like the real exam", "full practice test", or wants exam-condition practice for the Claude certification. |
| argument-hint | [optional question count, default 60] |
CCA-F Mock Exam: 60 questions under exam conditions, scaled score at the end
Simulate the real exam. Unlike the quiz skill: no teaching, no feedback until the very end. Follow the steps in order.
Step 0 — Setup
- Content (read-only):
${CLAUDE_PLUGIN_ROOT}/content/ — question banks in bank/, scenario legend in scenarios.md.
- User data:
${CLAUDE_PLUGIN_DATA}. If that variable is unset or empty, use ~/.claude/plugins/data/learn-claude instead. Create the directory if it does not exist. The only file this skill touches is history.md there. Do NOT touch progress.md at all — mock stats stay separate from drill stats by design (the progress skill reports them separately).
- Question count: from the skill argument if given, else 60. If the count is under 5, suggest quiz mode instead (a mock that small tells them nothing), but comply if they insist.
- Record the start time by running the
date command. Tell the user: the real exam allows 120 minutes for 60 questions (for a custom count N, the proportional reference is N × 2 minutes). Timing is informational only — NEVER cut them off or rush them mid-exam.
Step 1 — Scenario draw
Read ${CLAUDE_PLUGIN_ROOT}/content/scenarios.md. Pick 4 of the 6 scenarios at random — the real exam does the same — and announce them by name to the user before the first question. When selecting questions in Step 2, prefer ones whose scenario: line names one of the drawn 4; where a domain doesn't have enough matching questions, any scenario is acceptable — use them silently and say nothing about it (don't break immersion).
Step 2 — Build the exam
Domain counts for 60 questions (matching the 27/18/20/20/15 exam weights): D1=16, D2=11, D3=12, D4=12, D5=9. For a custom count N, scale each proportionally (N × weight), minimum 1 per domain, rounding so the total is exactly N (largest-remainder on the fractional parts).
For each domain n, load ${CLAUDE_PLUGIN_ROOT}/content/bank/domain-<n>.md. Question blocks have headers ### Q <id>, a topic: line, a scenario: line, a stem, options A–D, an answer, and an explanation. Select that domain's count by:
- Draw across ALL topics in the domain, spreading picks over topics rather than clustering in one or two.
- Read
history.md. Question IDs appearing on exam-mode lines were used in prior mocks: send them to the back of the deck — pick fresh questions first, but repeats are allowed if the bank is thin. (IDs on quiz lines don't matter here; drilled questions are fair game.)
- Prefer questions whose scenario is among the 4 drawn in Step 1.
- Only if a domain's bank is exhausted (or its file is missing), generate the shortfall yourself: scenario-grounded stem set in one of the drawn scenarios, 4 options at the bank's difficulty band, with the three distractors built 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>-xNN (x = exam-generated), numbered to avoid colliding with any existing qNN/gNN/xNN IDs in the bank or history. Keep the correct answer and a one-sentence explanation for yourself — you need them in Steps 4–6.
Shuffle the full list so domains interleave — do NOT present questions grouped by domain.
Step 3 — Administer
Ask ONE question at a time with the AskUserQuestion tool:
- question text = the stem
- exactly 4 options, each the full option text prefixed "A) ", "B) ", "C) ", "D) "
- header = the question number in the form "Q17/60" — NEVER the bank ID (don't leak IDs mid-exam)
Strict exam conduct, different from quiz mode:
- NO explanations and NO correct/incorrect feedback during the exam. After each answer, present the next question immediately.
- Every 10 questions, emit one terse progress marker ("20/60") and nothing more.
- The user should answer every question (the real exam forces an answer). If they explicitly say "skip", record it as unanswered and move on without comment.
- If they ask a side question mid-exam, answer in one line without revealing anything about any question, then re-present the current question.
- If the user quits early, jump to Step 4 and score everything presented so far (answered + skipped); note the result is partial.
Track privately for each question presented: bank ID, question number, user's letter (or skipped), correct letter.
Step 4 — Score and report
Compute after the last question (or on early quit):
- Raw score = count of ✓ / questions PRESENTED (skipped questions count in the denominator, as wrong).
- Scaled score = 100 + round(900 × raw). Pass line: 720.
- Elapsed time: run
date again and diff against the start.
Report, in this order:
- Scaled score and PASS or FAIL vs 720 (on a partial exam, label it a partial projection).
- Elapsed time vs the 120-minute reference (proportional for custom N) — over or under, informationally.
- Per-domain breakdown table: domain, asked, correct, percent.
- The 3 topics with the most wrong answers (fewer if there aren't 3), each with its wrong count, and an offer to drill them via the quiz skill (e.g. "quiz me on d2-04").
Step 5 — Review wrong and skipped questions
After the report, walk through every question answered wrong or skipped, one short block each: the question number (e.g. Q17), the correct letter, and a one-sentence why pulled from the bank explanation (or your own, for generated questions). Now that the exam is over, you may mention bank IDs. Keep each block tight — this is a debrief, not a re-teach.
Step 6 — Record
Append exactly ONE line to history.md for the whole mock — this exact grammar:
- <YYYY-MM-DD> exam-mode: <qid> ✓ B, <qid> ✗ A (correct: C), <qid> ✗ – (correct: D), ...
- One entry per question PRESENTED, in exam order:
✓ plus the user's letter when correct; ✗ plus their letter and (correct: <letter>) when wrong; skipped/unanswered = ✗ – with the correct letter in (correct: <letter>).
- Use real bank IDs here (post-exam, IDs may be revealed), including
<topic>-xNN for generated questions.
- If
history.md does not exist, create it first with the header line # CCA-F Study History followed by a blank line, then append.
- Do not write anything else. Never modify
progress.md.
Edge cases
- No bank files at all: offer a fully generated exam (Step 2 generation rules for every question) but recommend installing the plugin content properly for the real question bank.
- Zero questions presented (user quits before Q1): record nothing, write nothing.