An adaptive, Socratic quiz skill for tech and coding topics. Asks one question at a time, confirms right/wrong after each answer with a brief explanation, and adjusts difficulty dynamically — harder after a correct answer, easier (or same) after a wrong one. Saves topics to ~/quizme/topics.json for persistence across sessions.
| Area | Subtopics |
|---|---|
| --- | --- |
| Python | basics, OOP, async/await, exceptions, decorators |
| JavaScript | closures, promises, async/await, event loop |
| SQL | joins, indexes, window functions, query optimization |
| System design | caching, load balancing, databases, CAP theorem |
| Algorithms & data structures | big-O, trees, graphs, sorting |
| Networking | HTTP, TCP/IP, DNS, websockets |
| Git | branching, rebasing, conflicts, workflows |
| Docker / Kubernetes | containers, images, pods, services |
| APIs | REST, GraphQL, auth patterns (OAuth, JWT) |
| General CS concepts | memory, OS basics, compilers, concurrency |
See references/topics.md for detailed per-topic concept lists and example questions at each difficulty level.
Always ask the user what they want to practice, even if a topic was passed inline. Show the saved list from ~/quizme/topics.json if it exists:
> "What would you like to practice today?"
> [if topics exist] "Your saved topics: 1. Python async 2. SQL joins (or type a new topic)"
After topic confirmed, ask difficulty OR load current difficulty from ~/quizme/progress.json if the user has history with this topic:
> "Your last difficulty for Python was intermediate — continue there? (yes / pick another)"
If no prior history, default to beginner or ask: "What difficulty? (beginner / intermediate / advanced)"
Check ~/quizme/bank/{topic_slug}-{difficulty}.json where topic_slug is the topic lowercased with spaces/special chars replaced by hyphens:
"seen": false): generate questions inline (no external API needed — you are the LLM).~/quizme/topics.json if not already present.How to generate inline: Produce a valid JSON array of question objects matching the bank format below, then write it to the bank file using the write tool. Do not call any external script or API.
Bank file format:
{
"topic": "system design",
"difficulty": "beginner",
"generated_at": "YYYY-MM-DD",
"questions": [
{
"id": "{topic_slug}-{diff_prefix}-{3-digit-index}",
"concept": "short concept name",
"question": "The question text",
"code": null,
"language": null,
"options": {"A": "...", "B": "...", "C": "...", "D": "..."},
"answer": "A",
"explanation": "2-3 sentence explanation of why the answer is correct.",
"seen": false,
"correct_count": 0,
"seen_count": 0
}
]
}
For code topics: set "code" to a code snippet string (≤15 lines) and "language" to the language name.
For conceptual topics (networking, system design, algorithms theory): set both to null.
Pick a random unseen question ("seen": false) from the bank. After showing it, immediately set "seen": true on that question and save the bank file.
Question format rules:
"code" field is non-null: include the snippet in a fenced code block using the "language" value"code" is null: plain question text only"options" field**Question N** — [Topic] ([difficulty])
[question text]
[code snippet]
A) ...
B) ...
C) ...
D) ...
**Question N** — [Topic] ([difficulty])
[question text]
A) ...
B) ...
C) ...
D) ...
"explanation" from the bank question (2–3 sentences)."seen_count" by 1"correct_count" by 1"seen_count" > 0. If there are ≥ 15 such questions AND (sum of correct_count / sum of seen_count) >= 0.80 → trigger graduation (Step 5)."seen": false). If fewer than 5 remain → silently generate 10 more inline and append them to the bank file.When graduation triggers:
~/quizme/bank/{slug}-{difficulty}.json)~/quizme/progress.json: mark current difficulty as graduated with today's date, set current_difficulty to the next levelDifficulty order: beginner → intermediate → advanced
At advanced: no graduation. Just keep refilling the bank when unseen questions run low.
When the user says "stop", "quit", "done", or similar:
~/quizme/progress.json (increment answered/correct counts for this topic+difficulty)~/quizme/
├── topics.json # { "topics": ["python async", "SQL joins"] }
├── progress.json # per-topic difficulty + stats
└── bank/
├── python-beginner.json
├── sql-joins-intermediate.json
└── ... # only current difficulty per topic lives here
{
"python": {
"current_difficulty": "intermediate",
"beginner": { "answered": 17, "correct": 14, "graduated": true, "graduated_at": "2026-05-22" },
"intermediate": { "answered": 4, "correct": 3, "graduated": false }
}
}
{ "topics": ["python async", "SQL joins", "system design"] }
| Level | Description |
|---|---|
| --- | --- |
| Beginner | Core syntax, definitions, basic usage patterns |
| Intermediate | How things work under the hood, common patterns, tricky edge cases |
| Advanced | Performance, internals, architectural tradeoffs, subtle bugs |
topics.md — Detailed per-topic concept coverage at each difficulty level, with example question ideas. Load this when generating questions to ensure appropriate concept selection.共 1 个版本