The CLI entrypoint is case-study. With Docker, run commands through the validator service:
docker compose run --rm validator <command>With local development dependencies installed:
uv run case-study <command>uv run case-study extract "references/Plutos-Assessment.pptx" --summaryUse without --summary to print the full extracted fact model as JSON.
uv run case-study analyze "references/Plutos-Assessment.pptx" --summaryThis runs PPTX/OOXML deterministic checks without the full render/report pipeline.
uv run case-study validate "references/Plutos-Assessment.pptx" \
--out .tmp/validation/plutos \
--summaryOutput artifacts when --out is set:
validation-report.jsonvalidation-report.mdvalidation-report-thin.md- rendered PDF/PNG evidence assets
Print the compact Markdown report:
uv run case-study validate "references/Plutos-Assessment.pptx" \
--out .tmp/validation/plutos \
--thinRender options:
--dpi: PNG rasterization DPI, default144.--timeout: LibreOffice render timeout in seconds, default90.
uv run case-study validate "references/Plutos-Assessment.pptx" \
--out .tmp/validation/plutos-applied \
--ai-decisions .tmp/judge/plutos/judge-decisions.jsonl \
--summaryThis preserves raw deterministic findings and applies model decisions into
ai_review.applied_reviewer_issues.
Generate a validation report first, then run the judge:
uv run case-study judge \
--validation-report .tmp/validation/plutos/validation-report.json \
--output-dir .tmp/judge/plutos \
--deck-name plutos \
--model-name openrouter:google/gemini-3.1-flash-lite-preview \
--concurrency 4 \
--forceUseful options:
--limit: run only the first N selected candidates.--resume: skip successful decisions already present in the output JSONL.--force: rerun even if outputs already exist.--include-image-bytes: include image bytes in debug trace exports.--logfire-httpx-capture-all: enable full HTTPX capture for this run.--sleep-seconds: pause between sequential chunks.
The judge writes decision JSONL and trace/debug artifacts into the output directory.
uv run case-study render "references/Plutos-Assessment.pptx" \
--out .tmp/render/plutos \
--summaryThis is useful when debugging LibreOffice/PyMuPDF rendering independently from rule evaluation.
Static calibration against the annotated Goofy deck:
uv run case-study calibrate "references/Goofy-Assessment-ANNOTATED.pptx" --summaryFull validation calibration with render-derived findings:
uv run case-study calibrate "references/Goofy-Assessment-ANNOTATED.pptx" \
--full-validation \
--out .tmp/calibration/goofy \
--summaryCalibration is for evaluating coverage against annotated examples, not for hardcoding deck-specific logic.
uv run case-study app \
--workspace .deck-validation-traces \
--state-dir .deck-validation-traces/review-state \
--host 0.0.0.0 \
--port 8765You can also serve one fixed validation report:
uv run case-study app --validation-report .tmp/validation/plutos/validation-report.json