Skip to main content

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


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

doloopio-0.2.0-cp313-cp313-win_amd64.whl (455.4 kB view details)

Uploaded CPython 3.13Windows x86-64

doloopio-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

doloopio-0.2.0-cp313-cp313-macosx_11_0_universal2.whl (457.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

doloopio-0.2.0-cp312-cp312-win_amd64.whl (458.4 kB view details)

Uploaded CPython 3.12Windows x86-64

doloopio-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

doloopio-0.2.0-cp312-cp312-macosx_11_0_universal2.whl (453.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

doloopio-0.2.0-cp311-cp311-win_amd64.whl (466.5 kB view details)

Uploaded CPython 3.11Windows x86-64

doloopio-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (926.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

doloopio-0.2.0-cp311-cp311-macosx_11_0_universal2.whl (452.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

doloopio-0.2.0-cp310-cp310-win_amd64.whl (446.2 kB view details)

Uploaded CPython 3.10Windows x86-64

doloopio-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (907.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

doloopio-0.2.0-cp310-cp310-macosx_11_0_universal2.whl (443.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

doloopio-0.2.0-cp39-cp39-win_amd64.whl (440.1 kB view details)

Uploaded CPython 3.9Windows x86-64

doloopio-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (888.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

doloopio-0.2.0-cp39-cp39-macosx_11_0_universal2.whl (428.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ universal2 (ARM64, x86-64)

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

Hashes for doloopio-0.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 891053b32f31ce10b833f7942d6dd0699b1acc3256cb52482c5fa5c1de88b726
MD5 2addca17bc5f8a3d0f5a1dbff39f8567
BLAKE2b-256 5f165642d5bbf6dca432dd0d7556fab9e9805b78bcf4ebb6c7084d48dd7c533e

See more details on using hashes here.

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

File hashes

Hashes for doloopio-0.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a67f4382879c996221612020f451e7ffc32ccb1a1c11d95c2d8d96cfbb067521
MD5 50839b426f0385fb7622171b186b2ad7
BLAKE2b-256 e70680ba0d9ede3d9261e0b8bc94bebed7ac9fd836237b2f5f337300118677f0

See more details on using hashes here.

File details

Details for the file doloopio-0.2.0-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for doloopio-0.2.0-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 329bc6f1f13f4f3036f9f695276764f782d244adbae85ae722738e82b7615a43
MD5 b61b79bf7c84f57db0fe01c3adc38232
BLAKE2b-256 29bde37095e3fb126a6c26af856f335d942ed56d510b239364e5d1c0a5b355ae

See more details on using hashes here.

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

Hashes for doloopio-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 722b5902b956b9abd7c4453c7b22f29a798a57718f35f9b29c1c95f8ebcc5606
MD5 3d514689100ab28b2a31ff0d0b882f14
BLAKE2b-256 c48c44aabbeb19373af9cbfd28cde74a7a825784ebe514ee2f28221c7e7af77f

See more details on using hashes here.

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

File hashes

Hashes for doloopio-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55823d9737289f23ef48417b1c7ee96b702acdebcd0e2f96187d09b460fd2e38
MD5 f04d95aaba00013e0efb32832309952c
BLAKE2b-256 130e75e1234c41dcaf8a75170962460dbdb61cfc041529a91ffac071c28801bc

See more details on using hashes here.

File details

Details for the file doloopio-0.2.0-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for doloopio-0.2.0-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 3d8f6f5d5e028f3fa8103f5a2f74ccb27214fc82a3865106a78187f6b8c8011e
MD5 b89ca26a0369e85bf8bf307328b25605
BLAKE2b-256 246c9e4a39f74f305eed071751121a2a94fe804ef613f38053c60a1b662e881a

See more details on using hashes here.

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

Hashes for doloopio-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fd9fd70371d0b14d12672885245d917f09b701a3c6c8be9bd31d632944627f6b
MD5 cc2888a95cd1281a3bb566bbe8e2dbd8
BLAKE2b-256 0dfbf4d3821c7850174d9e88104ff81a37474c7f9aecff20c9ce98ed2ee7e8fa

See more details on using hashes here.

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

File hashes

Hashes for doloopio-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3a4ee8f8baae7d8479a1baddf9c195f8dde2433addf858b816fadb4961d17950
MD5 7cb7c848a0a45dcdd0298f2dcfbe45f2
BLAKE2b-256 fcd8a078559c1d9a2249bb37b700949ab83bcdfa3bf5180b14a5fa3b5c5219ae

See more details on using hashes here.

File details

Details for the file doloopio-0.2.0-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for doloopio-0.2.0-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6038b6e9cc869de59cb37e9c960388671d453798b0ebabfc1464ff0d565f7d08
MD5 1e3fc132b99156f684d128bd9f080266
BLAKE2b-256 0886b9de050f9a8a43be5de29e98d2d144ac938b705eeefba8cfb6b3f6637d51

See more details on using hashes here.

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

Hashes for doloopio-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 be9a68a0ece5cf3dfa55363d262466a0d134603dc3a3f2c423ff98e5207cd343
MD5 3998ead9d6c4cf40c7dbc750e5a22a76
BLAKE2b-256 3df20b5dc881ca630dca7df8157735787247afdc18e332f5711d603e9e1e9cb6

See more details on using hashes here.

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

File hashes

Hashes for doloopio-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 18b0b9c7e5e6521b5fe2cff1a2e4fbf602b84567873613574031d2781d17f76e
MD5 6b687903559f277b99d14d165e7430db
BLAKE2b-256 dd2fbec754e0f7ab0de375ee3570170fbfc583508bfe6a2f61d7dae9f1a91adc

See more details on using hashes here.

File details

Details for the file doloopio-0.2.0-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for doloopio-0.2.0-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 b109cf82a230eb6b83097a6355f162f0af18d7b4037df010bed9929e258b0660
MD5 cd5f91e28493cae409228bddef2ebecd
BLAKE2b-256 aa9ef907313c188c5a573b5100f111788f41aa2a5eb192a30d34ecfccfb28634

See more details on using hashes here.

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

Hashes for doloopio-0.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 631d4064983d42d53c2c23f5eebb112b492aeafd5ca7d74acd8d3d9e268cd11a
MD5 6d859cbf9a2e0d9ff4eff5ae3323395c
BLAKE2b-256 4296bf7b04b1e5d44ed70013dba34efdc779c8851adfda644a85d62d01cb31ef

See more details on using hashes here.

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

File hashes

Hashes for doloopio-0.2.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ac9836335ea7a68e69462ccbfd456653261abc4e51a147ada318cdd951e80432
MD5 7e6691b9e6ea2368e45ee2705a4a4140
BLAKE2b-256 a6cbcb782934ddf714b3ee4d7534d8b172d4546fbb5770c22ade91df67cecc47

See more details on using hashes here.

File details

Details for the file doloopio-0.2.0-cp39-cp39-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for doloopio-0.2.0-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 238a0e3044b58085639e7aec34a04a89ee8532a01b8f481daae29d82f664d08b
MD5 d15346dd39c88d2ac410d6bac56aa089
BLAKE2b-256 a105126d061ad8c411a8b94c3d9ea7509109350939dce2e66c9320a3bdaf1b34

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