Skip to main content

Run Claude Code in a fix-break loop until your codebase is clean

Project description

  ███████╗████████╗ ██████╗██╗  ██╗
  ██╔════╝╚══██╔══╝██╔════╝██║  ██║
  █████╗     ██║   ██║     ███████║
  ██╔══╝     ██║   ██║     ██╔══██║
  ███████╗   ██║   ╚██████╗██║  ██║
  ╚══════╝   ╚═╝    ╚═════╝╚═╝  ╚═╝  loop

Run Claude Code in a scan-fix-break loop until your codebase is clean.


┌─ etch loop v0.2.0  . ───────────────────────────────────────────────┐
│                                                                      │
│  -  iteration  1                                                     │
│  +  scanner    issues found   src/auth.py:42 — no empty token check  │
│  +  fixer      committed      fix(edge): guard empty token in auth   │
│  x  breaker    issues         unguarded access still reachable       │
│                                                                      │
│  -  iteration  2                                                     │
│  +  scanner    issues found   src/auth.py:61 — missing None check    │
│  +  fixer      committed      fix(edge): null guard on session obj   │
│  >  breaker    running        ░░░░░░▓▒ ░░░░░░░░░░░░░░░░░░░░░░░░░░   │
│                                                                      │
├──────────────────────────────────────────────────────────────────────┤
│  iterations 2   fixes 2   breaker issues 1   1m 48s elapsed         │
└──────────────────────────────────────────────────────────────────────┘

install

uv tool install etch-loop

usage

etch init                        # analyze codebase with Claude, write prompt files
etch run                         # start the loop
etch run "the auth module"       # focus on a specific area
etch run -n 5                    # max 5 iterations
etch run --dry-run               # preview prompt, don't run
etch run --verbose               # show full Claude output

how it works

Each iteration has three phases: scan → fix → break.

  1. Scanner reads the codebase and outputs a specific list of issues — file paths, line numbers, descriptions
  2. If the scanner finds nothing, the loop stops
  3. Fixer receives the scanner's list and fixes those exact issues, then commits
  4. Breaker adversarially reviews the full codebase, looking for anything missed or newly introduced
  5. If the breaker finds nothing, the loop stops — clean pass
  6. If the breaker finds something, it's fed back to the next iteration's fixer
┌─ done ───────────────────────────────────────────────────┐
│                                                          │
│  iterations      3                                       │
│  fixes           3                                       │
│  breaker issues  1                                       │
│  elapsed         2m 44s                                  │
│                                                          │
└──────────────────────────────────────────────────────────┘

etch init

etch init runs Claude against your codebase before writing any files. It reads your source, detects the languages and structure, and generates three prompt files tailored to your project — no placeholders to edit.

┌─ etch init v0.2.0 ───────────────────────────────────────┐
│  >  analyzing  ░░░░░▓▒ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░   │
│  +  analyzed codebase                                    │
│  +  SCAN.md                                              │
│  +  ETCH.md                                              │
│  +  BREAK.md                                             │
└──────────────────────────────────────────────────────────┘

SCAN.md — tells the scanner what to look for and how to report findings.

ETCH.md — tells the fixer how to fix things: surgical, no refactoring, one fix per commit.

BREAK.md — tells the breaker to scan the full codebase adversarially and report anything that could go wrong.

All three files are editable. Use etch run "focus description" to narrow the scope without editing files.


requirements

  • Python 3.11+
  • claude CLI installed and authenticated
  • A git repository (etch-loop commits each fix automatically)

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

etch_loop-0.2.0.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

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

etch_loop-0.2.0-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file etch_loop-0.2.0.tar.gz.

File metadata

  • Download URL: etch_loop-0.2.0.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for etch_loop-0.2.0.tar.gz
Algorithm Hash digest
SHA256 25f74093da8a4bace0e42b22c276b840b734db81e347ae9e02f7b252c28f1959
MD5 6df3aa4fc2076d22ed8af72fcca34c80
BLAKE2b-256 3738017edde4710e1fb984b2f84ae767da2d48d2932c4e4b6df3e1bed012d325

See more details on using hashes here.

Provenance

The following attestation bundles were made for etch_loop-0.2.0.tar.gz:

Publisher: workflow.yml on lauenborg/etch-loop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etch_loop-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: etch_loop-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for etch_loop-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64e2f727235fab62c813c3dcbcb39814950222eb0430f54b983b427b36710b9a
MD5 9d918b5969fd405b1194881515a33404
BLAKE2b-256 a3e4ce80ae66775ded867f916756fe3b744fe786486f5935b95bb44639c14842

See more details on using hashes here.

Provenance

The following attestation bundles were made for etch_loop-0.2.0-py3-none-any.whl:

Publisher: workflow.yml on lauenborg/etch-loop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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