npm v0.3.0MIT open sourceClaude · Ollama · GitHub Actions
Can you explain your AI'sown code?
repo-interview reads your repository or pull request and asks what an interviewer or reviewer would. Every question cites real code, and a verifier throws out any question about code that doesn't exist.
of questions cite real code (strict, 3-run average)
10
public repos in 10 languages, measured
3
ways to use it: Claude, terminal, GitHub Action
$0
free and local by default, no API key
Three ways in
Use it where you already work
Same engine everywhere: scan the code, ask about it, check every citation before you see the question.
EasiestInside Claude
No setup beyond Claude
Claude writes and grades the questions; repo-interview gives it the real code and drops anything invented. Tools only read, never run code, and stay inside the project.
claude mcp add repo-interview -- \
npx -y repo-interview mcp
Then: “interview me about this repo”, or “quiz me about my branch”.
Terminal · free and local
Your code stays on your machine
Runs on a small model with Ollama, or any OpenAI-compatible server you host (vLLM, LM Studio) with --provider openai --base-url. 8 questions, a follow-up after a weak answer, then a report of what to study. New in 0.3.0: predict questions (“what will this return?”) built from your own tests, so the right answer comes from a real assertion.
Can you explain the main components of the Express.js application and how they interact?
keptlib/application.js › init
How does Express.js handle errors, and what is the role of middleware in this process?
keptlib/application.js › error
What is the purpose of the Router class in Express, and how can it be used to handle different routes?
droppedlib/router.js › handler
file not found: lib/router.js
These three came from one real run on express. The third sounds right: older Express had a lib/router folder. Today's Express moved its router into a separate package, so the file the model cited doesn't exist.
A model that invents a citation would quiz you on code you don't have. repo-interview checks every cited file and symbol against the repository and drops the question before you see it. For pull requests, the cited file must also be one the PR changed.
Two checks, both reported: strict (exactly as written) and fair (also accepts a path without its folders when only one file matches, and Class::method).
On pull requests
What the Action posted on a real PR
From repo-interview #1, which made the CLI reject bad --count values. 86 seconds on the GitHub runner, including installing Ollama and the model.
github-actionsbotcommented
🧠 repo-interview: questions about this change
[big picture] What is the purpose of the wholeNumber function and how is it used in this change? packages/cli/src/index.ts › wholeNumber
[code] How does the genOpts function now handle validation and type checking of the count and overview options? packages/cli/src/index.ts › genOpts
[code] What error is thrown if the --count option is less than the --overview option, and why is this validation necessary? packages/cli/src/index.ts › generateDiffQuestions
Advisory only: this never blocks the PR. Every question cites a file this PR changed, checked to exist.
Measured, not claimed
How often questions cite real code
10 public repositories in 10 languages, 8 questions each, the small local model qwen2.5-coder:3b, averaged over 3 runs. The verifier drops the rest before you see them.
Every model reply is recorded, so anyone can recheck these numbers offline. Not measured yet: how well grading agrees with a human, and how useful testers find the questions. Method and per-repo results.