[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CPM2HQPR12FP76GAVCDPR7":3,"skill-same:01M7CPM2HQPR12FP76GAVCDPR7":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M7CPM2HQPR12FP76GAVCDPR7","jetson-memory-audit",null,"Measure Jetson DRAM\u002FNvMap usage and verify before\u002Fafter memory reclamation with live audit data.","om-scogo\u002Fskillsh-scraper","om-scogo","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160466840?v=4","01M79AWB6DFVCQ7RK70CS34B96","Om Achrekar","01M79AWB6ZM9SKR8KDH1WSSM22",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fnvidia-skills\u002Fjetson-memory-audit\u002Fskills\u002Fjetson-memory-audit\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: jetson-memory-audit\ndescription: Measure Jetson DRAM\u002FNvMap usage and verify before\u002Fafter memory reclamation with live audit data.\nversion: 0.0.1\nlicense: \"Apache-2.0\"\nmetadata:\n  author: \"Jetson Team\"\n  tags: [jetson, memory, audit]\n  languages: [bash]\n  data-classification: public\n---\n\n# Jetson Memory Audit\n\nRead-only memory-focused snapshot for a Jetson, plus the `drop_caches` verify-loop helper that confirms freed memory actually shows up as free instead of cached.\n\n## Purpose\n\nMeasure current Jetson memory consumers, capture before\u002Fafter baselines, and verify whether user-approved changes actually reclaimed DRAM. Use live device data rather than estimates from container size, model size, or generic process memory.\n\n## CRITICAL: Memory appears stuck after stopping vLLM \u002F sglang (JetPack below 7.2 \u002F L4T below r39.0)\n\n**This is the most common memory confusion on Jetson releases before JetPack 7.2 or before L4T r39.0.**\n\nAfter you stop a vLLM, sglang, or Ollama server (or any CUDA workload), the memory shown as free by `free -h` or `tegrastats` may not recover — even though the process is gone. `nvidia-smi` may also show misleadingly low free GPU memory.\n\n**Root cause:** The Thor RM (resource manager) holds freed sysmem pages in its own pool after a CUDA context exits. On Unified Memory Architecture (UMA) devices like Jetson, `cudaMemGetInfo` reads RM pool state and reports far less free memory than is actually available to a new process.\n\n**Workaround (for JetPack below 7.2 or L4T below r39.0):**\n```bash\nsudo sync && sudo sysctl -w vm.drop_caches=3\n```\nRun this on the **host**, not inside a container. The important operation is `sudo sysctl -w vm.drop_caches=3`; keep `sudo sync` immediately before it so dirty data is flushed before reclaimable page\u002Fdentry\u002Finode caches are dropped. After running it, `free -h` and `tegrastats` will reflect the true available memory.\n\nFor affected releases, recommend this command when a user says:\n- \"Memory didn't free after I stopped vLLM\u002Fsglang\"\n- \"Why does tegrastats still show high usage after my container exited?\"\n- \"OOM even though nothing is running\"\n- \"Memory was fine yesterday but now it's full\"\n\nOn JetPack below 7.2 or L4T below r39.0, `drop_caches` is the reliable workaround when memory appears stuck after a CUDA workload exits; on newer releases, use it only if the same symptom is observed and the user approves.\n\n## When to use\n\n- \"How much memory is in use on this Jetson? What's holding it?\"\n- \"I disabled the GUI \u002F stopped vLLM \u002F quit my container — did memory actually free?\"\n- \"Why does `free -h` still show low free memory after I stopped my workload?\"\n- As the **baseline** before applying `jetson-headless-mode` or other memory-related changes, and again **after** to compute the actual delta.\n\n## Prerequisites\n\n- Run on the Jetson host, or in a sandbox\u002Fcontainer with host-visible `\u002Fproc`, `\u002Fetc\u002Fnv_tegra_release`, `tegrastats`, and process data.\n- NvMap debugfs reads may require root. If unavailable, report that GPU memory attribution is limited rather than guessing.\n- `drop_caches.sh` requires root or passwordless `sudo -n`; run it only after the user explicitly authorizes cache dropping.\n\n## Available Scripts\n\n| Script | Purpose | Arguments |\n|--------|---------|-----------|\n| `scripts\u002Faudit.sh` | Emits a JSON snapshot from `jetson-diagnostic\u002Fscripts\u002Fsnapshot.sh` for memory audit workflows. | No arguments. |\n| `scripts\u002Fdrop_caches.sh` | Flushes reclaimable page\u002Fdentry\u002Finode caches and prints before\u002Fafter memory deltas. | `--mode 1\\|2\\|3`, `--quiet`. |\n\nIf your agent runtime supports `run_script`, use it to run `scripts\u002Faudit.sh` or `scripts\u002Fdrop_caches.sh` and summarize the returned output. Otherwise run the scripts with `bash` from the repository root.\n\n## Instructions\n\nFor \"how much memory is in use right now?\" questions, run `scripts\u002Faudit.sh` and report only values from the JSON snapshot.\n\n## Reporting guidance\n\nDo not only print or mention the path to a helper. Invoke the helper and then summarize the returned data.\n\n- For \"how much memory is in use\" prompts, run `scripts\u002Faudit.sh` and quote `mem_total_gb`, `memory_kb.available`, and the leading `procrank_top` process or `nvmap.top_clients` consumer.\n- For GUI\u002Fdesktop memory prompts, run `scripts\u002Faudit.sh` and report `default_systemd_target` plus any display manager in `candidate_services` (`gdm3`, `gdm`, `lightdm`, `sddm`, or `display-manager`). Do not disable anything; hand off to `jetson-headless-mode` for a plan.\n- For prompts that explicitly authorize cache dropping after a stopped workload, run `scripts\u002Fdrop_caches.sh` (equivalent to `sudo sync && sudo sysctl -w vm.drop_caches=3` by default) and report its before\u002Fafter free, available, and cached deltas. If root is unavailable, explain that it must be run on the host with sudo.\n\nIf your agent runtime does not execute helper scripts relative to this skill directory, resolve script paths with the AgentSkills `{baseDir}` placeholder:\n\n```bash\n{baseDir}\u002Fscripts\u002Faudit.sh\n{baseDir}\u002Fscripts\u002Fdrop_caches.sh\n```\n\nDo not call `jetson-memory-audit` as a tool name unless the runtime explicitly registers skills as callable tools; Agent Skills are normally instructions plus files, not direct tool functions.\n\nSandbox note for agents: seeing this skill file does not guarantee access to Jetson host memory data. If `\u002Fproc\u002Fdevice-tree\u002Fmodel`, `\u002Fetc\u002Fnv_tegra_release`, `tegrastats`, `\u002Fsys\u002Fkernel\u002Fdebug\u002Fnvmap`, or host process data are missing inside a NemoClaw\u002FOpenClaw sandbox, say the sandbox lacks Jetson host visibility and ask the user to run on the Jetson host or relaunch with a host-visible sandbox profile. Do not fabricate memory totals, available memory, PSS, NvMap, or reclamation deltas.\n\nFor \"how much memory did this change free?\" questions, use a before\u002Fafter delta. Do not estimate freed memory from container size, image size, RSS, or a single post-change snapshot.\n\n1. Before the change, run `scripts\u002Faudit.sh` and save the JSON baseline.\n2. Make the user-approved change (stop the container, switch mode, apply a tuning recommendation, etc.).\n3. On JetPack below 7.2 \u002F L4T below r39.0, or when the same stuck-memory symptom is observed on a newer release, flush reclaimable page cache on the **host** (not inside a container) so freed pages show up as free instead of cached:\n   ```bash\n   sudo sync && sudo sysctl -w vm.drop_caches=3\n   ```\n4. Re-run `scripts\u002Faudit.sh` and compare `memory_kb.available` before vs after — that delta is the real reclamation.\n\nIf the user already made the change and no baseline exists, say that the exact freed amount cannot be recovered from the current snapshot alone. Capture a new baseline now so the next change can be measured.\n\nUse live audit data as the source of truth. Memory totals, available memory, NvMap totals, PSS values, display-manager state, and savings deltas must come from `scripts\u002Faudit.sh`, `free -h`, or `tegrastats` on the actual device. If a number is not present in those outputs, do not guess it.\n\n## Output contract for `audit.sh`\n\n```json\n{\n  \"sku\": \"orin-nano\",\n  \"variant\": \"orin-nano-8gb\",\n  \"mem_total_gb\": 8,\n  \"l4t_version\": \"36.4.0\",\n  \"product_model\": \"nvidia jetson orin nano developer kit\",\n  \"memory_kb\": { \"total\": 8123456, \"available\": 4123456, \"free\": 1023456, \"cached\": 1234567, \"swap_total\": 0, \"swap_free\": 0 },\n  \"default_systemd_target\": \"graphical.target\",\n  \"candidate_services\": { \"gdm3\": { \"active\": \"active\", \"enabled\": \"enabled\" } },\n  \"tegrastats_sample\": \"RAM 4011\u002F8138MB (lfb 8x4MB) ...\",\n  \"nvmap\": { \"readable\": false, \"total_kb\": 0, \"top_clients\": [] },\n  \"procrank_top\": [ { \"pid\": 4321, \"pss_kb\": 4000000, \"cmd\": \"vllm\" } ]\n}\n```\n\n## Limitations\n\n- Exact freed-memory deltas require a before snapshot, the user-approved change, cache flush when appropriate, and an after snapshot.\n- NvMap attribution depends on host-visible debugfs access; if it is unavailable, report limited GPU memory attribution instead of guessing.\n- Sandbox\u002Fcontainer runs may not see host `\u002Fproc`, `tegrastats`, systemd, or NvMap data unless the runtime exposes them.\n\n## Error handling\n\n- If `scripts\u002Faudit.sh` cannot access host Jetson data, report the missing visibility and ask to rerun on the Jetson host or in a host-visible sandbox.\n- If `scripts\u002Fdrop_caches.sh` lacks root or passwordless `sudo -n`, report that cache dropping must be run on the host with sudo approval.\n- If no before snapshot exists, say the exact reclaimed amount cannot be recovered from the current state alone and capture a new baseline for the next change.\n\n## Safety\n\nRead-only. `drop_caches` is non-destructive (kernel only releases pages it could reclaim under pressure anyway; `sync` runs first to preserve dirty data).\n\n## Hand off to\n\n- `jetson-headless-mode` — biggest single user-space win on systems still booting `graphical.target`.\n- `jetson-inference-mem-tune` — when a model server is the top NvMap \u002F PSS consumer.\n- If runtime changes cannot hit the target, report that further reclamation is outside this skill's scope rather than suggesting unsafe boot-time edits.\n","# Jetson Memory Audit\n\nRead-only memory-focused snapshot for a Jetson, plus the `drop_caches` verify-loop helper that confirms freed memory actually shows up as free instead of cached.\n\n## Purpose\n\nMeasure current Jetson memory consumers, capture before\u002Fafter baselines, and verify whether user-approved changes actually reclaimed DRAM. Use live device data rather than estimates from container size, model size, or generic process memory.\n\n## CRITICAL: Memory appears stuck after stopping vLLM \u002F sglang (JetPack below 7.2 \u002F L4T below r39.0)\n\n**This is the most common memory confusion on Jetson releases before JetPack 7.2 or before L4T r39.0.**\n\nAfter you stop a vLLM, sglang, or Ollama server (or any CUDA workload), the memory shown as free by `free -h` or `tegrastats` may not recover — even though the process is gone. `nvidia-smi` may also show misleadingly low free GPU memory.\n\n**Root cause:** The Thor RM (resource manager) holds freed sysmem pages in its own pool after a CUDA context exits. On Unified Memory Architecture (UMA) devices like Jetson, `cudaMemGetInfo` reads RM pool state and reports far less free memory than is actually available to a new process.\n\n**Workaround (for JetPack below 7.2 or L4T below r39.0):**\n```bash\nsudo sync && sudo sysctl -w vm.drop_caches=3\n```\nRun this on the **host**, not inside a container. The important operation is `sudo sysctl -w vm.drop_caches=3`; keep `sudo sync` immediately before it so dirty data is flushed before reclaimable page\u002Fdentry\u002Finode caches are dropped. After running it, `free -h` and `tegrastats` will reflect the true available memory.\n\nFor affected releases, recommend this command when a user says:\n- \"Memory didn't free after I stopped vLLM\u002Fsglang\"\n- \"Why does tegrastats still show high usage after my container exited?\"\n- \"OOM even though nothing is running\"\n- \"Memory was fine yesterday but now it's full\"\n\nOn JetPack below 7.2 or L4T below r39.0, `drop_caches` is the reliable workaround when memory appears stuck after a CUDA workload exits; on newer releases, use it only if the same symptom is observed and the user approves.\n\n## When to use\n\n- \"How much memory is in use on this Jetson? What's holding it?\"\n- \"I disabled the GUI \u002F stopped vLLM \u002F quit my container — did memory actually free?\"\n- \"Why does `free -h` still show low free memory after I stopped my workload?\"\n- As the **baseline** before applying `jetson-headless-mode` or other memory-related changes, and again **after** to compute the actual delta.\n\n## Prerequisites\n\n- Run on the Jetson host, or in a sandbox\u002Fcontainer with host-visible `\u002Fproc`, `\u002Fetc\u002Fnv_tegra_release`, `tegrastats`, and process data.\n- NvMap debugfs reads may require root. If unavailable, report that GPU memory attribution is limited rather than guessing.\n- `drop_caches.sh` requires root or passwordless `sudo -n`; run it only after the user explicitly authorizes cache dropping.\n\n## Available Scripts\n\n| Script | Purpose | Arguments |\n|--------|---------|-----------|\n| `scripts\u002Faudit.sh` | Emits a JSON snapshot from `jetson-diagnostic\u002Fscripts\u002Fsnapshot.sh` for memory audit workflows. | No arguments. |\n| `scripts\u002Fdrop_caches.sh` | Flushes reclaimable page\u002Fdentry\u002Finode caches and prints before\u002Fafter memory deltas. | `--mode 1\\|2\\|3`, `--quiet`. |\n\nIf your agent runtime supports `run_script`, use it to run `scripts\u002Faudit.sh` or `scripts\u002Fdrop_caches.sh` and summarize the returned output. Otherwise run the scripts with `bash` from the repository root.\n\n## Instructions\n\nFor \"how much memory is in use right now?\" questions, run `scripts\u002Faudit.sh` and report only values from the JSON snapshot.\n\n## Reporting guidance\n\nDo not only print or mention the path to a helper. Invoke the helper and then summarize the returned data.\n\n- For \"how much memory is in use\" prompts, run `scripts\u002Faudit.sh` and quote `mem_total_gb`, `memory_kb.available`, and the leading `procrank_top` process or `nvmap.top_clients` consumer.\n- For GUI\u002Fdesktop memory prompts, run `scripts\u002Faudit.sh` and report `default_systemd_target` plus any display manager in `candidate_services` (`gdm3`, `gdm`, `lightdm`, `sddm`, or `display-manager`). Do not disable anything; hand off to `jetson-headless-mode` for a plan.\n- For prompts that explicitly authorize cache dropping after a stopped workload, run `scripts\u002Fdrop_caches.sh` (equivalent to `sudo sync && sudo sysctl -w vm.drop_caches=3` by default) and report its before\u002Fafter free, available, and cached deltas. If root is unavailable, explain that it must be run on the host with sudo.\n\nIf your agent runtime does not execute helper scripts relative to this skill directory, resolve script paths with the AgentSkills `{baseDir}` placeholder:\n\n```bash\n{baseDir}\u002Fscripts\u002Faudit.sh\n{baseDir}\u002Fscripts\u002Fdrop_caches.sh\n```\n\nDo not call `jetson-memory-audit` as a tool name unless the runtime explicitly registers skills as callable tools; Agent Skills are normally instructions plus files, not direct tool functions.\n\nSandbox note for agents: seeing this skill file does not guarantee access to Jetson host memory data. If `\u002Fproc\u002Fdevice-tree\u002Fmodel`, `\u002Fetc\u002Fnv_tegra_release`, `tegrastats`, `\u002Fsys\u002Fkernel\u002Fdebug\u002Fnvmap`, or host process data are missing inside a NemoClaw\u002FOpenClaw sandbox, say the sandbox lacks Jetson host visibility and ask the user to run on the Jetson host or relaunch with a host-visible sandbox profile. Do not fabricate memory totals, available memory, PSS, NvMap, or reclamation deltas.\n\nFor \"how much memory did this change free?\" questions, use a before\u002Fafter delta. Do not estimate freed memory from container size, image size, RSS, or a single post-change snapshot.\n\n1. Before the change, run `scripts\u002Faudit.sh` and save the JSON baseline.\n2. Make the user-approved change (stop the container, switch mode, apply a tuning recommendation, etc.).\n3. On JetPack below 7.2 \u002F L4T below r39.0, or when the same stuck-memory symptom is observed on a newer release, flush reclaimable page cache on the **host** (not inside a container) so freed pages show up as free instead of cached:\n   ```bash\n   sudo sync && sudo sysctl -w vm.drop_caches=3\n   ```\n4. Re-run `scripts\u002Faudit.sh` and compare `memory_kb.available` before vs after — that delta is the real reclamation.\n\nIf the user already made the change and no baseline exists, say that the exact freed amount cannot be recovered from the current snapshot alone. Capture a new baseline now so the next change can be measured.\n\nUse live audit data as the source of truth. Memory totals, available memory, NvMap totals, PSS values, display-manager state, and savings deltas must come from `scripts\u002Faudit.sh`, `free -h`, or `tegrastats` on the actual device. If a number is not present in those outputs, do not guess it.\n\n## Output contract for `audit.sh`\n\n```json\n{\n  \"sku\": \"orin-nano\",\n  \"variant\": \"orin-nano-8gb\",\n  \"mem_total_gb\": 8,\n  \"l4t_version\": \"36.4.0\",\n  \"product_model\": \"nvidia jetson orin nano developer kit\",\n  \"memory_kb\": { \"total\": 8123456, \"available\": 4123456, \"free\": 1023456, \"cached\": 1234567, \"swap_total\": 0, \"swap_free\": 0 },\n  \"default_systemd_target\": \"graphical.target\",\n  \"candidate_services\": { \"gdm3\": { \"active\": \"active\", \"enabled\": \"enabled\" } },\n  \"tegrastats_sample\": \"RAM 4011\u002F8138MB (lfb 8x4MB) ...\",\n  \"nvmap\": { \"readable\": false, \"total_kb\": 0, \"top_clients\": [] },\n  \"procrank_top\": [ { \"pid\": 4321, \"pss_kb\": 4000000, \"cmd\": \"vllm\" } ]\n}\n```\n\n## Limitations\n\n- Exact freed-memory deltas require a before snapshot, the user-approved change, cache flush when appropriate, and an after snapshot.\n- NvMap attribution depends on host-visible debugfs access; if it is unavailable, report limited GPU memory attribution instead of guessing.\n- Sandbox\u002Fcontainer runs may not see host `\u002Fproc`, `tegrastats`, systemd, or NvMap data unless the runtime exposes them.\n\n## Error handling\n\n- If `scripts\u002Faudit.sh` cannot access host Jetson data, report the missing visibility and ask to rerun on the Jetson host or in a host-visible sandbox.\n- If `scripts\u002Fdrop_caches.sh` lacks root or passwordless `sudo -n`, report that cache dropping must be run on the host with sudo approval.\n- If no before snapshot exists, say the exact reclaimed amount cannot be recovered from the current state alone and capture a new baseline for the next change.\n\n## Safety\n\nRead-only. `drop_caches` is non-destructive (kernel only releases pages it could reclaim under pressure anyway; `sync` runs first to preserve dirty data).\n\n## Hand off to\n\n- `jetson-headless-mode` — biggest single user-space win on systems still booting `graphical.target`.\n- `jetson-inference-mem-tune` — when a model server is the top NvMap \u002F PSS consumer.\n- If runtime changes cannot hit the target, report that further reclamation is outside this skill's scope rather than suggesting unsafe boot-time edits.\n",{"name":5,"license":15,"version":24,"metadata":25,"description":7},"0.0.1",{"tags":26,"author":30,"languages":31,"data-classification":33},[27,28,29],"jetson","memory","audit","Jetson Team",[32],"bash","public","main","8859218955d9504cd18b59e7892100718039d3b4","data\u002Fskills\u002Fnvidia-skills\u002Fjetson-memory-audit\u002Fskills\u002Fjetson-memory-audit",1,"https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper","https:\u002F\u002Fgithub.com\u002Fom-scogo","SDE-1 @ Scogo ","2026-07-18 12:22:46",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add om-scogo\u002Fskillsh-scraper --skill jetson-memory-audit",{"tool":48,"command":49},"bunx","bunx skills add om-scogo\u002Fskillsh-scraper --skill jetson-memory-audit",{"tool":51,"command":52},"pnpm","pnpm dlx skills add om-scogo\u002Fskillsh-scraper --skill jetson-memory-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fnvidia-skills\u002Fjetson-memory-audit\u002Fskills\u002Fjetson-memory-audit\u002FSKILL.md",true,[],[57,65,70,77,82,89],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M7D6MC9FAAEV4CMNYX8W7JTG","arxiv-search","Search arXiv physics, math, and computer science preprints using natural language queries. Powered by Valyu semantic search.","MIT","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fyorkeccak-scientific-skills\u002Farxiv-search\u002Fskills\u002Farxiv-search\u002FSKILL.md",[],[],{"skillNo":66,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M7D6M85CKKN87TA98VCQV4H7","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fyorkeccak-scientific-skills\u002Farxiv-search\u002FSkill.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7D4ZTCS4DR3CE4JY06X84T2","working-with-legacy-code","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 to tangled modules, or planning incremental test coverage for an old codebase. Covers the legacy-code change algorithm, seams, characterization tests, sprout\u002Fwrap, and dependency-breaking techniques. For refactoring code that already has tests, see refactoring-patterns. For day-to-day code quality, see clean-code.","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fworking-with-legacy-code\u002Fworking-with-legacy-code\u002FSKILL.md",[],[],{"skillNo":78,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7D4ZHZKJD2RSNGAF63V14P4","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fworking-with-legacy-code\u002FSkill.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M7D4ZB4CJBFW5JE67CPH2QRV","web-typography","Select, pair, and implement typefaces for web projects. Use when the user mentions \"font pairing\", \"which typeface\", \"line height\", \"responsive typography\", \"web font loading\", \"type hierarchy\", \"variable fonts\", \"FOUT\u002FFOIT\", \"typographic scale\", or \"the text is hard to read\". Also trigger when choosing between system fonts and web fonts, optimizing font-loading performance, or designing readable long-form content. Covers readability evaluation, CSS implementation, and performance optimization. For overall UI design systems, see refactoring-ui. For dramatic typographic experiences, see top-design.","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fweb-typography\u002Fweb-typography\u002FSKILL.md",[],[],{"skillNo":90,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":61,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7D4Z4MVYVY3NMJ18BNV6WNA","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fweb-typography\u002FSkill.md",[],[]]