[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71GTWZFAA1MFKNXT3N88MVZ":3,"skill-same:01M71GTWZFAA1MFKNXT3N88MVZ":81},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M71GTWZFAA1MFKNXT3N88MVZ","vibe-gc",null,"Audit runtime roots for unused skills, orphan hooks, shadowed permissions and stale caches; soft-delete with undo.","timurgaleev\u002Fvibestack","timurgaleev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F32696429?v=4","01M71GMS53Z9B4JQTCQEFXAE9E","Timur Galeev","01M71GMS5S1Q7BEYB3Z7GY3E85",8,"MIT","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Fskills\u002Fvibe-gc\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"vibe gc","vibe","gc","config","write","read","audit","delete","permissions","with","Bash","unused","clean","up","hooks","orphan","collect","runtime","for","audit runtime","2026-11-10 10:12:30",false,"---\nname: vibe-gc\ndescription: |\n  Audit runtime roots for unused skills, orphan hooks, shadowed permissions and stale caches; soft-delete with undo.\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n  - AskUserQuestion\ntriggers:\n  - vibe gc\n  - clean up skills\n  - garbage collect config\n  - prune unused skills\n---\n\nIf this session was compacted, the copy of this skill in context may be cut off.\nRead `${CLAUDE_SKILL_DIR}\u002FSKILL.md` from disk and resume at the step you are on.\n\n## When to invoke\n\nUse when the owner asks to clean up, slim down or audit what is installed\naround the agent: too many skills, noisy hooks, a long permission list, a\nbloated `~\u002F.claude`, or a periodic (roughly monthly) configuration review. It\nis not for cleaning project source code, chat history or the pack's own\nskills — `.\u002Finstall` already prunes skills the pack withdrew.\n\nThe skill is **audit-only by default**. Nothing moves until the owner confirms\nthat one item, and every move is a soft delete with a logged undo.\n\n{{include lib\u002Fsnippets\u002Fsession-host.md}}\n\n## Step 1: Scan\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" scan --days 30\n```\n\nEach row is `id  channel  path  signal  size_kb  mtime  confidence`, ranked\nhigh → low, then by size, at most 20 rows. A shorter batch is the point: this\nruns periodically, not exhaustively. Show the rows as a numbered table. When\nthe scan prints nothing, say the configuration is clean and stop.\n\nWhat the channels mean:\n\n- **skills** — directories in `~\u002F.claude\u002Fskills`, `~\u002F.agents\u002Fskills`,\n  `~\u002F.cursor\u002Fskills`, `~\u002F.kiro\u002Fskills` or `~\u002F.copilot\u002Fskills` (`$COPILOT_HOME\u002Fskills`\n  when set) that the root's `.vibestack-manifest` does not claim. A missing or empty `SKILL.md` is high confidence; a name that\n  repeats another root's skill is low. `usage: unmeasured` means no usage data\n  exists for that root — it never makes an item more disposable.\n- **hooks** — scripts under `~\u002F.claude\u002Fhooks\u002F` that nothing in the user\n  `settings.json` \u002F `settings.local.json` and no other hook script references.\n  A project's own `.claude\u002Fsettings.json` is not read, so confirm before\n  trashing a hook a project may call.\n- **permissions** — duplicate `permissions.allow` entries and `Bash(...)`\n  entries already covered by `Bash(*)`. The scan only reports them.\n- **mcp** — configured servers. The bin cannot see whether a server is live.\n- **caches** — `file-history`, `shell-snapshots` and the `skills.old` \u002F\n  `skills.staging.*` entries an interrupted install leaves beside a skills root,\n  older than `--days`.\n\n## Step 2: Automation status\n\nBuild one table for the MCP servers and hooks the scan listed:\n\n| Item | Configured | Authenticated | Recently verified | Stale or broken | Missing | Evidence |\n|------|------------|---------------|-------------------|-----------------|---------|----------|\n\nFill the evidence column only from what this session observed. A server that\nfailed to connect in this session is \"stale or broken (this session)\"; a server\nwhose tools answered is \"recently verified\". A reference in a skill or a config\nentry is not proof that anything is live, and a failed connection is not proof\nthat it is disposable — a server can be down for a day.\n\nThis skill never changes MCP, n8n, cron or launchd state. For an item that\nlooks broken, name the owner's action (re-authenticate, restart the server,\nremove the entry by hand) instead of doing it.\n\n## Step 3: Confirm one item at a time\n\nIf `SESSION_KIND` is `headless` or `spawned`, stop after Step 2: report the\naudit and move nothing.\n\nOtherwise walk the candidates in rank order. For each one, show its row and\nthe evidence, then ask with AskUserQuestion:\n\n- Question: \"Move `\u003Cpath>` to the gc trash? Signal: `\u003Csignal>`.\"\n- Options: [\"Trash it\", \"Skip\", \"Stop here\"]\n\nThere is no \"all\" option, and one answer never covers the next item. Skip the\n`mcp` rows here — Step 2 already named the action. \"Stop here\" ends the walk;\nreport what was done so far.\n\n## Step 4: Soft-delete the confirmed item\n\nFor a skill, hook or cache path:\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" trash '\u003CPATH from the row>'\n```\n\nFor a `repo` row (an oversized log under a project's `.vibestack\u002F`):\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" trim '\u003CPATH from the row>'\n```\n\nIt keeps the last 256 KB and keeps the untrimmed original in\n`~\u002F.vibestack\u002Fgc-trash\u002F\u003Cdate>\u002Frepo\u002F`; it refuses while that repository's browse\ndaemon may be running, and for a log with no line break in its last 256 KB.\n`undo \u003Cdate>` puts the original back, with any records appended since the trim\nkept at the end; it leaves the original in the trash if the log no longer starts\nwith the kept tail.\n\nThe bin moves it to `~\u002F.vibestack\u002Fgc-trash\u002F\u003Cdate>\u002F\u003Cchannel>\u002F` and appends an\n`undo:` line to `~\u002F.vibestack\u002Fgc-log.md`. A `REFUSED:` line means the path is\nsettings, MCP configuration, transcripts, project state, a pack-owned skill or\noutside the known roots — nothing moved. Report the refusal; never move the\npath by other means.\n\nFor a permission entry, write the exact entry to\n`~\u002F.vibestack\u002Fgc-entry.txt` with the Write tool (no trailing newline), then\nrun this with the settings file the row named:\n\n```bash\n_SETTINGS='\u003Csettings file path from the row>'\n_DAY=$(date +%Y-%m-%d)\n_VH=\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\"\n_BACKUP=\"$_VH\u002Fgc-trash\u002F$_DAY\u002Fpermissions\u002F$(basename \"$_SETTINGS\").$(date +%H%M%S)\"\nmkdir -p \"$(dirname \"$_BACKUP\")\" && cp \"$_SETTINGS\" \"$_BACKUP\" || { echo \"BACKUP_FAILED\"; exit 1; }\npython3 -I -c '\nimport json, os, sys\nsettings, entry_file = sys.argv[1], sys.argv[2]\nentry = open(entry_file, encoding=\"utf-8\").read()\nwith open(settings, encoding=\"utf-8\") as f:\n    data = json.load(f)\nallow = data.get(\"permissions\", {}).get(\"allow\", [])\nif entry not in allow:\n    sys.exit(\"ENTRY_NOT_FOUND\")\ni = len(allow) - 1 - allow[::-1].index(entry)\ndel allow[i]\n# The new file takes the original mode, so the rename cannot widen a 0600 file.\nfd = os.open(settings + \".gc-tmp\", os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)\nos.fchmod(fd, os.stat(settings).st_mode & 0o7777)\nwith os.fdopen(fd, \"w\", encoding=\"utf-8\") as f:\n    json.dump(data, f, indent=2, ensure_ascii=False)\n    f.write(\"\\n\")\n' \"$_SETTINGS\" \"$_VH\u002Fgc-entry.txt\" || { echo \"EDIT_FAILED\"; exit 1; }\nmv \"$_SETTINGS.gc-tmp\" \"$_SETTINGS\"\npython3 -I -c '\nimport datetime, sys\nlog, settings, backup, entry_file = sys.argv[1:5]\nentry = open(entry_file, encoding=\"utf-8\").read()\nts = datetime.datetime.now().astimezone().isoformat(timespec=\"seconds\")\nwith open(log, \"a\", encoding=\"utf-8\") as f:\n    f.write(\"- %s removed permission %r from %s; backup %s undo: cp %r %r\\n\" % (ts, entry, settings, backup, backup, settings))\n' \"$_VH\u002Fgc-log.md\" \"$_SETTINGS\" \"$_BACKUP\" \"$_VH\u002Fgc-entry.txt\"\nrm -f \"$_VH\u002Fgc-entry.txt\"\necho \"REMOVED_FROM: $_SETTINGS\"\necho \"BACKUP: $_BACKUP\"\n```\n\nOnly the last occurrence of a duplicate is removed, so one entry stays. On\n`BACKUP_FAILED`, `ENTRY_NOT_FOUND` or `EDIT_FAILED` the settings file is\nunchanged — report it and go on to the next item.\n\n## Step 5: Report\n\n```\nvibe-gc — \u003Cdate>\nMoved:      \u003Cn> items (\u003Creclaimed KB> KB)\n  - \u003Cpath> → \u003Ctrash path>\nPermissions removed: \u003Cn> (backups in gc-trash\u002F\u003Cdate>\u002Fpermissions\u002F)\nSkipped:    \u003Cn>\nAutomation: \u003Cone line per server\u002Fhook with its status and the owner's action>\nUndo:       \"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" undo \u003Cdate>   (moves that day's items back)\n            permission edits: copy the backup named in gc-log.md over the settings file\nNext review: \u003Cdate + 30 days>\n```\n\n## Important Rules\n\n- **Audit-only by default.** Nothing moves without a per-item confirmation in\n  an interactive session.\n- **Pack-owned skills are never candidates.** A name in a root's\n  `.vibestack-manifest` belongs to the pack; `.\u002Finstall` manages it.\n- **Stale is not disposable.** A failed connection or an old timestamp is\n  evidence to show, not a verdict.\n- **Unmeasured usage is not unused.** Only a measured absence of use counts as\n  a signal.\n- **Never hard-delete.** The trash and the log are the undo path.\n- **Sources and repos are never touched**, nor MCP, n8n, cron or launchd\n  state. The one exception is `trim` on a log under a repo's `.vibestack\u002F`.\n","If this session was compacted, the copy of this skill in context may be cut off.\nRead `${CLAUDE_SKILL_DIR}\u002FSKILL.md` from disk and resume at the step you are on.\n\n## When to invoke\n\nUse when the owner asks to clean up, slim down or audit what is installed\naround the agent: too many skills, noisy hooks, a long permission list, a\nbloated `~\u002F.claude`, or a periodic (roughly monthly) configuration review. It\nis not for cleaning project source code, chat history or the pack's own\nskills — `.\u002Finstall` already prunes skills the pack withdrew.\n\nThe skill is **audit-only by default**. Nothing moves until the owner confirms\nthat one item, and every move is a soft delete with a logged undo.\n\n{{include lib\u002Fsnippets\u002Fsession-host.md}}\n\n## Step 1: Scan\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" scan --days 30\n```\n\nEach row is `id  channel  path  signal  size_kb  mtime  confidence`, ranked\nhigh → low, then by size, at most 20 rows. A shorter batch is the point: this\nruns periodically, not exhaustively. Show the rows as a numbered table. When\nthe scan prints nothing, say the configuration is clean and stop.\n\nWhat the channels mean:\n\n- **skills** — directories in `~\u002F.claude\u002Fskills`, `~\u002F.agents\u002Fskills`,\n  `~\u002F.cursor\u002Fskills`, `~\u002F.kiro\u002Fskills` or `~\u002F.copilot\u002Fskills` (`$COPILOT_HOME\u002Fskills`\n  when set) that the root's `.vibestack-manifest` does not claim. A missing or empty `SKILL.md` is high confidence; a name that\n  repeats another root's skill is low. `usage: unmeasured` means no usage data\n  exists for that root — it never makes an item more disposable.\n- **hooks** — scripts under `~\u002F.claude\u002Fhooks\u002F` that nothing in the user\n  `settings.json` \u002F `settings.local.json` and no other hook script references.\n  A project's own `.claude\u002Fsettings.json` is not read, so confirm before\n  trashing a hook a project may call.\n- **permissions** — duplicate `permissions.allow` entries and `Bash(...)`\n  entries already covered by `Bash(*)`. The scan only reports them.\n- **mcp** — configured servers. The bin cannot see whether a server is live.\n- **caches** — `file-history`, `shell-snapshots` and the `skills.old` \u002F\n  `skills.staging.*` entries an interrupted install leaves beside a skills root,\n  older than `--days`.\n\n## Step 2: Automation status\n\nBuild one table for the MCP servers and hooks the scan listed:\n\n| Item | Configured | Authenticated | Recently verified | Stale or broken | Missing | Evidence |\n|------|------------|---------------|-------------------|-----------------|---------|----------|\n\nFill the evidence column only from what this session observed. A server that\nfailed to connect in this session is \"stale or broken (this session)\"; a server\nwhose tools answered is \"recently verified\". A reference in a skill or a config\nentry is not proof that anything is live, and a failed connection is not proof\nthat it is disposable — a server can be down for a day.\n\nThis skill never changes MCP, n8n, cron or launchd state. For an item that\nlooks broken, name the owner's action (re-authenticate, restart the server,\nremove the entry by hand) instead of doing it.\n\n## Step 3: Confirm one item at a time\n\nIf `SESSION_KIND` is `headless` or `spawned`, stop after Step 2: report the\naudit and move nothing.\n\nOtherwise walk the candidates in rank order. For each one, show its row and\nthe evidence, then ask with AskUserQuestion:\n\n- Question: \"Move `\u003Cpath>` to the gc trash? Signal: `\u003Csignal>`.\"\n- Options: [\"Trash it\", \"Skip\", \"Stop here\"]\n\nThere is no \"all\" option, and one answer never covers the next item. Skip the\n`mcp` rows here — Step 2 already named the action. \"Stop here\" ends the walk;\nreport what was done so far.\n\n## Step 4: Soft-delete the confirmed item\n\nFor a skill, hook or cache path:\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" trash '\u003CPATH from the row>'\n```\n\nFor a `repo` row (an oversized log under a project's `.vibestack\u002F`):\n\n```bash\n\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" trim '\u003CPATH from the row>'\n```\n\nIt keeps the last 256 KB and keeps the untrimmed original in\n`~\u002F.vibestack\u002Fgc-trash\u002F\u003Cdate>\u002Frepo\u002F`; it refuses while that repository's browse\ndaemon may be running, and for a log with no line break in its last 256 KB.\n`undo \u003Cdate>` puts the original back, with any records appended since the trim\nkept at the end; it leaves the original in the trash if the log no longer starts\nwith the kept tail.\n\nThe bin moves it to `~\u002F.vibestack\u002Fgc-trash\u002F\u003Cdate>\u002F\u003Cchannel>\u002F` and appends an\n`undo:` line to `~\u002F.vibestack\u002Fgc-log.md`. A `REFUSED:` line means the path is\nsettings, MCP configuration, transcripts, project state, a pack-owned skill or\noutside the known roots — nothing moved. Report the refusal; never move the\npath by other means.\n\nFor a permission entry, write the exact entry to\n`~\u002F.vibestack\u002Fgc-entry.txt` with the Write tool (no trailing newline), then\nrun this with the settings file the row named:\n\n```bash\n_SETTINGS='\u003Csettings file path from the row>'\n_DAY=$(date +%Y-%m-%d)\n_VH=\"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\"\n_BACKUP=\"$_VH\u002Fgc-trash\u002F$_DAY\u002Fpermissions\u002F$(basename \"$_SETTINGS\").$(date +%H%M%S)\"\nmkdir -p \"$(dirname \"$_BACKUP\")\" && cp \"$_SETTINGS\" \"$_BACKUP\" || { echo \"BACKUP_FAILED\"; exit 1; }\npython3 -I -c '\nimport json, os, sys\nsettings, entry_file = sys.argv[1], sys.argv[2]\nentry = open(entry_file, encoding=\"utf-8\").read()\nwith open(settings, encoding=\"utf-8\") as f:\n    data = json.load(f)\nallow = data.get(\"permissions\", {}).get(\"allow\", [])\nif entry not in allow:\n    sys.exit(\"ENTRY_NOT_FOUND\")\ni = len(allow) - 1 - allow[::-1].index(entry)\ndel allow[i]\n# The new file takes the original mode, so the rename cannot widen a 0600 file.\nfd = os.open(settings + \".gc-tmp\", os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)\nos.fchmod(fd, os.stat(settings).st_mode & 0o7777)\nwith os.fdopen(fd, \"w\", encoding=\"utf-8\") as f:\n    json.dump(data, f, indent=2, ensure_ascii=False)\n    f.write(\"\\n\")\n' \"$_SETTINGS\" \"$_VH\u002Fgc-entry.txt\" || { echo \"EDIT_FAILED\"; exit 1; }\nmv \"$_SETTINGS.gc-tmp\" \"$_SETTINGS\"\npython3 -I -c '\nimport datetime, sys\nlog, settings, backup, entry_file = sys.argv[1:5]\nentry = open(entry_file, encoding=\"utf-8\").read()\nts = datetime.datetime.now().astimezone().isoformat(timespec=\"seconds\")\nwith open(log, \"a\", encoding=\"utf-8\") as f:\n    f.write(\"- %s removed permission %r from %s; backup %s undo: cp %r %r\\n\" % (ts, entry, settings, backup, backup, settings))\n' \"$_VH\u002Fgc-log.md\" \"$_SETTINGS\" \"$_BACKUP\" \"$_VH\u002Fgc-entry.txt\"\nrm -f \"$_VH\u002Fgc-entry.txt\"\necho \"REMOVED_FROM: $_SETTINGS\"\necho \"BACKUP: $_BACKUP\"\n```\n\nOnly the last occurrence of a duplicate is removed, so one entry stays. On\n`BACKUP_FAILED`, `ENTRY_NOT_FOUND` or `EDIT_FAILED` the settings file is\nunchanged — report it and go on to the next item.\n\n## Step 5: Report\n\n```\nvibe-gc — \u003Cdate>\nMoved:      \u003Cn> items (\u003Creclaimed KB> KB)\n  - \u003Cpath> → \u003Ctrash path>\nPermissions removed: \u003Cn> (backups in gc-trash\u002F\u003Cdate>\u002Fpermissions\u002F)\nSkipped:    \u003Cn>\nAutomation: \u003Cone line per server\u002Fhook with its status and the owner's action>\nUndo:       \"${VIBESTACK_HOME:-$HOME\u002F.vibestack}\u002Fbin\u002Fvibe-gc\" undo \u003Cdate>   (moves that day's items back)\n            permission edits: copy the backup named in gc-log.md over the settings file\nNext review: \u003Cdate + 30 days>\n```\n\n## Important Rules\n\n- **Audit-only by default.** Nothing moves without a per-item confirmation in\n  an interactive session.\n- **Pack-owned skills are never candidates.** A name in a root's\n  `.vibestack-manifest` belongs to the pack; `.\u002Finstall` manages it.\n- **Stale is not disposable.** A failed connection or an old timestamp is\n  evidence to show, not a verdict.\n- **Unmeasured usage is not unused.** Only a measured absence of use counts as\n  a signal.\n- **Never hard-delete.** The trash and the log are the undo path.\n- **Sources and repos are never touched**, nor MCP, n8n, cron or launchd\n  state. The one exception is `trim` on a log under a repo's `.vibestack\u002F`.\n",{"name":5,"triggers":49,"description":53,"allowed-tools":54},[24,50,51,52],"clean up skills","garbage collect config","prune unused skills","Audit runtime roots for unused skills, orphan hooks, shadowed permissions and stale caches; soft-delete with undo.\n",[34,55,56,57],"Read","Write","AskUserQuestion","main","777ec643a83c17a0955856b2eb7f596601709fda","skills\u002Fvibe-gc",0,"https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack","https:\u002F\u002Fgithub.com\u002Ftimurgaleev","https:\u002F\u002Ftgaleev.com\u002F","Forward Deployed Engineer \u002F\r\nAWS Community Builder \u002F Cloud Architect ","2026-11-11 15:42:25",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add timurgaleev\u002Fvibestack --skill vibe-gc",{"tool":73,"command":74},"bunx","bunx skills add timurgaleev\u002Fvibestack --skill vibe-gc",{"tool":76,"command":77},"pnpm","pnpm dlx skills add timurgaleev\u002Fvibestack --skill vibe-gc","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Fskills\u002Fvibe-gc\u002FSKILL.md",true,[],[82,88,94,100,105,111],{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":44},"01M71GVHCCSQCCPVM8XPSPTA73","docs","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F15-backtick-info-string\u002Fskills\u002Fdocs\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":44},"01M71GVFT1S5MRNM0AYRT2E6VQ","fences","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F14-indented-tilde-fence\u002Fskills\u002Ffences\u002FSKILL.md",[],[90],{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":44},"01M71GVEYB54K1S83FGRNKN8CF","dirty","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F10-check-with-drift\u002Fskills\u002Fdirty\u002FSKILL.md",[],[96],{"skillNo":101,"name":36,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":44},"01M71GVDX9PMND1337C4388DK4","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F09-check-no-drift\u002Fskills\u002Fclean\u002FSKILL.md",[],[36],{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":44},"01M71GVC3VM66F1ZQT2G8JXDR0","bare","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F08-no-frontmatter\u002Fskills\u002Fbare\u002FSKILL.md",[],[107],{"skillNo":112,"name":113,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":44},"01M71GV9T8DAYZT0PX52QX0TE1","idem","https:\u002F\u002Fgithub.com\u002Ftimurgaleev\u002Fvibestack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frender\u002F07-idempotent-rerender\u002Fskills\u002Fidem\u002FSKILL.md",[],[113]]