The learning loop: a mission brief skinned by the client’s Context Pack, an attempt with the learner’s own AI tool or the embedded chat, the Judge returning six scores with quoted evidence, the pass computed server-side, Kai’s debrief ending in one thing for next time, the living profile — and a retry arrow back to the attempt, free and unlimited. Context Pack: brand · terms · tools · policy Mission brief in the learner’s world Attempt with own AI tool or embedded chat Judge: six scores + quoted evidence Kai: one thing for next time Living profile private by default pass computed server-side retry — free, unlimited
Brief → attempt with any tool → Judge scores with evidence → pass computed server-side ◆ → Kai debriefs → living profile, with retries looping back to the attempt.

01 ·The problem.

Companies buy AI licences and usage plateaus at novelty. The thesis: this is an adoption gap, not an awareness gap — and adoption is built by repeated, realistic practice with honest feedback, not by courses about AI. Three negations shaped the product and are enforced in code: not a course (the words module, lesson, course and training are banned in learner-facing copy), not a wrapper around one model, not surveillance.

02 ·Discovery and the decision.

The decision was to build a practice loop, not a course, and not a wrapper around one model. Onboarding takes five minutes and asks eight questions; a live diagnostic sets a silent baseline. Each mission brief is rendered in the learner’s own industry. They attempt it in the embedded chat or paste back an exchange from any tool their company allows — both routes score through the same code path. The Judge scores six dimensions with verbatim evidence; the pass is computed server-side. Kai debriefs against the learner’s own trajectory and ends with one line: “One thing for next time.” Retries are free and unlimited, because the miss-then-pass pair is where the skill forms. A winning pattern can be published to the team playbook.

03 ·The build.

The single most consequential design decision: referee and coach, kept apart. The Judge is impartial and evidence-quoting; it returns scores and quotes only, application code does the arithmetic, and it never sees the golden answer or the brief. Kai carries all narrative and never produces a submittable answer: the hint ceiling is a worked example from a different scenario, enforced in the prompt and by a server-side similarity screen. A scorer that encourages stops being trusted; a coach that scores stops being safe to be honest with.

Who is allowed to say you got better is a structural property, not a convention. The learner’s profile is event-sourced and append-only. Writer authority is enforced in one database function: the Judge may append dimension trends, the mission engine may move stage and streak, Kai may set one focus goal, and the learner owns their tool list. Anything else throws and is logged. Kai cannot flatter a learner into a higher score; the Judge cannot promote anyone.

04 ·Trust.

Built for the buyer’s procurement review. A client-free core with a CI gate against client strings. Row-level tenancy in Postgres. Learner scores are private by default; admin views sit behind a k≥5 anonymity floor enforced in SQL. Every model call is metered against an envelope of at most 15 frontier calls per learner-week, visible on an admin tile. Learner text enters prompts wrapped as untrusted content; suspected injection is logged, never punished.

05 ·Launch and learn.

Built July to September 2026 with AI-assisted tooling, held to a written constitution and an append-only decision log: 137 decisions, 800+ tests, 48 missions across 8 seasons, 6 Context Packs. Deployed on Railway; in pilot with global IT services firms, where it scores the artefacts of a Forward Deployed Engineer programme. Every client is a versioned Context Pack; the handover unit is the pack plus its specification, never a fork. The metered envelope of at most 15 frontier calls per learner-week gives seat pricing a real unit cost to stand on.

The product is the loop, not the model.