[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C9ZMM0XSXCHHABMJ9XB1JB":3,"skill-same:01M6C9ZMM0XSXCHHABMJ9XB1JB":70},{"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":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6C9ZMM0XSXCHHABMJ9XB1JB","tutorial_in_60_mins.propagate_docker_changes",null,"Sync tutorial and class-project Docker files to match project_template","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6BZFTPJ193AB5N089Z82HQG",155,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30],"docker","tutorial","tutorial in 60 mins propagate docker changes","sync","template","haiku","files","2026-11-10 10:12:30",false,"---\ndescription: Sync tutorial and class-project Docker files to match project_template\nmodel: haiku\n---\n\n# Overview\n- `\u003CSRC_DIR>` = `class_project\u002Fproject_template`\n\nThis skill supports two modes:\n- **Full sync**: Make all Docker files across projects match project_template\n- **Last-commit sync**: Propagate only the changes from the most recent commit\n  in project_template\n\n# Mode A: Full sync\n- Find each target directory `\u003CDST_DIR>`: every directory under `class_project\u002F`\n  (other than `\u003CSRC_DIR>` itself) that already has a `Dockerfile`\n  ```bash\n  > find class_project -mindepth 2 -maxdepth 2 -name Dockerfile \\\n      -not -path \"class_project\u002Fproject_template\u002F*\"\n  ```\n- For each `\u003CDST_DIR>` found this way\n- Make the Docker files `\u003CDST_DIR>\u002Fdocker_*.sh`, `\u003CDST_DIR>\u002FDockerfile`,\n  `\u003CDST_DIR>\u002Frun_jupyter.sh` as similar as possible to the corresponding ones in\n  `\u003CSRC_DIR>`\n  - The goal is to reuse functions and factored out code (e.g., from\n    `class_project\u002Fproject_template\u002Futils.sh`)\n- If you are not sure about what the changes are\n  - Summarize the changes for the user in bullet points\n  - Ask for the user to confirm\n\n# Mode B: Last-commit sync\n- Use this mode when you only need to propagate the most recent changes\n\n## Check the Last Commit\n- Look at the changes from the last git commit in `\u003CSRC_DIR>`\n- Summarize the changes for the user in bullet points\n- If you are not sure about what the changes are, stop and ask for the user to\n  confirm\n\n## Propagate the Changes\n- Propagate the changes in the Docker system from `\u003CSRC_DIR>` to every `\u003CDST_DIR>`\n  found via the `find` command in Mode A\n\n## Preserve Behavior\n- Make sure not to change the behavior unless needed\n\n## Update the Docker Docs\n- Update `class_project\u002Fproject_template\u002Fdocker_scripts.README.md` explaining how\n  this project uses Docker to build and execute containers given the new changes\n\n# Verification (both modes)\n- [ ] All the `docker_*.sh` scripts work, run either directly or through the\n  relevant pytest unit tests\n","# Overview\n- `\u003CSRC_DIR>` = `class_project\u002Fproject_template`\n\nThis skill supports two modes:\n- **Full sync**: Make all Docker files across projects match project_template\n- **Last-commit sync**: Propagate only the changes from the most recent commit\n  in project_template\n\n# Mode A: Full sync\n- Find each target directory `\u003CDST_DIR>`: every directory under `class_project\u002F`\n  (other than `\u003CSRC_DIR>` itself) that already has a `Dockerfile`\n  ```bash\n  > find class_project -mindepth 2 -maxdepth 2 -name Dockerfile \\\n      -not -path \"class_project\u002Fproject_template\u002F*\"\n  ```\n- For each `\u003CDST_DIR>` found this way\n- Make the Docker files `\u003CDST_DIR>\u002Fdocker_*.sh`, `\u003CDST_DIR>\u002FDockerfile`,\n  `\u003CDST_DIR>\u002Frun_jupyter.sh` as similar as possible to the corresponding ones in\n  `\u003CSRC_DIR>`\n  - The goal is to reuse functions and factored out code (e.g., from\n    `class_project\u002Fproject_template\u002Futils.sh`)\n- If you are not sure about what the changes are\n  - Summarize the changes for the user in bullet points\n  - Ask for the user to confirm\n\n# Mode B: Last-commit sync\n- Use this mode when you only need to propagate the most recent changes\n\n## Check the Last Commit\n- Look at the changes from the last git commit in `\u003CSRC_DIR>`\n- Summarize the changes for the user in bullet points\n- If you are not sure about what the changes are, stop and ask for the user to\n  confirm\n\n## Propagate the Changes\n- Propagate the changes in the Docker system from `\u003CSRC_DIR>` to every `\u003CDST_DIR>`\n  found via the `find` command in Mode A\n\n## Preserve Behavior\n- Make sure not to change the behavior unless needed\n\n## Update the Docker Docs\n- Update `class_project\u002Fproject_template\u002Fdocker_scripts.README.md` explaining how\n  this project uses Docker to build and execute containers given the new changes\n\n# Verification (both modes)\n- [ ] All the `docker_*.sh` scripts work, run either directly or through the\n  relevant pytest unit tests\n",{"model":29,"description":7},"master","39143a859859181eff7e774457997b5278fd9e99",".claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes",170,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify.ai","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 02:09:15",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add causify-ai\u002Fhelpers --skill tutorial_in_60_mins.propagate_docker_changes",{"tool":50,"command":51},"bunx","bunx skills add causify-ai\u002Fhelpers --skill tutorial_in_60_mins.propagate_docker_changes",{"tool":53,"command":54},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill tutorial_in_60_mins.propagate_docker_changes","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",true,[58,64],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fapi_reference.md","REFERENCE","参考文档",6879,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fchembl-database\u002Freferences\u002Fapi_reference.md",{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"scripts\u002Fexample_queries.py","SCRIPT","脚本",7160,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fchembl-database\u002Fscripts\u002Fexample_queries.py",[71,88,99,108,117,125],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":31},"01M6C9ZJK8QJ9FNCY39WVF3GMG","tutorial_in_60_mins.merge_markdown","Merge the content of a markdown file into a Jupyter notebook","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.merge_markdown\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[81,25,82,83,84,85,29,86,87],"tutorial in 60 mins merge markdown","markdown","merge","jupyter notebook","jupyter","file","content",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":31},"01M6C9ZFYK13ZCT1E8BEEC4NG4","tutorial_in_60_mins.format","Format a directory to follow the \"Learn X in 60 Minutes\" tutorial conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.format\u002FSKILL.md",[],[95,96,25,29,97,98],"format","tutorial in 60 mins format","learn","directory",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":31},"01M6C9ZDKXSBKNKX7M3X4W38G5","tutorial_in_60_mins.create","Create a tutorial directory for the Learn X in 60 Minutes conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.create\u002FSKILL.md",[],[106,107,25,98,97],"tutorial in 60 mins create","create",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":31},"01M6BZS5Z0QE03WRS1TM3XJEY9","todo.reorg_in_progress","Reorganize ai_task_queue.md so in-progress tasks, not-started tasks, and mislabeled topic headers sit under the right H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_in_progress\u002FSKILL.md",[],[115,116],"todo reorg in progress","tasks",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":31},"01M6BZS4CQZ6KK2KQ26SVB7QCS","todo.reorg_headers","Reorganize ai_task_queue.md .md so every H2 topic matches ALL TOPICS and every H3 task sits under the right topic, keeping its H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_headers\u002FSKILL.md",[],[124],"todo reorg headers",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":31},"01M6BZS2JG504QE169TXVA17KV","todo.move_to_reorg","Move tasks out of ai_task_queue.md's TO REORG section into the right H1 stage and H2 topic, using an optional Priority tag, after user confirmation","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.move_to_reorg\u002FSKILL.md",[],[132,116],"todo move to reorg"]