Lint Fix
getsentry/sentry
Fix violations of an eslintPluginScraps rule across the codebase.
Generate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps.
$ npx skills add murphytrueman/design-system-ops --skill codemod-generator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install murphytrueman/design-system-ops codemod-generator --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/murphytrueman/design-system-ops.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/codemod-generator .claude/skills/codemod-generator && 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 "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .claude/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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/murphytrueman/design-system-ops/tree/main/skills/codemod-generatorType 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 murphytrueman/design-system-ops --skill codemod-generator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install murphytrueman/design-system-ops codemod-generator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/codemod-generator .agents/skills/codemod-generator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .agents/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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 murphytrueman/design-system-ops --skill codemod-generator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install murphytrueman/design-system-ops codemod-generator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/codemod-generator .cursor/skills/codemod-generator && 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 "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .cursor/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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/murphytrueman/design-system-ops.git --path skills/codemod-generator--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 murphytrueman/design-system-ops --skill codemod-generator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install murphytrueman/design-system-ops codemod-generator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/codemod-generator .gemini/skills/codemod-generator && 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 "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .gemini/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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 murphytrueman/design-system-ops codemod-generatorInstalls 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 murphytrueman/design-system-ops --skill codemod-generator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/codemod-generator .github/skills/codemod-generator && 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 "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .github/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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 murphytrueman/design-system-ops --skill codemod-generator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install murphytrueman/design-system-ops codemod-generator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/codemod-generator .opencode/skills/codemod-generator && 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 "codemod-generator" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/codemod-generator into .opencode/skills/codemod-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod-generator", 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.
codemod-generatorGenerate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps.
Codemod Generator is an agent skill from murphytrueman/design-system-ops. Generate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps. Triggers: codemod, migration script, rename this prop everywhere. Deprecation planning: deprecation-process. Release notes: change-communication.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Code migrations and Design systems. It works with TypeScript. The repository describes itself as: Claude Code skills for the work that keeps a design system alive. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f167898. 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:
ReadWriteGrepGlobBash(cat:*)Bash(find:*)Bash(head:*)Bash(ls:*)Bash(node:*)Bash(sort:*)…and 6 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and 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.
Codemod Generator loads about 4.9k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 1,616 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 murphytrueman/design-system-ops at commit f167898, republished under its MIT licence (© murphytrueman). 1,616 words, ~4,860 tokens.
.claude/skills/codemod-generator/SKILL.md (or your agent's skills folder).A skill for producing automated code transformation scripts that apply design system changes across consuming codebases. When a token is renamed, a component API changes, or an import path moves, this skill generates the script that makes the change everywhere — safely, consistently, and with a dry-run option.
Output type: File creation. This skill produces executable transformation scripts (JavaScript/TypeScript) and documentation. It does not apply the transformations to the team's code — it generates scripts that teams run in their own codebases. Where you can execute commands, it does run the tests and a dry run (Step 5b).
Confirm that every path in this skill's frontmatter references: exists relative to this SKILL.md. If any is missing, stop: the install is incomplete, usually because a flattening installer (for example npx skills install) dropped the repo-root knowledge-notes/ directory. Tell the user to reinstall by a method in 1-INSTALL.md and run verify-install.sh from the install root. Proceed without the references only if the user explicitly says to, and then say in the output that it was produced without the pack's reference material.
A design system change without a migration path is a breaking promise, and the manual find-and-replace is where upgrade debt accumulates until teams stop upgrading. A codemod does the mechanical part deterministically across every file. This skill generates the script and its tests; the deprecation plan and the migration guide stay with deprecation-process and change-communication.
If .ds-ops-config.yml exists, follow the configuration-and-recurring knowledge note (../../knowledge-notes/configuration-and-recurring.md). This skill reads:
codemods:
language: "typescript" # typescript, javascript, or both
transform_engine: "jscodeshift" # jscodeshift, ts-morph, or custom
output_directory: "codemods/"
test_framework: "jest" # jest or vitest for codemod tests
style_dictionary_format: false # If tokens use Style Dictionary format
css_custom_properties: true # If tokens are consumed as CSS custom propertiesIf no configuration exists, use these defaults:
codemods/This skill generates five types of codemods:
Renames a design token across all consuming files.
Scope: CSS custom properties, JavaScript/TypeScript token imports, Sass variables, style objects, className references, and template-literal CSS in styled-components and Emotion (css\...`, styled.div`...``), which is where most CSS-in-JS token references live.
Example input:
Rename: color.brand.primary → color.action.primary
Affects: CSS custom properties (--color-brand-primary → --color-action-primary)
JS token imports (tokens.color.brand.primary → tokens.color.action.primary)
Sass variables ($color-brand-primary → $color-action-primary)Renames a component prop across all usage sites.
Example input:
Component: Button
Rename prop: type → variant
Value mapping: type="primary" → variant="primary" (no value change)Removes a deprecated prop with a safe fallback or migration.
Example input:
Component: Button
Remove prop: disableRipple
Migration: Delete the attribute (the ripple effect has been removed from the system).
If the value is dynamic (disableRipple={flag}), leave it and add a TODO comment,
since removing it may drop logic the consumer relies on.Updates import paths when packages are restructured.
Example input:
Old: import { Button } from '@myds/components'
New: import { Button } from '@myds/react/Button'Replaces one component with another, mapping props.
Example input:
Replace: DatePicker → DatePickerNext
Prop mapping:
- value → selectedDate
- onChange → onDateChange
- format → dateFormat (default: "yyyy-MM-dd")
- minDate → min
- maxDate → max
Removed props: locale (now uses system locale)
New required props: noneFrom the user's request, determine:
If the request is unclear on any of these, ask before generating. A codemod that transforms the wrong thing is worse than no codemod at all.
Pick the engine for the change. jscodeshift for syntactic changes (renames, attribute edits, import paths), which is most of them. ts-morph when the transform needs type information, for example renaming a prop only on components whose props extend a given interface, or telling two same-named components from different packages apart. ast-grep is a fast alternative for simple pattern rewrites when the team already uses it. Say which was chosen and why in the file header.
Each codemod is a single file following the jscodeshift API:
/**
* Codemod: [description]
* Generated by Design System Ops — codemod-generator
*
* Usage:
* npx jscodeshift --transform codemods/[name].js --extensions=tsx,ts,jsx,js --parser=tsx src/
*
* Dry run (preview changes without writing):
* npx jscodeshift --transform codemods/[name].js --extensions=tsx,ts,jsx,js --parser=tsx --dry --print src/
*
* Use the same --extensions and --parser flags for both commands: jscodeshift only
* reads .js files by default, so a dry run without them previews nothing.
*
* What this codemod does:
* [Clear description of the transformation]
*
* What this codemod does NOT do:
* [Explicit list of things this codemod will not catch]
*/
module.exports = function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
let hasChanges = false;
// [Transform logic]
if (!hasChanges) {
return undefined; // Return undefined when no changes — jscodeshift skips the file
}
return root.toSource(); // don't force a quote style; recast keeps untouched code as written
};
module.exports.parser = 'tsx'; // or 'babel' for JS-only codebasesTemplate literals. A transform that visits only StringLiteral and JSXAttribute nodes misses token references inside css\...`andstyled.x`...`. Token-rename codemods also visit TemplateLiteralnodes and apply the anchored regex to each quasi'svalue.raw(andvalue.cooked), setting hasChanges` when anything matched. Add a test whose input is a styled-component.
CSS transforms cannot use jscodeshift (which is for JS ASTs). Generate a Node.js script using postcss for CSS, and postcss-scss for Sass. If you fall back to a regex for Sass variables, anchor the end of the name so $color-brand-primary doesn't also match $color-brand-primary-light: /\$color-brand-primary(?![\w-])/g. The same applies to custom properties: /--color-brand-primary(?![\w-])/g.
/**
* Codemod: [description] (CSS)
* Generated by Design System Ops — codemod-generator
*
* Usage:
* node codemods/[name]-css.js --dir src/ [--dry-run]
*/
const postcss = require('postcss');
const fs = require('fs');
const path = require('path');
const glob = require('glob');
// [PostCSS-based transform logic]If tokens use Style Dictionary format, generate a Style Dictionary pre-processor that transforms the token source files:
/**
* Token migration: [description]
* Generated by Design System Ops — codemod-generator
*
* Usage:
* node codemods/[name]-tokens.js --dir tokens/ [--dry-run]
*/
// [JSON/YAML transform logic for token source files]Every codemod must include tests. Generate a test file alongside the transform:
/**
* Tests for: [codemod name]
* Generated by Design System Ops — codemod-generator
*/
const { applyTransform } = require('jscodeshift/dist/testUtils');
const transform = require('./[name]');
describe('[codemod name]', () => {
// Test 1: Basic transformation
it('transforms [basic case]', () => {
const input = `[before code]`;
const expected = `[after code]`;
const result = applyTransform(transform, {}, { source: input });
expect(result).toBe(expected.trim()); // applyTransform trims its output
});
// Test 2: No-op case (file without the pattern)
it('does not modify files without [pattern]', () => {
const input = `[unrelated code]`;
const result = applyTransform(transform, {}, { source: input });
expect(result).toBe(''); // applyTransform returns (output || '').trim(), so a no-op is ''
});
// Test 3: Edge case — dynamic values
it('handles [edge case description]', () => {
const input = `[edge case code]`;
const expected = `[expected result]`;
const result = applyTransform(transform, {}, { source: input });
expect(result).toBe(expected.trim());
});
// Test 4: Edge case — spread props
it('flags [untransformable case] with a comment', () => {
const input = `[untransformable code]`;
const result = applyTransform(transform, {}, { source: input });
expect(result).toContain('/* TODO: Manual migration needed');
});
});Scale the tests to the change. A prop rename, prop removal or component replacement needs all eight cases below. A straight token rename or import-path update needs cases 1, 2, 3, 7 and 8 (dynamic values, spread props and conditional rendering don't arise), plus the template-literal case for token renames. Don't pad a simple codemod with tests for situations it can't meet.
Each codemod must have tests for:
{...props})import { Button as Btn })Produce a migrate.js script that orchestrates running all codemods for a version upgrade:
/**
* Migration runner: [system name] v[X] → v[Y]
* Generated by Design System Ops — codemod-generator
*
* Usage:
* node codemods/migrate.js --dir src/ [--dry-run] [--verbose]
*
* This script runs all codemods for the v[X] → v[Y] migration in the correct order.
* Run with --dry-run first to preview changes.
*/
const { execSync } = require('child_process');
const path = require('path');
const CODEMODS = [
{
name: '[codemod 1]',
file: '[name-1].js',
description: '[what it does]',
order: 1,
},
{
name: '[codemod 2]',
file: '[name-2].js',
description: '[what it does]',
order: 2,
dependsOn: '[codemod 1]', // Must run after codemod 1
},
];
// [Runner logic: execute codemods in order, report results, handle failures]Some codemods must run before others:
The migration runner enforces this ordering.
Produce a MIGRATION.md file alongside the codemods:
# Migration guide: v[X] → v[Y]
## What changed
[Summary of all changes covered by these codemods]
## Automated migration
Run the migration script:
\`\`\`bash
# Preview changes (recommended first step)
node codemods/migrate.js --dir src/ --dry-run
# Apply changes
node codemods/migrate.js --dir src/
\`\`\`
## What the codemods handle
| Change | Codemod | Scope |
|---|---|---|
| [change 1] | [codemod file] | JS/TS/CSS |
| [change 2] | [codemod file] | JS/TS only |
## What requires manual attention
These changes cannot be fully automated:
- [manual item 1 — why it cannot be automated]
- [manual item 2 — why it cannot be automated]
For each manual item, search your codebase for:
\`\`\`bash
grep -r "[pattern]" src/
\`\`\`
## Verification
After running the codemods:
1. Run your test suite: \`npm test\`
2. Run type checking: \`npx tsc --noEmit\`
3. Visually review the changed files: \`git diff\`
4. Run your application and test the affected components
## Rollback
Run the codemods on their own branch and commit their output as a single commit (or one commit per codemod), separate from any manual fixes. To undo, \`git revert <commit>\`.
Steps that aren't reversible this way:
- [e.g. Figma variable renames, published package versions, or "none"]Not everything can be automated. When the codemod encounters a pattern it cannot safely transform, it must:
/* TODO: Manual migration needed — [description of what needs to change]
* Old pattern: [what the code currently does]
* New pattern: [what it should become]
* Why this was not automated: [reason — dynamic value, complex logic, etc.]
* Generated by Design System Ops — codemod-generator
*/⚠ [file.tsx:42] — Manual migration needed: [description]<Button variant={getVariant()}> — the codemod cannot know what getVariant() returns<Button {...buttonProps}> — the codemod cannot know what buttonProps containstokens[color.${category}.${variant}] — the codemod cannot resolve template literalsIf you can execute commands in the target repository, run the codemod's test file and a dry run over the consumer code before handing over. Report the results in the summary: tests passed and failed, files the dry run would change, and TODO flags added for manual migration. If you can't execute, say plainly that the codemods are untested and list the commands the user should run first.
deprecation-process supplies the mapping table these codemods implement; change-communication puts the run commands in the migration guide; cicd-integration runs the codemod tests in the system's CI.
If the Figma Console MCP from Southleft is connected (check for figma_rename_variable and figma_update_variable tool availability), extend the migration to include Figma variable renames alongside the code codemods. This ensures design and code stay in sync during the migration.
Token renames: For Type 1 (token rename) codemods, use figma_rename_variable to rename the corresponding Figma variables. Map each code-side rename to its Figma-side equivalent. Figma renames preserve all values, modes, and alias references — only the name changes.
Prop renames that affect Figma: For Type 2 (prop rename) codemods where the renamed prop maps to a Figma component property, use figma_edit_component_property to update the property name in the Figma component. This keeps the Figma component's exposed properties in sync with the code API.
Workflow:
When the standard Figma MCP is connected (read-only): The code-side codemods work normally. Include a section in MIGRATION.md listing the Figma variables that need to be renamed manually, with old name → new name mapping.
--extensions and --parser flags as the apply commandgit revert won't undoundefined for files that do not need changes (jscodeshift skips them); tests expect '' from applyTransform for that case--token-name) and Sass variables ($token-name)© murphytrueman, 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 skills/codemod-generator of murphytrueman/design-system-ops.
Open the folder on GitHubat commit f167898
Codemod Generator 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 |
|---|---|---|---|---|---|---|
| Codemod Generator this skillmurphytrueman/design-system-ops | 201 | — | ~4.9k | Automated safety check: Pass | MIT | |
| Lint Fixgetsentry/sentry | 45k | — | ~1k | Automated safety check: Pass | Custom licence | |
| AngularJS to Angular Migrationwshobson/agents | 40k | 10 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Scaffold Nextjsmblode/agent-skills | 142 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Convert Internal Package to TypeScriptTryGhost/Ghost | 55k | — | ~1.2k | Automated safety check: Pass | MIT | |
| jscpd Code Migration Trackerkucherenko/jscpd | 6.3k | — | ~5k | Automated safety check: Pass | MIT |
getsentry/sentry
Fix violations of an eslintPluginScraps rule across the codebase.
wshobson/agents
Guides migrating AngularJS 1.x apps to modern Angular: choosing a strategy, running a hybrid app with ngUpgrade, and converting controllers, directives and services.
mblode/agent-skills
Scaffolds a Next.js turborepo with Blode UI, icons, Ultracite (oxlint/shadcn), workspace hooks, and GitHub/Vercel setup.
TryGhost/Ghost
Moves a legacy internal Ghost package from JavaScript and CommonJS to TypeScript and ESM in three focused commits that keep git file history intact.
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.
SikandarJODD/cnblocks
Svelte 5 runes, snippets, SvelteKit patterns, and modern best practices for TypeScript and component development.
murphytrueman/design-system-ops
Write the AGENTS.md that tells coding agents how to use this design system: where things live, sourced rules, how to check work, what not to do; Claude, Cursor or Copilot pointers on request.
murphytrueman/design-system-ops
Write a six-section prose description (purpose, props, anti-patterns, composition, accessibility, examples) for a Figma component's description field so LLMs read it via MCP.
murphytrueman/design-system-ops
Write release notes, a migration guide and a team announcement for a design system change that is already decided, scaled to its impact.
murphytrueman/design-system-ops
Generate machine-readable index files in .ai/index/ (component inventory, uses/usedBy graph, stats) for AI agents.
murphytrueman/design-system-ops
Audit prop APIs across a component library: naming consistency, boolean/default patterns, type coverage, exported types, breaking changes between versions.
murphytrueman/design-system-ops
Write "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request.
Works with
Categories
Generate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps. Codemod Generator is an agent skill from murphytrueman/design-system-ops. Generate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps.
Codemod Generator fits situations like: tasks that involve Code migrations; tasks that involve Design systems.
Run `npx skills add murphytrueman/design-system-ops --skill codemod-generator -a claude-code`. Or copy the skill folder (skills/codemod-generator in murphytrueman/design-system-ops) into .claude/skills/codemod-generator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add murphytrueman/design-system-ops --skill codemod-generator -a codex`. Or copy the skill folder (skills/codemod-generator in murphytrueman/design-system-ops) into .agents/skills/codemod-generator 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 murphytrueman/design-system-ops --skill codemod-generator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/codemod-generator, .gemini/skills/codemod-generator, .github/skills/codemod-generator and .opencode/skills/codemod-generator in your project.
Going by SKILL.md and its folder, Codemod Generator needs the command-line tools its instructions call (npx and git). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Write, Grep, Glob, Bash(cat:*), Bash(find:*), Bash(head:*), Bash(ls:*), Bash(node:*), Bash(sort:*), Bash(tail:*), Bash(wc:*), Bash(npx tsc:*), Bash(npx jscodeshift:*), Bash(npx jest:*), Bash(npx vitest:*).
SKILL.md contains no URLs. Its commands use npx and 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.
Codemod Generator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 19k 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 Codemod Generator: Lint Fix (getsentry/sentry, 45k stars), AngularJS to Angular Migration (wshobson/agents, 40k stars), Scaffold Nextjs (mblode/agent-skills, 142 stars) and Convert Internal Package to TypeScript (TryGhost/Ghost, 55k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
murphytrueman (a GitHub user) maintains it in murphytrueman/design-system-ops, which has 201 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on September 24, 2026.
Source: murphytrueman/design-system-ops on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.