Skip to content

The Practice Repo

The Practice Repo is the guided reference lane for this site. It is a small but realistic application authored with known imperfections: seeded bugs, missing tests, an undocumented module, and a refactor waiting to happen. Built slices carry ground-truth answer keys, so a learner can check their own work without an instructor. Pending slices are marked below and should be treated as walkthroughs until their runnable surface lands.

Status

The Practice Repo is public and clonable: git clone https://github.com/mrfelixwong/agentic-engineering-triage triage. The labs for Modules 0, 1, 2, 3, and 4 are built and runnable; the remaining module slices are still being added — see the module map below.

Stack

The reference implementation is a Python app: a FastAPI backend with a thin web UI, built as a small application flavored by a large language model (LLM) and an agent loop. The choice rests on four points:

  • Python is the default language of AI engineering. The agentic/LLM framework ecosystem (LangChain, LangGraph, CrewAI, AutoGen, Pydantic AI) is Python-first, so the codebase resembles what this audience actually works on.
  • Readability. Python has a low cross-population reading barrier among mainstream languages, which matters for a teaching repo learners must navigate quickly.
  • Double pedagogy. Because the app is a small LLM/agent tool, built exercises teach agent operation while staying in the AI-engineering domain, without turning the curriculum into a course on building retrieval systems from scratch.
  • The thin web UI. It keeps Module 3's visual and browser-validation exercises concrete, which a pure-backend Python repo would lose.

A TypeScript / Next.js variant is the documented alternative for web and product-engineer-heavy cohorts. TypeScript leads general-engineer overlap: it is the most-used language on GitHub by contributor count and the default starting point for Next.js, Astro, SvelteKit, and Remix. It is on the roadmap once the Python version proves the format.

The app

The repo is Triage, a small support-ticket assistant: an LLM classifies an incoming ticket. It is realistic enough to carry the built exercises and small enough to hold in mind at once.

triage/
  app/
    main.py            # FastAPI entrypoint
    llm/client.py      # LLM provider wrapper (model id, retries)
    llm/prompts.py     # prompt templates
    triage/classify.py # core: classify an incoming ticket
    models.py          # pydantic models
  tests/               # pytest; the LLM call is mocked here
  eval/                # offline eval set + runner — the source of truth for prompt changes
  answer-keys/         # ground-truth notes for built slices
  .claude/skills/      # coached skills for selected built slices
  pyproject.toml

This is the layout you get when you clone the repo. The labs work against these files directly.

What's seeded in it

The repo ships with deliberate imperfections. Built imperfections are tied to module exercises and answer keys: a seeded classification bug (Module 3), a missing CLAUDE.md and tangled file layout (Module 1), an under-specified feature request (Module 2), and a recurring manual workflow worth capturing as a skill (Module 4). Later slices are planned for guardrails, orchestration, compounding, economics, and judgment. Pending slices are named in the map so the lessons can stay honest about what is runnable today.

Status

The Modules 0, 1, 2, 3, and 4 labs are runnable now, in the public repo (github.com/mrfelixwong/agentic-engineering-triage), each with its answer key and, where it helps, a coached lesson skill — see the map below. The remaining module slices are still walkthroughs; use the bring-your-own lane for hands-on work on those until each slice lands.

Module → slice → coached skill

The Triage app is built one module-slice at a time: each shipped module gets the smallest runnable piece it needs, rather than a fully-seeded app with nine answer keys up front. Each slice pairs a runnable app surface with a coached instructor skill a learner can run inside Claude Code. Modules 0, 1, 2, 3, and 4 are built; the rest are pending.

Module Triage slice it needs Coached skill Status
0 — Watch the loop The app as-is — observe one agent run end to end — (no coached skill; just run the app) Built
1 — Context Missing CLAUDE.md + a tangled layout to navigate cold /lesson-1-cold-navigation Built
2 — Spec Vague request → build a confidence-score feature from a spec — (self-graded by a test) Built
3 — Verification Seeded billing-misroute bug, pytest, eval with a baseline gate /lesson-3-1-verification Built
3.4 — Guardrails The pre-commit gate hardened into a guardrail set — (pending) Pending
4 — Skills A recurring workflow → build a reusable skill /lesson-4-skills Built
5 — Orchestration A divisible refactor that splits across parallel agents — (pending) Pending
6 — Granular practice Reuses the slices above as decimal sub-lessons (per sub-lesson) Pending
7 — Economics Token/cost instrumentation on the classifier path — (pending) Pending
8 — Judgment A change where the agent's verdict needs a human call — (pending) Pending

The repo is public at github.com/mrfelixwong/agentic-engineering-triage. Answer keys live in answer-keys/ and the three coached skills that exist so far live in .claude/skills//lesson-1-cold-navigation, /lesson-3-1-verification, and /lesson-4-skills, matching the Built rows in the table above. To run a coached skill, a learner copies it into their own .claude/skills/, or works inside the cloned repo where it already lives, and invokes it in Claude Code.

Feedback loop by built slice

Module What you run or produce Where feedback comes from Done when
0 Watch one agent run on Triage and name the loop steps. answer-keys/module-0.md and your transcript notes. You can point to perceive, plan, act, observe, and name the first failure tell.
1 Write a navigational CLAUDE.md. answer-keys/module-1.md and /lesson-1-cold-navigation. A fresh agent opens the right file without you naming the path.
2 Turn a vague confidence-score request into a spec and testable change. answer-keys/module-2.md plus the targeted test. The field exists, is in range, and the test passes.
3 Fix the seeded billing bug through a red test, eval, and gate. answer-keys/module-3.md and /lesson-3-1-verification. pytest passes, python -m eval.run passes, and the gate rejects the regression.
4 Map the harness and capture the repeated verify workflow as a skill. answer-keys/module-4.md and /lesson-4-skills. The map names context, tools, permissions, workflow, and check; the skill runs tests plus eval and reports the baseline result.

Where you practice (recap)

Where Use it to Self-check
Practice Repo (this page) Learn each built move against ground truth. Exact for built slices: a known bug surfaces, a test goes green, or an answer key confirms the move.
Your own codebase Apply the move where it pays off. A judgment cue rather than an exact key.