#220 by GitHub stars
kucherenko/jscpd
Copy/paste detector for source code. 220+ languages, Rust engine, SARIF/HTML/badge reporters, GitHub Action, MCP server for AI agents.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/code-migration/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Local scripts
ef9797468008 → cbd542396ba3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef9797468008
No earlier version was observed for comparison.
skills/codebase-refactoring/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
ef9797468008 → cbd542396ba3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef9797468008
No earlier version was observed for comparison.
skills/compare-codebases/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Local scripts
ef9797468008 → cbd542396ba3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef9797468008
No earlier version was observed for comparison.
skills/dry-refactoring/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Local scripts
ef9797468008 → cbd542396ba3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef9797468008
No earlier version was observed for comparison.
skills/jscpd/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Local scripts
ef9797468008 → cbd542396ba3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef9797468008
No earlier version was observed for comparison.
Heat
6.8- Star growth, last 7 daysAhead of 74% of tracked repositories
- Star growth, last 24 hoursAhead of 84% of tracked repositories
- Rank movement, last 7 daysAhead of 68% of tracked repositories
- Commits, last 30 daysAhead of 97% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- code-migration
skills/code-migration - codebase-refactoring
skills/codebase-refactoring - compare-codebases
skills/compare-codebases - dry-refactoring
skills/dry-refactoring - jscpd
skills/jscpd
How it works
code-migration
When your agent uses it
Move code from one implementation to another function by function, tests first and code second, and check two implementations of one app for parity, with jscpd --compare as the progress measure and a coverage map binding each function to its tests. Use when porting a library or app to another language or framework (Java to Kotlin, JavaScript to Rust, a Python library to TypeScript, an iOS app to Android), when asked what is left to port, or when comparing the Android and iOS versions of an app.
What it loads into context
Frontmatter
114 tokensAlways available to the agent
SKILL.md
4,705 tokensWhen the skill is activated
Reference documents
7,958 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Setup
- Measure
- Plan: tests first, then code
- Parity between two implementations
- Reading pairs
- Misses
- Options
- Rules
Files
SKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytesSKILL.mdcore19,895 bytes../compare-codebases/SKILL.mddoc13,043 bytes../jscpd/SKILL.mddoc18,368 bytes
Read SKILL.md
# code-migration
`jscpd --compare SOURCE TARGET` pairs every function of one folder with the function of the other folder that does the same job, in any pair of languages, and lists the functions that have no counterpart. This skill uses it to measure a port: what is ported, what is left, and whether the port you just wrote was recognized.
A port runs in two phases: the tests first, then the code they check. A coverage report of the source's tests tells which tests exercise which function, so each function is ported together with the tests that prove it works. See [Plan: tests first, then code](#plan-tests-first-then-code).
Two words are used throughout:
- **source**: the implementation you port from, such as the iOS app, the Python library, or the JavaScript package;
- **target**: the implementation you port to, such as the Android app, the Rust crate, or the TypeScript rewrite.
Neither has to be old or new. The source may stay in production and keep changing, and the target may already hold features the source lacks. For two implementations that both live on (`ios/` and `android/`), the same report shows parity; see [Parity](#parity-between-two-implementations).
jscpd finds functions in JavaScript, TypeScript, JSX, TSX, Vue, Svelte, Astro, Python, Rust, Go, Java, Kotlin, C#, C, C++, PHP, Ruby, Scala and Swift. The [compare-codebases](../compare-codebases/SKILL.md) skill explains how the comparison pairs functions and how to check its result; the [jscpd](../jscpd/SKILL.md) skill covers the rest of the tool.View the complete source on GitHubcodebase-refactoring
When your agent uses it
Three-part workflow to improve overall codebase health with jscpd — find and fix duplicated code, find and remove or refactor dead code, then find and simplify the largest/most complex files. Starts from --dashboard/--health to prioritize and ends by re-measuring the score.
What it loads into context
Frontmatter
67 tokensAlways available to the agent
SKILL.md
2,506 tokensWhen the skill is activated
Reference documents
1,966 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Start here: measure, then prioritize
- Step 1 — Duplicated code
- Step 2 — Dead code
- Step 3 — Big and complex files
- Step 4 — Confirm the improvement
- Tips
Files
SKILL.mdcore10,273 bytesSKILL.mdcore10,273 bytesSKILL.mdcore10,273 bytesSKILL.mdcore10,273 bytesSKILL.mdcore10,273 bytesSKILL.mdcore10,273 bytes../dry-refactoring/SKILL.mddoc8,469 bytes
Read SKILL.md
# codebase-refactoring
A guided pass over a codebase's three biggest maintenance costs — duplicated
code, dead code, and complexity — using jscpd to find each and a strategy to
fix it. Use this skill when asked to "clean up", "improve", "refactor" or
"pay down tech debt in" a codebase, rather than to fix one specific bug.
## Start here: measure, then prioritize
```bash
npx jscpd --health --reporters ai <path>
```
```View the complete source on GitHubcompare-codebases
When your agent uses it
Compare two folders function by function with jscpd --compare, in the same language or across languages, and explain the result. Use when asked how two codebases relate, which functions one implementation has and the other lacks, how far a port has come, whether the iOS and Android versions of an app match, or which function in one folder corresponds to a function in the other.
What it loads into context
Frontmatter
86 tokensAlways available to the agent
SKILL.md
3,181 tokensWhen the skill is activated
Reference documents
9,482 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- How the comparison works
- A way to compare two folders
- Options that change the result
- Limits
Files
../code-migration/SKILL.mddoc19,895 bytesSKILL.mdcore13,043 bytesSKILL.mdcore13,043 bytesSKILL.mdcore13,043 bytesSKILL.mdcore13,043 bytesSKILL.mdcore13,043 bytesSKILL.mdcore13,043 bytes../jscpd/SKILL.mddoc18,368 bytes
Read SKILL.md
# compare-codebases
`jscpd --compare A B` pairs every function of folder `A` with the function of folder `B` that does the same job, and lists the functions of each folder that have no counterpart. The two folders may be in one language or in two (Python and TypeScript, Kotlin and Swift, Java and Rust). This skill explains how the comparison works and how to run one well. For porting code with the comparison as the progress measure, use the [code-migration](../code-migration/SKILL.md) skill; for the rest of jscpd, the [jscpd](../jscpd/SKILL.md) skill.
## How the comparison works
jscpd finds the functions of JavaScript, TypeScript, JSX, TSX, Vue, Svelte, Astro, Python, Rust, Go, Java, Kotlin, C#, C, C++, PHP, Ruby, Scala and Swift files in both folders. It turns the code of each function into a vector with a code embedding model that runs inside jscpd (CodeRankEmbed by default), so two functions that do the same job point the same way even when their languages, names and structure differ. Functions of one folder are never compared with each other.
Functions pair in two steps:
1. By code. Two functions pair when each is the other's closest match in the other folder, their cosine similarity reaches the model's threshold (0.4125 across languages and 0.6375 within one language, with CodeRankEmbed), and the similarity stands out from the function's other matches. A function close to the best one also pairs when it reaches a higher bar, so a feature written twice on one side gets two pairs. A pair stays only when it is the best match of at least one of its two functions, so a lookalike from another class does not join a function and its counterpart; a tie goes to the file of the same name. Functions shorter than `--min-tokens` (30 with `--compare`) or `--min-lines` (5) stay out of this step, because a short function resembles too many others.
2. By name. A function left over pairs with a function of the other folder under the same name, once case, underscores, spaces and punctuation are ignored (`encodeBinary`, `encode_binary`, `_encode_binary`; the test title `rounds cents` and `rounds_cents`), when their similarity reaches the `medium` level (0.5625 across languages with CodeRankEmbed). A name pair skips the closest-match and stand-out checks of the first step, so it needs more than that step's threshold; otherwise every `load` and `init` of two codebases would pair. Size does not matter here, so a short port is found. A name pair has to stay within modules the first step linked. A module is the folder right under the deepest folder all files of a side share (`notification` in `android/notification/…`), and a file that sits higher than the rest, such as a build script, does not move that folder up. Two modules link when one holds the most of the other's pairs, counted for code and for tests separately. So `checkPermissions` of one plugin does not pair with its namesake in another.
Each pair gets a level on the scale of the model, because a cosine that is high for one model is low for another:View the complete source on GitHubdry-refactoring
When your agent uses it
Guided workflow to eliminate copy-paste duplication detected by jscpd. Refactor exact, renamed and near-miss clones using extract function, parameterize, module, constant, or base class strategies, starting from the hotspots the summary ranks.
What it loads into context
Frontmatter
56 tokensAlways available to the agent
SKILL.md
1,966 tokensWhen the skill is activated
Reference documents
4,777 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Workflow
- Refactoring Strategies
- Tips
Files
SKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytesSKILL.mdcore8,469 bytes../jscpd/SKILL.mddoc18,368 bytes
Read SKILL.md
# dry-refactoring
Guided workflow to eliminate copy-paste duplication in source code. Use after running [jscpd](../jscpd/SKILL.md) to detect clones.
## Prerequisites
First, run jscpd to identify duplications:
```bash
npx jscpd --reporters ai <path>
```
In codebases that mix related formats (e.g. JavaScript and TypeScript), add `--cross-formats` so clones spanning both are detected too:
View the complete source on GitHubjscpd
When your agent uses it
Copy-paste detector for 220+ languages. Detect exact, renamed and near-miss duplicated code, measure duplication percentages, and find refactoring hotspots with the codebase summary.
What it loads into context
Frontmatter
44 tokensAlways available to the agent
SKILL.md
4,777 tokensWhen the skill is activated
Reference documents
7,886 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- AI Reporter Output Format
- Options
- Clone Kinds: Exact, Renamed, Similar
- Codebase Summary (`--summary`)
- Cross-Format Clone Detection
- Comparing Two Codebases (`--compare`)
- Configuration File
- Refactoring Duplicated Code
- Improving Overall Codebase Health
Files
../code-migration/SKILL.mddoc19,895 bytes../compare-codebases/SKILL.mddoc13,043 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytesSKILL.mdcore18,368 bytes
Read SKILL.md
# jscpd
Copy-paste detector for programming source code, supports 220+ languages. Use this skill to run jscpd and understand its output.
## Quick Start
```bash
# Run with ai reporter (compact output optimized for agents)
npx jscpd --reporters ai <path>
# With ignore patterns
npx jscpd --reporters ai --ignore "**/node_modules/**,**/dist/**" <path>
# Scope to specific formatsView the complete source on GitHubSkills included
- code-migration
- codebase-refactoring
- compare-codebases
- dry-refactoring
- jscpd
Repository facts
- License
- MIT
- Created
- May 29, 2013
- Last pushed
- Nov 3, 2026
- Forks
- 274
- Open issues
- 46
- Project activity
- Active
Rank over the last 12 weeks
Now #220 · best #176 · down 15 in 30 days
- #213 on Oct 28
- #216 on Oct 29
- #219 from Oct 30 to Nov 1
- #220 on Nov 2
- #221 on Nov 3
- #220 since Nov 4
64 earlier periods
- #170 on Aug 2
- #173 from Aug 7 to Aug 8
- #172 on Aug 9
- #176 from Aug 10 to Aug 11
- #174 on Aug 12
- #177 on Aug 13
- #179 on Aug 14
- #178 from Aug 15 to Aug 17
- #180 on Aug 18
- #179 on Aug 19
- #177 on Aug 20
- #179 on Aug 21
- #176 on Aug 22
- #184 on Aug 23
- #183 on Aug 24
- #184 on Aug 25
- #186 on Aug 26
- #187 on Aug 27
- #185 on Aug 28
- #188 on Aug 29
- #186 from Aug 30 to Aug 31
- #191 on Sep 1
- #185 on Sep 2
- #192 on Sep 3
- #189 on Sep 4
- #191 on Sep 5
- #188 on Sep 6
- #191 from Sep 7 to Sep 8
- #193 from Sep 9 to Sep 11
- #194 on Sep 12
- #195 from Sep 13 to Sep 14
- #194 on Sep 15
- #195 from Sep 16 to Sep 17
- #197 on Sep 18
- #195 on Sep 19
- #197 on Sep 20
- #198 on Sep 21
- #199 from Sep 22 to Sep 23
- #198 on Sep 24
- #199 on Sep 25
- #200 on Sep 26
- #202 on Sep 28
- #201 on Sep 29
- #200 on Sep 30
- #202 on Oct 1
- #203 on Oct 2
- #200 on Oct 3
- #199 on Oct 4
- #201 on Oct 5
- #202 on Oct 6
- #205 on Oct 7
- #203 on Oct 8
- #207 on Oct 9
- #204 on Oct 10
- #205 on Oct 11
- #208 on Oct 12
- #209 on Oct 13
- #207 from Oct 14 to Oct 15
- #205 on Oct 16
- #207 on Oct 17
- #209 from Oct 18 to Oct 19
- #208 on Oct 20
- #209 from Oct 21 to Oct 24
- #212 on Oct 25
Before you install
Local scriptsAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 49 notes
skills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/code-migration/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 8 network referencesin 1 file: skills/jscpd/SKILL.md:267
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- No access to secrets
- No requests to vote in Hot
Show all 8 signals by file
skills/jscpd/SKILL.md
- Network accessline 267
npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring - Network accessline 267
npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring - Network accessline 267
npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring - Network accessline 267
npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring - Network accessline 275
npx skills add https://github.com/kucherenko/jscpd --skill codebase-refactoring - Network accessline 275
npx skills add https://github.com/kucherenko/jscpd --skill codebase-refactoring - Network accessline 275
npx skills add https://github.com/kucherenko/jscpd --skill codebase-refactoring - Network accessline 275
npx skills add https://github.com/kucherenko/jscpd --skill codebase-refactoring
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 8 facts
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:267High confidence
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:267High confidence
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:267High confidence
- Network access in code of the SKILL.mdjscpd/SKILL.md:267High confidence
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:275High confidence
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:275High confidence
- Network access in code of the SKILL.mdskills/jscpd/SKILL.md:275High confidence
- Network access in code of the SKILL.mdjscpd/SKILL.md:275High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/code-migration/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/kucherenko-jscpd/)