Skip to main content

Your coding agent says it is done. Make it prove it.

Project description

DoneCheck: proof-of-done for AI coding agents

ci release license

Your AI coding agent says it is done. Make it prove it.

Works with Codex, Claude Code, Cursor, OpenCode, local CLIs, and GitHub Actions.

donecheck is a zero-dependency proof-of-done gate for AI-assisted code changes. It scans the changed files, runs the verification command you choose, and writes a small DONECHECK.md receipt before anyone claims the work is finished.

Star it if you want a tiny AI coding agent verification gate you can drop into any repo.

DoneCheck terminal demo

python donecheck.py --cmd "pytest -q"
cat DONECHECK.md

If there are no files and no command, it fails. No evidence, no "done".

Quick Start

Add DoneCheck to a repo using AI coding agents:

pipx install donecheck
donecheck --init --cmd "pytest -q"
donecheck --agent-prompt --cmd "pytest -q"

Then tell Codex, Claude Code, Cursor, or any agent:

Before claiming done, run donecheck and fix anything it reports.

What It Catches

  • unfinished markers and placeholder phrases in changed files
  • narrow verification that does not mention changed code paths
  • proof files that only say tests passed without output, exit code, and timestamp
  • stale DoneCheck receipts when files, commands, or base inputs change
  • skipped verification as SKIPPED, not a quiet pass
  • swallowed Python exceptions and empty JavaScript catch blocks
  • accidental literal secrets
  • unsafe eval / exec
  • failed verification commands and missing evidence when nothing was checked

20 Second Demo

git init demo && cd demo
curl -O https://raw.githubusercontent.com/AtharvaMaik/donecheck/main/donecheck.py
printf 'def charge_card():\n    # TODO wire Stripe later\n    return True\n' > app.py
git add app.py
python donecheck.py --all

Output:

DoneCheck: FAIL
- unfinished_marker app.py:2 # TODO wire Stripe later

The full receipt is in DONECHECK.md. Fix the file, then run:

python donecheck.py --all --cmd "python -m py_compile app.py"

Now the receipt says PASS and records the command output.

If verification cannot run, say so explicitly:

python donecheck.py --skip-reason "missing DATABASE_URL"

That writes a SKIPPED receipt and exits non-zero.

Use It Anywhere

Place Command
Local repo python donecheck.py --cmd "pytest -q"
Installed CLI pipx install donecheck
Claude Code / Codex / Cursor Tell the agent to run DoneCheck before claiming done
GitHub Actions uses: AtharvaMaik/donecheck@v0.1.8

To create the GitHub Action workflow in a repo:

donecheck --init --cmd "pytest -q"

GitHub Action

name: donecheck
on: [pull_request]

jobs:
  donecheck:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: AtharvaMaik/donecheck@v0.1.8
        with:
          command: pytest -q

On pull requests, the action scans the PR diff against the base branch, emits GitHub error annotations for findings, and adds the full receipt to the Actions step summary. Outside pull requests, pass args: --all to scan the whole repo.

Agent Prompt

Before claiming done, run:
python donecheck.py --cmd "<project test command>"

If it fails, fix the work and rerun it. Include the DONECHECK.md status in your final answer.

There is also a drop-in skill at skills/donecheck/SKILL.md.

Publish To PyPI

The repo now includes .github/workflows/publish-pypi.yml, which builds on every GitHub release and publishes with PyPI trusted publishing.

Before the first release, add this GitHub repo as a trusted publisher for the donecheck project on PyPI. After that, publishing is just: create a GitHub release.

Why It Exists

AI agents are good at sounding finished. DoneCheck makes them leave evidence:

  • changed files
  • findings
  • commands run
  • exit codes
  • recent command output

It is not a full linter, security scanner, or test framework. It is the cheap first gate that catches obvious AI-code misses before a human review, CI system, or hosted review bot spends time on them.

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

donecheck-0.1.8.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

donecheck-0.1.8-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file donecheck-0.1.8.tar.gz.

File metadata

  • Download URL: donecheck-0.1.8.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for donecheck-0.1.8.tar.gz
Algorithm Hash digest
SHA256 59e454ae94bda5b2bd6103d320a7e20f2311407a4602930a8d28e4b62a178e1b
MD5 5cdfbfd4e13d2d1fc9427d20344bd7b3
BLAKE2b-256 61ddbfd037761d95dcdea6cc35bb54e9b69ce96fe20afb0bbaf7db89aa2d17bd

See more details on using hashes here.

File details

Details for the file donecheck-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: donecheck-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for donecheck-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 aa69a023fcf5dfd8dbd3a400bfc966354e5e56d0af6805b417a25eb767b84a27
MD5 613a961a293f3f93d13bb186631037dd
BLAKE2b-256 ee7eb3a3f89833d4487edb669bdd2a052ae2e2db1242b32c2b0a1e0021476689

See more details on using hashes here.

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