The checkpoint takes the plan and the uncertainties as explicit arguments, so the agent has to state both before it can be challenged on either — that framing does as much work as the answer does. Pointing the override at a different model than the one being questioned is the difference between a review and an echo.
A metacognitive interrupt for agent runs: one tool that questions the current plan, one that files mistakes against their fixes, and three that maintain a session-scoped set of rules. The questioning itself runs on an LLM you supply a key for.
- A checkpoint call that takes the goal, the plan, progress so far and the stated uncertainties, and returns questions aimed at the assumptions underneath them
- A model override on that call, so the questioning can run on a different model than the agent being questioned
- A choice of provider behind it — Gemini by default, or OpenAI, Anthropic or OpenRouter — with the model pinned or left at the provider's default
- A record of mistakes paired with their solutions, filed by category and type, so a recurring error becomes visible as a pattern
- A session constitution you can append to one rule at a time, overwrite wholesale, or read back mid-run
- Stdio for a local client, or streamable HTTP for a shared one
Node.js, and at least one provider key: GEMINI_API_KEY is the default path, with OPENAI_API_KEY, ANTHROPIC_API_KEY and OPENROUTER_API_KEY as alternatives selected through DEFAULT_LLM_PROVIDER — the checkpoint is an LLM call, so without a key there is nothing to ask. OpenRouter additionally needs DEFAULT_MODEL named. Constitution rules are held in memory for the session, so they exist only as long as the process does. The project is in maintenance mode: security and bug fixes only, no new features. MIT licensed.
One command plus a key — npx -y @pv-bhat/vibe-check-mcp start --stdio, then supply credentials
