Convert Internal Package to TypeScript
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.
Author, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users.
$ npx skills add pmndrs/glyph --skill codemod -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pmndrs/glyph codemod --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/pmndrs/glyph.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/codemod .claude/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .claude/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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/pmndrs/glyph/tree/main/.agents/skills/codemodType 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 pmndrs/glyph --skill codemod -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pmndrs/glyph codemod --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/codemod .agents/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .agents/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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 pmndrs/glyph --skill codemod -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pmndrs/glyph codemod --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/codemod .cursor/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .cursor/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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/pmndrs/glyph.git --path .agents/skills/codemod--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 pmndrs/glyph --skill codemod -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pmndrs/glyph codemod --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/codemod .gemini/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .gemini/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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 pmndrs/glyph codemodInstalls 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 pmndrs/glyph --skill codemod -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/codemod .github/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .github/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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 pmndrs/glyph --skill codemod -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pmndrs/glyph codemod --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/codemod .opencode/skills/codemod && 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" agent skill from https://github.com/pmndrs/glyph/tree/main/.agents/skills/codemod into .opencode/skills/codemod/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codemod", 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.
codemodAuthor, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users.
Codemod is an agent skill from pmndrs/glyph. Author, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users. Use for shipped public API migrations, symbol renames, call-signature rewrites, import moves, or requests to preserve a dated migration recipe. Do not use for unmerged work-in-progress APIs or global text replacement.
Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 51 other files, including scripts and reference files (for example `agents/openai.yaml`, `codemods/2026-08-28-font-load-arguments/instructions.md` and `codemods/2026-08-28-font-load-arguments/project-js-tests.json`).
It sits in Development, covering Code migrations. It works with TypeScript. The repository describes itself as: ♠️ A typography engine for web graphics. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 51a1f34. 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.
Ships 1 file in scripts/ (JavaScript, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
miseFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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 loads about 1.2k tokens when it runs, and up to ~2.1k if it reads all its reference files. Until then it costs about 92 tokens; SKILL.md has 559 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); the scripts in this folder are not scanned.
The full file from pmndrs/glyph at commit 51a1f34, republished under its MIT licence (© pmndrs). 559 words, ~1,237 tokens.
.claude/skills/codemod/SKILL.md (or your agent's skills folder). This skill also uses 46 other files; get the full folder from GitHub.Use pinned ts-morph for TypeScript and TSX migrations. A codemod is a complete migration recipe, not merely a rename
map: it combines deterministic AST transforms with enough semantic guidance for an agent to rewrite call sites that
cannot be changed mechanically.
Before authoring a recipe for repository-owned API work, determine whether the affected surface exists on the remote default branch, a released tag, or another externally consumed canary. If the symbol or call shape exists only in the current unmerged branch or worktree, there is no consumer migration to preserve: edit the source and its in-repository call sites directly, and do not create or archive a codemod. A public-looking declaration is not a migration surface until it has been merged or otherwise shared with consumers.
Use a codemod once compatibility evidence exists, or when the user explicitly asks to preserve a migration recipe. When history is ambiguous, inspect the remote default branch and release/canary history before choosing the heavier workflow.
recipe.json and instructions.md completely before changing files.List archived recipes without loading their instructions:
mise exec -- node .agents/skills/codemod/scripts/list-codemods.mjsVerify that every archived migration is already applied, or apply the complete archive in lexical order:
mise exec -- node .agents/skills/codemod/scripts/run-all-codemods.mjs \
--project path/to/tsconfig.json --target path/to/project --check
mise exec -- node .agents/skills/codemod/scripts/run-all-codemods.mjs \
--project path/to/tsconfig.json --target path/to/project --writeResolve the exact target root and tsconfig. Never target a broad home, workspace parent, dependency store, or
node_modules directory.
Run the deterministic transform without --write first. Review every reported file and inspect the diff that would
result.
Apply with --write only when the user authorized mutation:
mise exec -- node .agents/skills/codemod/scripts/run-codemod.mjs \
--codemod .agents/skills/codemod/codemods/YYYY-MM-DD-name \
--project path/to/tsconfig.json \
--target path/to/project \
--writeFollow instructions.md for semantic sites the transform deliberately leaves unresolved. Preserve the stated
ownership, ordering, error, and lifecycle invariants; stop for a real user decision instead of guessing.
Use AST queries to enumerate remaining old imports, identifiers, property accesses, call shapes, comments, and string literals. Change human-facing strings deliberately; do not rename protocol values, persisted data, fixture identities, generated ABI names, or artifact paths because their spelling resembles an API symbol.
Run every recipe verification command plus the affected package checks. Generated JavaScript, declarations, digests, and ABI files are regenerated through their owning workflow, never edited by the codemod.
For symbol renames, use the runner's renameSymbol() helper. It delegates identifiers to ts-morph's language service,
scans actual comment trivia separately, and never renames string literals. A successful typecheck is necessary but does
not prove semantic call sites were migrated; the recipe's behavioral postconditions remain required.
Recipes live under codemods/YYYY-MM-DD-slug/ and are applied in lexical date order. Once a recipe has been shared with
canary users, do not rewrite its migration meaning. Add a later corrective recipe so users can apply an ordered chain.
The archive is the canonical rename and call-site map; public prose links to it or is rendered from it.
© pmndrs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 46 other files (scripts, references) in .agents/skills/codemod of pmndrs/glyph.
Open the folder on GitHubat commit 51a1f34
Codemod 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 this skillpmndrs/glyph | 393 | — | ~1.2k | 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.4k | — | ~5k | Automated safety check: Pass | MIT | |
| ast-grep Codemod Referencewarp-drive-data/warp-drive | 3.2k | — | ~2.6k | Automated safety check: Pass | MIT | |
| Code Migrationanthropics/code-migration-kit-with-claude-code | 743 | — | ~983 | Automated safety check: Pass | Custom licence | |
| AngularJS to Angular Migrationwshobson/agents | 40k | 11 repos | ~1.8k | Automated safety check: Pass | MIT |
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.
warp-drive-data/warp-drive
Reference for writing and debugging TypeScript and JavaScript codemods with @ast-grep/napi: parsing, node queries, meta-variables, rule objects and editing.
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.
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.
diyanbogdanov/emend
An extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth.
pmndrs/glyph
Create, migrate, inspect, query, validate, or maintain Open Knowledge Format v0.2 bundles made from linked Markdown concepts with YAML provenance.
pmndrs/glyph
Implement, migrate, review, debug, or verify Three.js Shading Language (TSL) materials, node graphs, WebGPU compute work, and post-processing.
pmndrs/glyph
Design, classify, write, audit, or restructure technical documentation with the Diátaxis framework.
pmndrs/glyph
Audit and improve repository code milestone by milestone for correctness, clarity, local reasoning, DRY design, explicit state modeling, panic resistance, and trustworthy TypeScript boundaries.
pmndrs/glyph
Shape human-facing engineering communication—including chat updates and final answers, reports, reviews, handoffs, debugging or benchmark summaries, PR and issue prose, READMEs, and technical…
pmndrs/glyph
Manage dependent branches and pull requests with the gh-stack GitHub CLI extension.
Works with
Categories
Author, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users. Codemod is an agent skill from pmndrs/glyph. Author, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users.
Codemod fits situations like: shipped public API migrations; call-signature rewrites; requests to preserve a dated migration recipe; unmerged work-in-progress APIs.
Run `npx skills add pmndrs/glyph --skill codemod -a claude-code`. Or copy the skill folder (.agents/skills/codemod in pmndrs/glyph) into .claude/skills/codemod in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pmndrs/glyph --skill codemod -a codex`. Or copy the skill folder (.agents/skills/codemod in pmndrs/glyph) into .agents/skills/codemod 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 pmndrs/glyph --skill codemod -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, .gemini/skills/codemod, .github/skills/codemod and .opencode/skills/codemod in your project.
Going by SKILL.md and its folder, Codemod needs JavaScript for the scripts in its folder and the command-line tools its instructions call (mise). Our summary lists: Node.js.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Codemod 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.2k tokens (SKILL.md is roughly 4.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 823 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Codemod: Convert Internal Package to TypeScript (TryGhost/Ghost, 55k stars), jscpd Code Migration Tracker (kucherenko/jscpd, 6.4k stars), ast-grep Codemod Reference (warp-drive-data/warp-drive, 3.2k stars) and Code Migration (anthropics/code-migration-kit-with-claude-code, 743 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pmndrs (a GitHub organization) maintains it in pmndrs/glyph, which has 393 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.
Source: pmndrs/glyph on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.