Objective tests, judged nuance, and a human override, combined per rubric case into a score students can actually learn from.
A sandboxed pytest runner scores objective cases the moment a student pushes — no waiting, no ambiguity.
An LLM judge evaluates code style and reflection against your rubric levels — the nuance of a TA, at the speed of a script.
Every criterion returns specific, actionable advice — "add a colon", "name the error types" — not just a number.
Students fork the assignment, push their work, and request grading. No uploads, no zip files, real commit history.
Define rubric.json once — automated cases, AI judges, and point levels re-apply on every single submission.
Override any AI or human case, add audit notes, and finalize. Automated cases stay locked — grading you can defend.
From a student's first commit to a graded, explained result — usually in minutes.
Students fork the assignment repo from GitHub with one click.
They commit and push their solution — normal Git, real history.
One click clones the fork, runs tests, and calls the AI judge.
Per-criterion score, why, and how to improve — emailed and on-screen.
Because feedback > grade
Sign in with your Microsoft account and connect a course. Your rubric does the grading from there.