Yieldpoint

Getting started

Two commands to install, one to find out whether the change you just made took something away.

Install

pip install yieldpoint            # zero runtime dependencies
pipx install yieldpoint           # isolated CLI
uv tool install yieldpoint        # same, via uv

Python 3.10 or newer, and nothing else.

Try it without installing anything

uvx yieldpoint review

Run that in any repository with uncommitted work. It reads your diff from git, including unstaged files, and tells you whether anything you changed weakens what the tests verify.

Set it up properly

yieldpoint init

init writes three files and backs up anything it touches:

FileWhat it does
.yieldpoint.jsonThe rules. Committed, so the team shares one definition.
.mcp.jsonRegisters the MCP server, so your agent can ask what a rule means.
.claude/settings.jsonRegisters the hook, which is the part that actually enforces.

Restart your editor after init

Hooks and MCP servers are read when a session starts, so nothing you install is active in the session you install it from — and that looks exactly like it working: no output, no error, every edit allowed. yieldpoint doctor reports whether the hook has actually seen an edit, which is the only way to tell those two states apart. yieldpoint review works immediately, with no restart.

It starts advisory

The hook reports and never blocks. Run yieldpoint init --enforce once you are happy with what it reports.

Reading a verdict

$ yieldpoint review
REPAIR  1 finding(s)

  tests/test_invoice.py:14 in test_total  [assertion_monotonicity]
    Assertion on invoice.total was weakened: eq -> non_null.
    fix: Re-assert invoice.total at eq strength, or fix the code under test so the
         original assertion passes. Restore `assert invoice.total == 42`.

Every verdict carries a prescription naming exactly what to restore, so a rejected change does not have to be diagnosed by guessing.

Exit codes

CodeMeaning
0Checked, and nothing was weakened.
1Findings. Something was taken away.
2The tool itself failed.
3Nothing could be analysed. Not a pass.