doloop: deterministic checks for AI output. Local convention gate (doloop gate) + hosted checks (doloop check / check-code).
Project description
doloop CLI
The deterministic convention gate for AI-written code. It reads your codebase, infers the conventions it already holds (the ones kept in at least 70% of the places they apply), and flags a change that breaks them, with the rule, the line, and the rate behind every call. Same input, same verdict, every run.
Two ways to run it. Pick your privacy posture.
1. Local (default) — your source never leaves your machine
The engine runs on your machine. We ship it as a sealed binary, so your code stays put and the engine is not readable. This is the recommended mode and the one the pre-commit hook and CI action use.
pip install doloopio
doloop gate --staged # gate your staged change before commit
doloop gate path/to/file.py # gate one file against the codebase
Exit code is 0 on pass and 1 on a flagged break, so it drops into a gate:
doloop gate --staged && git commit
2. Hosted (--hosted) — for teams that cannot run a binary
You send only the changed code to api.doloop.io over TLS. It is processed and not stored. Use this
when a sealed binary is not an option in your environment.
export DOLOOP_KEY=dlp_... # from https://api.doloop.io/dashboard
doloop gate --hosted --staged
Honest difference: local keeps your source on your machine; hosted sends the changed code to us (not stored). Same verdict either way.
Pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/ekras-doloop/doloop-cli
rev: v0.1.0
hooks:
- id: doloop-gate
CI
Drop ci/doloop-gate.yml into .github/workflows/. It installs the sealed package on the runner and
fails the check on a convention break.
For your coding agent (MCP)
Let the model gate its own output before it proposes a commit. The MCP server exposes the same local gate as a tool your agent can call, so the agent checks itself against an adversary that read the whole codebase, before the diff ever reaches a human.
pip install mcp
// .mcp.json (or ~/.claude/mcp.json for global)
{
"mcpServers": {
"doloop": { "command": "python3", "args": ["/path/to/doloop_mcp.py"] }
}
}
Tools: doloop_gate(code, codebase, filename) gates a snippet, doloop_gate_staged(codebase) gates the
staged change, doloop_version(). Runs local, source stays on the machine. The agent gets a PASS or
FLAGGED verdict with the rule and the line behind any flag.
What it is, honestly
It gates fit, not correctness. Below the 70% inference floor it owes silence, so a messy or brand-new
codebase can be quiet at first. Safety regressions block; local style only warns. Suppress one flag with
a # donkey:ok comment. The method and its evidence are in the paper: https://doloop.io/paper/
For maintainers: building the sealed engine
The public wheel ships the engine only as the compiled, non-readable module doloop_cli/_engine.
The engine source is never in the distribution.
ENGINE_SRC=/path/to/engine/gate.py ./build_sealed.sh # nuitka (preferred) or cython
python3 -m build --wheel # ships _engine.*.so, not source
In a dev checkout (no sealed build), point the CLI at the engine source:
DOLOOP_ENGINE_PATH=/path/to/engine python3 -m doloop_cli gate --staged
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 doloopio-0.2.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 455.4 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
891053b32f31ce10b833f7942d6dd0699b1acc3256cb52482c5fa5c1de88b726
|
|
| MD5 |
2addca17bc5f8a3d0f5a1dbff39f8567
|
|
| BLAKE2b-256 |
5f165642d5bbf6dca432dd0d7556fab9e9805b78bcf4ebb6c7084d48dd7c533e
|
File details
Details for the file doloopio-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a67f4382879c996221612020f451e7ffc32ccb1a1c11d95c2d8d96cfbb067521
|
|
| MD5 |
50839b426f0385fb7622171b186b2ad7
|
|
| BLAKE2b-256 |
e70680ba0d9ede3d9261e0b8bc94bebed7ac9fd836237b2f5f337300118677f0
|
File details
Details for the file doloopio-0.2.0-cp313-cp313-macosx_11_0_universal2.whl.
File metadata
- Download URL: doloopio-0.2.0-cp313-cp313-macosx_11_0_universal2.whl
- Upload date:
- Size: 457.4 kB
- Tags: CPython 3.13, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
329bc6f1f13f4f3036f9f695276764f782d244adbae85ae722738e82b7615a43
|
|
| MD5 |
b61b79bf7c84f57db0fe01c3adc38232
|
|
| BLAKE2b-256 |
29bde37095e3fb126a6c26af856f335d942ed56d510b239364e5d1c0a5b355ae
|
File details
Details for the file doloopio-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 458.4 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
722b5902b956b9abd7c4453c7b22f29a798a57718f35f9b29c1c95f8ebcc5606
|
|
| MD5 |
3d514689100ab28b2a31ff0d0b882f14
|
|
| BLAKE2b-256 |
c48c44aabbeb19373af9cbfd28cde74a7a825784ebe514ee2f28221c7e7af77f
|
File details
Details for the file doloopio-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55823d9737289f23ef48417b1c7ee96b702acdebcd0e2f96187d09b460fd2e38
|
|
| MD5 |
f04d95aaba00013e0efb32832309952c
|
|
| BLAKE2b-256 |
130e75e1234c41dcaf8a75170962460dbdb61cfc041529a91ffac071c28801bc
|
File details
Details for the file doloopio-0.2.0-cp312-cp312-macosx_11_0_universal2.whl.
File metadata
- Download URL: doloopio-0.2.0-cp312-cp312-macosx_11_0_universal2.whl
- Upload date:
- Size: 453.5 kB
- Tags: CPython 3.12, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d8f6f5d5e028f3fa8103f5a2f74ccb27214fc82a3865106a78187f6b8c8011e
|
|
| MD5 |
b89ca26a0369e85bf8bf307328b25605
|
|
| BLAKE2b-256 |
246c9e4a39f74f305eed071751121a2a94fe804ef613f38053c60a1b662e881a
|
File details
Details for the file doloopio-0.2.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 466.5 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd9fd70371d0b14d12672885245d917f09b701a3c6c8be9bd31d632944627f6b
|
|
| MD5 |
cc2888a95cd1281a3bb566bbe8e2dbd8
|
|
| BLAKE2b-256 |
0dfbf4d3821c7850174d9e88104ff81a37474c7f9aecff20c9ce98ed2ee7e8fa
|
File details
Details for the file doloopio-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 926.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a4ee8f8baae7d8479a1baddf9c195f8dde2433addf858b816fadb4961d17950
|
|
| MD5 |
7cb7c848a0a45dcdd0298f2dcfbe45f2
|
|
| BLAKE2b-256 |
fcd8a078559c1d9a2249bb37b700949ab83bcdfa3bf5180b14a5fa3b5c5219ae
|
File details
Details for the file doloopio-0.2.0-cp311-cp311-macosx_11_0_universal2.whl.
File metadata
- Download URL: doloopio-0.2.0-cp311-cp311-macosx_11_0_universal2.whl
- Upload date:
- Size: 452.7 kB
- Tags: CPython 3.11, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6038b6e9cc869de59cb37e9c960388671d453798b0ebabfc1464ff0d565f7d08
|
|
| MD5 |
1e3fc132b99156f684d128bd9f080266
|
|
| BLAKE2b-256 |
0886b9de050f9a8a43be5de29e98d2d144ac938b705eeefba8cfb6b3f6637d51
|
File details
Details for the file doloopio-0.2.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 446.2 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be9a68a0ece5cf3dfa55363d262466a0d134603dc3a3f2c423ff98e5207cd343
|
|
| MD5 |
3998ead9d6c4cf40c7dbc750e5a22a76
|
|
| BLAKE2b-256 |
3df20b5dc881ca630dca7df8157735787247afdc18e332f5711d603e9e1e9cb6
|
File details
Details for the file doloopio-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 907.7 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18b0b9c7e5e6521b5fe2cff1a2e4fbf602b84567873613574031d2781d17f76e
|
|
| MD5 |
6b687903559f277b99d14d165e7430db
|
|
| BLAKE2b-256 |
dd2fbec754e0f7ab0de375ee3570170fbfc583508bfe6a2f61d7dae9f1a91adc
|
File details
Details for the file doloopio-0.2.0-cp310-cp310-macosx_11_0_universal2.whl.
File metadata
- Download URL: doloopio-0.2.0-cp310-cp310-macosx_11_0_universal2.whl
- Upload date:
- Size: 443.6 kB
- Tags: CPython 3.10, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b109cf82a230eb6b83097a6355f162f0af18d7b4037df010bed9929e258b0660
|
|
| MD5 |
cd5f91e28493cae409228bddef2ebecd
|
|
| BLAKE2b-256 |
aa9ef907313c188c5a573b5100f111788f41aa2a5eb192a30d34ecfccfb28634
|
File details
Details for the file doloopio-0.2.0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 440.1 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631d4064983d42d53c2c23f5eebb112b492aeafd5ca7d74acd8d3d9e268cd11a
|
|
| MD5 |
6d859cbf9a2e0d9ff4eff5ae3323395c
|
|
| BLAKE2b-256 |
4296bf7b04b1e5d44ed70013dba34efdc779c8851adfda644a85d62d01cb31ef
|
File details
Details for the file doloopio-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: doloopio-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 888.6 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac9836335ea7a68e69462ccbfd456653261abc4e51a147ada318cdd951e80432
|
|
| MD5 |
7e6691b9e6ea2368e45ee2705a4a4140
|
|
| BLAKE2b-256 |
a6cbcb782934ddf714b3ee4d7534d8b172d4546fbb5770c22ade91df67cecc47
|
File details
Details for the file doloopio-0.2.0-cp39-cp39-macosx_11_0_universal2.whl.
File metadata
- Download URL: doloopio-0.2.0-cp39-cp39-macosx_11_0_universal2.whl
- Upload date:
- Size: 428.1 kB
- Tags: CPython 3.9, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
238a0e3044b58085639e7aec34a04a89ee8532a01b8f481daae29d82f664d08b
|
|
| MD5 |
d15346dd39c88d2ac410d6bac56aa089
|
|
| BLAKE2b-256 |
a105126d061ad8c411a8b94c3d9ea7509109350939dce2e66c9320a3bdaf1b34
|