{"owner":"rohitg00","repo":"ai-engineering-from-scratch","hasSkills":true,"totalSkillsCount":18,"totalTokensCount":27376,"categories":["anthropic-skill","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["skills/course-guide/SKILL.md","skills/find-your-level/SKILL.md","skills/check-understanding/SKILL.md",".claude/skills/start-learning/SKILL.md","skills/start-learning/SKILL.md","skills/claude-certification/SKILL.md","skills/learn/SKILL.md",".claude/skills/claude-certification/SKILL.md",".claude/skills/learn/SKILL.md",".claude/skills/course-guide/SKILL.md",".claude/skills/find-your-level/SKILL.md",".claude/skills/check-understanding/SKILL.md","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md","AGENTS.md","certifications/claude/references/ccar-f-exact-mechanics.md","skills/claude-certification/agents/openai.yaml",".claude/skills/claude-certification/agents/openai.yaml","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md"],"skills":{"skills/course-guide/SKILL.md":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n","skills/find-your-level/SKILL.md":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n","skills/check-understanding/SKILL.md":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n",".claude/skills/start-learning/SKILL.md":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","skills/start-learning/SKILL.md":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","skills/claude-certification/SKILL.md":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n","skills/learn/SKILL.md":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n",".claude/skills/claude-certification/SKILL.md":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n",".claude/skills/learn/SKILL.md":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n",".claude/skills/course-guide/SKILL.md":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n",".claude/skills/find-your-level/SKILL.md":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n",".claude/skills/check-understanding/SKILL.md":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md":"# migration-review-skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/AGENTS.md)","certifications/claude/references/ccar-f-exact-mechanics.md":"# References Skill\n\nPath: `certifications/claude/references/ccar-f-exact-mechanics.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/references/ccar-f-exact-mechanics.md)","skills/claude-certification/agents/openai.yaml":"# Agents Skill\n\nPath: `skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/agents/openai.yaml)",".claude/skills/claude-certification/agents/openai.yaml":"# Agents Skill\n\nPath: `.claude/skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/agents/openai.yaml)","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md":"# References Skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md)"},"files":{"skills/course-guide/SKILL.md":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n","skills/find-your-level/SKILL.md":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n","skills/check-understanding/SKILL.md":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n",".claude/skills/start-learning/SKILL.md":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","skills/start-learning/SKILL.md":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","skills/claude-certification/SKILL.md":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n","skills/learn/SKILL.md":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n",".claude/skills/claude-certification/SKILL.md":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n",".claude/skills/learn/SKILL.md":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n",".claude/skills/course-guide/SKILL.md":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n",".claude/skills/find-your-level/SKILL.md":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n",".claude/skills/check-understanding/SKILL.md":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md":"# migration-review-skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/AGENTS.md)","certifications/claude/references/ccar-f-exact-mechanics.md":"# References Skill\n\nPath: `certifications/claude/references/ccar-f-exact-mechanics.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/references/ccar-f-exact-mechanics.md)","skills/claude-certification/agents/openai.yaml":"# Agents Skill\n\nPath: `skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/agents/openai.yaml)",".claude/skills/claude-certification/agents/openai.yaml":"# Agents Skill\n\nPath: `.claude/skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/agents/openai.yaml)","certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md":"# References Skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/AGENTS.md)","tokens":300,"sizeBytes":170},{"name":"SKILL.md","path":".claude/skills/check-understanding/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/check-understanding/SKILL.md","title":"check-understanding","category":"anthropic-skill","format":"markdown","content":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n","frontmatter":{"name":"check-understanding","version":"1.0.0","description":"Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`."},"isInternal":false,"tokens":2029,"sizeBytes":8205},{"name":"openai.yaml","path":".claude/skills/claude-certification/agents/openai.yaml","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/agents/openai.yaml","title":"Agents Skill","category":"anthropic-skill","format":"yaml","content":"# Agents Skill\n\nPath: `.claude/skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/agents/openai.yaml)","tokens":300,"sizeBytes":240},{"name":"SKILL.md","path":".claude/skills/claude-certification/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/SKILL.md","title":"claude-certification","category":"anthropic-skill","format":"markdown","content":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n","frontmatter":{"name":"claude-certification","description":"AI-native tutor and onboarding workflow for the four independent Claude certification tracks in AI Engineering from Scratch. Use when a learner wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F, or CCAR-P, resume a certification path, learn the next lesson interactively, run and verify practical labs, build scored artifacts, take a diagnostic or mock exam, or remediate weak exam domains from GitHub with Claude Code, Codex, ChatGPT, Cursor, or another agent.\n"},"isInternal":false,"tokens":2630,"sizeBytes":11996},{"name":"SKILL.md","path":".claude/skills/course-guide/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/course-guide/SKILL.md","title":"course-guide","category":"anthropic-skill","format":"markdown","content":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n","frontmatter":{"name":"course-guide","version":"1.0.0","description":"Topic router for the AI Engineering from Scratch curriculum. Give it a topic, a question, or a bug you are fighting, and it points at the exact lessons that teach it, plus the right next command. Trigger phrases: \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\", \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where do I prepare for a Claude certification\"\n","tags":["navigation","curriculum","ai-engineering","router"]},"isInternal":false,"tokens":1716,"sizeBytes":7028},{"name":"SKILL.md","path":".claude/skills/find-your-level/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/find-your-level/SKILL.md","title":"find-your-level","category":"anthropic-skill","format":"markdown","content":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n","frontmatter":{"name":"find-your-level","version":"1.0.0","description":"Interactive quiz that maps your AI/ML knowledge to a starting point in the 523-lesson, 20-phase AI Engineering from Scratch curriculum. Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\", \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\n","tags":["assessment","onboarding","curriculum","ai-engineering"]},"isInternal":false,"tokens":2023,"sizeBytes":7899},{"name":"SKILL.md","path":".claude/skills/learn/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/learn/SKILL.md","title":"learn","category":"anthropic-skill","format":"markdown","content":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n","frontmatter":{"name":"learn","version":"1.0.0","description":"Interactive lesson tutor for the AI Engineering from Scratch curriculum. Reads LEARNING.md, fetches the next lesson, teaches it section by section in the terminal, quizzes at the end, and records progress. Works cloned or entirely over raw.githubusercontent.com — no setup required. Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\", \"let's learn\", \"resume learning\"\n","tags":["tutor","curriculum","ai-engineering","interactive-learning"]},"isInternal":false,"tokens":2259,"sizeBytes":9419},{"name":"SKILL.md","path":".claude/skills/start-learning/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/start-learning/SKILL.md","title":"start-learning","category":"anthropic-skill","format":"markdown","content":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","frontmatter":{"name":"start-learning","version":"1.0.0","description":"One-time onboarding for the AI Engineering from Scratch curriculum (523 lessons, 20 phases). Interviews the learner, runs the placement quiz, and writes LEARNING.md, a persistent study plan the learn skill drives. Trigger phrases: \"start learning\", \"set up the course\", \"begin the curriculum\", \"onboard me\", \"create my learning plan\"\n","tags":["onboarding","curriculum","ai-engineering","learning-plan"]},"isInternal":false,"tokens":2131,"sizeBytes":8854},{"name":"review-checklist.md","path":"certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md)","tokens":300,"sizeBytes":402},{"name":"SKILL.md","path":"certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md","title":"migration-review-skill","category":"anthropic-skill","format":"markdown","content":"# migration-review-skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md)","tokens":300,"sizeBytes":364},{"name":"ccar-f-exact-mechanics.md","path":"certifications/claude/references/ccar-f-exact-mechanics.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/references/ccar-f-exact-mechanics.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `certifications/claude/references/ccar-f-exact-mechanics.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/references/ccar-f-exact-mechanics.md)","tokens":300,"sizeBytes":252},{"name":"SKILL.md","path":"skills/check-understanding/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/check-understanding/SKILL.md","title":"check-understanding","category":"anthropic-skill","format":"markdown","content":"---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n","frontmatter":{"name":"check-understanding","version":"1.0.0","description":"Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`."},"isInternal":false,"tokens":2029,"sizeBytes":8205},{"name":"openai.yaml","path":"skills/claude-certification/agents/openai.yaml","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/agents/openai.yaml","title":"Agents Skill","category":"anthropic-skill","format":"yaml","content":"# Agents Skill\n\nPath: `skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/agents/openai.yaml)","tokens":300,"sizeBytes":224},{"name":"SKILL.md","path":"skills/claude-certification/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/SKILL.md","title":"claude-certification","category":"anthropic-skill","format":"markdown","content":"---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n","frontmatter":{"name":"claude-certification","description":"AI-native tutor and onboarding workflow for the four independent Claude certification tracks in AI Engineering from Scratch. Use when a learner wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F, or CCAR-P, resume a certification path, learn the next lesson interactively, run and verify practical labs, build scored artifacts, take a diagnostic or mock exam, or remediate weak exam domains from GitHub with Claude Code, Codex, ChatGPT, Cursor, or another agent.\n"},"isInternal":false,"tokens":2630,"sizeBytes":11996},{"name":"SKILL.md","path":"skills/course-guide/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/course-guide/SKILL.md","title":"course-guide","category":"anthropic-skill","format":"markdown","content":"---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n","frontmatter":{"name":"course-guide","version":"1.0.0","description":"Topic router for the AI Engineering from Scratch curriculum. Give it a topic, a question, or a bug you are fighting, and it points at the exact lessons that teach it, plus the right next command. Trigger phrases: \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\", \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where do I prepare for a Claude certification\"\n","tags":["navigation","curriculum","ai-engineering","router"]},"isInternal":false,"tokens":1716,"sizeBytes":7028},{"name":"SKILL.md","path":"skills/find-your-level/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/find-your-level/SKILL.md","title":"find-your-level","category":"anthropic-skill","format":"markdown","content":"---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n","frontmatter":{"name":"find-your-level","version":"1.0.0","description":"Interactive quiz that maps your AI/ML knowledge to a starting point in the 523-lesson, 20-phase AI Engineering from Scratch curriculum. Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\", \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\n","tags":["assessment","onboarding","curriculum","ai-engineering"]},"isInternal":false,"tokens":2023,"sizeBytes":7899},{"name":"SKILL.md","path":"skills/learn/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/learn/SKILL.md","title":"learn","category":"anthropic-skill","format":"markdown","content":"---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n","frontmatter":{"name":"learn","version":"1.0.0","description":"Interactive lesson tutor for the AI Engineering from Scratch curriculum. Reads LEARNING.md, fetches the next lesson, teaches it section by section in the terminal, quizzes at the end, and records progress. Works cloned or entirely over raw.githubusercontent.com — no setup required. Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\", \"let's learn\", \"resume learning\"\n","tags":["tutor","curriculum","ai-engineering","interactive-learning"]},"isInternal":false,"tokens":2259,"sizeBytes":9419},{"name":"SKILL.md","path":"skills/start-learning/SKILL.md","rawUrl":"https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/start-learning/SKILL.md","title":"start-learning","category":"anthropic-skill","format":"markdown","content":"---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n","frontmatter":{"name":"start-learning","version":"1.0.0","description":"One-time onboarding for the AI Engineering from Scratch curriculum (523 lessons, 20 phases). Interviews the learner, runs the placement quiz, and writes LEARNING.md, a persistent study plan the learn skill drives. Trigger phrases: \"start learning\", \"set up the course\", \"begin the curriculum\", \"onboard me\", \"create my learning plan\"\n","tags":["onboarding","curriculum","ai-engineering","learning-plan"]},"isInternal":false,"tokens":2131,"sizeBytes":8854}],"systemPromptSnippet":"<yakaai_skills repo=\"rohitg00/ai-engineering-from-scratch\">\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/AGENTS.md)\n\n<!-- File: .claude/skills/check-understanding/SKILL.md (Tokens: ~2029 | Category: anthropic-skill) -->\n---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n\n<!-- File: .claude/skills/claude-certification/agents/openai.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Agents Skill\n\nPath: `.claude/skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/.claude/skills/claude-certification/agents/openai.yaml)\n\n<!-- File: .claude/skills/claude-certification/SKILL.md (Tokens: ~2630 | Category: anthropic-skill) -->\n---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n\n<!-- File: .claude/skills/course-guide/SKILL.md (Tokens: ~1716 | Category: anthropic-skill) -->\n---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n\n<!-- File: .claude/skills/find-your-level/SKILL.md (Tokens: ~2023 | Category: anthropic-skill) -->\n---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n\n<!-- File: .claude/skills/learn/SKILL.md (Tokens: ~2259 | Category: anthropic-skill) -->\n---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n\n<!-- File: .claude/skills/start-learning/SKILL.md (Tokens: ~2131 | Category: anthropic-skill) -->\n---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n\n<!-- File: certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/references/review-checklist.md)\n\n<!-- File: certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# migration-review-skill\n\nPath: `certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/lessons/19-claude-code-memory-rules-skills-and-ci/outputs/migration-review-skill/SKILL.md)\n\n<!-- File: certifications/claude/references/ccar-f-exact-mechanics.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `certifications/claude/references/ccar-f-exact-mechanics.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/certifications/claude/references/ccar-f-exact-mechanics.md)\n\n<!-- File: skills/check-understanding/SKILL.md (Tokens: ~2029 | Category: anthropic-skill) -->\n---\nname: check-understanding\nversion: 1.0.0\ndescription: Phase quiz for AI Engineering from Scratch. Trigger with \"quiz me\", \"test phase\", \"check my understanding\", \"do I know phase 3\", or `/check-understanding <phase>`.\n---\n\n# Check Understanding\n\nTest your knowledge of a completed phase from the AI Engineering from Scratch course.\n\n## Activation\n\nThis skill activates when the user says things like:\n- `/check-understanding 3` or `/check-understanding deep-learning`\n- \"quiz me on phase 2\"\n- \"test phase 1\"\n- \"check my understanding of transformers\"\n- \"do I know phase 3\"\n- \"am I ready for the next phase\"\n\n## Input\n\nAccepts a phase number (0-19) or a phase name as argument. If no argument is provided, ask the user which phase they want to be tested on by listing all 20 phases.\n\n## Phase Map\n\nMap the argument to the correct phase directory under `phases/`:\n\n| Input | Directory | Phase Name |\n|-------|-----------|------------|\n| 0, setup, tooling | `00-setup-and-tooling` | Setup & Tooling |\n| 1, math, math-foundations | `01-math-foundations` | Math Foundations |\n| 2, ml, ml-fundamentals | `02-ml-fundamentals` | ML Fundamentals |\n| 3, deep-learning, dl | `03-deep-learning-core` | Deep Learning Core |\n| 4, cv, computer-vision, vision | `04-computer-vision` | Computer Vision |\n| 5, nlp | `05-nlp-foundations-to-advanced` | NLP -- Foundations to Advanced |\n| 6, speech, audio | `06-speech-and-audio` | Speech & Audio |\n| 7, transformers | `07-transformers-deep-dive` | Transformers Deep Dive |\n| 8, generative, gen-ai, genai | `08-generative-ai` | Generative AI |\n| 9, rl, reinforcement-learning | `09-reinforcement-learning` | Reinforcement Learning |\n| 10, llms, llm, llms-from-scratch | `10-llms-from-scratch` | LLMs from Scratch |\n| 11, llm-engineering, llm-eng | `11-llm-engineering` | LLM Engineering |\n| 12, multimodal | `12-multimodal-ai` | Multimodal AI |\n| 13, tools, protocols, mcp | `13-tools-and-protocols` | Tools & Protocols |\n| 14, agents, agent-engineering | `14-agent-engineering` | Agent Engineering |\n| 15, autonomous | `15-autonomous-systems` | Autonomous Systems |\n| 16, multi-agent, swarms | `16-multi-agent-and-swarms` | Multi-Agent & Swarms |\n| 17, infrastructure, production, infra | `17-infrastructure-and-production` | Infrastructure & Production |\n| 18, ethics, safety, alignment | `18-ethics-safety-alignment` | Ethics, Safety & Alignment |\n| 19, capstone, projects | `19-capstone-projects` | Capstone Projects |\n\n## Procedure\n\n### Step 1: Resolve the Phase\n\nParse the argument. If it is a number, validate it is between 0 and 19 inclusive. If the number is out of range, tell the user: \"Phase [N] does not exist. Valid phases are 0-19.\" and show the full list for them to pick from. If it is a name or keyword, look it up in the Phase Map above. If the keyword does not match any entry in the map, tell the user: \"Unknown phase '[keyword]'. Pick from the list below:\" and present all 20 phases. If no argument is provided, ask the user to pick from the full list.\n\n### Step 2: Read the Phase Content\n\nIf the repo is cloned (a `phases/` directory exists in or above the current directory), find all lesson directories under `phases/<phase-dir>/` and read each lesson's `docs/en.md`. If it is not cloned, get the phase's lesson list from the Contents section of the README (fetch `https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md`), then fetch each lesson's `docs/en.md` from the same raw base URL. These documents contain the teaching material you will generate questions from.\n\nRead as many lesson docs as needed to cover the full breadth of the phase. If a phase has many lessons (15+), prioritize reading a representative spread: first few, middle, and last few.\n\n### Step 3: Generate 8 Questions\n\nCreate exactly 8 multiple-choice questions drawn from the lesson content you just read:\n\n**Questions 1-4: Conceptual (What/Why)**\nThese test understanding of ideas, definitions, and reasoning. Examples:\n- \"What is the purpose of X?\"\n- \"Why does Y happen when Z?\"\n- \"Which statement best describes the relationship between A and B?\"\n- \"What problem does X solve?\"\n\n**Questions 5-8: Practical (How/Build)**\nThese test applied knowledge and implementation awareness. Examples:\n- \"How would you implement X?\"\n- \"Which approach correctly solves Y?\"\n- \"What is the correct order of steps to build Z?\"\n- \"If you observe X during training, what should you do?\"\n\nEach question must have exactly 4 answer options labeled A, B, C, and D. Exactly one option is correct. The wrong options should be plausible but clearly incorrect to someone who studied the material.\n\nTag each question with the specific lesson it draws from (e.g., \"Lesson 03: Matrix Transformations\").\n\n### Step 4: Present Questions One at a Time\n\nUse the AskUserQuestion tool (or equivalent interactive prompt) to present each question individually. Format:\n\n```text\nQuestion 1/8 (Conceptual) -- from Lesson 03: Matrix Transformations\n\nWhat is the geometric interpretation of an eigenvalue?\n\nA) The angle of rotation applied by the matrix\nB) The factor by which the eigenvector is scaled during transformation\nC) The determinant of the transformation matrix\nD) The rank of the matrix after transformation\n```\n\nWait for the user's answer before moving to the next question.\n\n### Answer isolation\n\nKeep the correct option and explanation private until the learner answers the\ncurrent question. Never use a real answer letter, a likely answer, or the\ngenerated answer distribution in a reply-format hint. When a plain-text hint\nis needed, use exactly: `Reply with one letter: <A|B|C|D>.`\n\n### Step 5: Track and Score\n\nKeep a running tally:\n- Total correct out of 8\n- For each wrong answer, record: the question number, the user's answer, the correct answer, and which lesson it came from\n\n### Step 6: Show Results\n\nAfter all 8 questions, display the score and grade:\n\n**7-8 correct: Mastered**\nIf the phase is 19 (Capstone Projects): \"You have mastered Phase 19, the final phase.\" Add \"Congratulations, you have completed the entire curriculum.\" only when you can verify the rest of the curriculum is done (a `LEARNING.md` in the current directory whose Path table shows Phases 0-18 as Done or Skip); a single phase quiz does not prove full completion.\nOtherwise: \"You have a strong grasp of Phase N. You are ready to move on to Phase N+1: [next phase name].\"\n\n**5-6 correct: Almost**\n\"Solid foundation. Review these specific areas before moving on:\"\nThen list the lessons tied to the missed questions.\n\n**3-4 correct: Developing**\n\"You are building understanding but need to revisit some lessons:\"\nThen list each missed question with the lesson to re-read.\n\n**0-2 correct: Start Over**\n\"This phase needs more time. Work through the lessons again from the beginning, focusing on:\"\nThen list all missed topics.\n\n### Step 7: Wrong Answer Breakdown\n\nFor every question the user got wrong, show:\n\n```text\nQuestion N: [question text, abbreviated]\nYour answer: B\nCorrect answer: C -- [the correct option text]\nWhy: [1-2 sentence explanation of why C is correct]\nReview: Lesson NN -- [lesson name] (phases/<phase-dir>/NN-<lesson-slug>/docs/en.md)\n```\n\n### Step 8: What Next?\n\nEnd by offering three choices:\n\n1. **Retake this quiz** -- generate a fresh set of 8 questions from the same phase\n2. **Try another phase** -- pick a different phase to test\n3. **Explain a topic** -- ask about any concept from the questions you missed\n\nWait for the user's choice and act accordingly.\n\n## Rules\n\n- Avoid repeating questions on retakes until the question pool is exhausted. Once exhausted, reshuffle or rephrase questions for subsequent retakes.\n- Questions must be directly grounded in the lesson docs, not general knowledge.\n- Do not show the correct answer until after the user responds.\n- Do not include literal answer letters in examples of how the learner should\n  reply; use `<A|B|C|D>` as the placeholder.\n- Keep question text concise. One or two sentences max.\n- Wrong options must be plausible. No joke answers.\n- If a phase has no lesson docs written yet (no `en.md` files found), tell the user: \"Phase N does not have lesson content yet. Pick a completed phase to quiz on.\"\n\n<!-- File: skills/claude-certification/agents/openai.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Agents Skill\n\nPath: `skills/claude-certification/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/HEAD/skills/claude-certification/agents/openai.yaml)\n\n<!-- File: skills/claude-certification/SKILL.md (Tokens: ~2630 | Category: anthropic-skill) -->\n---\nname: claude-certification\ndescription: >\n  AI-native tutor and onboarding workflow for the four independent Claude\n  certification tracks in AI Engineering from Scratch. Use when a learner\n  wants to choose a Claude certification, prepare for CCAO-F, CCDV-F, CCAR-F,\n  or CCAR-P, resume a certification path, learn the next lesson interactively,\n  run and verify practical labs, build scored artifacts, take a diagnostic or\n  mock exam, or remediate weak exam domains from GitHub with Claude Code,\n  Codex, ChatGPT, Cursor, or another agent.\n---\n\n# Claude Certification Tutor\n\nTurn the repository into a step-by-step tutor. Make the learner explain,\npredict, run, build, and defend each decision. Do not reduce the course to a\nreading list.\n\nOne invocation handles one of four modes: onboarding, one lesson, an\nassessment, or remediation. Resume from `CLAUDE-CERTIFICATION.md` when it\nexists.\n\n## Load the source of truth\n\nPrefer a local clone. Locate the nearest parent containing\n`certifications/claude/program.json`. Otherwise read files from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\nRead these files as needed:\n\n- Program policy and current verification date: `certifications/claude/program.json`\n- Ordered route and domain map: `certifications/claude/tracks/<exam-code>.json`\n- Lesson: `<lesson-path>/docs/en.md`\n- Scenario runner or validator: `<lesson-path>/code/main.py`\n- Tests: `<lesson-path>/code/tests/test_*.py`\n- Reference artifact: `<lesson-path>/outputs/`\n- Lesson quiz: `<lesson-path>/quiz.json`\n- Diagnostic and mock: the `assessments` paths declared by the track\n\nRead the selected track JSON at the start of every session. Its `lessons`\narray is the route order. Do not invent a route, lesson, domain weight, exam\nfact, or official policy from memory.\n\nThe website is an optional interactive view, not a dependency:\n\n```text\nhttps://aiengineeringfromscratch.com/certifications.html\n```\n\nGitHub learners must be able to complete the full tutor loop without opening\nthe website. Certification lessons are maintained for GitHub and the website;\ndo not send them through the repository's book-generation pipeline.\n\n## Select the mode\n\n1. If the learner requests a diagnostic, mock, or domain review, use\n   **Assessment mode**.\n2. If `CLAUDE-CERTIFICATION.md` exists, use **Lesson mode** for the first\n   unfinished route lesson unless the learner names another lesson.\n3. If state is missing, use **Onboarding mode**.\n4. If the learner names one lesson without wanting a plan, teach it in\n   **Lesson mode** and do not create state unless they approve.\n\nNever overwrite existing learner state. If they ask to start over, archive it\nas `CLAUDE-CERTIFICATION-<exam-code>-<YYYY-MM-DD>.md` only after explicit\nconfirmation.\n\n## Onboarding mode\n\nStart with the independence boundary in two sentences: this is original,\nopen-source preparation and is not affiliated with, endorsed by, sponsored by,\nor authorized by Anthropic. It does not issue a credential or guarantee a\npass. Mention that current official access, fees, scoring, and policies can\nchange, then use `program.json` and the official links it declares.\n\nAsk only these three questions:\n\n1. Which outcome fits: knowledge-work fluency, building Claude applications,\n   foundational architecture decisions, or senior production architecture?\n2. What relevant experience do they already have?\n3. How many hours per week can they use, and do they want the track diagnostic\n   now?\n\nMap the outcome to a candidate, then show the track's actual `audience`,\n`recommendedExperience`, lesson count, domains, and study plans before asking\nfor confirmation:\n\n- `ccao-f`: knowledge work and responsible Claude use; coding is not required.\n- `ccdv-f`: engineers building, integrating, securing, and evaluating apps.\n- `ccar-f`: builders defending Claude Code, Agent SDK, API, MCP, context, and\n  orchestration choices.\n- `ccar-p`: senior engineers or architects owning discovery through operations.\n\nFor `ccao-f`, infer guided no-code mode when the learner says they do not code\nor chose knowledge-work fluency. Do not add a fourth onboarding question. Tell\nthem that the tutor will run the repository's Python validators as executable\nrubrics; they will make the decisions and produce the workflow, policy,\nevidence, or review artifact without being required to write code.\n\nIf the diagnostic is accepted, administer the diagnostic declared by that\ntrack before writing the plan. Follow Assessment mode and use its domain\nresults to populate the review queue. A diagnostic changes emphasis, not the\ntrack's prerequisite order.\n\nCreate `CLAUDE-CERTIFICATION.md` with this structure:\n\n```markdown\n# My Claude Certification Path\n<!-- Managed by the claude-certification skill.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Goal\n<learner's reason and intended practical outcome>\n\n## Active track\n- Exam code: <CCAO-F | CCDV-F | CCAR-F | CCAR-P>\n- Track file: certifications/claude/tracks/<exam-code-lower>.json\n- Started: <YYYY-MM-DD>\n- Pace: <hours per week>\n- Diagnostic: <not taken | raw percent and date>\n\n## Route\n| # | Lesson path | Domains | Status | Quiz | Evidence |\n|---|-------------|---------|--------|------|----------|\n<every lesson from the selected track in exact order; first is Next, rest Pending>\n\n## Domain readiness\n| Domain | Blueprint weight | Latest practice | Status |\n|--------|------------------|-----------------|--------|\n<every domain from the selected track>\n\n## Review queue\n| Domain | Lesson path | Reason | Status |\n|--------|-------------|--------|--------|\n\n## Assessment attempts\n| Date | Assessment | Raw score | Conditions | Weak domains |\n|------|------------|-----------|------------|--------------|\n```\n\nIf the learner changes tracks, preserve evidence for shared lesson paths.\nArchive the old active plan before rebuilding the route, and require\nconfirmation before doing so.\n\n## Lesson mode\n\nTeach one lesson per invocation. Read the full lesson, quiz, runnable code,\ntests, and shipped reference artifact before teaching.\n\n### 1. Recall\n\nIf a previous route lesson is complete, ask two questions from its quiz. Give\nbrief feedback. If both answers are wrong, offer review before advancing.\n\n### 2. Explain and challenge\n\nTeach the current lesson in this order:\n\n1. Frame `The Problem` against the learner's goal.\n2. Explain `The Concept` in small sections and pause for predictions.\n3. Use the registered `Interactive Lab` relationship. On the website, have the\n   learner manipulate it. In GitHub-only mode, reproduce the decision by\n   changing inputs to the local scenario runner or reasoning through a concrete\n   case.\n4. Ask the lesson's `pre` and `check` questions at the relevant point. Wait for\n   each answer before revealing its explanation.\n\nAdapt depth to the learner's responses. Do not paste or recite the whole\nlesson.\n\n### 3. Run the practical lab\n\nFrom the repository root, run the actual lesson artifacts:\n\n```bash\npython3 <lesson-path>/code/main.py\npython3 -m unittest discover -s <lesson-path>/code/tests -v\n```\n\nBefore each run, ask the learner to predict the result or failure. Explain the\nobservable state and connect it to the exam decision.\n\n### Guided no-code mode\n\nUse guided no-code mode for CCAO-F learners who do not write software, and for\nany learner who explicitly requests it:\n\n1. Run `main.py` and the tests on the learner's behalf. Explain what each check\n   proves in plain language; do not teach Python syntax unless they ask.\n2. Reproduce the interactive scenario conversationally. Ask the learner to\n   choose inputs, predict the gate, and defend the decision before showing the\n   result.\n3. Give a Markdown or JSON template under the learner-owned artifact path and\n   fill it only from their answers. The learner owns the judgment even when the\n   agent handles serialization.\n4. Validate the artifact or grade it against the documented rubric. Translate\n   every finding into a concrete revision question.\n5. Record `guided no-code` in the evidence note. Never claim the learner wrote\n   or understood implementation code they did not inspect.\n\nNo-code changes the interface, not the standard. The learner still explains,\nmanipulates, builds, verifies, and passes the stored quiz.\n\nConceptual lessons still require practical work. Use their policy scorer,\nthreat-model checker, ADR validator, approval simulator, evidence grader, or\nscenario runner. Never invent fake API code to make a conceptual lesson look\ntechnical.\n\nTreat checked-in `outputs/` files as completed references. Have the learner\nbuild or modify their own artifact under:\n\n```text\nlearning-artifacts/claude/<exam-code>/<lesson-slug>/\n```\n\nDo not overwrite the reference artifact. Run the lesson validator against a\ncopy when the runner supports a path argument; otherwise compare the learner's\nartifact against the documented rubric and record the limitation.\n\nDo not mark practical work verified if the runtime or tests did not actually\nrun. Record `lab pending` and give the exact command instead.\n\n### 4. Verify understanding\n\nAsk every `post` question from `quiz.json`, one at a time, with no hints. Use\nthe file's explanation after each answer. Score exact answers as `N/M`.\n\nMark the lesson `Complete` only when all are true:\n\n- the learner can explain the central decision in their own words;\n- the scenario runner and tests pass, or an explicit environment limitation is\n  recorded;\n- the learner produces or defends the shipped artifact;\n- the post-quiz score is at least 70 percent.\n\nIf theory passes but the artifact is missing, use `Theory complete, lab\npending`. If the quiz is below 70 percent, add the missed domain and lesson to\nthe review queue.\n\nUpdate `CLAUDE-CERTIFICATION.md` with the score, evidence path, note, and next\nroute lesson. Preserve track order and prerequisite order.\n\n## Assessment mode\n\nUse the exact original assessment JSON declared by the selected track. Do not\ngenerate replacement questions when a diagnostic or full mock already exists.\n\n1. State the question count and declared time limit. If the harness cannot\n   enforce time, record the attempt as untimed.\n2. Present one question at a time with lettered options. For `multiple`, say\n   `Select all that apply` and accept a set of letters.\n3. Do not show hints, the `correct` field, explanations, or references until\n   submission.\n4. Score by exact set equality. Multiple-response questions receive no partial\n   credit, matching the local assessment runtime.\n5. Report raw percentage and per-domain results. Say explicitly that this is\n   not Anthropic's scaled score and cannot predict an official result.\n6. For every miss, show the stored explanation and internal lesson references.\n   Add weak domains and referenced lesson paths to the review queue.\n7. Append the attempt to `CLAUDE-CERTIFICATION.md` without changing old rows.\n\nAfter a diagnostic, continue the ordered route while emphasizing weak domains.\nAfter a full mock, require remediation and another evidence-backed attempt\nbefore saying the learner is ready. Never claim that a learner will pass.\n\n## Capstone and live wire boundaries\n\nRequire the selected track's capstone artifact and run its validator. A\ncompleted reference packet is an example, not proof that the learner built or\ncan defend one.\n\nLesson 30 includes an offline simulator by default. Use its optional real\nMessages API wire mode only when the learner explicitly asks, network access is\nallowed, and both `ANTHROPIC_API_KEY` and `ANTHROPIC_MODEL` are provided through\nthe environment. Never print, persist, or place a key in source. A missing key\nmust skip the live test rather than block the offline course.\n\n## Close each session\n\nEnd with four compact facts:\n\n- what decision the learner can now defend;\n- lab and artifact verification state;\n- quiz score or assessment domain result;\n- the exact next lesson path and `/claude-certification` to resume.\n\n<!-- File: skills/course-guide/SKILL.md (Tokens: ~1716 | Category: anthropic-skill) -->\n---\nname: course-guide\nversion: 1.0.0\ndescription: >\n  Topic router for the AI Engineering from Scratch curriculum. Give it a\n  topic, a question, or a bug you are fighting, and it points at the exact\n  lessons that teach it, plus the right next command. Trigger phrases:\n  \"where do I learn\", \"which lesson covers\", \"course guide\", \"I'm stuck on\",\n  \"what should I do next\", \"teach me MCP\", \"teach me Agent Skills\", \"where\n  do I prepare for a Claude certification\"\ntags: [navigation, curriculum, ai-engineering, router]\n---\n\n# Course Guide\n\nYou are the wayfinding layer over the **AI Engineering from Scratch**\ncurriculum: 523 lessons, 20 phases. The learner tells you what they want to\nunderstand, build, or fix; you tell them exactly where in the course that\nlives and which command to run next. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery recommended next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to teach this\n  lesson.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse natural language.\n\n## Routing table\n\nThe curriculum's single source of truth is the Contents section of the repo\nREADME: every phase has a table listing each lesson's number, title, type\n(Build/Learn), language, and directory path. Read `README.md` locally if the\nrepo is cloned; otherwise fetch:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/README.md\n```\n\nFor term definitions, the glossary lives at `glossary/terms.md` (same rule:\nlocal first, raw fallback).\n\nClaude certification routes are a separate, AI-native curriculum. For CCAO-F,\nCCDV-F, CCAR-F, CCAR-P, Claude certification, exam preparation, diagnostics, or\nmocks, route to `claude-certification`. Its sources are\n`certifications/claude/program.json`, `certifications/claude/tracks/*.json`, and\n`certifications/claude/GETTING_STARTED.md`.\n\nModel Context Protocol (MCP) has a focused route. For MCP clients, servers, JSON-RPC,\nstateless requests, transports, MRTR, tasks, authorization, gateways,\nregistries, reliability, or conformance, route to `learn-mcp`.\nIts source of truth is `learning-paths/model-context-protocol.json`, its order is\nmanifest order rather than numeric next navigation, and its state lives in\n`MCP-LEARNING.md`.\n\nAgent Skills has a separate focused route. For Agent Skills, `SKILL.md`, skill\ndiscovery, invocation, human or model invocability, permission boundaries,\nsandboxes, skill evals, packaging, or portability, route to\n`learn-agent-skills`. Its source of truth is\n`learning-paths/agent-skills.json`. This route intentionally contains five\nordered lessons, so it is the exception to the usual 1-3 lesson limit. Tool\npoisoning is a knowledge preflight for Lesson 26; Lesson 15 is an optional\nrefresher outside the route.\n\nReverse Engineering has a focused route. For file formats, ELF or Mach-O,\ndisassembly, control-flow graphs, decompilation, lifting, or binary evidence,\nroute to `learn-reverse-engineering`. Its source of truth is\n`learning-paths/reverse-engineering.json`, and its state lives in\n`REVERSE-ENGINEERING-LEARNING.md`. Every target is a program the learner built.\n\n## How to route\n\n1. **Interpret the ask**, which arrives in one of six shapes:\n   - *Topic* (\"attention\", \"how do diffusion models work\") → find the\n     lessons that teach it.\n   - *Struggle* (\"my agent loops forever\", \"loss goes to NaN\") → find the\n     lessons whose material diagnoses it. Route bugs to the concept behind\n     them, not just the tool: a NaN loss points at the loss-functions and\n     numerical-stability lessons, not merely a framework FAQ.\n   - *Meta* (\"what should I do next\", \"am I ready for phase 7\") → read\n     `LEARNING.md` in the current directory if it exists and answer from\n     their actual progress; otherwise recommend `start-learning` using the\n     host invocation contract.\n   - *Certification* (\"prepare me for CCDV-F\", \"Claude architect mock\") →\n     route directly to `claude-certification`. Do not mix certification state\n     into `LEARNING.md`; that tutor uses `CLAUDE-CERTIFICATION.md`.\n   - *Model Context Protocol (MCP)* (\"teach me MCP\", \"build a production MCP server\")\n     → route directly to `learn-mcp`. Do not place the learner in\n     the generic phase sequence; use the 17 ordered lessons in its manifest.\n   - *Agent Skills* (\"teach me skills\", \"how does a skill run in a sandbox\")\n     → route directly to `learn-agent-skills`. Do not send the learner from\n     Lesson 22 to numeric Lesson 23; the manifest order is 22, 24, 25, 26, 27\n     and progress lives in `AGENT-SKILLS-LEARNING.md`.\n\n2. **Scan the Contents tables** for matching lessons by title and phase\n   theme. Prefer precision: 1-3 lessons, not a phase dump. For a *struggle*,\n   titles are not enough evidence: fetch each shortlisted lesson's\n   `docs/en.md` (local first, raw fallback) and confirm it actually covers\n   the failing concept before recommending it. Skip this scan for the focused\n   Model Context Protocol (MCP) and Agent Skills routes and use their manifests instead.\n\n3. **Answer in this shape**, and keep it under ~12 lines:\n   - The 1-3 lessons: phase, number, title, one line on why this one, and\n     the direct link `https://aiengineeringfromscratch.com/lesson?path=phases/<phase-dir>/<lesson-dir>`.\n   - Prerequisites, only if genuinely needed (\"this assumes the backprop\n     lesson; skip it if you can already derive a gradient by hand\").\n   - The next action, rendered with the host invocation contract: `learn` to\n     be taught the lesson right now, `check-understanding <phase>` to test\n     instead, or `start-learning` if they have no plan and seem to want one.\n     For Model Context Protocol (MCP), give the manifest link and make\n     `learn-mcp` the next skill. For Agent Skills, give the five\n     lesson order once and make `learn-agent-skills` the next skill.\n\n4. **If nothing matches**, say so plainly and name the closest phase. Never\n   invent a lesson that does not exist.\n\nThe learner may also just be deciding between the course's own commands.\nThe full set, for reference: `start-learning` (build the plan), `learn` (next\nlesson, taught interactively), `check-understanding <phase>` (phase quiz),\n`find-your-level` (placement only), and `course-guide` (this). Render the\nselected skill with the host invocation contract above.\nUse `learn-agent-skills` for the focused Agent Skills route and its\n`AGENT-SKILLS-LEARNING.md` state.\nUse `learn-mcp` for the focused MCP route and its\n`MCP-LEARNING.md` state. Use the host invocation recorded in the\nmanifest.\nUse `claude-certification` for a certification route, lab, diagnostic, mock,\nor remediation session.\n\n<!-- File: skills/find-your-level/SKILL.md (Tokens: ~2023 | Category: anthropic-skill) -->\n---\nname: find-your-level\nversion: 1.0.0\ndescription: >\n  Interactive quiz that maps your AI/ML knowledge to a starting point in the\n  523-lesson, 20-phase AI Engineering from Scratch curriculum.\n  Trigger phrases: \"where should I start\", \"find my level\", \"what do I know\",\n  \"which phase\", \"assess my knowledge\", \"placement test\", \"skip ahead\"\ntags: [assessment, onboarding, curriculum, ai-engineering]\n---\n\n# Find Your Level\n\nYou are administering a placement quiz for the **AI Engineering from Scratch**\ncurriculum (20 phases, 523 lessons). Your job is to figure out where the\nlearner should begin so they skip material they already know and land right\nwhere the challenge starts. Works with any agent.\n\n## Quiz Structure\n\nThere are 5 knowledge areas, 2 questions each, 10 questions total. Present\nthem in rounds of 2 (one round per area). After the learner answers both\nquestions in a round, score that area before moving on.\n\n## Scoring\n\nEach question is worth 1 point (0 = wrong or blank, 1 = correct). Each area\nscores 0-2. Total score ranges from 0 to 10.\n\n## Administering the Quiz\n\nStart by greeting the learner briefly, then jump straight into Round 1. If\nyour environment has a structured question/option tool, use it for every\nquestion; otherwise present the lettered options as plain text and wait for\nthe reply. After each round, tell the learner their score for that area\n(e.g. \"Math & Statistics: 2/2\") before moving to the next round. Keep\ncommentary short. Do not explain the answers until the very end.\n\n### Answer isolation\n\nThe answer key is intentionally stored in `references/answer-key.md`, outside\nthis quiz body. Do not read that reference before the learner submits both\nanswers for the current round. Then read only that round's key, score it, and\nkeep its explanation private until all five rounds are complete. Do not preload\nlater rounds.\n\nNever put a real answer letter, a likely answer, or the answer distribution in\na reply-format example. For plain text, use this neutral prompt exactly:\n`Reply with Q1: <letter>, Q2: <letter>.` Substitute the current question\nnumbers, but keep both values as `<letter>`.\n\n---\n\n### Round 1 -- Math & Statistics\n\n**Q1.** You have two vectors, a = [1, 2, 3] and b = [4, 5, 6]. What is their\ndot product?\n\n- A) 32\n- B) 21\n- C) 15\n- D) 27\n\n**Q2.** A fair coin is flipped 3 times. What is the probability of getting\nexactly 2 heads?\n\n- A) 1/4\n- B) 1/2\n- C) 1/8\n- D) 3/8\n\n---\n\n### Round 2 -- Classical ML\n\n**Q3.** In a classification task with 90% negative and 10% positive samples,\na model predicts everything as negative. What is its accuracy?\n\n- A) 50%\n- B) 90%\n- C) 10%\n- D) 0%\n\n**Q4.** Which of the following is a hyperparameter of a Random Forest?\n\n- A) The learned split thresholds\n- B) The leaf node predictions\n- C) The number of trees\n- D) The Gini impurity at each node\n\n---\n\n### Round 3 -- Deep Learning\n\n**Q5.** During backpropagation, what does the chain rule compute?\n\n- A) The loss gradient for each trainable weight\n- B) The best learning rate for the current optimizer\n- C) The exact number of layers the network requires\n- D) The batch size used for each training step\n\n**Q6.** What problem do residual connections (skip connections) in ResNet\nprimarily address?\n\n- A) Poor generalization on small training datasets\n- B) Slow loading of batches from persistent storage\n- C) High activation memory during model inference\n- D) Weak gradient flow through very deep networks\n\n---\n\n### Round 4 -- NLP & Transformers\n\n**Q7.** In the Transformer architecture, what does the attention mechanism\ncompute between?\n\n- A) Pixels and labels\n- B) Encoder and Decoder only\n- C) Queries, Keys, and Values\n- D) Embeddings and positions only\n\n**Q8.** What is the main benefit of LoRA (Low-Rank Adaptation) when\nfine-tuning a large language model?\n\n- A) It retrains every base-model parameter from a completely fresh initialization\n- B) It trains low-rank adapters while the base-model weights stay frozen\n- C) It removes the need for labeled examples or task-specific training data\n- D) It duplicates the model layers to increase its adaptation capacity\n\n---\n\n### Round 5 -- Applied AI\n\n**Q9.** In a RAG (Retrieval-Augmented Generation) system, what happens before\nthe LLM generates an answer?\n\n- A) Relevant documents are retrieved and added to the model prompt\n- B) The whole model is fully retrained on the user's current question\n- C) The user selects every context passage before each model request\n- D) The model searches only its pretrained parameter values\n\n**Q10.** In a multi-agent system, what is the primary purpose of a\n\"coordinator\" or \"orchestrator\" agent?\n\n- A) To replace every specialist agent with one general-purpose model\n- B) To assign tasks, route messages, and coordinate the other agents\n- C) To maximize token usage across every agent interaction\n- D) To keep an identical backup model ready for system failures\n\n---\n\n## After All 5 Rounds\n\nDisplay the area breakdown and total:\n\n```text\nMath & Statistics:    X/2\nClassical ML:         X/2\nDeep Learning:        X/2\nNLP & Transformers:   X/2\nApplied AI:           X/2\n----------------------------\nTotal:                X/10\n```\n\n## Score-to-Entry-Point Mapping\n\n| Total Score | Entry Point | What It Means |\n|-------------|-------------|---------------|\n| 0-3 | Phase 1: Math Foundations | Start from the ground up |\n| 4-5 | Phase 3: Deep Learning Core | You have math and ML basics |\n| 6-7 | Phase 7: Transformers Deep Dive | You know DL, time for transformers |\n| 8-9 | Phase 11: LLM Engineering | Strong foundations, go straight to LLM apps |\n| 10 | Phase 14: Agent Engineering | You know it all, build agents |\n\n## Personalized Learning Path\n\nAfter revealing the entry point, generate a markdown table covering all 20\nphases. Use the score to determine the status of each phase. Phases below the\nentry point get \"Skip\" (the learner already knows the material). Phases at or\nabove the entry point get \"Do\". If a learner scored 1/2 in an area that maps\nto a skippable phase, mark that phase as \"Review\" instead of \"Skip\".\n\nArea-to-phase mapping for review detection:\n- Math & Statistics (1/2) -> mark Phase 1 as \"Review\"\n- Classical ML (1/2) -> mark Phase 2 as \"Review\"\n- Deep Learning (1/2) -> mark Phase 3 as \"Review\"\n- NLP & Transformers (1/2) -> mark Phases 5 and 7 as \"Review\"\n- Applied AI (1/2) -> mark Phase 14 as \"Review\"\n\nRead the time estimates from ROADMAP.md (the canonical source of truth). Each\nphase heading contains the estimated hours in the format `(~N hours)`. Parse\nthese values instead of using hardcoded numbers. This ensures the learning path\nstays in sync with the roadmap as estimates are updated. If the repo is not\ncloned locally, fetch it from\n`https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md`.\n\n## Output Format\n\nGenerate the table like this:\n\n```markdown\n| Phase | Name | Status | Est. Hours |\n|-------|------|--------|------------|\n| 0 | Setup & Tooling | Skip | -- |\n| 1 | Math Foundations | Review | 30 |\n| 2 | ML Fundamentals | Skip | -- |\n| 3 | Deep Learning Core | Do | 20 |\n| ... | ... | ... | ... |\n```\n\nRules for the table:\n- \"Skip\" phases show `--` for hours (they do not count toward the total)\n- \"Review\" phases show full hours (the learner should skim them)\n- \"Do\" phases show full hours\n- Phase 0 (Setup & Tooling) is always \"Skip\" regardless of score (it is\n  tooling setup, not knowledge)\n- Sum the hours for \"Review\" and \"Do\" phases and show the total at the bottom\n\nAfter the table, add one sentence with the estimated total: \"Your personalized\npath: ~X hours across Y phases.\"\n\nThen add a brief recommendation: which phase to start with, and what to focus\non first based on their weakest area.\n\nFinally, offer the next step: `/start-learning` saves this placement into a\npersistent `LEARNING.md` study plan, and `/learn` starts the first lesson,\ntaught interactively.\n\n<!-- File: skills/learn/SKILL.md (Tokens: ~2259 | Category: anthropic-skill) -->\n---\nname: learn\nversion: 1.0.0\ndescription: >\n  Interactive lesson tutor for the AI Engineering from Scratch curriculum.\n  Reads LEARNING.md, fetches the next lesson, teaches it section by section\n  in the terminal, quizzes at the end, and records progress. Works cloned or\n  entirely over raw.githubusercontent.com — no setup required.\n  Trigger phrases: \"next lesson\", \"teach me\", \"continue the course\",\n  \"let's learn\", \"resume learning\"\ntags: [tutor, curriculum, ai-engineering, interactive-learning]\n---\n\n# Learn\n\nYou are the tutor for the **AI Engineering from Scratch** curriculum. One\ninvocation = one lesson, taught interactively: the learner should type,\nanswer, and run things — never just scroll. Works with any agent.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Render\nevery suggested next action in the correct form:\n\n- Codex: `learn`, `start-learning`, `check-understanding 13`, and other\n  `skill-name` forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/learn`, `/start-learning`, `/check-understanding 13`, and\n  other `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use start-learning to\n  build my course plan.` or `Use check-understanding to quiz me on Phase 13.`\n\nNever present a slash command as universal syntax. If the host is unknown,\nuse the natural-language form.\n\n## Content sources\n\nPrefer local files when the repo is cloned (a `phases/` directory exists in\nor above the current directory). Otherwise fetch from:\n\n```text\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>\n```\n\n- Lesson text: `phases/<phase-dir>/<lesson-dir>/docs/en.md`\n- Lesson quiz: `phases/<phase-dir>/<lesson-dir>/quiz.json`\n- Lesson list for a phase: the Contents section of `README.md` (each phase's\n  table lists every lesson with its directory path and title)\n\n## Resume routing across course modes\n\nBefore Step 0, resolve every \"resume\" or \"continue\" request against these\nsupported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist. If that owner is `learn`,\ncontinue to Step 0; otherwise invoke the named owner and stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, resume it before Step 0: continue here only for `learn`; otherwise\ninvoke that owner and stop this skill. `learn-mcp` owns legacy-file migration\nand collision reporting. If two or more route owners remain, list their\nlearner-facing route names and ask which route to resume before selecting a\nlesson or changing any state. If none exist, continue to Step 0. Never infer a\nroute from file recency or merge one route's progress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner asks for the Model Context Protocol (MCP) path, or either\n`MCP-LEARNING.md` or `MCP-ENGINEERING-LEARNING.md` exists and they ask to\nresume MCP, hand off to the portable skill `learn-mcp`. The focused tutor\nmigrates the legacy filename without discarding learner evidence. Its source\nof truth is `learning-paths/model-context-protocol.json`. Do not choose the\nnext numeric Phase 13\nlesson and do not copy MCP state into `LEARNING.md`; the dedicated tutor owns\nroute order, wire checkpoints, and the security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner asks for the Agent Skills route, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to continue or resume Agent\nSkills, hand off to the portable skill `learn-agent-skills`. Its source of\ntruth is `learning-paths/agent-skills.json`. Render the handoff with the host\ninvocation contract. Do not choose the next numeric Phase 13 lesson and do not\ncopy Agent Skills state into `LEARNING.md`; the dedicated tutor owns the\nfive-lesson order, real-host evidence, sandbox boundaries, the Lesson 25 and\ntool-poisoning prerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner asks for the Reverse Engineering route, or\n`REVERSE-ENGINEERING-LEARNING.md` exists and they ask to continue or resume it,\nhand off to the portable skill `learn-reverse-engineering`. Its source of truth\nis `learning-paths/reverse-engineering.json`. Render the handoff with the host\ninvocation contract. Do not copy its state into `LEARNING.md`; the dedicated\ntutor owns the fourteen-lesson order and the `own-binaries-only` check before\nLesson 32.\n\n## Step 0 — Locate state\n\nRead `LEARNING.md` from the current directory.\n\n- **Found**: the next lesson is the first not-yet-logged lesson of the first\n  phase whose Status is `Do` or `Review` (phase order, lesson order). If the\n  learner names a lesson or topic explicitly (\"teach me backprop\"), honor\n  that instead and note the detour in the log.\n- **Found, but no eligible lesson remains** (every `Do`/`Review` phase is\n  fully logged): do not teach. Congratulate them on completing their path,\n  set any finished phases' Status to `Done`, and offer three real options:\n  work the Review queue, use `check-understanding` on a phase of their choice,\n  or use `start-learning` to extend the plan into skipped phases. Render both\n  skill calls with the host invocation contract.\n- **Missing**: say that `start-learning` builds a personalized plan, render it\n  with the host invocation contract, and\n  offer two options — run it now, or start immediately at Phase 1, Lesson 1\n  without a plan. Never block the lesson on setup.\n\n## Step 1 — Warm-up recall (only if a previous lesson is logged)\n\nBefore new material, ask 2 questions from the **previous** lesson's quiz,\npicked at random. No stakes, no score — one sentence of feedback per answer.\nRetrieval after a gap is what moves knowledge to long-term memory; that is\nthis step's entire job. If the learner gets both wrong, offer to re-do that\nlesson instead of advancing, but let them choose.\n\nKeep each correct option private until the learner answers. Never put a real\nanswer letter, a likely answer, or the quiz's answer distribution in a\nreply-format hint. In plain text, use `Reply with one letter: <A|B|C|D>.`\n\n## Step 2 — Teach the lesson\n\nFetch the lesson's `en.md`. The lessons share a fixed skeleton — problem,\ncore concept, build-it-from-scratch, use-the-production-library, quiz,\nartifact. Teach it in that order, interactively:\n\n1. **Frame the problem** in 2-3 sentences, connected to the learner's\n   Mission from LEARNING.md when it fits naturally. Do not recite the file.\n2. **Core concept**: explain it in your own words at the learner's level,\n   then pause with a comprehension question before any math. Walk equations\n   step by step; ask them to predict the next step where possible\n   (\"what happens to the gradient if x is negative here?\").\n3. **Build it**: walk the from-scratch code in chunks of 5-15 lines. For\n   each chunk: what it does, why it exists, one prediction question. If the\n   repo is cloned and the language runtime is available, run the code and\n   show real output; otherwise trace through it on a tiny concrete input by\n   hand.\n4. **Use it**: show the production-library version and ask the learner what\n   the library is doing for them that the scratch version made explicit.\n5. Keep each pause genuinely interactive: wait for the answer, respond to\n   what they actually said, and adjust depth. A learner saying \"I know this,\n   speed up\" outranks the script.\n\n## Step 3 — Quiz\n\nFetch `quiz.json` and ask every question whose `stage` is `\"post\"` (fall\nback to all questions if none are marked). One at a time, lettered options,\nno hints. After each answer, give the verdict and the explanation from the\nfile. Do not expose `correct`, the answer index, or a literal answer-letter\nexample before the learner responds. Report the score as `N/M`.\n\n## Step 4 — Record\n\nUpdate `LEARNING.md`:\n\n- Append one row to Progress log: date, `<phase>/<lesson>`, score, and a\n  one-line note (something the learner struggled with or said — useful for\n  the next warm-up).\n- Score below 70%: add the lesson to the Review queue with the missed topic.\n- Last lesson of a phase completed: set the phase Status to `Done` and\n  suggest `check-understanding <phase>` for the full phase quiz, rendered with\n  the host invocation contract.\n\nIf there is no LEARNING.md (learner declined setup), skip silently — never\nnag about it after Step 0.\n\n## Step 5 — Close\n\nTwo lines only: what they can now build or explain that they could not an\nhour ago, and the next lesson's title as a hook (\"Next: attention — why\n'the cat sat on the mat' needs 36 dot products\").\n\n<!-- File: skills/start-learning/SKILL.md (Tokens: ~2131 | Category: anthropic-skill) -->\n---\nname: start-learning\nversion: 1.0.0\ndescription: >\n  One-time onboarding for the AI Engineering from Scratch curriculum (523\n  lessons, 20 phases). Interviews the learner, runs the placement quiz, and\n  writes LEARNING.md, a persistent study plan the learn skill drives.\n  Trigger phrases: \"start learning\", \"set up the course\", \"begin the\n  curriculum\", \"onboard me\", \"create my learning plan\"\ntags: [onboarding, curriculum, ai-engineering, learning-plan]\n---\n\n# Start Learning\n\nYou are onboarding a learner into the **AI Engineering from Scratch**\ncurriculum: 523 lessons across 20 phases, from linear algebra to autonomous\nagents. Your job is to produce `LEARNING.md`, a single file in the current\ndirectory that captures why they are learning, where they should start, and\nwhat their path looks like. Every later `learn` session reads and updates\nthis file, so treat it as the learner's source of truth.\n\nWorks with any agent. If your environment has a structured question/option\ntool, use it for every question; otherwise present lettered options as plain\ntext and wait for the reply.\n\n## Host invocation contract\n\nSkill names are portable, but invocation syntax belongs to the host. Before\nshowing a next command, use the correct form:\n\n- Codex: `start-learning`, `learn`, `course-guide`, and other `skill-name`\n  forms, or tell the learner to choose the skill from `/skills`.\n- Claude Code: `/start-learning`, `/learn`, `/course-guide`, and other\n  `/skill-name` forms.\n- Other compatible hosts: natural language such as `Use learn to start my\n  first lesson.`\n\nNever present a Claude Code slash command as universal syntax. When the host is\nunknown, use the natural-language form.\n\n## Resume routing across course modes\n\nBefore generic onboarding, resolve every \"resume\" or \"continue\" request\nagainst these supported state files and their route owners:\n\n- `LEARNING.md` belongs to `learn` for the full curriculum.\n- `MCP-LEARNING.md` belongs to `learn-mcp` for the Model Context Protocol\n  (MCP) route.\n- `MCP-ENGINEERING-LEARNING.md` is the legacy filename for that same\n  `learn-mcp` route, not a separate route.\n- `AGENT-SKILLS-LEARNING.md` belongs to `learn-agent-skills`.\n- `REVERSE-ENGINEERING-LEARNING.md` belongs to `learn-reverse-engineering`.\n- `CLAUDE-CERTIFICATION.md` belongs to `claude-certification`.\n\nIf the learner names a route in a resume or continue request, dispatch to its\nowner immediately even when other state files exist, then stop this skill.\n\nFor an unnamed resume or continue request, collect the owners whose state files\nexist, grouping both MCP filenames under `learn-mcp`. If exactly one route owner\nremains, invoke it and stop this skill before generic onboarding. `learn-mcp`\nowns legacy-file migration and collision reporting. If two or more route owners\nremain, list their learner-facing route names and ask which route to resume\nbefore running placement or changing any state. If none exist, continue with\ngeneric onboarding. Never infer a route from file recency or merge one route's\nprogress into another state file.\n\nLegacy runtimes may expose `learn-mcp-engineering` as an alias. Accept it only\nto reach `learn-mcp`; render every learner-facing handoff as `learn-mcp` and\nname the route Model Context Protocol (MCP).\n\n## Focused MCP handoff\n\nIf the learner explicitly wants Model Context Protocol (MCP) rather than the\nfull course, do not run placement and do not create `LEARNING.md`. Route to\nthe portable skill `learn-mcp`, whose source is\n`learning-paths/model-context-protocol.json` and whose state file is\n`MCP-LEARNING.md`. Use `learn-mcp` in Codex,\n`/learn-mcp` in Claude Code, or ask another compatible host to use\n`learn-mcp`. The dedicated tutor owns lesson selection, wire\nevidence, and the public-deployment security gate.\n\n## Focused Agent Skills handoff\n\nIf the learner explicitly wants Agent Skills instead of the full course, or\n`AGENT-SKILLS-LEARNING.md` exists and they ask to resume that route, do not run\nplacement and do not create `LEARNING.md`. Route to the portable skill\n`learn-agent-skills`, whose source is `learning-paths/agent-skills.json` and\nwhose state file is `AGENT-SKILLS-LEARNING.md`. Use `learn-agent-skills` in\nCodex, `/learn-agent-skills` in Claude Code, or ask another compatible host to\nuse `learn-agent-skills`. The dedicated tutor owns the five-lesson order,\nreal-host evidence, sandbox boundaries, the Lesson 25 and tool-poisoning\nprerequisite gate before Lesson 26, and the release gate.\n\n## Focused Reverse Engineering handoff\n\nIf the learner explicitly wants Reverse Engineering instead of the full course,\nor `REVERSE-ENGINEERING-LEARNING.md` exists and they ask to resume that route,\ndo not run placement and do not create `LEARNING.md`. Route to the portable\nskill `learn-reverse-engineering`, whose source is\n`learning-paths/reverse-engineering.json` and whose state file is\n`REVERSE-ENGINEERING-LEARNING.md`. Use `learn-reverse-engineering` in Codex,\n`/learn-reverse-engineering` in Claude Code, or ask another compatible host to\nuse `learn-reverse-engineering`.\n\nIf `LEARNING.md` already exists, do not overwrite it. Summarize what it says\n(mission, entry point, progress so far) and offer exactly three paths:\n\n- **Resume**: invoke `learn` with the host syntax above; skip the interview and\n  placement entirely.\n- **Re-run placement**: administer the quiz again, then update only the\n  Placement section and the Path statuses; keep the Mission, the Progress\n  log, and the Review queue untouched.\n- **Start over**: only after an explicit confirmation, rename the current\n  file to `LEARNING-<YYYY-MM-DD>.md` as an archive, then proceed with the\n  full onboarding below. Never delete or overwrite their history silently.\n\n## Step 1: The interview (3 questions, keep it short)\n\n1. **Why are you learning AI engineering?** Free text. Examples to offer:\n   ship an AI product, career change, understand what I already use daily,\n   research. Capture their answer in their own words because it grounds every\n   future lesson explanation.\n2. **How much time per week?** Options: ~2 h, ~5 h, ~10 h, \"as fast as\n   possible\". Used only to phrase the pace honestly, never to cut content.\n3. **What do you most want to build by the end?** One line. An agent, a\n   trained model, a RAG product, \"not sure yet\" is fine.\n\nDo not ask more than these three. The placement quiz measures knowledge;\nthe interview only captures intent.\n\n## Step 2: Placement\n\nRun the placement quiz from the `find-your-level` skill (it installs\nalongside this one): 5 areas, 10 questions, mapped to an entry phase. Preserve\nthat skill's answer-isolation contract: do not preload later answer-key rounds\nor replace neutral `<letter>` placeholders with real option letters.\n\nIf the learner says they already know where they want to start (\"just start\nme at phase 7\"), respect that and skip the quiz, with the same output\ncontract as a quiz run so the `learn` tutor always finds a well-formed plan:\n\n- Validate the phase is 0-19 and resolve its canonical name; if it does not\n  resolve, list the 20 phases and ask them to pick.\n- In the Path table: phases below the entry point are `Skip`, the entry\n  point and everything above are `Do` (no `Review` rows because there are no area\n  scores to infer them from), and the Est. hours total is the sum of the\n  `Do` rows.\n- In the Placement section write `Score: self-selected` instead of a\n  number.\n\n## Step 3: Write LEARNING.md\n\nCreate `LEARNING.md` in the current directory with exactly these sections:\n\n```markdown\n# My AI Engineering Path\n<!-- Managed by the ai-engineering-from-scratch learning skills.\n     Repo: https://github.com/rohitg00/ai-engineering-from-scratch -->\n\n## Mission\n<their answer to question 1, in their words, plus the build goal from question 3>\n\n## Placement\n- Date: <YYYY-MM-DD>\n- Score: <total>/10 with the area breakdown, or exactly `self-selected` when the quiz was skipped\n- Entry point: Phase <N>: <name>\n- Pace: ~<hours>/week\n\n## Path\n| Phase | Name | Status | Est. hours |\n|-------|------|--------|------------|\n<all 20 phases; Status is Skip, Review, Do, or Done from the placement\nresult. Hours come from ROADMAP.md: read it locally if the repo is cloned,\notherwise fetch\nhttps://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/ROADMAP.md>\n\n## Progress log\n| Date | Lesson | Quiz | Note |\n|------|--------|------|------|\n\n## Review queue\n<empty for now; learn adds lessons the quizzes flag>\n```\n\n## Step 4: Hand off\n\nClose with three lines, nothing more:\n\n- Their entry point and total estimated hours for the Review + Do phases.\n- Give the host-correct invocation for `learn` and say that it starts the first\n  lesson and picks up from this file every time.\n- Give the host-correct invocation for `course-guide <topic>` and say that it\n  can jump to a specific topic instead.\n</yakaai_skills>"}