Your tests lie about upgrades.
PyMolt doesn't.
A dependency bump that passes CI can still take down production. PyMolt watches how your code actually behaves under both versions and hands you the diff — with receipts — before you merge. Then Axiom Graph writes the fix.
A Python migration is a research project you can't estimate.
The hard part was never changing the version string — it's everything the version bump hides. Here is why standard CI and generic refactoring tools fail:
PyMolt replaces guesswork with empirical runtime facts — every issue tagged with provenance, confidence level, and golden contract diffs.
The funnel →Three steps. One migration.
Understanding comes before automation. Map risk, diff runtime behavior, and apply verified AST rewrites.
--json for CI/CD & AI agents- 01
1. Map & Risk
free / offlineDiscovers all Python surfaces, runtime version divergence, and scores CVE & dependency upgrade risk in one offline pass.
$ pymolt scan . && pymolt assess --risk› 3.8 → 3.12 / pandas 1.5 → 2.2 / RiskTier: MEDIUM / 1 CVE cleared - 02
2. Behavior Diff
the differentiatorTraces call execution into target dependencies under both versions — surfacing quiet runtime behavior changes before you merge.
$ pymolt contract report .› 2 result_changed → BEHAVIOR_CHANGED / 104 unverified - 03
3. Safe Rewrites
early access wishlistGenerates format-preserving AST rewrites via LibCST and re-verifies every hunk locally against your golden test suite.
$ pymolt codemods .› 3 files / 12 rewrites / verified rules applied
Built on explainability, not vibes.
A migration is often run by someone who doesn't know the codebase. The tool has to be the source of truth — so every fact must show why it was concluded.
Provenance on every fact
Each finding shows where it came from — a Dockerfile ARG chain, a lockfile, a tox matrix — and how confident it is. “Unknown” is an honest answer, not a failure.
Honesty markers, not best-effort
When a value can't be compared, PyMolt says so — opaque, BLIND, skipped — instead of smoothing over what it never actually observed.
It decides nothing
The tool produces empirical facts; an engineer reads the verdict. Codemods are dry-run by default and reviewed hunk by hunk — nothing is silently rewritten.
The Migration Ledger
Five Python services in the energy sector, 3.8 → 3.9 with their data stacks. Pick a dependency to see the molt — the old behavior shed, the new one it grew into. The code barely changes. The behavior underneath does.
totals = df.sum() # silently drops# non-numeric colsdf["net"].fillna(0, inplace=True)
totals = df.sum(numeric_only=True)# ^ now explicit — otherwise raisesdf["net"] = df["net"].fillna(0) # CoW
What actually changes
- Copy-on-Write: chained inplace assignment stops mutating the original frame
- numeric_only default flipped to False — reductions that dropped columns now raise
- pd.NA / nullable dtypes: use pd.isna(), not `is None`
How PyMolt surfaces it — contract traces the boundary under 1.5 and 2.2, then diffs — result_changed flags exactly these.
Don't waste 100k tokens making AI agents guess Python upgrades.
Claude Code or Cursor can attempt Python migrations alone — but raw LLMs burn 100,000+ tokens reading files, guessing deprecated APIs, and trusting green unit tests while production breaks. PyMolt feeds agents structured ground truth via MCP in 1 turn.
Raw Monorepo File Scanning vs PyMolt MCP Ingestion
pymolt scan --jsonSingle pass extracts all roots, runtime divergence & dependency edges with source provenance.pymolt assess --riskLock-first resolution corridor with live CVE, binary wheel & abandonment metrics.pymolt contract reportRuntime boundary diff: flags result_changed, raise_changed & BLIND unverified paths.Your agent edits code → pymolt contract capture → PyMolt verifies whether BEHAVIOR_CHANGED is resolved. The reasoning loop closes on empirical runtime facts — never on hallucinated green test assertions.
claude mcp add pymolt -- pymolt mcpllms.txt * Benchmark measured on a 45,000 LOC Python codebase upgrading from 3.8 to 3.12 across 14 dependency boundaries.
The fix, with receipts.
The CLI is free and open source. The hard part — knowing exactly how an API changed between two versions and rewriting for it correctly — is powered by Axiom Graph. Grounded in what actually changed, not blind pattern matching: the difference between a rename and a fix.
Join early access to get automated recipe rewrites prioritized for your project's target dependencies.
Join the WishlistOnly versions cross the wire — never your code.
1. You send versions, not code
PyMolt posts only dependency names and version jumps (from → to). Your source code never leaves your local machine.
2. Axiom Graph mines patterns
The service checks public release diffs for that exact version jump and returns candidate codemods with evidence logs.
3. PyMolt re-verifies locally
Every candidate rule is executed locally against your project's golden test suite. Unverified rules are downgraded.
4. Review & apply with LibCST
Format-preserving AST rewrites land via LibCST. You review and accept each hunk as a visual diff before committing.
The CLI is free. Get early access to automated rewrites.
We are onboarding initial engineering teams to refine codemod generation on real codebases. Request early access to get your target migrations prioritized.
PyMolt CLI
forever / runs locally
Everything computable from local files and public data, in one offline-first run, scoped to one repository.
- scan — surfaces, version divergence, dependency edges
- assess --risk — lock-first resolve + CVE / wheel / abandonment
- contract — behavioral boundary verification across versions
- Pure-stdlib tracer (3.6+), zero edits to your project
- CLI, --json everywhere for CI
Axiom Graph codemods
free for early adopters / join the wishlist
Behavior-grounded rewrites for a specific dependency jump — generated by Axiom Graph, applied locally with LibCST. Class follows delivered weight: renames ×1, behavioral rewrites ×3.
- Free access for early adopters during preview
- One recipe = one package jump (e.g. pandas 1→2), unlocked forever
- Priority evaluation for your specific Python migrations
- Empty bundles cost nothing; re-runs never cost extra
- Only versions cross the wire — never your code
Migration help
scoped to your migration
Got a migration that's actually a research project? Hands-on audit from someone who has run these on large scientific codebases.
- Hands-on migration audit & feasibility assessment
- Behavioral verification of the paths tests miss
- Blue/green & two-env cutover strategy
- Accumulated migration recipes & datasets
- CI/CD setup to stop the debt cycle recurring
Stop guessing. See the migration first.
Install the CLI in one line, map your migration for free, then let Axiom Graph handle the rewrite when you're ready.