PatchQuest is a small, forkable course tracker. It loads one or more JSON course manifests, lets a learner choose a course and path in a browser, and stores answers, evidence, feedback, and completion locally in SQLite. A coding agent uses MCP to guide the learner and evaluate only the answers submitted in the UI.
The included DDD and Hexagonal Architecture course is a seed: a working example of the manifest format, not the product's sole purpose. Replace it or add courses for any subject with the same tracker, UI, and MCP.
Requires Bun 1.3 or newer.
bun install
bun run appOpen http://127.0.0.1:3030. PatchQuest creates one
local SQLite database at .patchquest/progress.db by default. Override its
location with PATCHQUEST_DB_PATH when you need a separate database, for
example for a workshop or test run. Courses load from courses/; set
PATCHQUEST_COURSES_DIR when a fork keeps manifests elsewhere.
The first screen is deliberately short:
- connect a detected Claude Code or Cursor host, or continue without one;
- choose a seeded course and learning path;
- answer in the browser while the MCP-connected agent guides and evaluates;
- return to the same app to resume local progress.
Connect is explicit. PatchQuest adds only its own local MCP entry to the chosen host's user configuration, then asks the learner to restart that host. It never launches an agent, installs an app, or changes unrelated MCP servers.
The UI lets a learner:
- choose a seeded course, then a learning path and workspace/context;
- see every course section and path-specific progress;
- read the current action and its sources;
- submit a diagnostic, exit, or review answer with confidence; and
- see source-linked agent feedback after evaluation.
Courses may optionally declare development and test commands. When a course does, the agent can run only its stated read-only checks, report what is available, and suggest the learner's command. It never installs dependencies or starts a learner server without approval.
Fork this repository, then create a new manifest from the generic seed:
bun run seed -- testing-fundamentals "Testing Fundamentals"Edit the generated courses/testing-fundamentals.json, add its source material,
and restart the UI and MCP server. The complete contract and diagram are in
Course authoring. The shipped DDD example is
courses/ddd-backend-foundations.json.
PatchQuest exposes a stdio MCP server. The app's Connect button is the recommended setup path for Claude Code and Cursor. For another MCP client, use the equivalent of:
{
"mcpServers": {
"patchquest": {
"command": "/absolute/path/to/bun",
"args": ["/absolute/path/to/patchquest/src/mcp.ts"]
}
}
}Configure the host as described in MCP integration. The MCP exposes deterministic tools to read the course, create/select a path, retrieve progress, record reported evidence, and evaluate a submitted answer. It never starts the learner's service or executes their code.
bun run verifyThis runs the local store/API tests and builds the Bun server plus MCP entry points.
PatchQuest binds only to 127.0.0.1. Progress, answers, and workspace paths
stay in the local SQLite database and are ignored by Git. See
SECURITY.md for the operational boundary.