Deterministic check runner and log digester for AI-assisted development loops
Let agents move fast.
Keep verification explicit, bounded, and machine-readable.
ckdn (short for checkdown) sits between a coding agent and your project’s verification tools. The agent never reads a 10 000-line pytest log and never decides from prose whether a run “looks green”.
Every check goes through one orchestrator that:
- owns the true process exit code,
- archives the full log as evidence,
- emits a bounded, machine-readable digest — the only thing the agent is supposed to read.
Text-based interpretation of tool output fails two ways: context bloat
(the agent drowns in a thousand-line log) and false green (a collection
error prints no FAILED lines, so a regex calls it clean). ckdn's answer is a
strict status model from both the exit code and a format-aware parser: the
two must agree before anything is called green. ckdn may downgrade green;
it never upgrades red.
Runtime: Python ≥ 3.11, stdlib only for the core CLI (zero third-party
dependencies). The optional MCP server is an extra (ckdn[mcp]).
Install
uv tool install ckdn # global CLI
# or as a project dev dependency:
uv add --dev ckdn
Quick start
cd your-project
ckdn init # writes starter ckdn.toml
echo '.agent-runs/' >> .gitignore
ckdn checks # list configured checks
ckdn doctor # pre-flight: tools on PATH, commands fit parsers
ckdn run ruff # one atomic check → compact digest on stdout
ckdn run lint # alias → members (e.g. ruff, pylint)
ckdn run --all # every atomic check → one aggregate
ckdn show # pretty-print latest digest
ckdn run exits with the original command’s code, so it slots into any hook or
CI step where the raw command used to be — with a bounded, schema-backed
digest as a side effect.
Documentation
Full documentation lives at orenlab.github.io/ckdn:
- Get started — install and first check
- Status model — exit code × parser → one verdict; exit-code contract
- Digests & schemas — the machine-readable contract (
ckdn.digest/2) - Aliases & aggregates — grouped checks and routing
- Baselines — gate CI on new findings only
- Configuration —
ckdn.toml, command policy, working directory - CLI — command reference
- Parsers — built-ins, custom parsers, and plugins
- Agents & MCP — wiring ckdn into an agent loop
- Design & non-goals
License & community
- Copyright (c) 2026 Den Rozhnovskiy <rozhnovskiydenis@gmail.com>
- License: MIT (
SPDX-License-Identifier: MIT) - Changelog: CHANGELOG.md
- Security: SECURITY.md
- Contributing: CONTRIBUTING.md
- Code of Conduct: CODE_OF_CONDUCT.md
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ckdn-1.3.1.tar.gz.
File metadata
- Download URL: ckdn-1.3.1.tar.gz
- Upload date:
- Size: 284.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4363a4c715fe94dadfc905f455a7914dd30dc258b80eebeed89743ef84dd1b7
|
|
| MD5 |
fd29fb4ce273da33410e1e6cfc514373
|
|
| BLAKE2b-256 |
ecce2053434218f2460ff8cfae8e55331db39baeaa9ff4b6a9378c9e7dc92472
|
Provenance
The following attestation bundles were made for ckdn-1.3.1.tar.gz:
Publisher:
publish.yml on orenlab/ckdn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ckdn-1.3.1.tar.gz -
Subject digest:
a4363a4c715fe94dadfc905f455a7914dd30dc258b80eebeed89743ef84dd1b7 - Sigstore transparency entry: 2397164775
- Sigstore integration time:
-
Permalink:
orenlab/ckdn@0b6efc0a2867020f5f1cc319d2c79ebafcfdafef -
Branch / Tag:
refs/tags/v1.3.1 - Owner: https://github.com/orenlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b6efc0a2867020f5f1cc319d2c79ebafcfdafef -
Trigger Event:
release
-
Statement type:
File details
Details for the file ckdn-1.3.1-py3-none-any.whl.
File metadata
- Download URL: ckdn-1.3.1-py3-none-any.whl
- Upload date:
- Size: 93.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a207738c724476422473c65912ad75823b43ab4357a3bc87a56662a41cf2e1d
|
|
| MD5 |
a1ea449ad99d1b8b9d74bae5a2c2de7d
|
|
| BLAKE2b-256 |
e4332506431536462fbc1559ad5f3469bf3103750bbc696682d6618bdda931d9
|
Provenance
The following attestation bundles were made for ckdn-1.3.1-py3-none-any.whl:
Publisher:
publish.yml on orenlab/ckdn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ckdn-1.3.1-py3-none-any.whl -
Subject digest:
8a207738c724476422473c65912ad75823b43ab4357a3bc87a56662a41cf2e1d - Sigstore transparency entry: 2397164849
- Sigstore integration time:
-
Permalink:
orenlab/ckdn@0b6efc0a2867020f5f1cc319d2c79ebafcfdafef -
Branch / Tag:
refs/tags/v1.3.1 - Owner: https://github.com/orenlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b6efc0a2867020f5f1cc319d2c79ebafcfdafef -
Trigger Event:
release
-
Statement type: