[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1WSMP8NRD2YVYY1EJK105":3,"skill-same:01M6F1WSMP8NRD2YVYY1EJK105":62},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6F1WSMP8NRD2YVYY1EJK105","skill.auto_add",null,"Update a skill or prompt using lessons learned from a file's Git history","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6F1K6CCKKF8YKTBN4ZV509G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fskill.auto_add\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"skill auto add","auto","add","update","git","file","history","prompt","learned","2026-11-10 10:12:30",false,"---\ndescription: Update a skill or prompt using lessons learned from a file's Git history\nargument-hint: \u003CFILE> \u003CPROMPT>\nmodel: sonnet\n---\n\n# Goal\n\n- The user gives you two arguments:\n  - `\u003CFILE>`: a path to a file that has been edited across one or more Git\n    commits\n  - `\u003CPROMPT>`: a path to a skill (`SKILL.md`) or prompt file to improve\n- The edits to `\u003CFILE>` encode a lesson: someone had to fix something by hand\n  that `\u003CPROMPT>` should have gotten right the first time\n- Your job is to update `\u003CPROMPT>` so that, given the original `\u003CFILE>`, it would\n  now produce the final `\u003CFILE>`\n- Generalize: infer the underlying *rule*, do not hard-code the specific strings\n  from this one diff\n\n# Inputs\n\n- If `\u003CFILE>` or `\u003CPROMPT>` is missing or ambiguous, stop and ask the user rather\n  than guessing\n- If `\u003CFILE>` has no committed changes, report that and stop\n\n# Workflow\n\n## Determine the Changes\n\n- Find the commits that touched `\u003CFILE>`:\n  ```bash\n  > git log --oneline --follow -- \u003CFILE>\n  ```\n- Identify the *first* and *last* relevant revisions. Default to the full history\n  of the file; if the user named a range, use that instead\n- Extract `\u003CCHANGES>` as a unified diff:\n  ```bash\n  > git diff \u003CFIRST_SHA> \u003CLAST_SHA> -- \u003CFILE>\n  ```\n  - If the diff is large, also read the final version in full so you\n    understand the intended end state, not just the deltas:\n    ```bash\n    > git show \u003CLAST_SHA>:\u003CFILE>\n    ```\n- Do not use interactive commands (e.g. `git difftool`): they block\n\n## Read the Prompt and the Conventions\n\n- Read `\u003CPROMPT>` in full\n- Read `.claude\u002Fskills\u002Fskill.rules.md` for the conventions and rules that\n  govern how skills and prompts must be written\n- Read any files `\u003CPROMPT>` references, so you don't duplicate a rule that\n  already lives elsewhere\n\n## Infer the Rules\n\n- For each meaningful hunk in `\u003CCHANGES>`, write down:\n  - what changed (before -> after)\n  - the general rule it implies\n  - whether `\u003CPROMPT>` already covers it (fully \u002F partially \u002F not at all)\n- Drop hunks that are one-off content edits rather than repeatable rules\n  (e.g. fixing a specific typo, updating a date): say explicitly which\n  hunks you dropped and why\n- Merge rules that are restatements of each other. Prefer one sharp rule\n  over three overlapping ones\n\n## Improve the Prompt\n\n- Draft the minimal edit to `\u003CPROMPT>` that encodes the inferred rules:\n  - Amend an existing rule when one is close but imprecise\n  - Add a new rule only when no existing rule covers the case\n  - Keep the existing structure, heading style, and voice of `\u003CPROMPT>`\n  - State rules as imperatives, with a short before\u002Fafter example when the\n    rule is easy to misread\n- Do not grow the prompt unnecessarily: if the new rule makes an old one\n  redundant, remove the old one\n\n## Apply via rules.add\n\n- Follow the approach in `.claude\u002Fskills\u002Frules.add\u002FSKILL.md`: propose the\n  change to the user first, then apply it once approved\n\n# Output\n\nReport, in this order:\n\n1. The commit range and files inspected\n2. A table of inferred rules: change observed -> rule -> covered \u002F new\n3. The proposed diff to `\u003CPROMPT>`\n4. Anything you deliberately did not encode, and why\n\n# Verification\n- [ ] The proposed diff was shown to the user before `\u003CPROMPT>` was changed\n- [ ] Each inferred rule is a general rule, not a hard-coded string from the\n      one diff inspected\n- [ ] No rule made redundant by the new edit was left in `\u003CPROMPT>`\n","# Goal\n\n- The user gives you two arguments:\n  - `\u003CFILE>`: a path to a file that has been edited across one or more Git\n    commits\n  - `\u003CPROMPT>`: a path to a skill (`SKILL.md`) or prompt file to improve\n- The edits to `\u003CFILE>` encode a lesson: someone had to fix something by hand\n  that `\u003CPROMPT>` should have gotten right the first time\n- Your job is to update `\u003CPROMPT>` so that, given the original `\u003CFILE>`, it would\n  now produce the final `\u003CFILE>`\n- Generalize: infer the underlying *rule*, do not hard-code the specific strings\n  from this one diff\n\n# Inputs\n\n- If `\u003CFILE>` or `\u003CPROMPT>` is missing or ambiguous, stop and ask the user rather\n  than guessing\n- If `\u003CFILE>` has no committed changes, report that and stop\n\n# Workflow\n\n## Determine the Changes\n\n- Find the commits that touched `\u003CFILE>`:\n  ```bash\n  > git log --oneline --follow -- \u003CFILE>\n  ```\n- Identify the *first* and *last* relevant revisions. Default to the full history\n  of the file; if the user named a range, use that instead\n- Extract `\u003CCHANGES>` as a unified diff:\n  ```bash\n  > git diff \u003CFIRST_SHA> \u003CLAST_SHA> -- \u003CFILE>\n  ```\n  - If the diff is large, also read the final version in full so you\n    understand the intended end state, not just the deltas:\n    ```bash\n    > git show \u003CLAST_SHA>:\u003CFILE>\n    ```\n- Do not use interactive commands (e.g. `git difftool`): they block\n\n## Read the Prompt and the Conventions\n\n- Read `\u003CPROMPT>` in full\n- Read `.claude\u002Fskills\u002Fskill.rules.md` for the conventions and rules that\n  govern how skills and prompts must be written\n- Read any files `\u003CPROMPT>` references, so you don't duplicate a rule that\n  already lives elsewhere\n\n## Infer the Rules\n\n- For each meaningful hunk in `\u003CCHANGES>`, write down:\n  - what changed (before -> after)\n  - the general rule it implies\n  - whether `\u003CPROMPT>` already covers it (fully \u002F partially \u002F not at all)\n- Drop hunks that are one-off content edits rather than repeatable rules\n  (e.g. fixing a specific typo, updating a date): say explicitly which\n  hunks you dropped and why\n- Merge rules that are restatements of each other. Prefer one sharp rule\n  over three overlapping ones\n\n## Improve the Prompt\n\n- Draft the minimal edit to `\u003CPROMPT>` that encodes the inferred rules:\n  - Amend an existing rule when one is close but imprecise\n  - Add a new rule only when no existing rule covers the case\n  - Keep the existing structure, heading style, and voice of `\u003CPROMPT>`\n  - State rules as imperatives, with a short before\u002Fafter example when the\n    rule is easy to misread\n- Do not grow the prompt unnecessarily: if the new rule makes an old one\n  redundant, remove the old one\n\n## Apply via rules.add\n\n- Follow the approach in `.claude\u002Fskills\u002Frules.add\u002FSKILL.md`: propose the\n  change to the user first, then apply it once approved\n\n# Output\n\nReport, in this order:\n\n1. The commit range and files inspected\n2. A table of inferred rules: change observed -> rule -> covered \u002F new\n3. The proposed diff to `\u003CPROMPT>`\n4. Anything you deliberately did not encode, and why\n\n# Verification\n- [ ] The proposed diff was shown to the user before `\u003CPROMPT>` was changed\n- [ ] Each inferred rule is a general rule, not a hard-coded string from the\n      one diff inspected\n- [ ] No rule made redundant by the new edit was left in `\u003CPROMPT>`\n",{"model":38,"description":7,"argument-hint":39},"sonnet","\u003CFILE> \u003CPROMPT>","master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Fskill.auto_add",1,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify-ai.github.io\u002Fhelpers\u002F","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 21:54:29",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add causify-ai\u002Fhelpers --skill skill.auto_add",{"tool":54,"command":55},"bunx","bunx skills add causify-ai\u002Fhelpers --skill skill.auto_add",{"tool":57,"command":58},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill skill.auto_add","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fskill.auto_add\u002FSKILL.md",true,[],[63,83,100,112,121,135],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":72,"publishedAt":33},"01M6F209RASRBEK7GBNG5M00K0","tutorial_in_60_mins.propagate_docker_changes","Sync tutorial and class-project Docker files to match project_template","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[73,74,75,76,77,78,79,80,81,82],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","template","sync","haiku","files","project","match",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":33},"01M6F207XZ5YDAJ0KNDRE6EN0R","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",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[93,94,74,95,96,97,79,29,98,99],"markdown","merge","tutorial in 60 mins merge markdown","notebook","jupyter","jupyter notebook","content",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":33},"01M6F2059X95Q1A13HD67E9JRF","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",[],[107,74,108,109,110,79,111],"tutorial in 60 mins format","format","directory","learn","conventions",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":33},"01M6F202MDHMNYD5S1YHG2PKZD","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",[],[119,74,120,110,109,111],"tutorial in 60 mins create","create",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":33},"01M6F2004BW13GQ59N3RGSAYVN","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",[],[128,129,130,131,132,133,134],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":33},"01M6F1ZXN0G6HBD08GT8HE5FYA","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",[],[142,129,132,133,134],"todo reorg headers"]