[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6J3PZVT4N37TGBQHSJS3CSH":3,"skill-same:01M6J3PZVT4N37TGBQHSJS3CSH":108},{"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":74,"commitSha":75,"skillDirectory":76,"forksCount":77,"repositoryHtmlUrl":78,"repositoryHomepageUrl":79,"ownerHtmlUrl":80,"ownerBlogUrl":6,"ownerDescription":81,"updatedAt":82,"install":83,"resources":95},"01M6J3PZVT4N37TGBQHSJS3CSH","mk:freeze",null,"Session-scoped edit restriction blocking Edit and Write outside one allowed path. NOT for mk:careful.","ngocsangyem\u002FMeowKit","ngocsangyem","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F33769536?v=4","01M6J3FSMJAG9PVQEGRT7AQ9J2","Sang Nguyen","01M6J3FSRTJG0MNP6NV71639RM",16,"MIT","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffreeze\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,5,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"freeze","when","write","read","directory","active","command","unrelated","lock","gstack","code","Bash","you","debugging","only","scope","session-scope","edit-lockdown","scope-edits","directory-restriction","2026-11-10 10:12:30",false,"---\nname: mk:freeze\nversion: 0.1.0\ndescription: Session-scoped edit restriction blocking Edit and Write outside one allowed path. NOT for mk:careful.\nallowed-tools:\n  - Bash\n  - Read\n  - AskUserQuestion\nhooks:\n  PreToolUse:\n    - matcher: Edit\n      hooks:\n        - type: command\n          command: node\n          args: [\"${CLAUDE_PROJECT_DIR}\u002F.claude\u002Fskills\u002Ffreeze\u002Fbin\u002Fcheck-freeze.cjs\"]\n          statusMessage: Checking freeze boundary...\n    - matcher: Write\n      hooks:\n        - type: command\n          command: node\n          args: [\"${CLAUDE_PROJECT_DIR}\u002F.claude\u002Fskills\u002Ffreeze\u002Fbin\u002Fcheck-freeze.cjs\"]\n          statusMessage: Checking freeze boundary...\nsource: gstack\nkeywords:\n  - freeze\n  - scope-edits\n  - directory-restriction\n  - session-scope\n  - edit-lockdown\nwhen_to_use: Keeping a debugging session from touching code outside one folder.\nuser-invocable: true\nowner: lifecycle\ncriticality: medium\nstatus: active\nruntime: claude-code\n---\n\n# \u002Ffreeze — Restrict Edits to a Directory\n\nLock file edits to a specific directory. Any Edit or Write operation targeting\na file outside the allowed path will be **blocked** (not just warned).\n\n```bash\nmkdir -p .meowkit\u002Ftelemetry\necho '{\"skill\":\"freeze\",\"ts\":\"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'\",\"repo\":\"'$(basename \"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)\" 2>\u002Fdev\u002Fnull || echo \"unknown\")'\"}'  >> .meowkit\u002Ftelemetry\u002Fskill-usage.jsonl 2>\u002Fdev\u002Fnull || true\n```\n\n## Setup\n\nAsk the user which directory to restrict edits to. Use AskUserQuestion:\n\n- Question: \"Which directory should I restrict edits to? Files outside this path will be blocked from editing.\"\n- Text input (not multiple choice) — the user types a path.\n\nOnce the user provides a directory path:\n\n1. Resolve it to an absolute path:\n\n```bash\nFREEZE_DIR=$(cd \"\u003Cuser-provided-path>\" 2>\u002Fdev\u002Fnull && pwd)\necho \"$FREEZE_DIR\"\n```\n\n2. Ensure trailing slash and save to the freeze state file:\n\n```bash\nFREEZE_DIR=\"${FREEZE_DIR%\u002F}\u002F\"\nSTATE_DIR=\"${CLAUDE_PLUGIN_DATA:-.meowkit\u002Fstate}\"\nmkdir -p \"$STATE_DIR\"\necho \"$FREEZE_DIR\" > \"$STATE_DIR\u002Ffreeze-dir.txt\"\necho \"Freeze boundary set: $FREEZE_DIR\"\n```\n\nTell the user: \"Edits are now restricted to `\u003Cpath>\u002F`. Any Edit or Write\noutside this directory will be blocked. To change the boundary, run `\u002Fmk:freeze`\nagain. Freeze persists for the session — end the session or start a new one to clear it.\"\n\n## How it works\n\nSee [references\u002Ffreeze-mechanics.md](references\u002Ffreeze-mechanics.md) for technical details on path resolution, symlink handling, state file persistence, and tool scope.\n\n## Hooks\n\n- **PreToolUse on Edit\u002FWrite**: Blocks writes outside the frozen directory path\n- Activated by `\u002Fmk:freeze \u003Cpath>`. Deactivated when session ends.\n- Bash commands are NOT restricted — freeze only guards Edit and Write tools\n\n## Gotchas\n\n- **Symlinked files bypass freeze check**: Edit tool resolves symlinks, writing outside frozen directory → Check resolved path, not just the stated path\n- **Test files in frozen directory can't update fixtures**: Freeze prevents fixture updates needed for new test cases → Use --exclude pattern for test fixtures within frozen scope\n","# \u002Ffreeze — Restrict Edits to a Directory\n\nLock file edits to a specific directory. Any Edit or Write operation targeting\na file outside the allowed path will be **blocked** (not just warned).\n\n```bash\nmkdir -p .meowkit\u002Ftelemetry\necho '{\"skill\":\"freeze\",\"ts\":\"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'\",\"repo\":\"'$(basename \"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull)\" 2>\u002Fdev\u002Fnull || echo \"unknown\")'\"}'  >> .meowkit\u002Ftelemetry\u002Fskill-usage.jsonl 2>\u002Fdev\u002Fnull || true\n```\n\n## Setup\n\nAsk the user which directory to restrict edits to. Use AskUserQuestion:\n\n- Question: \"Which directory should I restrict edits to? Files outside this path will be blocked from editing.\"\n- Text input (not multiple choice) — the user types a path.\n\nOnce the user provides a directory path:\n\n1. Resolve it to an absolute path:\n\n```bash\nFREEZE_DIR=$(cd \"\u003Cuser-provided-path>\" 2>\u002Fdev\u002Fnull && pwd)\necho \"$FREEZE_DIR\"\n```\n\n2. Ensure trailing slash and save to the freeze state file:\n\n```bash\nFREEZE_DIR=\"${FREEZE_DIR%\u002F}\u002F\"\nSTATE_DIR=\"${CLAUDE_PLUGIN_DATA:-.meowkit\u002Fstate}\"\nmkdir -p \"$STATE_DIR\"\necho \"$FREEZE_DIR\" > \"$STATE_DIR\u002Ffreeze-dir.txt\"\necho \"Freeze boundary set: $FREEZE_DIR\"\n```\n\nTell the user: \"Edits are now restricted to `\u003Cpath>\u002F`. Any Edit or Write\noutside this directory will be blocked. To change the boundary, run `\u002Fmk:freeze`\nagain. Freeze persists for the session — end the session or start a new one to clear it.\"\n\n## How it works\n\nSee [references\u002Ffreeze-mechanics.md](references\u002Ffreeze-mechanics.md) for technical details on path resolution, symlink handling, state file persistence, and tool scope.\n\n## Hooks\n\n- **PreToolUse on Edit\u002FWrite**: Blocks writes outside the frozen directory path\n- Activated by `\u002Fmk:freeze \u003Cpath>`. Deactivated when session ends.\n- Bash commands are NOT restricted — freeze only guards Edit and Write tools\n\n## Gotchas\n\n- **Symlinked files bypass freeze check**: Edit tool resolves symlinks, writing outside frozen directory → Check resolved path, not just the stated path\n- **Test files in frozen directory can't update fixtures**: Freeze prevents fixture updates needed for new test cases → Use --exclude pattern for test fixtures within frozen scope\n",{"name":5,"hooks":49,"owner":64,"source":33,"status":29,"runtime":65,"version":66,"keywords":67,"criticality":68,"description":7,"when_to_use":69,"allowed-tools":70,"user-invocable":73},{"PreToolUse":50},[51,59],{"hooks":52,"matcher":58},[53],{"args":54,"type":30,"command":56,"statusMessage":57},[55],"${CLAUDE_PROJECT_DIR}\u002F.claude\u002Fskills\u002Ffreeze\u002Fbin\u002Fcheck-freeze.cjs","node","Checking freeze boundary...","Edit",{"hooks":60,"matcher":63},[61],{"args":62,"type":30,"command":56,"statusMessage":57},[55],"Write","lifecycle","claude-code","0.1.0",[24,42,43,40,41],"medium","Keeping a debugging session from touching code outside one folder.",[35,71,72],"Read","AskUserQuestion",true,"main","c2c69c674e8c62fe9634bfb360b5f9f14c70e1a5",".claude\u002Fskills\u002Ffreeze",3,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit","https:\u002F\u002Fdocs.meowkit.dev\u002F","https:\u002F\u002Fgithub.com\u002Fngocsangyem","Keep moving forward","2026-11-11 08:46:37",{"source":8,"skillName":5,"commands":84,"prompt":94,"zipAvailable":73},[85,88,91],{"tool":86,"command":87},"npx","npx skills add ngocsangyem\u002FMeowKit --skill \"mk:freeze\"",{"tool":89,"command":90},"bunx","bunx skills add ngocsangyem\u002FMeowKit --skill \"mk:freeze\"",{"tool":92,"command":93},"pnpm","pnpm dlx skills add ngocsangyem\u002FMeowKit --skill \"mk:freeze\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffreeze\u002FSKILL.md",[96,102],{"path":97,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":100,"sourceHtmlUrl":101},"bin\u002Fcheck-freeze.cjs","SCRIPT","脚本",2351,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffreeze\u002Fbin\u002Fcheck-freeze.cjs",{"path":103,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Ffreeze-mechanics.md","REFERENCE","参考文档",2355,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffreeze\u002Freferences\u002Ffreeze-mechanics.md",[109,127,145,151,163,188],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":44},"01M6J4NFDY0KY3XXJ6E5WBASAF","mk-sequential-thinking","Structured step-by-step reasoning before acting, to avoid guessing. For complex debugging, multi-step analysis, hypothesis checks. NOT for being stuck on approach (mk:problem-solving).","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Fpackages\u002Fmewkit\u002Fsrc\u002Fmigrate\u002Fmodules\u002Fcodex\u002Froot\u002F.agents\u002Fskills\u002Fmk-sequential-thinking\u002FSKILL.md",[],[116,117,118,119,120,121,122,123,124,125,37,126],"mk sequential thinking","sequential thinking","thinking","structured","problem","problem-solving","analysis","hypothesis","reasoning","for","multi",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":138,"publishedAt":44},"01M6J5D3G7C0V3BZ97Y61WB172","mk:fixture-valid","A valid fixture used to verify the skill structure validator.","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-creator\u002Fvalid\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[139,140,141,142,143,144],"mk:fixture valid","fixture","valid","verify","structure","validator",{"skillNo":146,"name":147,"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":148,"categories":149,"keywords":150,"publishedAt":44},"01M6J5CZRVSN8T4BZM0Y42CXJY","invalid","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-creator\u002Finvalid\u002FSKILL.md",[],[147],{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":44},"01M6J5CVN0N8KP9JFAWCV2PC2T","mk:sample-skill","Sample skill for fixture purposes — small enough to land below noise floor.","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Fpackages\u002Fmewkit\u002Ftests\u002Ffixtures\u002Fcontext-audit\u002F.claude\u002Fskills\u002Fsample-skill\u002FSKILL.md",[157],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},[159,160,161,162,140,125],"mk:sample skill","sample","sample skill","land",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":170,"publishedAt":44},"01M6J5CP99X9S0B7XCSBX6H5P2","mk-worktree","Manages git worktrees for parallel agent isolation: creates parallel\u002F{name}-{timestamp} branches, merges with conflict detection. NOT for user feature branches (use git worktree directly).","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Fpackages\u002Fmewkit\u002Fsrc\u002Fmigrate\u002Fmodules\u002Fcursor\u002Froot\u002F.cursor\u002Fskills\u002Fmk-worktree\u002FSKILL.md",[169],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},[171,172,173,174,175,176,177,178,179,180,181,182,125,183,184,185,186,187],"mk worktree","worktree","user","git worktrees","use","worktrees","branches","conflict","feature","isolation","name","with","parallel","timestamp","git","detection","git worktree",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":195,"publishedAt":44},"01M6J5CJT8ZGXH9YYJ7GV3R2B4","mk-workflow-orchestrator","Auto-invoked 7-phase workflow for complex-feature intent; fasttrack mode for pre-approved specs. NOT for explicit single tasks (mk:cook), green-field builds (mk:autobuild), or simple fixes (mk:fix).","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002Fpackages\u002Fmewkit\u002Fsrc\u002Fmigrate\u002Fmodules\u002Fcursor\u002Froot\u002F.cursor\u002Fskills\u002Fmk-workflow-orchestrator\u002FSKILL.md",[194],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},[196,197,198,199,200,201,202,203,204,205,206,179,207,208,125,209,210,211,212,213,214,215],"mk workflow orchestrator","workflow orchestrator","orchestrator","workflow","green-field","tasks","fix","auto","simple","intent","green","autobuild","mode","fixes","mk:autobuild","mk:cook","mk:fix","fasttrack","complex-feature","phase"]