Legacy Code Summarizer
majiayu000/claude-skill-registry
Produces comprehensive summaries and insights about legacy codebases to help understand unfamiliar code.
Safely change and test untested codebases using Feathers' "Working Effectively with Legacy Code".
$ npx skills add wondelai/skills --skill working-with-legacy-code -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install wondelai/skills working-with-legacy-code --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/wondelai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/working-with-legacy-code .claude/skills/working-with-legacy-code && 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 "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .claude/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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/wondelai/skills/tree/main/working-with-legacy-codeType 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 wondelai/skills --skill working-with-legacy-code -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install wondelai/skills working-with-legacy-code --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wondelai/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/working-with-legacy-code .agents/skills/working-with-legacy-code && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .agents/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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 wondelai/skills --skill working-with-legacy-code -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install wondelai/skills working-with-legacy-code --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wondelai/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/working-with-legacy-code .cursor/skills/working-with-legacy-code && 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 "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .cursor/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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/wondelai/skills.git --path working-with-legacy-code--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 wondelai/skills --skill working-with-legacy-code -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install wondelai/skills working-with-legacy-code --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wondelai/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/working-with-legacy-code .gemini/skills/working-with-legacy-code && 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 "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .gemini/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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 wondelai/skills working-with-legacy-codeInstalls 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 wondelai/skills --skill working-with-legacy-code -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/wondelai/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/working-with-legacy-code .github/skills/working-with-legacy-code && 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 "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .github/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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 wondelai/skills --skill working-with-legacy-code -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install wondelai/skills working-with-legacy-code --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wondelai/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/working-with-legacy-code .opencode/skills/working-with-legacy-code && 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 "working-with-legacy-code" agent skill from https://github.com/wondelai/skills/tree/main/working-with-legacy-code into .opencode/skills/working-with-legacy-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "working-with-legacy-code", 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.
working-with-legacy-codeSafely change and test untested codebases using Feathers' "Working Effectively with Legacy Code".
Working With Legacy Code is an agent skill from wondelai/skills. Safely change and test untested codebases using Feathers' "Working Effectively with Legacy Code". Use when the user mentions "legacy code", "no tests", "untested codebase", "how do I test this", "seams", "characterization tests", "golden master", "sprout method", "afraid to change this code", "monster method", "dependency breaking", or "inherited a messy codebase". Also trigger when changing code without tests safely, getting a class under test when constructors, statics, or singletons block it, adding features…
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/case-studies.md`, `references/change-algorithm.md` and `references/characterization-tests.md`).
It sits in Development, covering Legacy modernization, Code quality and Refactoring. The repository describes itself as: Wondel.ai Agent Skills — Business, Marketing, UX & Coding Frameworks from Bestselling Books. 50 skills + 12 guided journeys for Claude Code, Codex, Cursor & other agentskills.io… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c172996. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
amazon.comFrom 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.
Working With Legacy Code loads about 4.9k tokens when it runs, and up to ~21k if it reads all its reference files. Until then it costs about 214 tokens; SKILL.md has 2,624 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 wondelai/skills at commit c172996, republished under its MIT licence (© wondelai). 2,624 words, ~4,859 tokens.
.claude/skills/working-with-legacy-code/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.A field manual for changing code that has no tests, distilled from Michael C. Feathers' Working Effectively with Legacy Code. Use it to get untestable classes into a harness, pin down current behavior with characterization tests, and make changes one safe, verifiable step at a time — without resorting to a rewrite.
Legacy code is simply code without tests. Not old code, not ugly code — untested code: without tests you cannot know whether a change preserves behavior, so every edit is a gamble. The craft is breaking dependencies just enough to get tests in place before changing anything — cover and modify, never edit and pray.
Goal: 10/10. Rate changes to untested code 0-10 against the principles below. Report the current score and the specific steps needed to reach 10/10.
Core concept: The dilemma: to change code safely we need tests, but to get tests in place we have to change code. The way out is a fixed sequence — identify change points, find test points, break dependencies, write tests, then make changes and refactor — where the pre-test edits are conservative and mechanical, and the real change happens only inside the safety net.
Why it works: Edit-and-pray substitutes care for feedback, and care doesn't scale to code you don't fully understand. Cover-and-modify clamps existing behavior in a vise of tests, so any unintended change announces itself immediately on your machine instead of later in production.
Key insights:
Applications:
| Context | Application | Example |
|---|---|---|
| Bug fix in an untested module | Run the five steps before touching the bug | Pin parseInvoice() with tests, then fix the rounding error |
| PR mixing cleanup and a feature | Split into structure-only and behavior-only commits | Extract and rename first, tests green, then add the discount rule |
| "It's just a one-line change" | Find the nearest test point first | One pin test at the public method that calls the private one you edit |
See references/change-algorithm.md when running the five steps on a real change — the algorithm as a working procedure with change-point/test-point checklists and triage for "no time" situations.
Core concept: A seam is a place where you can alter behavior in your program without editing in that place. Every seam has an enabling point — where you decide which behavior runs. Getting legacy code under test is largely a hunt for seams: spots where a test can substitute a slow, global, or external dependency while the production source stays untouched.
Why it works: If you must edit code to test it, you risk changing the very behavior you are trying to pin down. Seams move the substitution to a distance — a subclass, an import, a build flag — so the code under test runs exactly as in production while the test controls its dependencies from the enabling point.
Key insights:
jest.mock and unittest.mock.patch are link seams in modern clothingnew Database() inside a method body is a seam that never got built — constructors doing real work, globals, statics, and hard-wired I/O are where seams dieApplications:
| Context | Application | Example |
|---|---|---|
| Class constructs its own DB client | Object seam via constructor parameter | constructor(db: Db = new ProdDb()) — tests pass a fake |
Module calls a top-level send_email() | Import/link seam | mocker.patch("billing.send_email") or jest.mock("./mailer") |
| Logic reads the wall clock directly | Seam at the clock | Inject a now() provider; tests freeze time |
See references/seams.md when hunting a seam in a specific stack — the seam catalog with code, enabling points, and seams in modern tooling (DI containers, jest.mock, pytest monkeypatch, clock and config seams).
Core concept: A characterization test documents what the code actually does right now — not what the spec, the comments, or anyone's memory says it should do. Write a probe you know will fail, let the failure message reveal the real behavior, then change the assertion to pin that behavior in place.
Why it works: In legacy systems the actual behavior is the de facto spec: callers, reports, and customers may depend on it, quirks included. Tests written from imagined requirements fail for reasons that tell you nothing, while characterization tests fail during refactoring precisely when — and where — you changed existing behavior.
Key insights:
expect(total).toBe(-1)), read the failure, pin the observed valueApplications:
| Context | Application | Example |
|---|---|---|
| Refactoring a tax calculator | Pin outputs for representative inputs | Run 20 cases through, assert each recorded result |
| Legacy report generator | Golden master diff | Generate the report, compare to a checked-in master file |
| Off-by-one found while pinning | Pin the wrong value, document it | assert days == 30 # BUG? expected 31 — TICKET-482 |
See references/characterization-tests.md when writing your first probe through to a pinned suite — golden masters, snapshot tests done right, and a worked before/after refactor.
Core concept: When you genuinely cannot get the area under test today, don't weave new logic into the untested mass. Sprout Method or Sprout Class: write the new behavior as fresh, fully tested code and call it from a single line in the legacy spot. Wrap Method or Wrap Class: rename the old code aside and add behavior before or after the call to it, decorator-style.
Why it works: New code in a fresh method or class can be test-driven even when its host can't be instantiated in a harness — testability no longer waits on getting the host into a harness. The untested host changes by exactly one call site, so the unverified blast radius is a single line instead of the whole method.
Key insights:
pay() to rawPay(), recreate pay() as the wrapperApplications:
| Context | Application | Example |
|---|---|---|
Late-fee rule in a 400-line process() | Sprout Method, one call line | total += lateFee(order) — lateFee() written test-first |
Audit logging around legacy pay() | Wrap Method | New pay() logs, calls rawPay(), logs again |
| New validation, class won't instantiate | Sprout Class | new OrderValidator().validate(data) called from legacy code |
Core concept: A catalog of mechanical, low-risk moves that sever whatever blocks instantiation or sensing: Extract Interface, Parameterize Constructor, Parameterize Method, Extract and Override Factory Method or Getter, Introduce Instance Delegator, Adapt Parameter, Break Out Method Object, Subclass and Override Method. Because they run before tests exist, always pick the least invasive technique that unblocks you.
Why it works: Code resists testing for a small set of recurring reasons — constructors doing real work, statics and singletons, parameters you can't construct, monster methods. Each blocker has a named, practiced counter-move, so you execute a known maneuver instead of improvising surgery on code that has no safety net.
Key insights:
HttpServletRequest in your own narrow interface and test against thatunittest.mock.patch or jest.mock can stand in for several techniques, but parameterizing leaves better design behindApplications:
| Context | Application | Example |
|---|---|---|
| Constructor opens a DB connection | Parameterize Constructor | def __init__(self, conn=None): self.conn = conn or connect() |
Static Billing.charge() called everywhere | Introduce Instance Delegator | Instance charge() delegates to the static; tests override it |
| 900-line method hoarding locals | Break Out Method Object | new RateCalculation(order, rates).run() — locals become fields |
See references/dependency-breaking.md when a specific blocker stops instantiation or sensing — before/after code for each technique plus a decision table mapping blockers to the right move.
Core concept: Before changing code you don't understand, invest in cheap comprehension: effect sketches trace what a change can affect, feature sketches show how methods and fields cluster inside a god class, scratch refactoring means refactoring recklessly to learn and then throwing the edits away, and telling the story of the system forces a simplifying summary. The payoff is finding pinch points — narrow places where a few tests cover wide behavior.
Why it works: In legacy code the bottleneck is comprehension, not typing. An effect sketch turns "what could this break?" from anxiety into a finite list, and a pinch point lets a handful of tests act as a vise over an entire cluster of methods — often revealing where a hidden class boundary wants to be drawn.
Key insights:
Applications:
| Context | Application | Example |
|---|---|---|
| "What breaks if I change this field?" | Effect sketch from the field outward | Three readers found; two pinch-point tests cover them |
| Feature due in a 5,000-line class | Pinch-point tests, then sprout | Cover postInvoice(), sprout the new rule as a class |
| Code nobody on the team understands | Scratch refactor on a branch | Extract and rename to learn, revert, plan the real moves |
See references/case-studies.md when you want a full worked walkthrough — three scenarios: a feature in an untested 800-line service, a singleton-ridden module brought under test, and a monster method tamed before a bug fix.
| Mistake | Why It Fails | Fix |
|---|---|---|
| Refactoring and changing behavior in one step | When something breaks, you can't tell which edit did it | Separate commits; tests green between each step |
| Writing "should" tests on legacy code | Imagined specs fail noisily and you "fix" load-bearing behavior | Characterize what the code does; file bugs separately |
| Mocking everything in sight | Tests pin the implementation, so every refactor breaks them | Fake only what blocks instantiation or sensing |
| Big-bang rewrite instead of incremental coverage | The old system keeps moving; rewrites ship late and miss years of edge cases | Cover and modify piece by piece |
| Silently fixing bugs found while characterizing | Callers and reports may depend on the wrong behavior | Pin it, document it, fix it as a separate deliberate change |
| Invasive cleanup before any tests exist | Every manual edit risks behavior with no net underneath | Least invasive technique; preserve signatures; lean on the compiler |
| Sprouting forever without payback | The host stays untested and sprouts ossify into the next legacy layer | Track sprout debt; cover hot spots on the next touch |
| Waiting for a dedicated "testing project" | That project never gets funded; coverage never appears | Grow coverage along every change you ship |
| Question | If No | Action |
|---|---|---|
| Do tests cover the code you're about to change? | You're editing and praying | Run the change algorithm; pin behavior before editing |
| Can you construct the class in a test harness? | Dependencies block separation | Parameterize Constructor, Extract Interface, or Sprout Class |
| Can a test sense the effect of your change? | Effects are invisible to assertions | Find a sensing point; Extract and Override Getter |
| Is this commit behavior-only or structure-only? | Mixed | Split it; run the tests between the two |
| Do you know everything this change can affect? | Unknown blast radius | Draw an effect sketch; test at the pinch points |
| Do your assertions state observed behavior? | Testing wishes | Probe, read the failure, pin the actual value |
| Is the seam you chose the cheapest one available? | Needless surgery | Prefer constructor parameters and import seams first |
| Will the code be better covered after this change? | The next change costs as much as this one | Leave at least one pin test at the nearest test point |
Michael C. Feathers is the founder of R7K Research & Conveyance, a consultancy focused on software design and the rehabilitation of aging systems. A long-time consultant and conference speaker on legacy code, he wrote Working Effectively with Legacy Code (2004) and gave the field its working definition: legacy code is simply code without tests.
© wondelai, 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 5 other files (references) in working-with-legacy-code of wondelai/skills.
Open the folder on GitHubat commit c172996
Working With Legacy Code 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 |
|---|---|---|---|---|---|---|
| Working With Legacy Code this skillwondelai/skills | 2.4k | — | ~4.9k | Automated safety check: Pass | MIT | |
| Legacy Code Summarizermajiayu000/claude-skill-registry | 666 | 1 repos | ~5.2k | Automated safety check: Pass | MIT | |
| Code Refactoring Workflowluongnv89/claude-howto | 42k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Code ReviewerYikai-Liao/symusic | 189 | 1 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Modern JavaScript Patternswshobson/agents | 40k | 12 repos | ~548 | Automated safety check: Pass | MIT | |
| Fowler-Style Refactoringlhfer/claude-howto-zh-cn | 2.3k | — | ~156 | Automated safety check: Pass | MIT |
majiayu000/claude-skill-registry
Produces comprehensive summaries and insights about legacy codebases to help understand unfamiliar code.
luongnv89/claude-howto
Guides systematic, test-backed refactoring in the style of Martin Fowler, moving through research, planning and small incremental changes with your approval at each phase.
Yikai-Liao/symusic
Analyzes code diffs and files to identify bugs, security vulnerabilities (SQL injection, XSS, insecure deserialization), code smells, N+1 queries, naming issues, and architectural concerns, then…
wshobson/agents
Covers ES6+ syntax and functional patterns for refactoring older JavaScript: async/await, destructuring, spread, modules, generators and data pipelines.
lhfer/claude-howto-zh-cn
基于 Martin Fowler 方法论做系统化重构。Use when users ask to refactor code, improve structure, reduce technical debt, clean up legacy code, or improve maintainability.
luongnv89/claude-howto
Vietnamese edition of a systematic refactoring skill based on Martin Fowler's book, working in approved phases with small, test-backed changes.
wondelai/skills
Navigate the technology adoption lifecycle from early adopters to mainstream market.
wondelai/skills
Apply foundational design principles: affordances, signifiers, constraints, feedback, and conceptual models.
wondelai/skills
Run a structured 5-day process to prototype, test, and validate product ideas with real users.
wondelai/skills
Design habit-forming product loops using the Hook Model (Trigger, Action, Variable Reward, Investment).
wondelai/skills
Diagnose and fix retention problems using behavior design (B=MAP).
wondelai/skills
Design products and pricing around validated willingness to pay, from Ramanujam & Tacke's "Monetizing Innovation".
Categories
Safely change and test untested codebases using Feathers' "Working Effectively with Legacy Code". Working With Legacy Code is an agent skill from wondelai/skills. Safely change and test untested codebases using Feathers' "Working Effectively with Legacy Code".
Working With Legacy Code fits situations like: the user mentions legacy code; untested codebase; how do I test this; characterization tests.
Run `npx skills add wondelai/skills --skill working-with-legacy-code -a claude-code`. Or copy the skill folder (working-with-legacy-code in wondelai/skills) into .claude/skills/working-with-legacy-code in your project. Claude Code loads it when a task matches its description.
Run `npx skills add wondelai/skills --skill working-with-legacy-code -a codex`. Or copy the skill folder (working-with-legacy-code in wondelai/skills) into .agents/skills/working-with-legacy-code 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 wondelai/skills --skill working-with-legacy-code -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/working-with-legacy-code, .gemini/skills/working-with-legacy-code, .github/skills/working-with-legacy-code and .opencode/skills/working-with-legacy-code in your project.
SKILL.md names no scripts, command-line tools or credentials: Working With Legacy Code is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: amazon.com. 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.
Working With Legacy Code is published under the MIT licence (declared in SKILL.md). 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. Its references folder adds about 16k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Working With Legacy Code: Legacy Code Summarizer (majiayu000/claude-skill-registry, 666 stars), Code Refactoring Workflow (luongnv89/claude-howto, 42k stars), Code Reviewer (Yikai-Liao/symusic, 189 stars) and Modern JavaScript Patterns (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
wondelai (a GitHub organization) maintains it in wondelai/skills, which has 2,356 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on September 10, 2026.
Source: wondelai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.