Run the CLI
Scan a repository, name the Python you need, and get a diff before anything touches your files.
Read the CLI guidePyMolt maps what changed, rewrites the code it can prove safe, and compares real behavior before and after the upgrade. Run it yourself or let your agent drive the same workflow.
Not a wall of terminal output. A report that says what changed, what was checked, and — the part most tools leave out — what wasn't.
Verified — ran under both versions and returned the same thing.
Never ran — your tests don't reach it, so nothing is claimed. Better coverage moves this bar.
Every phase emits JSON, so the report is a build artifact like any other. Point it at the PR your bot opened, and let the “never ran” share be the thing that blocks a merge — you pick the threshold, because only you know how much unverified surface you are willing to ship.
This is the expensive phase — it runs your suite twice — so it belongs on the upgrade branch, not on every commit.
- run: pymolt migrate . --target-python 3.11
- run: pymolt contract report . --json > report.json
- run: |
jq -e '.unverified_pct < 40' report.json || echo "::warning::too much unverified surface"PyMolt is useful before it is impressive: start with the surface that matches how you work, then follow the same evidence-backed workflow underneath.
Scan a repository, name the Python you need, and get a diff before anything touches your files.
Read the CLI guideGive Claude, Cursor, or Copilot the same workflow with bounded tools and an explicit next step at every phase.
See the methodInspect the version-pair rules Axiom already knows, from mechanical renames to behavior-aware rewrites.
Open the catalogNot whatever released last week. Whichever version your platform team already supports — PyMolt plans the jump to that one.
$ uv tool install "pymolt[mcp] @ git+https://github.com/zeelexes/pymolt"$ pymolt migrate . --target-python 3.11$ claude mcp add pymolt -- pymolt mcp