A covenant is a promise, not a fence
The disciplines it enforces are the ones a good developer already imposes on themselves. They bind the human exactly as much as the AI, and the framework's own authors get judged by them daily.
A development discipline framework for building alongside an AI coding partner. Polydeukes judges what a developer or an agent is about to do, records the verdict, and by default lets the work proceed.
$ pdks init && pdks-claude-code init
scaffold polydeukes.config.yaml
hook PreToolUse -> covenant check
$ # the agent proposes a write to a protected path
blocked shell-mod packages/core/dist
read-only proof missing; witness with pdks witness
exit 2, and one row in .polydeukes/roi.logThese are other people's numbers, from the papers and system cards that published them. Each one is measured under conditions worth reading, so the conditions are stated with it.
55% → 35%
Anthropic's own anti-hack prompt, given to its own flagship model, cut hacking on Impossible Tasks from 55% to 35%. Sonnet 4.5 went 53% → 20%, Haiku 4.5 30% → 23%, Opus 4.1 80% → 45%.
Impossible Tasks are built to be unsolvable, so the model must give up or hack. On ordinary reward-hack-prone coding tasks Opus 4.5 scores 0%.
Claude Opus 4.5 System Card, §6.10.130% vs 55%
On the same evaluation, the smallest model in the family hacked least and the largest hacked most. Anthropic calls its flagship "comparatively less corrigible when given instructions".
Within one model family on Impossible Tasks. Across vendors the ordering is not monotonic either way, which is the point: you cannot pick a model that will not take the shortcut.
Claude Opus 4.5 System Card, §6.10.154% → 6%
One model, two scaffolds, the same 50 tasks. Across the table the spread reaches 48 points, and it is far smaller for some model families than others.
SWE-bench Verified Mini is 50 tasks, so one task is two points. This measures scaffolding, not constraint enforcement.
Holistic Agent Leaderboard, arXiv:2510.11977, Table A19DO NOT MODIFY THE TESTS
Agents edited the tests anyway. Every prompt variant in the study carried that line verbatim, and the paper's recommendation is to hide the tests or make them read-only.
Measured on constructed impossible and conflicting tasks, where a correct solution does not exist.
ImpossibleBench, arXiv:2510.20270None of this measures Polydeukes. It measures the gap a covenant is meant to sit in: an instruction is a request, and a request has a failure rate. What a framework can add is not a stronger request but a record of what was actually about to happen.
This repository runs the framework against itself. Every Edit, Write, and Bash call is judged before it runs, and every commit is judged again as a diff. Of 81,939 judgments over 20 days, it refused 1.56% and reopened 12.6% of those through a witness. That is one project's record, not a benchmark.
These rows are this repository's own, copied from .polydeukes/roi.log on 2026-09-15. The framework's authors are judged by the disciplines they publish, on every call, and the record is the same one a reader gets.
The disciplines it enforces are the ones a good developer already imposes on themselves. They bind the human exactly as much as the AI, and the framework's own authors get judged by them daily.
Every declared discipline is judged on every matching call. What a break then does is a second question. By default it is recorded with its reason and the call continues. enforce: block is a promotion the author chooses.
.polydeukes/roi.log holds one line per verdict, in a vocabulary that says what was observed rather than how it felt.
pdks-claude-code initJudge a session callpdks covenant check --diffJudge a finished change setpdks docs searchRead the docs offlinepdks explainSee what each surface judgesAn exit code alone does not describe all observations. Exit 0 means the operation may continue, not that every discipline passed.
passedadvisedblockedwitnessedInstall it, wire one surface, and send the hook a proposed write. The tutorial ends with a verdict on your screen and a row in your own log.