Rejudge is a review tool for coding agents. Your agent asks a question, several models check the code separately, and a judge compares their reports and returns one answer.
There are four ways to check code an agent wrote. Each one catches more than the last.
Reviewers get read-only tools: read, grep, find, ls, git diff. By default they cannot edit files or run shell commands. The judge gets no access to the workspace at all: it sees the three reports and can ask the reviewers more questions, nothing else. Every run ends with a run ID, and rejudge --resume <run-id> reopens the same sessions with a new question.
npm install -g rejudgeUsing a coding agent other than Pi? Install the Agent Skills so it can call Rejudge, through the Skills CLI. Pi is not required on this path.
npx skills add syabro/rejudge -gThe skills are a separate copy, so update them after each Rejudge release with npx skills update -g -y.
Already using Pi? Register this same installation: pi install "$(npm root -g)/rejudge"
Rejudge runs on Pi and reads Pi's provider settings, so any key Pi accepts works here: ANTHROPIC_API_KEYOPENAI_API_KEYGEMINI_API_KEYOPENROUTER_API_KEYOPENCODE_API_KEY and more — the full list is in the Pi docs.
I personally use OpenCode Go because it offers an excellent mix of models for $10 a month (referral link: $5 for you, $5 for me).
For subscription logins Rejudge still goes through Pi. If Pi is not authorized yet, run:
npx -y @earendil-works/pi-coding-agentInside Pi, run /login and finish sign-in with your subscription provider.
Create ~/.config/rejudge/config.json once.
{
"reviewers": [
"opencode-go/deepseek-v4-pro@high",
"opencode-go/mimo-v2.5-pro@high",
"opencode-go/minimax-m3@high"
],
"judge": "opencode-go/glm-5.1@high"
}Two reviewers minimum. Every model needs a reasoning level, and a higher level means a longer and more thorough review: minimal, low, medium, high, xhigh.
rejudge "does this migration need a lock?"
git diff | rejudge "review this change"
rejudge --resume <run-id> "what about the rollback path?"The answer goes to stdout; progress, config, and the run ID go to stderr, so redirecting stdout to a file leaves you the answer and nothing else. Inside Pi the same package registers a native rejudge tool plus the /rejudge and /rejudge-diff workflows.