Defuddle
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
Dead-code / unused-dependency detection uses knip, which requires each package to expose an explicit, minimal package.jsonexports (no ./ wildcard).
$ npx skills add LedgerHQ/ledger-live --skill knip-migration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LedgerHQ/ledger-live knip-migration --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/LedgerHQ/ledger-live.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/knip-migration .claude/skills/knip-migration && 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 "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .claude/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migrationType 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 LedgerHQ/ledger-live --skill knip-migration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LedgerHQ/ledger-live knip-migration --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LedgerHQ/ledger-live.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/knip-migration .agents/skills/knip-migration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .agents/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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 LedgerHQ/ledger-live --skill knip-migration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LedgerHQ/ledger-live knip-migration --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LedgerHQ/ledger-live.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/knip-migration .cursor/skills/knip-migration && 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 "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .cursor/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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/LedgerHQ/ledger-live.git --path .agents/skills/knip-migration--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 LedgerHQ/ledger-live --skill knip-migration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LedgerHQ/ledger-live knip-migration --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LedgerHQ/ledger-live.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/knip-migration .gemini/skills/knip-migration && 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 "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .gemini/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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 LedgerHQ/ledger-live knip-migrationInstalls 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 LedgerHQ/ledger-live --skill knip-migration -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LedgerHQ/ledger-live.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/knip-migration .github/skills/knip-migration && 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 "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .github/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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 LedgerHQ/ledger-live --skill knip-migration -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LedgerHQ/ledger-live knip-migration --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LedgerHQ/ledger-live.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/knip-migration .opencode/skills/knip-migration && 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 "knip-migration" agent skill from https://github.com/LedgerHQ/ledger-live/tree/develop/.agents/skills/knip-migration into .opencode/skills/knip-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "knip-migration", 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.
knip-migrationDead-code / unused-dependency detection uses knip, which requires each package to expose an explicit, minimal package.jsonexports (no ./ wildcard).
Knip Migration is an agent skill from LedgerHQ/ledger-live. Dead-code / unused-dependency detection uses knip, which requires each package to expose an explicit, minimal package.jsonexports (no ./ wildcard). Read this when adding a new package or migrating an existing one to knip.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with npm. The repository describes itself as: Mono-repository for Ledger Wallet apps and related packages. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9c51f17. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
knip.devFrom 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.
Knip Migration loads about 1.9k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 839 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 LedgerHQ/ledger-live at commit 9c51f17, republished under its MIT licence (© LedgerHQ). 839 words, ~1,898 tokens.
.claude/skills/knip-migration/SKILL.md (or your agent's skills folder).Dead-code / unused-dependency detection runs on knip. The legacy unimported tool is gone
and the dependency checks deny it; legacy libs/* packages that never migrated have no
dead-code tooling. The root knip.json holds only
the shared rules — a package needs no workspaces entry there, since knip derives its entry files
from package.json (main, bin, exports) and its own defaults
(entry files).
knip treats everything listed in a package's package.json#exports as an entry point.
Today every package exports a ./* wildcard mapped to ./src/*.ts (via the @ledgerhq/source
custom condition declared in tsconfig.base.json):
"./*": {
"@ledgerhq/source": "./src/*.ts",
"import": "./lib-es/*.js",
"require": "./lib/*.js",
"default": "./lib/*.js"
}Because of this wildcard, knip considers every top-level src/*.ts file "used" and cannot
detect unused ("zombie") top-level source files. So a package needs to replace the ./* wildcard with explicit, minimal subpath exports that enumerate
the package's true public API.
The few libs already pointed at knip (e.g.
libs/env,libs/promise) still keep the./*wildcard, so they are only partially migrated — do not copy them as the template.
A new package has no consumers, so it should start in the target state:
exports only. Enumerate the real public API; do not add a ./* wildcard.
Mirror the . root entry per subpath, keeping the conditions:"exports": {
".": { "@ledgerhq/source": "./src/index.ts", "import": "./lib-es/index.js", "require": "./lib/index.js", "default": "./lib/index.js" },
"./logic": { "@ledgerhq/source": "./src/logic.ts", "import": "./lib-es/logic.js", "require": "./lib/logic.js", "default": "./lib/logic.js" },
"./lib-es/*": "./lib-es/*.js",
"./lib/*": "./lib/*.js",
"./package.json": "./package.json"
}pnpm knip --directory <relative-hop-to-root> -W <workspace-path>
(--directory is the hop back to the repo root — ../.. for libs/<x>,
../../.. for libs/coin-modules/<x>; -W is the workspace path from root).knip has no notion of moduleSuffixes. A suffix-less ./Tool specifier therefore resolves to
nothing when only Tool.web.tsx and Tool.native.tsx exist, and both twins are reported as
unused files (files is an error rule). Naming the suffix in the barrel fixes it for packages
that may do so, but not under devtools/, where suffix-imports/no-platform-suffix makes a
suffixed specifier a lint error.
So a package with platform twins gets two passes, through the shared helper
knip.config.base.mjs:
// <pkg>/knip.web.config.mjs — and the `native` mirror
import { createDualPlatformKnipConfig } from "../../knip.config.base.mjs";
export default createDualPlatformKnipConfig({
packagePath: "devtools/shell",
platform: "web",
entry: [],
});// <pkg>/package.json — the hop in `--directory` is the depth back to the repo root
"unimported": "pnpm knip --directory ../.. -c devtools/shell/knip.web.config.mjs -W devtools/shell --tsConfig tsconfig.web.json && pnpm knip --directory ../.. -c devtools/shell/knip.native.config.mjs -W devtools/shell --tsConfig tsconfig.native.json"Name the file knip.<platform>.config.mjs. The root ignore list matches **/*.config.*, so that
name keeps knip from reporting its own config as unused. A .ts config does not match and needs a
Sonar exclusion to compensate.
These configs carry no comments. This section is the single source for why they look as they do; the three options below are the only reasons a config should differ from the snippet above.
entry is [] unless package.json cannot yield the entryknip derives entries from package.json (every exports condition, main, and specifiers in
scripts), and reports an entry it already has as a redundant entry pattern. Name one only
when that derivation misses a real entry point:
react-native condition, so only the web barrel is derived
(devtools/env, and devtools/feature-flags / devtools/pay-card, which have no exports at
all). Name src/index.native.ts in the native config.devtools/bindings pairs
isMockSessionSupported.ts with a .native.ts override and no .web twin, and knip resolves
the unsuffixed sibling first, so the native config names src/isMockSessionSupported.native.ts.
Such an entry goes stale when the override is deleted; knip then reports Refine entry pattern
(no match), so treat that hint as "the pair is gone, drop the entry".additionalProjectExcludes is for an unsuffixed barrelThe platform glob the helper applies (!src/**/*.native.* on web, !src/**/*.web.* on native)
only matches suffixed files. A web barrel named src/index.ts is not excluded from the native pass
and becomes an unused file there, so the native config names it. A package whose web barrel is
src/index.web.ts (devtools/transport-panel) needs nothing.
additionalIgnoreDependencies is a last resortA dependency reached only from the excluded platform's files reads as unused, and dependencies is
an error rule. Confirm the dependency is genuinely unreachable in that platform before reaching
for this.
{"web.ts": passThrough} registered,
./foo still resolves to foo.ts when both foo.ts and foo.web.ts exist.index suffixes. from "../hooks" never
reaches hooks/index.web.ts. Import the module itself (../hooks/useDevToolsStorage).A jest/** helper sits outside the project glob, so knip cannot see it importing a barrel export.
Only typecheck catches that, which is why it runs before trusting a clean knip report.
For a new package, flag this and point here:
./* wildcard in package.json#exports — new packages must enumerate explicit exports
so knip can detect zombie files.workspaces block in knip.json is a temporary workaroundEverything must work without touching knip.json. The workspaces entries that remain are
band-aids for packages that don't declare their surface properly yet — deep imports behind a ./*
wildcard, runtime entries invisible to package.json (Electron preloads, web workers), or
dependencies knip can't resolve. Each one hides a package that hasn't finished the migration above.
So: don't grow this file. Fixing the package's exports is the real fix, and it lets the
corresponding workspaces entry be deleted. If you truly cannot avoid an entry, keep it to the
smallest possible delta and remember a configured entry replaces knip's default patterns
rather than extending them.
© LedgerHQ, 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/knip-migration of LedgerHQ/ledger-live.
Open the folder on GitHubat commit 9c51f17
Knip Migration 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 |
|---|---|---|---|---|---|---|
| Knip Migration this skillLedgerHQ/ledger-live | 622 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Defuddlekepano/obsidian-skills | 49k | 11 repos | ~208 | Automated safety check: Pass | MIT | |
| Vercel Deploybytedance/deer-flow | 84k | 10 repos | ~797 | Automated safety check: Pass | MIT | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Knap Markdown Templateskepano/obsidian-skills | 49k | 2 repos | ~986 | Automated safety check: Pass | MIT | |
| Nx Run Tasksnomcopter/react-mosaic | 4.8k | 8 repos | ~613 | Automated safety check: Pass | Custom licence |
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
bytedance/deer-flow
Deploys a project to Vercel with one script and no login, then returns a live preview URL and a claim link for moving the deployment into your own Vercel account.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
kepano/obsidian-skills
Renders Markdown notes from Knap templates and JSON data on the command line, including notes built from Defuddle web page output.
nomcopter/react-mosaic
Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.
HKUDS/OpenHarness
Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.
LedgerHQ/ledger-live
Find which open PRs are impacted by a migration/sunset/refactor and notify their authors — blocking review when the old path is already gone from develop, heads-up comment when it is only deprecated…
LedgerHQ/ledger-live
Write, review or debug a cloudSyncModule.ts — a CloudSyncDataManager that syncs one slice of user data through Ledger Sync (Cloud Sync).
LedgerHQ/ledger-live
Maintain CODEOWNERS file and team directories. An agent skill from LedgerHQ/ledger-live.
LedgerHQ/ledger-live
Coin-specific families logic must live in families/. An agent skill from LedgerHQ/ledger-live.
LedgerHQ/ledger-live
Structure a Ledger Wallet data layer where one API response serves several entities.
LedgerHQ/ledger-live
Investigate native React Native crashes (Fabric/Hermes/iOS) in ledger-live-mobile when JS error logs are missing or unhelpful.
Works with
Dead-code / unused-dependency detection uses knip, which requires each package to expose an explicit, minimal package.jsonexports (no ./ wildcard). Knip Migration is an agent skill from LedgerHQ/ledger-live./ wildcard).
Run `npx skills add LedgerHQ/ledger-live --skill knip-migration -a claude-code`. Or copy the skill folder (.agents/skills/knip-migration in LedgerHQ/ledger-live) into .claude/skills/knip-migration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LedgerHQ/ledger-live --skill knip-migration -a codex`. Or copy the skill folder (.agents/skills/knip-migration in LedgerHQ/ledger-live) into .agents/skills/knip-migration 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 LedgerHQ/ledger-live --skill knip-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/knip-migration, .gemini/skills/knip-migration, .github/skills/knip-migration and .opencode/skills/knip-migration in your project.
Going by SKILL.md and its folder, Knip Migration needs the command-line tools its instructions call (pnpm).
SKILL.md names 1 domain. As links in the text: knip.dev. 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.
Knip Migration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k 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 Knip Migration: Defuddle (kepano/obsidian-skills, 49k stars), Vercel Deploy (bytedance/deer-flow, 84k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars) and Knap Markdown Templates (kepano/obsidian-skills, 49k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LedgerHQ (a GitHub organization) maintains it in LedgerHQ/ledger-live, which has 622 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 9, 2026.
Source: LedgerHQ/ledger-live on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.