Skip to main content

quality-loop

Measure what a product teaches.

A skill bundle, an MCP server, a CLI - or a manual and the app it describes - is only as good as what someone with nothing else can do with it. quality-loop runs an agent on a real task, in a room that holds what the product gives its users and nothing more. The room is started so it cannot read the repository the answers are in. Afterwards an operator agent reports the problems it finds in what the room did, each with a severity and the evidence for it.

There is no pass/fail. The point is discovery: each run should surface something the last one did not, and leave a record good enough for a person, or a development-time agent, to reproduce what it found. Every problem carries a stable id, so the same problem is recognised across runs: de-duplicated, seen to be gone, seen to come back.

pip install quality-loop            # 'quality-loop[tui]' to drive terminal apps

Python 3.11 or later, no runtime dependencies (driving a terminal app needs pyte, the tui extra). It drives Claude Code (claude) as subprocesses, so that has to be installed and signed in. macOS and Windows; terminal apps on macOS and Linux.

See it work

The repository has two products small enough to read in a minute.

git clone https://github.com/crftwr/quality-loop && cd quality-loop
make test                                # the harness's own tests
.venv/bin/python examples/toy/run.py     # an agent-facing skill: one room, a few cents
.venv/bin/python examples/tui/run.py     # a terminal app and its manual

The toy is a "greeter" skill that reads a house style and writes one file. The TUI example is a note list whose manual is the only thing the room is given; the room drives the app itself, and the operator checks it live. The output is rooms/<version>-<time>/FINDINGS.md.

A run, per scenario

build the room - the bundle, RULES.md, and TASK.md holding the scenario's Prompt, verbatim
stand fixtures in for the user's files
operator, phase 1 - put the scenario's screen up, by name
the room's session - isolated, non-interactive
operator, live check - drive the real app, when the scenario asks for one
collect what the room made, put the user's files back, audit the transcript
operator, phase 2 - read the record, check the Must lists with evidence, write REPORT.md

The loop

quality-loop init                      # in the product: the conductor skill and settings
quality-loop run 11 12                 # starts a run in the background, prints its id
quality-loop watch                     # follow it from a terminal
quality-loop findings                  # new / still there / gone / back, against the run before

init installs a skill for the conductor: a Claude Code session in the product's repository that plans with the person, sets the product up, runs, files findings as GitHub Issues, fixes what the person chooses, and retests, under a policy the person sets. See Running the loop.

Documentation

  • Concepts: rooms, operators, the conductor, scenarios, reports, and which parts are code rather than an agent's judgement.
  • Running the loop: the command line, watching a run, parallel runs, comparing findings, the conductor and its policy.
  • Writing scenarios: the Markdown format, doc-driven scenarios, and what makes a scenario measure something.
  • Writing an adapter: what a product supplies, from a launch command and a redirected home up to evidence tools of its own.
  • Reports: problems, severities, kinds and ids, the reproduction record, and FINDINGS.md / findings.json.
  • Isolation and permissions: what keeps the room, the operator and the conductor in bounds, why each rule exists, and the known limits.
  • Development: tests, live tests, releasing.

Products using it

Status

0.x, early. It has been run end to end on macOS against the two examples, Keyhac and XeFM (including XeFM's terminal UI in a live check), and on Windows (11, ARM64) against the toy, Keyhac and XeFM, with real page and terminal screens. Not yet run anywhere for real: synthetic keys and screenshots of a desktop app (drive.DesktopApp); a terminal app is not driven on Windows yet. The design discussion is crftwr/keyhac#205 and this repository's issues.

MIT licensed.

Metadata

Release files for quality-loop 0.2.2

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

Source distribution (sdist)

Source distribution for quality-loop 0.2.2
File Size Uploaded Provenance
quality_loop-0.2.2.tar.gz 104.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for quality-loop 0.2.2
File Interpreter ABI Platform
quality_loop-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 203.8 kB

Release files / quality_loop-0.2.2.tar.gz

Download URL quality_loop-0.2.2.tar.gz
Size 104.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2e5d0d60546ff853c2d7262623bffb0b83c07d89c4488cf16038ca3c3ad0335c
BLAKE2b-256 checksum
How to use checksums
f43ba62fdc478bff9698c480ac314ac65fbad8c477e765d4e0fb8640422ea36b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / quality_loop-0.2.2-py3-none-any.whl

Download URL quality_loop-0.2.2-py3-none-any.whl
Size 99.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d980d674d5dbdd4ef135e9783e6b54124845e150d42e09b641ad5d880e082d3d
BLAKE2b-256 checksum
How to use checksums
434d221445f89286e2ab356ab5bae617f30d72cf2e937d9198fd3dd8a700cb19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Security for quality-loop 0.2.2

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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