| name | progress |
| description | Progress report for Claude Certified Architect (CCA-F) exam preparation. Use when the user asks "how am I doing", "am I ready for the exam", "show my certification progress", "study report", or wants to know what to study next for the Claude certification. |
CCA-F Progress Report: readiness estimate, coverage, and what to study next
Build the report from the user's real data files. Never invent or estimate numbers that are not derivable from them. Keep the whole report to about 1.5 screens and lead with the readiness estimate.
Step 1 — Load
- Data dir:
${CLAUDE_PLUGIN_DATA}; if unset or empty, use ~/.claude/plugins/data/learn-claude.
- Read
progress.md from the data dir. Parse the Summary line and the Topics table (columns: Topic, Domain, Seen, Asked, Correct, Accuracy, Last studied).
- If
progress.md is missing, or every row has Asked = 0: check history.md for exam-mode lines first — if any exist, skip to Step 6 and report only the mock-exam section (plus a note that there's no drill data yet); otherwise tell the user there is no study data yet, offer to start their first study session with the quiz skill (e.g. "quiz me"), and stop — no report.
- Read
history.md if present. Session lines look like - 2026-07-02 quiz d1-01: d1-01-q01 ✓ B, d1-01-q03 ✗ A (correct: C) — one dated line per session, one ✓/✗ entry per question. Mock-exam sessions use the same entry grammar with exam-mode in place of quiz <topic>: - 2026-07-02 exam-mode: d1-01-q02 ✓ B, d4-03-q01 ✗ – (correct: C), ... (a – letter means the question went unanswered; it still counts in the denominator). If the file is missing, still produce the report but skip the trend and mock-exam sections.
- Skip any table row you cannot parse (wrong column count, non-numeric counts) and any history line that doesn't match the session-line shape; if you skipped anything, add one line at the end of the report noting how many rows/lines were skipped, then move on. Never abort on bad data.
- Topic titles come from the frontmatter
title of ${CLAUDE_PLUGIN_ROOT}/content/topics/<id>-*.md. If a table row's topic has no matching topic file, keep its stats in every calculation, show it as "(no topic file)" in the coverage map, and mention it in the skipped-data note.
Step 2 — Readiness estimate (lead with this)
Domain weights: d1 = 27%, d2 = 18%, d3 = 20%, d4 = 20%, d5 = 15%.
- Per-domain accuracy = sum(Correct) / sum(Asked) across that domain's topic rows, counting only rows with Asked > 0. Also record each domain's total Asked.
- Projected scaled score = 100 + 900 × Σ over domains of (weight fraction × domain accuracy), where weight fractions are 0.27, 0.18, 0.20, 0.20, 0.15 and accuracy is a fraction (0–1). Round to a whole number.
- Any domain with total Asked < 10 is insufficient data. If one or more domains are insufficient, present the projection both ways:
- As-is: all domains that have any data, at their current accuracy. If some domain has Asked = 0, the as-is variant is not computable at all — present only the excluded-renormalized variant and say why.
- Excluding thin domains: drop insufficient domains and renormalize, i.e. score = 100 + 900 × Σ(included weight × accuracy) / Σ(included weights).
Label which domains were thin and their n.
- State the pass line: 720 on the 100–1000 scale. Say explicitly whether the projection(s) fall above or below it, and that this is a rough study signal from practice drills — not a prediction of the real exam result.
Step 3 — Per-domain bars
One row per domain in a code block. Bar = round(accuracy / 10) █ characters padded to 10 with ░; use ·········· for a domain with Asked = 0. Format:
D1 Agentic Architecture 27% ████████░░ 80% (n=25)
D2 Tool Design & MCP 18% ·········· – (n=0)
Flag any domain with accuracy < 70% AND weight ≥ 20% as top priority on its row and call it out in one sentence below the chart.
Step 4 — Coverage map
Classify each of the 30 topics:
○ untouched — Seen = 0
◐ seen — Seen > 0, but accuracy < 80% or Asked < 5
● strong — accuracy ≥ 80% AND Asked ≥ 5
Display compactly grouped by domain, one line per domain: glyph + topic id + a 2–3 word title (from topic-file frontmatter), e.g.:
D1: ● d1-01 Agentic Loops · ◐ d1-02 Orchestration · ○ d1-03 Subagents · ...
Follow with one summary line: "X untouched / Y in progress / Z strong of 30."
Step 5 — What to study next
Recommend 2–3 topics using the same scoring as the quiz skill: need = 3 if never seen, 2 if accuracy < 70%, else 1 / (days since last studied + 1); score = domain weight × need (weights 27/18/20/20/15). Take the top scorers — this naturally puts unseen topics in heavy domains first, then weak topics. Give each a one-line reason with real numbers ("d1-03 — never seen, D1 is 27% of the exam"; "d4-02 — 40% on 5 asked"). Offer to start a session on the top pick via the quiz skill.
Step 6 — Practice vs exam-mode
If any history.md line is tagged exam-mode, add a short mock-exam section:
- Score each mock from its own line: count of ✓ / total question entries on that line, as a percent, with its date.
- If there are 2+ mocks, note the trend (improving / flat / declining) across them in date order.
- State plainly: mock exams are the honest readiness signal; the drill stats above are formative practice (immediate feedback, self-paced) and typically run higher than exam-condition performance.
If there are no exam-mode lines (or no history.md), skip this section; if the user asked "am I ready", suggest a timed mock as the best next check.
Style
- Lead with the projected score vs the 720 pass line; everything else supports that.
- Whole report ≈ 1.5 screens: headline, bars, coverage map, 2–3 recommendations, mock section only if it exists.
- Every number must come from
progress.md / history.md. If data is thin, say so — don't pad.