jscpd Code Migration Tracker
kucherenko/jscpd
Measures a code port between languages or frameworks with jscpd's function-level comparison, porting tests before code and tracking what is left unmatched.
Upgrades a Python standard library module from CPython into RustPython with update_lib, then triages and marks the tests that still fail.
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install RustPython/RustPython upgrade-pylib --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/upgrade-pylib .claude/skills/upgrade-pylib && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .claude/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylibType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install RustPython/RustPython upgrade-pylib --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/upgrade-pylib .agents/skills/upgrade-pylib && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .agents/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install RustPython/RustPython upgrade-pylib --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/upgrade-pylib .cursor/skills/upgrade-pylib && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .cursor/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/RustPython/RustPython.git --path .agents/skills/upgrade-pylib--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install RustPython/RustPython upgrade-pylib --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/upgrade-pylib .gemini/skills/upgrade-pylib && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .gemini/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install RustPython/RustPython upgrade-pylibInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/upgrade-pylib .github/skills/upgrade-pylib && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .github/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add RustPython/RustPython --skill upgrade-pylib -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install RustPython/RustPython upgrade-pylib --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/RustPython/RustPython.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/upgrade-pylib .opencode/skills/upgrade-pylib && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "upgrade-pylib" agent skill from https://github.com/RustPython/RustPython/tree/main/.agents/skills/upgrade-pylib into .opencode/skills/upgrade-pylib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrade-pylib", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
upgrade-pylibUpgrades a Python standard library module from CPython into RustPython with update_lib, then triages and marks the tests that still fail.
The agent takes a module name or CPython path such as inspect, asyncio or json and runs the quick mode of scripts/update_lib. That step copies the library files, patches tests while preserving existing markers where it can, runs the tests, auto-marks new failures, removes stale expectedFailure markers and creates a commit. A warning that a test class does not exist in the remote file means the class structure changed and some markers must be restored by hand.
Next it reviews the test diff and restores only changes tagged with RUSTPYTHON comments, finds dependent test modules with the deps command, runs them and investigates each failure. Remaining failures are marked with auto-mark, which can also mark regressions and so needs a careful look. Tests that panic, crash or hang get a skip decorator, subclass-specific failures move to the failing override, and markers go into a separate commit. If update_lib itself misbehaves, the agent stops and reports the tooling problem first.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1e72b22. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(git add:*)Bash(git commit:*)Bash(git diff:*)Bash(cargo run:*)Bash(python3 scripts/update_lib quick:*)Bash(python3 scripts/update_lib auto-mark:*)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
python3gitcargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
RustPython Stdlib Upgrade loads about 876 tokens when it runs. Until then it costs about 38 tokens; SKILL.md has 328 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from RustPython/RustPython at commit 1e72b22, republished under its MIT licence (© RustPython). 328 words, ~876 tokens.
.claude/skills/upgrade-pylib/SKILL.md (or your agent's skills folder).Upgrade a Python standard library module from CPython to RustPython.
inspect, asyncio, json, cpython/Lib/inspect.py, cpython/Lib/json/)If scripts/update_lib shows a bug, missing automation, or unexpected behavior, stop the upgrade and report the tooling issue first, including:
python3 scripts/update_lib quick <module>python3 scripts/update_lib quick cpython/Lib/<module>.pypython3 scripts/update_lib quick cpython/Lib/<module>/This step copies library files, patches tests while preserving markers where possible, runs tests, auto-marks new failures, removes stale @unittest.expectedFailure, and creates a commit.
If warnings like WARNING: TestCFoo does not exist in remote file appear, class structure changed and some markers must be restored manually.
git diff Lib/test/test_<module>.RUSTPYTHON comments.Get dependencies:
cargo run --release -- scripts/update_lib deps <module>Find direct dependent test modules from the - [ ] <module>: line.
Run dependent tests and collect failures:
cargo run --release -- -m test <test_modules...> 2>&1 | grep -E "^(FAIL|ERROR):"For each failing test identifier, investigate with the investigate-test-failure workflow.
python3 scripts/update_lib auto-mark Lib/test/test_<module>.py --mark-failurepython3 scripts/update_lib auto-mark Lib/test/test_<module>/ --mark-failureNote: --mark-failure marks all current failures including regressions; review carefully.
@unittest.skip("TODO: RUSTPYTHON; ...") rather than expectedFailure.TestCFoo but not TestPyFoo), move marker to the failing subclass override.git add -u && git commit -m "Mark failing tests"upgrade-pylib inspect
upgrade-pylib json
upgrade-pylib asyncio
upgrade-pylib cpython/Lib/inspect.py
upgrade-pylib cpython/Lib/json/cpython/ directory should contain the CPython source used for sync.scripts/update_lib modes:quick: patch + auto-markmigrate: patch onlyauto-mark: mark failures onlycopy-lib: copy library files only@unittest.expectedFailure and @unittest.skip with TODO: RUSTPYTHON markers where possible.© RustPython, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/upgrade-pylib of RustPython/RustPython.
Open the folder on GitHubat commit 1e72b22
RustPython Stdlib Upgrade next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| RustPython Stdlib Upgrade this skillRustPython/RustPython | 22k | — | ~876 | Automated safety check: Pass | MIT | |
| jscpd Code Migration Trackerkucherenko/jscpd | 6.4k | — | ~5k | Automated safety check: Pass | MIT | |
| Code Migrationanthropics/code-migration-kit-with-claude-code | 743 | — | ~983 | Automated safety check: Pass | Custom licence | |
| Dbgtheodo-group/debug-that | 158 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Debuggnomeria/usbtree | 690 | — | ~715 | Automated safety check: Pass | MIT | |
| Elodin Develodin-sys/elodin | 547 | — | ~896 | Automated safety check: Pass | Apache-2.0 |
kucherenko/jscpd
Measures a code port between languages or frameworks with jscpd's function-level comparison, porting tests before code and tracking what is left unmatched.
anthropics/code-migration-kit-with-claude-code
Run a large-scale language migration with the six-step process: create the map and the rules, stress-test the rules, translate everything, compile, run it, match behavior.
theodo-group/debug-that
Debug applications using the dbg CLI debugger. An agent skill from theodo-group/debug-that.
gnomeria/usbtree
Systematic root-cause debugging — reproduce, isolate, fix at the source, prove the fix.
elodin-sys/elodin
Develop and contribute to the Elodin codebase. An agent skill from elodin-sys/elodin.
rocky-data/rocky
Rocky CLI JSON-output schema cascade. An agent skill from rocky-data/rocky.
RustPython/RustPython
Runs RustPython tests inside a Linux container built with Apple's container CLI, so macOS users can compare Linux results with their local ones.
RustPython/RustPython
Implements missing CPython C-API functions in RustPython's crates/capi, mapping each header to its module with the pyo3-ffi header split.
RustPython/RustPython
Investigates a failing RustPython test by comparing it with CPython, then either fixes it or gathers the details for an incompatibility report.
RustPython/RustPython
Picks the next CPython standard library module ready for a RustPython upgrade, skipping modules that already have an open upgrade pull request.
Categories
Upgrades a Python standard library module from CPython into RustPython with update_lib, then triages and marks the tests that still fail. The agent takes a module name or CPython path such as inspect, asyncio or json and runs the quick mode of scripts/update_lib. That step copies the library files, patches tests while preserving existing markers where it can, runs the tests, auto-marks new failures, removes stale expectedFailure markers and creates a commit.
RustPython Stdlib Upgrade fits situations like: bringing a CPython standard library module and its tests up to date in RustPython; triaging failures after a library upgrade and marking the expected ones; deciding whether a failing test needs a skip instead of an expectedFailure marker.
Run `npx skills add RustPython/RustPython --skill upgrade-pylib -a claude-code`. Or copy the skill folder (.agents/skills/upgrade-pylib in RustPython/RustPython) into .claude/skills/upgrade-pylib in your project. Claude Code loads it when a task matches its description.
Run `npx skills add RustPython/RustPython --skill upgrade-pylib -a codex`. Or copy the skill folder (.agents/skills/upgrade-pylib in RustPython/RustPython) into .agents/skills/upgrade-pylib in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add RustPython/RustPython --skill upgrade-pylib -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/upgrade-pylib, .gemini/skills/upgrade-pylib, .github/skills/upgrade-pylib and .opencode/skills/upgrade-pylib in your project.
Going by SKILL.md and its folder, RustPython Stdlib Upgrade needs the command-line tools its instructions call (python3, git and cargo). Our summary lists: A RustPython checkout with a CPython copy under cpython/Lib; Python 3 and cargo. Its frontmatter pre-approves these tools: Bash(git add:*), Bash(git commit:*), Bash(git diff:*), Bash(cargo run:*), Bash(python3 scripts/update_lib quick:*), Bash(python3 scripts/update_lib auto-mark:*).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
RustPython Stdlib Upgrade is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 876 tokens (SKILL.md is roughly 3.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with RustPython Stdlib Upgrade: jscpd Code Migration Tracker (kucherenko/jscpd, 6.4k stars), Code Migration (anthropics/code-migration-kit-with-claude-code, 743 stars), Dbg (theodo-group/debug-that, 158 stars) and Debug (gnomeria/usbtree, 690 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
RustPython (a GitHub organization) maintains it in RustPython/RustPython, which has 22,383 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 8, 2026.
Source: RustPython/RustPython on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.