Skip to main content

Did the agent actually do it? Tamper-evident verification of AI agent work: definition-of-done as code.

Project description

dunnit

Did the agent actually do it?

AI coding agents claim completion when work isn't done: they delete failing tests, add skip markers, hardcode expected outputs, stub functions and declare victory. Research calls it reward hacking. You call it Tuesday.

dunnit is a tamper-evident verifier for agent work. You declare your definition of done in dod.yaml; dunnit verify re-runs the proof itself and inspects the diff for test-gaming. It never trusts the transcript.

pip install dunnit
dunnit init      # write dod.yaml
dunnit verify    # ✓ or ✗, exit code for CI

What it checks (v0.1)

  • Commands — declared proof commands (tests, lint, build) must exit 0, executed by dunnit, not quoted from the agent's chat log.
  • Tamper — git diff of test files: deleted tests, added skip markers, net-removed assertions → hard FAIL.
  • Stubs — changed code scanned for TODO/FIXME, NotImplementedError, swallowed exceptions → WARN.

dod.yaml

version: 1
base: origin/main        # diff against this ref (default: HEAD, i.e. uncommitted work)
checks:
  - name: tests
    run: pytest -q
  - name: lint
    run: ruff check .
tamper: true
stubs: true

Use it everywhere agents work

  • CIdunnit verify exits non-zero on FAIL; --json for machines.
  • Claude Code stop-hook / Cursor rules — make the agent run dunnit verify before it's allowed to say "done".
  • Pythonfrom dunnit import verify; verify("dod.yaml").passed

Roadmap

pytest plugin · coverage non-regression · hardcoded-output detection · optional LLM judge · MCP server (agents self-verify) · signed verdict attestations · JS/Go check packs.

MIT licensed.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dunnit-0.1.0.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dunnit-0.1.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file dunnit-0.1.0.tar.gz.

File metadata

  • Download URL: dunnit-0.1.0.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for dunnit-0.1.0.tar.gz
Algorithm Hash digest
SHA256 85cb06d18a19dd98dedfe2be703b9a317696008a368f771f1c9fb525203d3283
MD5 31a4e249c5a8d64a6f9b7960fe44b4e2
BLAKE2b-256 fc41e34456089415f5bb8d480a26a812e8e8207123628a3d41736cee42185bb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for dunnit-0.1.0.tar.gz:

Publisher: publish.yml on palasht75/dunnit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dunnit-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dunnit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for dunnit-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8b3a8ba36a78b51de9a85d816684a376a07ef2ace2f7600011f91ead2ff9dcb
MD5 398e1f7a2db21df9f12d34109df561c9
BLAKE2b-256 3660c077c6ba375500af0d27bcdc0605158728352b309247c684eb65fca03f29

See more details on using hashes here.

Provenance

The following attestation bundles were made for dunnit-0.1.0-py3-none-any.whl:

Publisher: publish.yml on palasht75/dunnit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page