Skip to main content
Jeffy Loop. A white robot crouched over a glass slab of circuitry, holding a loupe to the crack it found. Done is demonstrated, not declared.

Validate Claude Code Platform License: MIT

Quick Install  ·  Usage  ·  How it works  ·  The receipts  ·  Headless  ·  White paper

Autonomous Engineering With Proof

Agents that don’t just act.
They audit · verify · attack · and prove.

Jeffy Loop is an autonomous engineering system built on one principle: AI agents shouldn’t just produce work. They should produce evidence that the work is correct.

Every run is an Audit → Attack → Verify → Prove loop that ends in a receipt: what changed, why it changed, and how the result was checked.

Jeffy applies recursive self-improvement to its own engine: a mistake any run makes, on Jeffy’s source or on a project it was pointed at, becomes a lesson, then a backlog item, then a release that enforces the lesson on every later run, including the next one on Jeffy itself. How.

Jeffy treats “done” as something that must be demonstrated, not declared.

The proof

Jeffy was run against 132 open-source projects with no connection to this repository, each judged by its own test suite, every run published, failures included.

Projects tested Converged Failed PRs merged PRs open Issues filed
132 103 28 48 28 4
Pie chart of the 103 converged public targets by language: Python 20 at 19.4 percent, Rust 14 at 13.6 percent, Go 12 at 11.7 percent, JavaScript 10 at 9.7 percent, C++ 7 at 6.8 percent, Java 6 at 5.8 percent, Ruby 6 at 5.8 percent, Swift 6 at 5.8 percent, C 5 at 4.9 percent, PHP 5 at 4.9 percent, TypeScript 5 at 4.9 percent, Kotlin 4 at 3.9 percent, C# 3 at 2.9 percent.

103 projects run to convergence across 13 languages with no language-specific analyzer or ruleset. Derived from the scorecard at render time.

Independent Validation

A merged pull request is the one result Jeffy cannot award itself. It takes an independent maintainer, someone with no stake in this project, to review the patch and accept it into their own codebase. Maintainers have done exactly that 48 times, across 37 open source projects, including those below.

Merged by Finding Merged in
NVIDIA go-nvml #207
The buffer handed to dlinfo for a library's directory was allocated with zero bytes, so the first Path() on a library opened by soname wrote past it and the next dlclose crashed
12 days
k8s-device-plugin #2002
An empty deviceListStrategy list in the config file passed validation, and the container started with no GPU access and no error
13 days
Google snappy #257
Every release build compressed a 4 GiB input into a stream whose header claimed 0 bytes
1 day
benchmark #2294
The complexity report gave its BigO coefficient in nanoseconds whatever time unit the benchmark declared
7 days
Apple swift-log #504
A documented no-op setter asserted instead
2 days
swift-log #503
A handler implementing only log(event:) overflowed the stack on the SwiftLog 1.0 entry point
5 days
swift-protobuf #2164
The project's own CMake build of protoc-gen-swift had not compiled since June
15 hours
swift-format #1286
Formatting in place replaced the file, so a 0600 source came back 0644 and a read-only one lost its bit
4 days
swift-metrics #244
The package's own test kit crashed on a repeated dimension name
4 days
Microsoft mimalloc #1385
The zeroing allocator returned uninitialized memory above the small-size threshold
8 hours
snmalloc #878
The header-only build recipe named a CMake target removed in 2021 and include paths that resolved nowhere
2 hours
GSL #1271
The documented conversion from an iterator to its const_iterator was an access error at every use
4 days
GSL #1272
dyn_array_iterator declared random access but had no relational operators, no -> and no n + it, so std::sort over a dyn_array did not compile
9 days
Apache commons-text #768
A StringMatcher overload forwarded the buffer end as its start
2 days
commons-csv #633
The record counter's Javadoc said headers were not counted while the constructor's header was
3 days
commons-lang #1784
Fraction.add and subtract overflowed on operands not in lowest terms, or returned them unreduced
1 day
commons-lang #1783
MethodUtils.invokeMethod threw on an instance of any non-public class, every JDK collection factory result included
1 day
commons-lang #1787
Fraction's zero shortcuts returned the other operand unreduced, and threw where the reduced result fits
6 hours
commons-codec #443
The Git tree-id builder sorted entries by UTF-16 code units where Git sorts UTF-8 bytes, so a name outside the Basic Multilingual Plane gave a different id from git write-tree
9 days
Oracle macaron #1466
The build spec dropped the JDK version read from the JAR whenever the artifact recorded no language version
3 days
Cisco libsrtp #821
Encrypted packets carrying no authentication tag failed to unprotect, because the key lookup stepped a full tag length back from the packet end to find the key identifier
4 days
libsrtp #822 issue, not a patch
The autotools configure aborted on stock Ubuntu because pkg-config was forced static, so no OpenSSL build was possible; reported here with the diagnosis and fixed by another contributor's #823
3 days
Square kotlinpoet #2380
String literals it emitted turned CRLF into LF, and raw strings in a constant context let newlines pick up indentation
4 days
kotlinpoet #2382
A class in the default package got a ClassName whose toString() threw
4 days
JetBrains kotlinx-datetime #650
Deprecation quick-fixes pointed developers at the wrong replacement
90 minutes
kotlinx-datetime #649
The Unicode pattern parser dropped the escaped quote inside a literal
4 days
Node.js ada #1244
The URL parser Node.js ships reported host_end one byte short
12 minutes
Cloudflare circl #700
The PKI marshal functions panicked on the library's own post-quantum keys instead of returning an error
1 day
circl #699
The hybrid KEM derived a different key pair from the same seed on a random subset of calls
1 day
natsort natsort #196
The locale sentinel meant to sort last was three ASCII bytes, so PyICU keys sorted after it (19 million PyPI downloads a month)
8 days
uuid-rs uuid #907
The UUIDv7 counter lost its top four bits to the version nibble (179 million crates.io downloads in the last 90 days)
6 days

Private security

Reported to Outcome Answered in
Anthropic A security issue in claude-code-action, reported through their program and reproduced and triaged by their own security team. The details stay unpublished at their request until the report resolves. 14 days

See every project, every patch, and every failure

Contributor agreements signed

Quick Install

You need Claude Code, signed in once, and git. The installer handles everything else, including jq.

git clone https://github.com/lenamonj/jeffy-loop.git
cd jeffy-loop
./install.sh        # Windows PowerShell: .\install.ps1

If PowerShell refuses with "running scripts is disabled on this system", run in PowerShell:

powershell -ExecutionPolicy Bypass -File .\install.ps1

Or from PyPI, no clone needed; pipx install jeffy-loop and uv tool install jeffy-loop work the same way:

pip install jeffy-loop
jeffy install       # installs Jeffy as a Claude Code skill

Running Jeffy

Open Claude Code in the project you want to improve and type /jeffy 10. It is a slash command inside the session, not a shell command.

/jeffy                                     # 10 iterations, full-spectrum improvement
/jeffy 5                                   # 5 iterations
/jeffy 12 accessibility and performance    # 12 iterations with a focus directive
/jeffy 5 --highs                           # High hunt: find and fix only the Highs
/jeffy 10 --max-time 2h                    # 10 iterations, but stop after two hours either way

When the run ends, start a new session to run it again; the restart is doing real work. A High hunt fixes only the Highs and stops at the first audit that finds none, so it is usually the faster run. Usage covers every flag, rounds and budgets, scoped mode, and cancelling.

What the engine enforces

Each one is enforced by the iteration prompt, the state files, or the Stop hook. How.

  1. It audits like an engineer, not a linter. A finding exists only when the loop can point at it and prove it with a runnable check.
  2. It cannot wreck your repo. Every iteration is a local commit, a broken verify is reverted, and nothing is ever pushed.
  3. "Done" is not the agent's opinion. An adversarial evaluator and a shell gate re-check every declaration.
  4. It cannot declare convergence over code it never looked at. The loop maps the public surface into a checklist, every swept row records the commit it certified, and the Stop hook refuses the declaration while any row is unswept.
  5. Lessons become machinery. A rule learned once binds every later iteration, and the engine itself passes at least 440 behavioural checks on each of Linux, Windows and macOS.

Documentation

Page What it covers
Usage Flags, rounds and budgets, High hunt, scoped mode, cancelling, upgrading, uninstalling, and what to know before a first run
How it works The run lifecycle, what the engine enforces, the full rule set, what a converged stop looks like, and how the loop improves itself
Headless runs Running budgeted rounds unattended from bash or PowerShell
The receipts Every open-source target with its outcome, the merged patches, the greenfield builds
Contributing The validator and the review bar
White paper For readers new to agent loops: how loops got here, every rule from first principles, and what this method still cannot do
Jeffy Loop

License

MIT

Release files for jeffy-loop 1.24.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jeffy-loop 1.24.0
File Size Uploaded
jeffy_loop-1.24.0.tar.gz 130.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jeffy-loop 1.24.0
File Interpreter ABI Platform
jeffy_loop-1.24.0-py3-none-any.whl Python 3 none any Details

Total release size: 273.8 kB

Release files / jeffy_loop-1.24.0.tar.gz

Download URL jeffy_loop-1.24.0.tar.gz
Size 130.9 kB
Tags Source
SHA-256 checksum
How to use checksums
da31542a20c8e25e40a99e332d486e46a6805b7c33dc139784b7a0d1d17a4da9
BLAKE2b-256 checksum
How to use checksums
4e2caf23fdb8e2cfc8334a615f818331617518748c40891254be9f7aa7c783ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / jeffy_loop-1.24.0-py3-none-any.whl

Download URL jeffy_loop-1.24.0-py3-none-any.whl
Size 143.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d83ccc8cdba14a234300b5bd3b2f5cadec43e42161371d3836e556b28567a82c
BLAKE2b-256 checksum
How to use checksums
20fbd22a5b5fafe7a51d1c8b500cbe827e4b8deef6b0c69469ba90ad54fccccb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.24.0 This release

2 release files

1.23.3

2 release files

1.23.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page