[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DJJCQR67MJERGFB519ARE9":3,"skill-same:01M6DJJCQR67MJERGFB519ARE9":206},{"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":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":55,"commitSha":56,"skillDirectory":5,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6DJJCQR67MJERGFB519ARE9","careful",null,"Safety guardrails for destructive commands. (gstack)","garrytan\u002Fgstack","garrytan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F19957?v=4","01M6DJCCDDG53MTYYRTXAXFG17","Garry Tan","01M6DJCCKGZB08AY82GDQXVJ8G",141364,"MIT","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31],"powershell","Guardrails","Safety","Bash","check","command","read","gstack","commands","exec","mode","for","home","2026-11-10 10:12:30",false,"---\nname: careful\nversion: 0.1.0\ndescription: Safety guardrails for destructive commands. (gstack)\ntriggers:\n  - be careful\n  - warn before destructive\n  - safety mode\nallowed-tools:\n  - Bash\n  - Read\nhooks:\n  PreToolUse:\n    - matcher: \"Bash\"\n      hooks:\n        - type: command\n          command: 'bash -c \"exec bash \\\"$HOME\u002F.claude\u002Fskills\u002Fgstack\u002Fcareful\u002Fbin\u002Fcheck-careful.sh\\\"\"'\n          statusMessage: \"Checking for destructive commands...\"\n    - matcher: \"PowerShell\"\n      hooks:\n        - type: command\n          command: 'bash -c \"exec bash \\\"$HOME\u002F.claude\u002Fskills\u002Fgstack\u002Fcareful\u002Fbin\u002Fcheck-careful.sh\\\"\"'\n          statusMessage: \"Checking for destructive commands...\"\n---\n\u003C!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->\n\u003C!-- Regenerate: bun run gen:skill-docs -->\n\n# \u002Fcareful — Destructive Command Guardrails\n\nSafety mode is now **active**. Every Bash and PowerShell command will be checked\nfor destructive patterns before running. If a destructive command is detected, you'll be warned\nand can choose to proceed or cancel.\n\n```bash\nGSTACK_STATE_ROOT=$(~\u002F.claude\u002Fskills\u002Fgstack\u002Fbin\u002Fgstack-paths --get GSTACK_STATE_ROOT); : \"${GSTACK_STATE_ROOT:?gstack-paths failed; reinstall with .\u002Fsetup or \u002Fgstack-upgrade}\"\nmkdir -p \"$GSTACK_STATE_ROOT\"\u002Fanalytics\necho '{\"skill\":\"careful\",\"ts\":\"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'\",\"repo\":\"'$(basename \"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)\" 2>\u002Fdev\u002Fnull || echo \"unknown\")'\"}'  >> \"$GSTACK_STATE_ROOT\"\u002Fanalytics\u002Fskill-usage.jsonl 2>\u002Fdev\u002Fnull || true\n```\n\n## What's protected\n\n| Pattern | Example | Risk |\n|---------|---------|------|\n| `rm -rf` \u002F `rm -r` \u002F `rm --recursive` | `rm -rf \u002Fvar\u002Fdata` | Recursive delete |\n| `DROP TABLE` \u002F `DROP DATABASE` | `DROP TABLE users;` | Data loss |\n| `TRUNCATE` | `TRUNCATE orders;` | Data loss |\n| `git push --force` \u002F `-f` | `git push -f origin main` | History rewrite |\n| `git reset --hard` | `git reset --hard HEAD~3` | Uncommitted work loss |\n| `git checkout .` \u002F `git restore .` | `git checkout .` | Uncommitted work loss |\n| `kubectl delete` | `kubectl delete pod` | Production impact |\n| `docker rm -f` \u002F `docker system prune` | `docker system prune -a` | Container\u002Fimage loss |\n\n## PowerShell and cmd (Windows)\n\nThe hook also checks the PowerShell tool (Claude Code's main Windows shell)\nand any `pwsh`\u002F`powershell`\u002F`cmd` launched from Bash. Matching ignores case,\ncovers aliases in command position, accepts parameter prefixes (`-r`, `-fo`)\nand strips cmd `^` escapes. All rows above apply there too.\n\n| Pattern | Example |\n|---------|---------|\n| `Remove-Item`\u002F`rm`\u002F`ri`\u002F`del`\u002F`erase`\u002F`rd`\u002F`rmdir` + `-Recurse` or `-Force` | `gci \\| ri -r -fo` |\n| cmd `rd \u002Fs`, `rmdir \u002Fs`, `del \u002Fs`, `erase \u002Fs` | `cmd \u002Fc rd \u002Fs \u002Fq C:\\proj` |\n| `Format-Volume`, `Clear-Disk`, `Clear-Content`, `[IO.Directory]::Delete`, `[IO.File]::Delete` | `Clear-Disk -Number 1` |\n| `-EncodedCommand`, `iex`, `Start-Process` of a shell, `& $cmd` (can't be inspected) | `irm $url \\| iex` |\n\n**Best-effort on PowerShell.** String matching can't see a command built at\nruntime. For a hard stop, add Claude Code permission deny rules, which parse\nPowerShell and its aliases: `\"deny\": [\"PowerShell(Remove-Item *)\"]` in\n`.claude\u002Fsettings.json`. The hook runs through `bash`, so Windows needs Git Bash.\n\n## Safe exceptions\n\nThese patterns are allowed without warning:\n- `rm -rf node_modules` \u002F `.next` \u002F `dist` \u002F `__pycache__` \u002F `.cache` \u002F `build` \u002F `.turbo` \u002F `coverage`\n\n## How it works\n\nThe hook reads `tool_name` and the command from the tool input JSON, checks it against the\npatterns above, and returns a `hookSpecificOutput` payload with\n`permissionDecision: \"ask\"` and a warning reason if a match is found (the\ndecision must be nested under `hookSpecificOutput` — Claude Code ignores a\ntop-level `permissionDecision`). You can always override a MEDIUM warning and\nproceed.\n\n## HIGH tier (hard deny)\n\nTwo catastrophic shapes are **denied**, not asked: `rm -r`\u002F`-R` of exactly\n`\u002F`, `~`, or `$HOME`, and force-push to the repo's **default branch**. SIMPLE\ncommands only (no `;`, `&&`, `||`, `|`, newline) — compound shapes fall\nthrough to the MEDIUM ask; `--force-with-lease` is never HIGH. A best-effort\nadvisory hard-stop, not a policy boundary: the escape hatch is ending the\nopt-in, session-scoped \u002Fcareful session.\n\n## Project patterns (additive only)\n\nAdd warn rules — one POSIX ERE per line, `#` comments OK — in\n`~\u002F.gstack\u002Fcareful-patterns.txt` (global) or\n`~\u002F.gstack\u002Fprojects\u002F\u003Cslug>\u002Fcareful-patterns.txt` (per-project). Consulted\nafter the built-in families, so config can only ADD rules, never suppress a\nbaseline warning. Invalid regex lines are skipped.\n\nTo deactivate, end the conversation or start a new one. Hooks are session-scoped.\n","\u003C!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->\n\u003C!-- Regenerate: bun run gen:skill-docs -->\n\n# \u002Fcareful — Destructive Command Guardrails\n\nSafety mode is now **active**. Every Bash and PowerShell command will be checked\nfor destructive patterns before running. If a destructive command is detected, you'll be warned\nand can choose to proceed or cancel.\n\n```bash\nGSTACK_STATE_ROOT=$(~\u002F.claude\u002Fskills\u002Fgstack\u002Fbin\u002Fgstack-paths --get GSTACK_STATE_ROOT); : \"${GSTACK_STATE_ROOT:?gstack-paths failed; reinstall with .\u002Fsetup or \u002Fgstack-upgrade}\"\nmkdir -p \"$GSTACK_STATE_ROOT\"\u002Fanalytics\necho '{\"skill\":\"careful\",\"ts\":\"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'\",\"repo\":\"'$(basename \"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)\" 2>\u002Fdev\u002Fnull || echo \"unknown\")'\"}'  >> \"$GSTACK_STATE_ROOT\"\u002Fanalytics\u002Fskill-usage.jsonl 2>\u002Fdev\u002Fnull || true\n```\n\n## What's protected\n\n| Pattern | Example | Risk |\n|---------|---------|------|\n| `rm -rf` \u002F `rm -r` \u002F `rm --recursive` | `rm -rf \u002Fvar\u002Fdata` | Recursive delete |\n| `DROP TABLE` \u002F `DROP DATABASE` | `DROP TABLE users;` | Data loss |\n| `TRUNCATE` | `TRUNCATE orders;` | Data loss |\n| `git push --force` \u002F `-f` | `git push -f origin main` | History rewrite |\n| `git reset --hard` | `git reset --hard HEAD~3` | Uncommitted work loss |\n| `git checkout .` \u002F `git restore .` | `git checkout .` | Uncommitted work loss |\n| `kubectl delete` | `kubectl delete pod` | Production impact |\n| `docker rm -f` \u002F `docker system prune` | `docker system prune -a` | Container\u002Fimage loss |\n\n## PowerShell and cmd (Windows)\n\nThe hook also checks the PowerShell tool (Claude Code's main Windows shell)\nand any `pwsh`\u002F`powershell`\u002F`cmd` launched from Bash. Matching ignores case,\ncovers aliases in command position, accepts parameter prefixes (`-r`, `-fo`)\nand strips cmd `^` escapes. All rows above apply there too.\n\n| Pattern | Example |\n|---------|---------|\n| `Remove-Item`\u002F`rm`\u002F`ri`\u002F`del`\u002F`erase`\u002F`rd`\u002F`rmdir` + `-Recurse` or `-Force` | `gci \\| ri -r -fo` |\n| cmd `rd \u002Fs`, `rmdir \u002Fs`, `del \u002Fs`, `erase \u002Fs` | `cmd \u002Fc rd \u002Fs \u002Fq C:\\proj` |\n| `Format-Volume`, `Clear-Disk`, `Clear-Content`, `[IO.Directory]::Delete`, `[IO.File]::Delete` | `Clear-Disk -Number 1` |\n| `-EncodedCommand`, `iex`, `Start-Process` of a shell, `& $cmd` (can't be inspected) | `irm $url \\| iex` |\n\n**Best-effort on PowerShell.** String matching can't see a command built at\nruntime. For a hard stop, add Claude Code permission deny rules, which parse\nPowerShell and its aliases: `\"deny\": [\"PowerShell(Remove-Item *)\"]` in\n`.claude\u002Fsettings.json`. The hook runs through `bash`, so Windows needs Git Bash.\n\n## Safe exceptions\n\nThese patterns are allowed without warning:\n- `rm -rf node_modules` \u002F `.next` \u002F `dist` \u002F `__pycache__` \u002F `.cache` \u002F `build` \u002F `.turbo` \u002F `coverage`\n\n## How it works\n\nThe hook reads `tool_name` and the command from the tool input JSON, checks it against the\npatterns above, and returns a `hookSpecificOutput` payload with\n`permissionDecision: \"ask\"` and a warning reason if a match is found (the\ndecision must be nested under `hookSpecificOutput` — Claude Code ignores a\ntop-level `permissionDecision`). You can always override a MEDIUM warning and\nproceed.\n\n## HIGH tier (hard deny)\n\nTwo catastrophic shapes are **denied**, not asked: `rm -r`\u002F`-R` of exactly\n`\u002F`, `~`, or `$HOME`, and force-push to the repo's **default branch**. SIMPLE\ncommands only (no `;`, `&&`, `||`, `|`, newline) — compound shapes fall\nthrough to the MEDIUM ask; `--force-with-lease` is never HIGH. A best-effort\nadvisory hard-stop, not a policy boundary: the escape hatch is ending the\nopt-in, session-scoped \u002Fcareful session.\n\n## Project patterns (additive only)\n\nAdd warn rules — one POSIX ERE per line, `#` comments OK — in\n`~\u002F.gstack\u002Fcareful-patterns.txt` (global) or\n`~\u002F.gstack\u002Fprojects\u002F\u003Cslug>\u002Fcareful-patterns.txt` (per-project). Consulted\nafter the built-in families, so config can only ADD rules, never suppress a\nbaseline warning. Invalid regex lines are skipped.\n\nTo deactivate, end the conversation or start a new one. Hooks are session-scoped.\n",{"name":5,"hooks":37,"version":48,"triggers":49,"description":7,"allowed-tools":53},{"PreToolUse":38},[39,44],{"hooks":40,"matcher":22},[41],{"type":24,"command":42,"statusMessage":43},"bash -c \"exec bash \\\"$HOME\u002F.claude\u002Fskills\u002Fgstack\u002Fcareful\u002Fbin\u002Fcheck-careful.sh\\\"\"","Checking for destructive commands...",{"hooks":45,"matcher":47},[46],{"type":24,"command":42,"statusMessage":43},"PowerShell","0.1.0",[50,51,52],"be careful","warn before destructive","safety mode",[22,54],"Read","main","dd9834d44d2650818cb6d8e17c57f795cb56bf98",20873,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack","https:\u002F\u002Fgithub.com\u002Fgarrytan","https:\u002F\u002Fblog.garrytan.com","Writes software, dreams. ","2026-11-13 03:23:36",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add garrytan\u002Fgstack --skill careful",{"tool":69,"command":70},"bunx","bunx skills add garrytan\u002Fgstack --skill careful",{"tool":72,"command":73},"pnpm","pnpm dlx skills add garrytan\u002Fgstack --skill careful","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002FSKILL.md",true,[77,83,87,93,99,103,107,111,114,118,122,126,129,133,136,139,143,146,150,154,158,162,166,170,173,177,180,183,187,190,194,197,200,203],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"bin\u002Fcheck-careful.sh","SCRIPT","脚本",20796,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002Fbin\u002Fcheck-careful.sh",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"bin\u002Fhook-extract.sh",10774,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002Fbin\u002Fhook-extract.sh",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"bin\u002Fmask-commit-message.awk","OTHER","其他",4996,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002Fbin\u002Fmask-commit-message.awk",{"path":94,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":97,"sourceHtmlUrl":98},"docs\u002FWORKFLOW.md","REFERENCE","参考文档",39129,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fdocs\u002FWORKFLOW.md",{"path":100,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":101,"sourceHtmlUrl":102},"memory_integration.py",7864,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fmemory_integration.py",{"path":104,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":105,"sourceHtmlUrl":106},"movie_project\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",1336,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fmovie_project\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",{"path":108,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":109,"sourceHtmlUrl":110},"movie_project\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",888,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fmovie_project\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",{"path":112,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":109,"sourceHtmlUrl":113},"movie_project\u002Fscreenplay_project\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fmovie_project\u002Fscreenplay_project\u002Ffinal.md",{"path":115,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":116,"sourceHtmlUrl":117},"orchestrator.py",16574,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Forchestrator.py",{"path":119,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":120,"sourceHtmlUrl":121},"pyproject.toml",340,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fpyproject.toml",{"path":123,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":124,"sourceHtmlUrl":125},"run.sh",2167,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Frun.sh",{"path":127,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":105,"sourceHtmlUrl":128},"sanity_check_dream\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_check_dream\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",{"path":130,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":131,"sourceHtmlUrl":132},"sanity_check_dream\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",1156,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_check_dream\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",{"path":134,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":131,"sourceHtmlUrl":135},"sanity_check_dream\u002Fscreenplay_project\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_check_dream\u002Fscreenplay_project\u002Ffinal.md",{"path":137,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":105,"sourceHtmlUrl":138},"sanity_no_prompt\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_no_prompt\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",{"path":140,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":141,"sourceHtmlUrl":142},"sanity_no_prompt\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",1151,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_no_prompt\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",{"path":144,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":141,"sourceHtmlUrl":145},"sanity_no_prompt\u002Fscreenplay_project\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity_no_prompt\u002Fscreenplay_project\u002Ffinal.md",{"path":147,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":148,"sourceHtmlUrl":149},"sanity.sh",1009,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity.sh",{"path":151,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":152,"sourceHtmlUrl":153},"sanity\u002Fmemory.sh",712,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity\u002Fmemory.sh",{"path":155,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":156,"sourceHtmlUrl":157},"sanity\u002Frun_all.sh",715,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fsanity\u002Frun_all.sh",{"path":159,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":160,"sourceHtmlUrl":161},"SKILL.md.tmpl",4965,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fcareful\u002FSKILL.md.tmpl",{"path":163,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":164,"sourceHtmlUrl":165},"story_models.py",3078,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_models.py",{"path":167,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":168,"sourceHtmlUrl":169},"story_output\u002Fcritiques\u002Fcritique_1.md",1335,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_output\u002Fcritiques\u002Fcritique_1.md",{"path":171,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":168,"sourceHtmlUrl":172},"story_output\u002Fcritiques\u002Fcritique_2.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_output\u002Fcritiques\u002Fcritique_2.md",{"path":174,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":175,"sourceHtmlUrl":176},"story_output\u002Fdrafts\u002Fdraft_1.md",403,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_output\u002Fdrafts\u002Fdraft_1.md",{"path":178,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":175,"sourceHtmlUrl":179},"story_output\u002Fdrafts\u002Fdraft_2.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_output\u002Fdrafts\u002Fdraft_2.md",{"path":181,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":175,"sourceHtmlUrl":182},"story_output\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_output\u002Ffinal.md",{"path":184,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":185,"sourceHtmlUrl":186},"story_phases.py",26182,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Fstory_phases.py",{"path":188,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":168,"sourceHtmlUrl":189},"test_e2e_together\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_e2e_together\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",{"path":191,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":192,"sourceHtmlUrl":193},"test_e2e_together\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",660,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_e2e_together\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",{"path":195,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":192,"sourceHtmlUrl":196},"test_e2e_together\u002Fscreenplay_project\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_e2e_together\u002Fscreenplay_project\u002Ffinal.md",{"path":198,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":168,"sourceHtmlUrl":199},"test_prompt_fix\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_prompt_fix\u002Fscreenplay_project\u002Fcritiques\u002Fcritique_1.md",{"path":201,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":192,"sourceHtmlUrl":202},"test_prompt_fix\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_prompt_fix\u002Fscreenplay_project\u002Fdrafts\u002Fdraft_1.md",{"path":204,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":192,"sourceHtmlUrl":205},"test_prompt_fix\u002Fscreenplay_project\u002Ffinal.md","https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills.pre-symlink-1776435493\u002Fcreate-story\u002Ftest_prompt_fix\u002Fscreenplay_project\u002Ffinal.md",[207,236,255,268,287,300],{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":211,"categories":212,"keywords":218,"publishedAt":32},"01M6DK0K9VCQMFF4BKGT2S57V9","write-skill","Write a new agent skill or improve one without bloat: the edit ladder, levels, drift and size checks, full diets. (gstack)","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fwrite-skill\u002FSKILL.md",[213],{"categoryNo":214,"categoryName":215,"taxonomyType":216,"taxonomyTypeDesc":217},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[219,220,221,222,223,224,225,226,227,228,229,230,25,231,26,232,22,233,234,235],"write","write skill","edit","new","bloat","ladder","add","size","diet","full","agent skill","grep","write a skill","drift","improve","new agent","lesson",{"skillNo":237,"name":238,"nameZh":6,"description":239,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":242,"publishedAt":32},"01M6DK0DMV3K47JV0KXTYGZ0F7","verify","Use when coding: run the checks and tests \u002Fship picks until green. (gstack)","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fverify\u002FSKILL.md",[],[238,243,244,245,246,247,248,230,221,25,249,250,23,26,22,251,252,253,254],"change","it","my","use","coding","ship","run","work","tests","green","make","when",{"skillNo":256,"name":257,"nameZh":6,"description":258,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":259,"categories":260,"keywords":261,"publishedAt":32},"01M6DK0A63TY611T7G30913VT6","unfreeze","Clear the freeze boundary set by \u002Ffreeze, allowing edits to all directories again. (gstack)","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Funfreeze\u002FSKILL.md",[],[257,262,25,26,263,264,22,265,266,267,221],"directories","remove","freeze","boundary","clear","SET",{"skillNo":269,"name":270,"nameZh":6,"description":271,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":272,"categories":273,"keywords":274,"publishedAt":32},"01M6DK00ACSHDP8X0JE90FNQQJ","ubicloud","Run a heavy suite, build or eval on an ephemeral 16-vCPU Ubicloud VM: TTL-named VMs, a reaper, quota preflight and a hang watchdog. (gstack)","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Fubicloud\u002FSKILL.md",[],[270,22,275,276,277,26,278,279,280,281,282,228,283,284,25,249,285,286],"vm","quota","eval","ttl","suite","vms","remote","preflight","watchdog","test run","build","test",{"skillNo":288,"name":289,"nameZh":6,"description":290,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":291,"categories":292,"keywords":293,"publishedAt":32},"01M6DJZXTBG6SAZKY1RX8BJG55","beta","Clean fixture tool skill with no forced reads and no mode table.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Fbeta\u002FSKILL.md",[],[289,294,29,295,296,297,298,299],"clean","fixture tool","with","table","tool","fixture",{"skillNo":301,"name":302,"nameZh":6,"description":303,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":304,"categories":305,"keywords":306,"publishedAt":32},"01M6DJZTJ0A0D31G2GH9FD3SE1","alpha","Fixture dispatcher with a mode table and forced-read references.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgstack\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Falpha\u002FSKILL.md",[],[302,29,296,297,307,25,308,309,299,310],"upstream","dispatcher","references","router"]