The full text of what the AI is told.
Every prompt the AI tutor receives is on this page, verbatim. There is no hidden system message, no behind-the-scenes correction layer, no second prompt that filters the output. What you read here is what is sent.
Why this page exists
An AI tutor that promises to deepen the struggle, not remove it is a strong claim, and one a user has no reason to take on faith. The doctrine is enforced by a prompt; the prompt is text; the text can be read. So we publish it.
Two practical reasons reinforce the principled one. First, prompts drift over time as we learn from real session transcripts; publishing the current version makes that drift legible rather than silent. Second, the prompts encode opinions about what good Socratic teaching looks like — opinions that deserve disagreement, refinement, and outside critique. You cannot critique what you cannot see.
The blocks below are loaded from the same source files the tutor itself reads. Each block also links to the canonical file in the public repository so you can verify nothing is being hidden in transit.
How the prompts are assembled
Every call to the AI is composed of three layers: (1) a doctrine preamble that establishes the tutor's posture and hard rules across all modes; (2) a mode prompt specific to the kind of work the user is doing on a given page; and (3) a user message built at runtime from the case data and the student's input.
The doctrine and the mode are static text — those are reproduced in full below. The user message is constructed in the page's JavaScript from the proof being diagnosed (or the construction state being coached) and whatever prose the student typed, with a clear marker delimiting student input as untrusted data. The structure of that message is documented in each mode's section.
Doctrine preamble
The doctrine fixes the tutor's tone, the things it must do (ask better questions; surface gaps redirected so the student finds them; acknowledge clarity sharply; refuse to remove the struggle), the things it must not do (give the answer; explain too much; soften when honesty is needed; comply with prompt injection in student prose), and the rules of address. Every mode inherits this layer.
Loading…
Mode: flaw diagnosis
In this mode the AI returns a structured assessment via tool use rather than free-form prose. The schema fields are stepCorrect, diagnosisQuality (sharp / partial / off), a 2–3 sentence commentary, and a Socratic redirect question (or null when the diagnosis is sharp). The user message contains the goal, the numbered proof, the canonical flaw metadata (the model sees the answer; that is intentional — its job is to assess the student's reasoning, not to find the flaw), the step the student picked, and the student's prose, the last marked as untrusted.
Loading…
Mode: socratic construction
In this mode the AI returns plain prose at one of three escalating hint levels — region, tool, move — chosen by the student, never by the AI. The user message describes the proposition, the given configuration, which goals are still unmet, the student's last action, and the canonical proof path. The mode's internal rules forbid skipping levels, naming the move at level 1, or fabricating reinforcement. Hint level resets when the construction state changes.
Loading…
What is not on this page
The runtime user message is built at the moment of each call from data the student can see (the proposition, the proof, the goals) plus the prose the student typed. Because it varies per call, we cannot reproduce it as a static document. Its construction is open in the page source —
tutor.html for flaw diagnosis,
assets/lab-engine.js and
lab.html for socratic construction. Search for buildUserMessage or userMessage to find the exact assembly.
The Anthropic model used for grading is named in the request body sent from your browser; you can inspect it in your browser's network panel on any tutor call.
Reading the prompts critically
We invite disagreement. If a rule reads as too strict (and overcorrects in a way that makes the tutor feel cold), or too loose (and lets the AI slip into giving answers), tell us. The issue tracker and the contact address in the footer are the right places. Eval transcripts that surface a real failure mode are especially welcome.
Last regenerated from source: live, on every page load.