@complexthings/superpowers-agent 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.agents/docs/SUPERPOWERS.md +108 -0
  2. package/.agents/prompts/001-copilot-tool-mapping-do/001-copilot-tool-mapping-do.md +116 -0
  3. package/.agents/prompts/001-copilot-tool-mapping-do/SUMMARY.md +72 -0
  4. package/.agents/prompts/001-copilot-tool-mapping-do/copilot-tool-mapping-do-output.md +83 -0
  5. package/.agents/prompts/001-release-management-do/001-release-management-do.md +161 -0
  6. package/.agents/prompts/001-release-management-do/SUMMARY.md +19 -0
  7. package/.agents/prompts/001-release-management-do/completed/001-release-management-do.md +161 -0
  8. package/.agents/prompts/002-pull-command-do/SUMMARY.md +28 -0
  9. package/.agents/prompts/002-pull-command-do/completed/002-pull-command-do.md +122 -0
  10. package/.agents/prompts/002-pull-command-do/pull-command-do-output.md +174 -0
  11. package/.agents/prompts/command_updates_prompt.md +69 -0
  12. package/.agents/prompts/current_prompt.md +8 -0
  13. package/.agents/prompts/refactor.prompt.md +57 -0
  14. package/.agents/skills/.gitkeep +0 -0
  15. package/.agents/superpowers-agent +355 -0
  16. package/.agents/superpowers-bootstrap.md +42 -0
  17. package/.agents/templates/AGENTS.md.template +40 -0
  18. package/.agents/templates/SUPERPOWERS.md.template +108 -0
  19. package/.agents/templates/TOOLS.md.template +15 -0
  20. package/.github/workflows/main.yaml +32 -0
  21. package/AGENTS.md +60 -0
  22. package/LICENSE +21 -0
  23. package/README.md +724 -0
  24. package/hooks/hooks.json +15 -0
  25. package/hooks/session-start.sh +27 -0
  26. package/package.json +51 -0
  27. package/skills/architecture/ABOUT.md +20 -0
  28. package/skills/architecture/preserving-productive-tensions/SKILL.md +146 -0
  29. package/skills/architecture/preserving-productive-tensions/skill.json +9 -0
  30. package/skills/collaboration/brainstorming/SKILL.md +166 -0
  31. package/skills/collaboration/brainstorming/skill.json +9 -0
  32. package/skills/collaboration/brainstorming/spec-document-reviewer-prompt.md +50 -0
  33. package/skills/collaboration/brainstorming/visual-companion.md +277 -0
  34. package/skills/collaboration/dispatching-parallel-agents/SKILL.md +174 -0
  35. package/skills/collaboration/dispatching-parallel-agents/skill.json +9 -0
  36. package/skills/collaboration/executing-plans/SKILL.md +130 -0
  37. package/skills/collaboration/executing-plans/skill.json +9 -0
  38. package/skills/collaboration/finishing-a-development-branch/SKILL.md +261 -0
  39. package/skills/collaboration/finishing-a-development-branch/skill.json +9 -0
  40. package/skills/collaboration/leveraging-cli-tools/SKILL.md +132 -0
  41. package/skills/collaboration/leveraging-cli-tools/skill.json +9 -0
  42. package/skills/collaboration/receiving-code-review/SKILL.md +233 -0
  43. package/skills/collaboration/receiving-code-review/skill.json +9 -0
  44. package/skills/collaboration/requesting-code-review/SKILL.md +110 -0
  45. package/skills/collaboration/requesting-code-review/code-reviewer.md +146 -0
  46. package/skills/collaboration/requesting-code-review/skill.json +12 -0
  47. package/skills/collaboration/subagent-driven-development/SKILL.md +255 -0
  48. package/skills/collaboration/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  49. package/skills/collaboration/subagent-driven-development/implementer-prompt.md +113 -0
  50. package/skills/collaboration/subagent-driven-development/skill.json +15 -0
  51. package/skills/collaboration/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  52. package/skills/collaboration/using-git-worktrees/SKILL.md +366 -0
  53. package/skills/collaboration/using-git-worktrees/skill.json +9 -0
  54. package/skills/collaboration/writing-plans/SKILL.md +121 -0
  55. package/skills/collaboration/writing-plans/plan-document-reviewer-prompt.md +52 -0
  56. package/skills/collaboration/writing-plans/skill.json +9 -0
  57. package/skills/debugging/defense-in-depth/SKILL.md +380 -0
  58. package/skills/debugging/defense-in-depth/skill.json +9 -0
  59. package/skills/debugging/root-cause-tracing/SKILL.md +361 -0
  60. package/skills/debugging/root-cause-tracing/find-polluter.sh +63 -0
  61. package/skills/debugging/root-cause-tracing/skill.json +12 -0
  62. package/skills/debugging/systematic-debugging/SKILL.md +299 -0
  63. package/skills/debugging/systematic-debugging/condition-based-waiting-example.ts +158 -0
  64. package/skills/debugging/systematic-debugging/condition-based-waiting.md +115 -0
  65. package/skills/debugging/systematic-debugging/defense-in-depth.md +122 -0
  66. package/skills/debugging/systematic-debugging/find-polluter.sh +63 -0
  67. package/skills/debugging/systematic-debugging/root-cause-tracing.md +169 -0
  68. package/skills/debugging/systematic-debugging/skill.json +9 -0
  69. package/skills/debugging/systematic-debugging/test-academic.md +14 -0
  70. package/skills/debugging/systematic-debugging/test-pressure-1.md +58 -0
  71. package/skills/debugging/systematic-debugging/test-pressure-2.md +68 -0
  72. package/skills/debugging/systematic-debugging/test-pressure-3.md +69 -0
  73. package/skills/debugging/verification-before-completion/SKILL.md +143 -0
  74. package/skills/debugging/verification-before-completion/skill.json +9 -0
  75. package/skills/finding-skills/SKILL.md +101 -0
  76. package/skills/finding-skills/skill.json +8 -0
  77. package/skills/meta/create-skill-json/SKILL.md +370 -0
  78. package/skills/meta/create-skill-json/skill.json +9 -0
  79. package/skills/meta/create-skill-json/test-scenarios.md +29 -0
  80. package/skills/meta/creating-prompts/SKILL.md +349 -0
  81. package/skills/meta/creating-prompts/examples/do-example.md +65 -0
  82. package/skills/meta/creating-prompts/examples/plan-example.md +75 -0
  83. package/skills/meta/creating-prompts/examples/refine-example.md +65 -0
  84. package/skills/meta/creating-prompts/examples/research-example.md +63 -0
  85. package/skills/meta/creating-prompts/scripts/get-next-number.sh +27 -0
  86. package/skills/meta/creating-prompts/skill.json +20 -0
  87. package/skills/meta/creating-prompts/templates/do-template.md +59 -0
  88. package/skills/meta/creating-prompts/templates/plan-template.md +58 -0
  89. package/skills/meta/creating-prompts/templates/refine-template.md +54 -0
  90. package/skills/meta/creating-prompts/templates/research-template.md +56 -0
  91. package/skills/meta/using-superpowers/SKILL.md +122 -0
  92. package/skills/meta/using-superpowers/skill.json +5 -0
  93. package/skills/meta/writing-prompts/SKILL.md +345 -0
  94. package/skills/meta/writing-prompts/skill.json +9 -0
  95. package/skills/problem-solving/ABOUT.md +40 -0
  96. package/skills/problem-solving/collision-zone-thinking/SKILL.md +188 -0
  97. package/skills/problem-solving/collision-zone-thinking/references/historical-examples.md +393 -0
  98. package/skills/problem-solving/collision-zone-thinking/skill.json +9 -0
  99. package/skills/problem-solving/inversion-exercise/SKILL.md +174 -0
  100. package/skills/problem-solving/inversion-exercise/skill.json +9 -0
  101. package/skills/problem-solving/meta-pattern-recognition/SKILL.md +116 -0
  102. package/skills/problem-solving/meta-pattern-recognition/skill.json +9 -0
  103. package/skills/problem-solving/scale-game/SKILL.md +222 -0
  104. package/skills/problem-solving/scale-game/skill.json +9 -0
  105. package/skills/problem-solving/simplification-cascades/SKILL.md +113 -0
  106. package/skills/problem-solving/simplification-cascades/skill.json +9 -0
  107. package/skills/problem-solving/when-stuck/SKILL.md +69 -0
  108. package/skills/problem-solving/when-stuck/skill.json +9 -0
  109. package/skills/research/ABOUT.md +20 -0
  110. package/skills/research/tracing-knowledge-lineages/SKILL.md +241 -0
  111. package/skills/research/tracing-knowledge-lineages/skill.json +9 -0
  112. package/skills/setup-skills/SKILL.md +47 -0
  113. package/skills/testing/condition-based-waiting/SKILL.md +359 -0
  114. package/skills/testing/condition-based-waiting/example.ts +158 -0
  115. package/skills/testing/condition-based-waiting/skill.json +12 -0
  116. package/skills/testing/test-driven-development/SKILL.md +434 -0
  117. package/skills/testing/test-driven-development/skill.json +9 -0
  118. package/skills/testing/testing-anti-patterns/SKILL.md +298 -0
  119. package/skills/testing/testing-anti-patterns/skill.json +9 -0
  120. package/skills/testing/verification-before-completion/SKILL.md +246 -0
  121. package/skills/testing/verification-before-completion/skill.json +10 -0
  122. package/skills/using-a-skill/SKILL.md +101 -0
  123. package/skills/using-a-skill/skill.json +8 -0
@@ -0,0 +1,355 @@
1
+ #!/bin/sh
2
+ // 2>/dev/null; exec "$(command -v bun 2>/dev/null || echo node)" "$0" "$@"
3
+ import{relative as Bq,dirname as Gq,join as UQ}from"path";import{existsSync as S$}from"fs";import{homedir as o$,platform as tq}from"os";import{join as T,parse as eq,dirname as i$}from"path";import{existsSync as q$}from"fs";import{fileURLToPath as $Q}from"url";var qQ=$Q(import.meta.url),$$=i$(qQ),QQ=()=>{let $=o$();switch(tq()){case"darwin":return T($,"Library","Application Support","Code","User");case"win32":return T($,"AppData","Roaming","Code","User");case"linux":return T($,".config","Code","User");default:return T($,".config","Code","User")}},XQ=()=>{let $=process.cwd(),Q=eq($).root;while($!==Q){if(q$(T($,".agents")))return $;$=i$($)}return process.cwd()},E={home:o$(),vscodeUserDir:QQ(),projectRoot:XQ(),get projectClaudeSkills(){return T(this.projectRoot,".claude","skills")},get projectAgentsSkills(){return T(this.projectRoot,".agents","skills")},get projectCopilotSkills(){return T(this.projectRoot,".copilot","skills")},get projectOpencodeSkills(){return T(this.projectRoot,".opencode","skill")},get projectCursorSkills(){return T(this.projectRoot,".cursor","skills")},get projectGeminiSkills(){return T(this.projectRoot,".gemini","skills")},get projectCodexSkills(){return T(this.projectRoot,".codex","skills")},get projectSkillsDir(){return T(this.projectRoot,"skills")},get homePersonalSkills(){return T(this.home,".agents","skills")},get homeClaudeSkills(){return T(this.home,".claude","skills")},get homeCopilotSkills(){return T(this.home,".copilot","skills")},get homeOpencodeSkills(){return T(this.home,".config","opencode","skill")},get homeCursorSkills(){return T(this.home,".cursor","skills")},get homeGeminiSkills(){return T(this.home,".gemini","skills")},get homeCodexSkills(){return T(this.home,".codex","skills")},get bootstrap(){return T(this.projectRoot,".agents","superpowers-bootstrap.md")},get superpowersRepo(){let $=T($$,"..","..","..","skills");if(q$($)&&q$(T($$,"..","..","..",".github","prompts")))return T($$,"..","..","..");return T(this.home,".agents","superpowers")},get homeSuperpowersSkills(){return T(this.superpowersRepo,"skills")},get isSuperpowersRepo(){let $=T($$,"..","..","..","skills");return q$($)&&q$(T($$,"..","..","..",".github","prompts"))}};import{readFileSync as r$}from"fs";var Q$=($)=>{try{let q=r$($,"utf8").split(`
4
+ `),X={name:"",description:"",whenToUse:""},Z=!1;for(let Y of q){if(Y.trim()==="---"){if(Z)break;Z=!0;continue}if(Z){let W=Y.match(/^(\w+):\s*(.*)$/);if(W){let[,H,K]=W,z={name:"name",description:"description",when_to_use:"whenToUse"};if(z[H])X[z[H]]=K.trim()}}}return X}catch{return{name:"",description:"",whenToUse:""}}},s$=($)=>{try{let Q=r$($,"utf8"),q=Q$($),X=Q.split(`
5
+ `),Z=!1,Y=!1,W=[];for(let H of X){if(H.trim()==="---"){if(Z){Y=!0;continue}Z=!0;continue}if(Y||!Z)W.push(H)}return{content:W.join(`
6
+ `).trim(),frontmatter:q}}catch(Q){throw Error(`Error reading skill file: ${Q.message}`)}};import{existsSync as D$,readdirSync as $q,statSync as qq}from"fs";import{join as j$,relative as IX}from"path";import{readFileSync as YQ,existsSync as ZQ}from"fs";import{join as t$}from"path";var X$=($)=>{let Q=t$($,"skill.json");if(!ZQ(Q))return null;try{let q=YQ(Q,"utf8");return JSON.parse(q)}catch(q){return null}};var R$=($)=>{if($.startsWith("superpowers:"))return{type:"superpowers",path:$.substring(12).replace(/^skills\//,"")};if($.startsWith("claude:"))return{type:"claude",path:$.substring(7).replace(/^skills\//,"")};if($.startsWith("copilot:"))return{type:"copilot",path:$.substring(8).replace(/^skills\//,"")};if($.startsWith("opencode:"))return{type:"opencode",path:$.substring(9).replace(/^skills\//,"")};if($.startsWith("cursor:"))return{type:"cursor",path:$.substring(7).replace(/^skills\//,"")};if($.startsWith("gemini:"))return{type:"gemini",path:$.substring(7).replace(/^skills\//,"")};return{type:null,path:$.replace(/^skills\//,"")}},e$=($,Q)=>{let q=X$($);if(!q||!q.helpers||!Array.isArray(q.helpers))return null;let X=q.helpers,Z=Q.toLowerCase(),Y=null,W=0;for(let H of X){let K=H.toLowerCase();if(K===Z){Y=H;break}if(K.includes(Z)){let G=Z.length/K.length;if(G>W)W=G,Y=H}let z=H.split("/").pop().split(".")[0].toLowerCase();if(Z.includes(z)){let G=z.length/Z.length;if(G>W)W=G,Y=H}}return Y?t$($,Y):null},Y$={project:{dir:"projectAgentsSkills",prefix:""},claude:{dir:"projectClaudeSkills",prefix:"claude:"},copilot:{dir:"projectCopilotSkills",prefix:"copilot:"},opencode:{dir:"projectOpencodeSkills",prefix:"opencode:"},cursor:{dir:"projectCursorSkills",prefix:"cursor:"},gemini:{dir:"projectGeminiSkills",prefix:"gemini:"},personal:{dir:"homePersonalSkills",prefix:""},personalClaude:{dir:"homeClaudeSkills",prefix:"claude:"},personalCopilot:{dir:"homeCopilotSkills",prefix:"copilot:"},personalOpencode:{dir:"homeOpencodeSkills",prefix:"opencode:"},personalCursor:{dir:"homeCursorSkills",prefix:"cursor:"},personalGemini:{dir:"homeGeminiSkills",prefix:"gemini:"},superpowers:{dir:"homeSuperpowersSkills",prefix:"superpowers:"}};var V$=($,Q,q=null)=>{let X=[];if(!D$($))return X;let Z=(Y,W)=>{if(q!==null&&W>q)return;try{let H=$q(Y,{withFileTypes:!0});for(let K of H){if(K.name==="node_modules"||K.name===".git"||K.name.startsWith("."))continue;let z=j$(Y,K.name),G=K.isDirectory();if(K.isSymbolicLink())try{G=qq(z).isDirectory()}catch{continue}if(!G)continue;let V=j$(z,"SKILL.md");if(D$(V))X.push(z);if(q===null||W<q)Z(z,W+1)}}catch{}};return Z($,0),X};var Qq=($,Q)=>{if(!D$($))return[];let q=[],X=Q.toLowerCase().replace(/\\/g,"/"),Z=(Y,W="")=>{try{let H=$q(Y,{withFileTypes:!0});for(let K of H){let z=j$(Y,K.name),G=W?`${W}/${K.name}`:K.name,V=K.isDirectory();if(K.isSymbolicLink())try{V=qq(z).isDirectory()}catch{continue}if(V&&(K.name==="node_modules"||K.name===".git"||K.name.startsWith(".")))continue;if(V)Z(z,G);else if(K.name==="SKILL.md"){let O=W.toLowerCase().replace(/\\/g,"/");if(O===X||O.endsWith("/"+X)||O.endsWith(X))q.push({file:z,path:W})}}}catch(H){}};return Z($),q},Xq=($,Q,q)=>{let X={project:"project skills (.agents/skills/)",claude:"claude skills (.claude/skills/)",copilot:"copilot skills (.copilot/skills/)",opencode:"opencode skills (.opencode/skill/)",cursor:"cursor skills (.cursor/skills/)",gemini:"gemini skills (.gemini/skills/)",personal:"personal skills (~/.agents/skills/)",personalClaude:"personal claude skills (~/.claude/skills/)",personalCopilot:"personal copilot skills (~/.copilot/skills/)",personalOpencode:"personal opencode skills (~/.config/opencode/skill/)",personalCursor:"personal cursor skills (~/.cursor/skills/)",personalGemini:"personal gemini skills (~/.gemini/skills/)",superpowers:"superpowers skills (~/.agents/superpowers/skills/)"}[q];console.log(`Error: Multiple skills match "${$}" in ${X}:
7
+ `);for(let Z of Q){let W=Y$[q].prefix+Z.path;try{let H=Q$(Z.file),K=H.description||H.whenToUse||"(no description)";console.log(` ${W}`),console.log(` ${K}
8
+ `)}catch(H){console.log(` ${W}`),console.log(` (unable to read description)
9
+ `)}}console.log("Please be more specific. Examples:");for(let Z of Q.slice(0,2)){let Y=Y$[q].prefix;console.log(` superpowers-agent execute ${Y}${Z.path}`)}};import{existsSync as P$}from"fs";import{join as HQ,relative as WQ}from"path";var EQ=($)=>{let{type:Q,path:q}=R$($),X={superpowers:[E.homeSuperpowersSkills],claude:[E.projectClaudeSkills,E.homeClaudeSkills],copilot:[E.projectCopilotSkills,E.homeCopilotSkills],opencode:[E.projectOpencodeSkills,E.homeOpencodeSkills],gemini:[E.projectGeminiSkills,E.homeGeminiSkills],project:[E.projectAgentsSkills],personal:[E.homePersonalSkills]},Z;if(Q)Z=(X[Q]||[]).map((W)=>({type:Q,dir:W}));else if(E.isSuperpowersRepo&&P$(E.projectSkillsDir))Z=[{type:"project",dir:E.projectSkillsDir},{type:"project",dir:E.projectAgentsSkills},{type:"claude",dir:E.projectClaudeSkills},{type:"copilot",dir:E.projectCopilotSkills},{type:"opencode",dir:E.projectOpencodeSkills},{type:"gemini",dir:E.projectGeminiSkills},{type:"personal",dir:E.homePersonalSkills},{type:"personalClaude",dir:E.homeClaudeSkills},{type:"personalCopilot",dir:E.homeCopilotSkills},{type:"personalOpencode",dir:E.homeOpencodeSkills},{type:"personalGemini",dir:E.homeGeminiSkills},{type:"superpowers",dir:E.homeSuperpowersSkills}];else Z=[{type:"project",dir:E.projectAgentsSkills},{type:"claude",dir:E.projectClaudeSkills},{type:"copilot",dir:E.projectCopilotSkills},{type:"opencode",dir:E.projectOpencodeSkills},{type:"gemini",dir:E.projectGeminiSkills},{type:"personal",dir:E.homePersonalSkills},{type:"personalClaude",dir:E.homeClaudeSkills},{type:"personalCopilot",dir:E.homeCopilotSkills},{type:"personalOpencode",dir:E.homeOpencodeSkills},{type:"personalGemini",dir:E.homeGeminiSkills},{type:"superpowers",dir:E.homeSuperpowersSkills}];for(let{type:Y,dir:W}of Z){let H=Qq(W,q);if(H.length===1)return{skillFile:H[0].file,sourceType:Y,actualSkillPath:H[0].path};if(H.length>1)Xq(q,H,Y)}return null},d=($)=>{let Q=EQ($);if(Q)return Q;let{type:q,path:X}=R$($),Z={superpowers:[E.homeSuperpowersSkills],claude:[E.projectClaudeSkills,E.homeClaudeSkills],copilot:[E.projectCopilotSkills,E.homeCopilotSkills],opencode:[E.projectOpencodeSkills,E.homeOpencodeSkills],gemini:[E.projectGeminiSkills,E.homeGeminiSkills],project:[E.projectAgentsSkills],personal:[E.homePersonalSkills]},Y;if(q)Y=(Z[q]||[]).map((H)=>({type:q,dir:H}));else if(E.isSuperpowersRepo&&P$(E.projectSkillsDir))Y=[{type:"project",dir:E.projectSkillsDir},{type:"project",dir:E.projectAgentsSkills},{type:"claude",dir:E.projectClaudeSkills},{type:"copilot",dir:E.projectCopilotSkills},{type:"opencode",dir:E.projectOpencodeSkills},{type:"gemini",dir:E.projectGeminiSkills},{type:"personal",dir:E.homePersonalSkills},{type:"personalClaude",dir:E.homeClaudeSkills},{type:"personalCopilot",dir:E.homeCopilotSkills},{type:"personalOpencode",dir:E.homeOpencodeSkills},{type:"personalGemini",dir:E.homeGeminiSkills},{type:"superpowers",dir:E.homeSuperpowersSkills}];else Y=[{type:"project",dir:E.projectAgentsSkills},{type:"claude",dir:E.projectClaudeSkills},{type:"copilot",dir:E.projectCopilotSkills},{type:"opencode",dir:E.projectOpencodeSkills},{type:"gemini",dir:E.projectGeminiSkills},{type:"personal",dir:E.homePersonalSkills},{type:"personalClaude",dir:E.homeClaudeSkills},{type:"personalCopilot",dir:E.homeCopilotSkills},{type:"personalOpencode",dir:E.homeOpencodeSkills},{type:"personalGemini",dir:E.homeGeminiSkills},{type:"superpowers",dir:E.homeSuperpowersSkills}];for(let{type:W,dir:H}of Y){if(!P$(H))continue;let K=V$(H,W,null);for(let z of K){let G=X$(z);if(G&&G.aliases&&Array.isArray(G.aliases)){let V=X.toLowerCase();for(let O of G.aliases)if(O.toLowerCase()===V){let B=HQ(z,"SKILL.md"),U=WQ(H,z);return{skillFile:B,sourceType:W,actualSkillPath:U}}}}}return null};import{readFileSync as Yq,writeFileSync as Zq,existsSync as y$}from"fs";import{join as m}from"path";import{execSync as zQ}from"child_process";var f$=()=>({auto_update:!0,last_update_check:null,last_updated_commit:null}),Z$=()=>{let $=m(E.superpowersRepo,".config.json");try{if(!y$($))return f$();let Q=Yq($,"utf8");return{...f$(),...JSON.parse(Q)}}catch{return f$()}},_$=($)=>{let Q=m(E.superpowersRepo,".config.json"),X={...Z$(),...$};try{Zq(Q,JSON.stringify(X,null,2))}catch(Z){console.log(`Warning: couldn't save config: ${Z.message}`)}},h=($)=>{let Q=$?m(E.home,".agents","config.json"):m(process.cwd(),".agents","config.json");if(!y$(Q))return{};try{let q=Yq(Q,"utf8");return JSON.parse(q)}catch(q){return{}}},a=($,Q)=>{let q=Q?m(E.home,".agents"):m(process.cwd(),".agents"),X=m(q,"config.json");try{if(!y$(q))zQ(`mkdir -p "${q}"`,{stdio:"pipe"});return Zq(X,JSON.stringify($,null,2),"utf8"),!0}catch(Z){throw Error(`Failed to write config: ${Z.message}`)}},S=($=!1)=>{return h($).repositories||{}},Hq=($,Q,q)=>{let X=h(q);if(!X.repositories)X.repositories={};X.repositories[$]=Q,a(X,q)};import{readFileSync as KQ}from"fs";import{join as Wq,dirname as BQ}from"path";import{fileURLToPath as GQ}from"url";import{existsSync as VQ}from"fs";import{execSync as _Q}from"child_process";var OQ=GQ(import.meta.url),Eq=BQ(OQ),g=()=>{try{let $=Wq(Eq,"package.json");if(!VQ($))$=Wq(Eq,"..","..","package.json");return JSON.parse(KQ($,"utf8")).version||"5.4.0"}catch($){return"5.4.0"}},R=()=>{let $=g();console.log(`^^SAV:${$}^^`)},zq=async()=>{try{let Q=_Q('curl -sS "https://raw.githubusercontent.com/complexthings/superpowers/main/.agents/package.json"',{encoding:"utf8",timeout:1e4}),q=JSON.parse(Q);if(!q.version)return g();return q.version}catch($){throw Error(`Failed to fetch remote version: ${$.message}`)}},Kq=($,Q)=>{let q=$.split(".").map(Number),X=Q.split(".").map(Number);for(let Z=0;Z<3;Z++){let Y=q[Z]||0,W=X[Z]||0;if(Y>W)return!0;if(Y<W)return!1}return!1};var LQ={project:{dir:"projectAgentsSkills",prefix:""},claude:{dir:"projectClaudeSkills",prefix:"claude:"},copilot:{dir:"projectCopilotSkills",prefix:"copilot:"},opencode:{dir:"projectOpencodeSkills",prefix:"opencode:"},gemini:{dir:"projectGeminiSkills",prefix:"gemini:"},personal:{dir:"homePersonalSkills",prefix:""},personalClaude:{dir:"homeClaudeSkills",prefix:"claude:"},personalCopilot:{dir:"homeCopilotSkills",prefix:"copilot:"},personalOpencode:{dir:"homeOpencodeSkills",prefix:"opencode:"},personalGemini:{dir:"homeGeminiSkills",prefix:"gemini:"},superpowers:{dir:"homeSuperpowersSkills",prefix:"superpowers:"}},IQ=($,Q)=>{let q=UQ($,"SKILL.md"),{dir:X,prefix:Z}=LQ[Q],Y=Bq(E[X],$).replace(/\\/g,"/");console.log(`${Z}${Y}`);let{description:W,whenToUse:H}=Q$(q);if(W)console.log(` ${W}`);if(H)console.log(` When to use: ${H}`);console.log("")},l=()=>{R();let $=new Set,Q=[{type:"project",dir:E.projectAgentsSkills,maxDepth:null},{type:"claude",dir:E.projectClaudeSkills,maxDepth:null},{type:"copilot",dir:E.projectCopilotSkills,maxDepth:null},{type:"opencode",dir:E.projectOpencodeSkills,maxDepth:null},{type:"gemini",dir:E.projectGeminiSkills,maxDepth:null},{type:"personal",dir:E.homePersonalSkills,maxDepth:null},{type:"personalClaude",dir:E.homeClaudeSkills,maxDepth:null},{type:"personalCopilot",dir:E.homeCopilotSkills,maxDepth:null},{type:"personalOpencode",dir:E.homeOpencodeSkills,maxDepth:null},{type:"personalGemini",dir:E.homeGeminiSkills,maxDepth:null},{type:"superpowers",dir:E.homeSuperpowersSkills,maxDepth:null}];for(let{type:q,dir:X,maxDepth:Z}of Q){let Y=V$(X,q,Z);for(let W of Y){let H=Bq(X,W);if(!$.has(H))$.add(H),IQ(W,q)}}console.log(`Usage:
10
+ superpowers-agent execute <skill-name> # Load a specific skill`)},Vq=()=>{R();let $=process.argv[3];if(!$){console.log(`Usage: superpowers-agent execute <skill-name-or-alias>
11
+
12
+ Examples:
13
+ superpowers-agent execute brainstorming
14
+ superpowers-agent execute superpowers:collaboration/brainstorming
15
+ superpowers-agent execute aem/block-collection-and-party
16
+ superpowers-agent execute block-collection # Using alias
17
+
18
+ Description:
19
+ Instructs the agent to execute the specified skill.
20
+ Supports skill aliases defined in skill.json files.`);return}let Q=d($);if(!Q){console.log(`Error: Skill not found: ${$}
21
+
22
+ Available skills:`),l();return}let{skillFile:q,sourceType:X}=Q,Z=process.cwd(),Y=q.startsWith(Z),W=S$(E.projectAgentsSkills)||S$(E.projectClaudeSkills);if(Y)console.log(`Open this file with your Read Tool: ${q}
23
+
24
+ <IMPORTANT>
25
+ USE YOUR Read Tool to process this file. DO NOT use \`cat\` or print commands.
26
+ </IMPORTANT>`);else if(W&&X!=="project")console.log(`Open this file with your Read Tool: ${q}
27
+
28
+ <IMPORTANT>
29
+ 1. Try using your Read Tool first
30
+ 2. If your Read tool fails (file outside workspace), use: cat "${q}"
31
+ 3. Consider using workspace-local skills for better tool compatibility
32
+ Run: superpowers-agent setup-skills
33
+ </IMPORTANT>`);else console.log(`Open this file with your Read Tool: ${q}
34
+
35
+ <IMPORTANT>
36
+ 1. Try using your Read Tool first
37
+ 2. If your Read tool fails (file outside workspace), use: cat "${q}"
38
+ 3. NEVER skip loading the skill content
39
+ </IMPORTANT>`)},_q=()=>{let $=process.argv[3];if(!$){console.log(`Usage: superpowers-agent path <skill-name-or-alias>
40
+
41
+ Examples:
42
+ superpowers-agent path brainstorming
43
+ superpowers-agent path superpowers:collaboration/brainstorming
44
+ superpowers-agent path aem/block-collection-and-party
45
+ superpowers-agent path block-collection # Using alias
46
+
47
+ Description:
48
+ Outputs the file system path of the specified SKILL.md file.
49
+ Supports skill aliases defined in skill.json files.`);return}let Q=d($);if(!Q){console.log(`Error: Skill not found: ${$}
50
+
51
+ Available skills:`),l();return}let{skillFile:q}=Q;console.log(q)},Oq=()=>{let $=process.argv[3];if(!$){console.log(`Usage: superpowers-agent dir <skill-name>
52
+
53
+ Examples:
54
+ superpowers-agent dir brainstorming
55
+ superpowers-agent dir aem/block-collection-and-party
56
+ superpowers-agent dir block-collection # Using alias
57
+ superpowers-agent dir superpowers:testing/test-driven-development
58
+
59
+ Description:
60
+ Returns the directory path where the specified skill is located.
61
+ Supports skill aliases defined in skill.json files.`);return}let Q=d($);if(!Q){console.log(`Error: Skill not found: ${$}
62
+
63
+ Available skills:`),l();return}let{skillFile:q}=Q,X=Gq(q);console.log(X)},Uq=()=>{R();let $=process.argv[3],Q=process.argv[4];if(!$||!Q){console.log(`Usage: superpowers-agent get-helpers <skill-name> <helper-search-term>
64
+
65
+ Examples:
66
+ superpowers-agent get-helpers block-collection search-block
67
+ superpowers-agent get-helpers aem/block-collection-and-party get-block-structure
68
+ superpowers-agent get-helpers superpowers:testing/test-driven-development example
69
+
70
+ Description:
71
+ Searches for helper files within a skill's skill.json configuration.
72
+ Returns the full path to the best matching helper file.
73
+
74
+ The command uses the skill's aliases if available, so you can use
75
+ short names like "block-collection" instead of the full path.`);return}let q=d($);if(!q){console.log(`Error: Skill not found: ${$}
76
+
77
+ Available skills:`),l();return}let{skillFile:X}=q,Z=Gq(X),Y=X$(Z);if(!Y){console.log(`Error: No skill.json found for skill: ${$}
78
+ Location: ${Z}`);return}if(!Y.helpers||!Array.isArray(Y.helpers)||Y.helpers.length===0){console.log(`Error: No helpers defined in skill.json for skill: ${$}
79
+ Location: ${Z}`);return}let W=e$(Z,Q);if(!W){console.log(`Error: No helper found matching "${Q}" in skill: ${$}`),console.log(`
80
+ Available helpers:`);for(let H of Y.helpers)console.log(` - ${H}`);return}if(!S$(W)){console.log(`Error: Helper file not found: ${W}
81
+ Defined in skill.json but missing from filesystem`);return}console.log(W)},Lq=()=>{let $=Z$();console.log("Current configuration:"),console.log(JSON.stringify($,null,2))},Iq=()=>{let $=process.argv[3],Q=process.argv[4];if(!$||Q===void 0){console.log(`Usage: .agents/superpowers-agent config-set <key> <value>
82
+
83
+ Available keys:
84
+ auto_update (true/false) - Enable/disable automatic updates during bootstrap
85
+
86
+ Examples:
87
+ .agents/superpowers-agent config-set auto_update false
88
+ .agents/superpowers-agent config-set auto_update true`);return}let q=Q;if(Q==="true")q=!0;else if(Q==="false")q=!1;let X={};X[$]=q,_$(X),console.log(`✓ Set ${$} = ${q}`)},vq=()=>{R();let $=S(!0),Q=S(!1),q=[];for(let[Y,W]of Object.entries($))q.push({alias:Y,url:W,source:"global"});for(let[Y,W]of Object.entries(Q)){let H=q.findIndex((K)=>K.alias===Y);if(H>=0)q[H]={alias:Y,url:W,source:"project"};else q.push({alias:Y,url:W,source:"project"})}if(q.length===0){console.log(`No repository aliases configured.
89
+
90
+ Add a repository using:
91
+ superpowers-agent add-repository <git-url> [--as=@alias]`);return}let X=Math.max(5,...q.map((Y)=>Y.alias.length)),Z=Math.max(3,...q.map((Y)=>Y.url.length));console.log(`Repositories:
92
+ `),console.log(`${"Alias".padEnd(X)} ${"URL".padEnd(Z)} Source`);for(let Y of q)console.log(`${Y.alias.padEnd(X)} ${Y.url.padEnd(Z)} (${Y.source})`);console.log(`
93
+ Total: ${q.length} repository alias(es)`)};import{execSync as PQ}from"child_process";import{execSync as p}from"child_process";var vQ=()=>{try{return p("git status --porcelain --untracked-files=no",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe",timeout:3000}).trim().length===0}catch{return!1}},H$=()=>{try{return p("git rev-parse --abbrev-ref HEAD",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe",timeout:3000}).trim()==="main"}catch{return!1}},O$=()=>{try{p("git fetch origin",{cwd:E.superpowersRepo,timeout:5000,stdio:"pipe"});let $=!vQ(),Q=p("git rev-parse HEAD",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe"}).trim(),q=p("git rev-parse origin/main",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe"}).trim();if(Q===q)return{hasUpdates:!1,hasLocalChanges:$,currentCommit:Q,latestCommit:q,commitsBehind:0,changedFiles:[]};let Z=parseInt(p("git rev-list --count HEAD..origin/main",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe"}).trim(),10),W=p("git diff --name-only HEAD origin/main",{cwd:E.superpowersRepo,encoding:"utf8",stdio:"pipe"}).trim().split(`
94
+ `).filter((H)=>H.length>0);return{hasUpdates:!0,hasLocalChanges:$,currentCommit:Q,latestCommit:q,commitsBehind:Z,changedFiles:W}}catch{return{hasUpdates:!1,hasLocalChanges:!1,currentCommit:"",latestCommit:"",commitsBehind:0,changedFiles:[],error:!0}}},Jq=($)=>{let Q={".github/prompts/":"copilot-prompts",".cursor/commands/":"cursor-commands","hooks/cursor/":"cursor-hooks",".codex/prompts/":"codex-prompts",".gemini/commands/":"gemini-commands","commands/":"claude-commands",".opencode/command/":"opencode-commands",".opencode/plugins/":"opencode-plugin"},q=new Set;for(let X of $)for(let[Z,Y]of Object.entries(Q))if(X.startsWith(Z))q.add(Y);return Array.from(q)};import{existsSync as wq,readdirSync as JQ}from"fs";import{join as o}from"path";import{execSync as U$}from"child_process";var i=()=>{let $=o(E.superpowersRepo,"hooks","cursor"),Q=o(E.home,".cursor","hooks"),q=o($,"hooks.json"),X=o(E.home,".cursor","hooks.json");if(!wq($)){console.log("⚠️ No Cursor hooks to install (source directory not found).");return}try{if(!wq(Q))U$(`mkdir -p "${Q}"`,{stdio:"pipe"})}catch(W){console.log(`Error creating Cursor hooks directory: ${W.message}`);return}try{U$(`cp "${q}" "${X}"`,{stdio:"pipe"}),console.log(" ✓ Installed hooks.json")}catch(W){console.log(` ✗ Failed to install hooks.json: ${W.message}`);return}let Z;try{Z=JQ($).filter((W)=>W.endsWith(".sh"))}catch(W){console.log(`Error reading hooks directory: ${W.message}`);return}if(Z.length===0){console.log("⚠️ No hook scripts found to install.");return}console.log("Installing Cursor hooks...");let Y=0;for(let W of Z)try{let H=o($,W),K=o(Q,W);U$(`cp "${H}" "${K}"`,{stdio:"pipe"}),U$(`chmod +x "${K}"`,{stdio:"pipe"}),console.log(` ✓ Installed ${W}`),Y++}catch(H){console.log(` ✗ Failed to install ${W}: ${H.message}`)}if(Y>0)console.log(`
95
+ ✓ Installed ${Y} hook(s) to ${Q}
96
+ Cursor will now check for skills before each prompt submission
97
+ Restart Cursor for hooks to take effect`)};import{existsSync as g$,readdirSync as ZY,lstatSync as wQ,symlinkSync as Tq,unlinkSync as TQ,mkdirSync as bQ,readlinkSync as AQ}from"fs";import{join as k$,dirname as WY}from"path";import{platform as MQ}from"os";var u$=($)=>{try{return wQ($).isSymbolicLink()}catch{return!1}},NQ=($,Q)=>{try{if(!u$($))return!1;return AQ($)===Q}catch{return!1}},W$=()=>{let $=k$(E.superpowersRepo,".opencode","plugins","superpowers-agent.js"),Q=k$(E.home,".config","opencode","plugins"),q=k$(Q,"superpowers-agent.js");if(console.log("Installing OpenCode plugin symlink..."),!g$($))return console.log("⚠️ Source plugin not found, skipping symlink creation"),console.log(` Expected at: ${$}`),{created:!1,error:"Source plugin not found"};if(NQ(q,$))return console.log("✓ Plugin symlink already exists and is correct"),{created:!1,existed:!0};if(g$(q)&&!u$(q))return console.log("⚠️ Warning: A file already exists at the destination path"),console.log(` Path: ${q}`),console.log(" Skipping symlink creation to avoid overwriting existing file"),console.log(" To use superpowers-agent plugin, manually remove or rename the existing file"),{created:!1,error:"File already exists at destination"};if(!g$(Q))try{bQ(Q,{recursive:!0}),console.log(`✓ Created ${Q.replace(E.home,"~")}`)}catch(Z){return console.log(`⚠️ Failed to create plugins directory: ${Z.message}`),{created:!1,error:`Failed to create directory: ${Z.message}`}}if(u$(q))try{TQ(q)}catch(Z){return console.log(`⚠️ Failed to remove existing symlink: ${Z.message}`),{created:!1,error:`Failed to remove existing symlink: ${Z.message}`}}let X=MQ();try{if(X==="win32")Tq($,q,"file");else Tq($,q);let Z=$.replace(E.home,"~"),Y=q.replace(E.home,"~");return console.log(`✓ Created symlink: ${Y}`),console.log(` -> ${Z}`),{created:!0}}catch(Z){if(X==="win32"&&Z.code==="EPERM")return console.log("⚠️ Windows requires Developer Mode or admin privileges for symlinks"),console.log(" Enable Developer Mode: Settings > Update & Security > For developers"),{created:!1,error:"Windows symlink permission denied"};return console.log(`⚠️ Failed to create symlink: ${Z.message}`),{created:!1,error:`Failed to create symlink: ${Z.message}`}}};import{existsSync as b,readdirSync as bq,lstatSync as CQ,symlinkSync as L$,unlinkSync as Aq,mkdirSync as r,readlinkSync as FQ}from"fs";import{join as _,dirname as xQ,basename as RQ}from"path";import{homedir as N,platform as Mq}from"os";var Nq=[{name:"claude",parentDir:()=>_(N(),".claude"),skillsDir:()=>_(N(),".claude","skills"),superpowersTarget:"superpowers"},{name:"copilot",parentDir:()=>_(N(),".copilot"),skillsDir:()=>_(N(),".copilot","skills"),superpowersTarget:"superpowers"},{name:"opencode",parentDir:()=>_(N(),".config","opencode"),skillsDir:()=>_(N(),".config","opencode","skill"),superpowersTarget:"superpowers"},{name:"cursor",parentDir:()=>_(N(),".cursor"),skillsDir:()=>_(N(),".cursor","skills"),superpowersTarget:"superpowers"},{name:"gemini",parentDir:()=>_(N(),".gemini"),skillsDir:()=>_(N(),".gemini","skills"),superpowersTarget:"superpowers"},{name:"codex",parentDir:()=>_(N(),".codex"),skillsDir:()=>_(N(),".codex","skills"),superpowersTarget:"superpowers"}],DQ=[{name:"claude",agentDir:($)=>_($,".claude"),skillsDir:($)=>_($,".claude","skills"),detect:($)=>b(_($,".claude"))},{name:"copilot",agentDir:($)=>_($,".github"),skillsDir:($)=>_($,".github","skills"),detect:($)=>{let Q=b(_($,".github")),q=b(_($,"AGENTS.md"))||b(_($,".agents","AGENTS.md"));return Q&&q}},{name:"opencode",agentDir:($)=>_($,".opencode"),skillsDir:($)=>_($,".opencode","skill"),detect:($)=>{let Q=b(_($,".opencode")),q=b(_($,"AGENTS.md"))||b(_($,".agents","AGENTS.md"))||b(_($,".opencode","AGENTS.md"));return Q&&q}},{name:"cursor",agentDir:($)=>_($,".cursor"),skillsDir:($)=>_($,".cursor","skills"),detect:($)=>b(_($,".cursor"))},{name:"gemini",agentDir:($)=>_($,".gemini"),skillsDir:($)=>_($,".gemini","skills"),detect:($)=>{let Q=b(_($,".gemini")),q=b(_($,"GEMINI.md"))||b(_($,".agents","GEMINI.md"));return Q&&q}},{name:"codex",agentDir:($)=>_($,".codex"),skillsDir:($)=>_($,".codex","skills"),detect:($)=>{let Q=b(_($,".codex")),q=b(_($,"AGENTS.md"))||b(_($,".agents","AGENTS.md"));return Q&&q}}],I$=($)=>{try{return CQ($).isSymbolicLink()}catch{return!1}},Cq=($,Q)=>{try{if(!I$($))return!1;return FQ($)===Q}catch{return!1}},E$=($,Q)=>{if(!b($))return{created:!1,existed:!1,error:`Source does not exist: ${$}`};if(Cq(Q,$))return{created:!1,existed:!0};if(b(Q)||I$(Q))if(I$(Q))try{Aq(Q)}catch(Z){return{created:!1,existed:!1,error:`Failed to remove existing symlink: ${Z.message}`}}else return{created:!1,existed:!1,error:`Target exists and is not a symlink: ${Q}`};let q=xQ(Q);if(!b(q))try{r(q,{recursive:!0})}catch(Z){return{created:!1,existed:!1,error:`Failed to create parent directory: ${Z.message}`}}let X=Mq();try{if(X==="win32")L$($,Q,"junction");else L$($,Q,"dir");return{created:!0,existed:!1}}catch(Z){if(X==="win32"&&Z.code==="EPERM")return{created:!1,existed:!1,error:"Windows requires Developer Mode or admin privileges for symlinks. Enable Developer Mode: Settings > Update & Security > For developers"};return{created:!1,existed:!1,error:`Failed to create symlink: ${Z.message}`}}};var Fq=($,Q,q="skills")=>{let X=h(!0);if(!X.symlinks)X.symlinks={};if(!X.symlinks[$])X.symlinks[$]={superpowers:null,skills:[]};if(q==="superpowers")X.symlinks[$].superpowers=Q;else{let Z=X.symlinks[$].skills||[];if(!Z.includes(Q))Z.push(Q),X.symlinks[$].skills=Z}a(X,!0)};var jQ=($,Q={})=>{let q=E.homeSuperpowersSkills,X=_($.skillsDir(),$.superpowersTarget),Z=E$(q,X);if(Z.created){Fq($.name,X,"superpowers");let Y=q.replace(N(),"~"),W=X.replace(N(),"~");return console.log(` ✓ Created ${W} -> ${Y}`),{created:!0}}else if(Z.existed)return{created:!1,existed:!0};else if(Z.error)return console.log(` ⚠️ ${$.name} superpowers: ${Z.error}`),{created:!1,error:Z.error};return{created:!1}},xq=($,Q={})=>{let q=E.homePersonalSkills;if(!b(q))return{created:0,existed:0};let X;try{X=bq(q,{withFileTypes:!0}).filter((Y)=>Y.isDirectory()&&!Y.name.startsWith(".")).map((Y)=>Y.name)}catch{return{created:0,existed:0}}if(X.length===0)return{created:0,existed:0};let Z={created:0,existed:0,names:[]};for(let Y of X){let W=_(q,Y),H=_($.skillsDir(),Y),K=E$(W,H);if(K.created)Fq($.name,H,"skills"),Z.created++,Z.names.push(Y);else if(K.existed)Z.existed++;else if(K.error)console.log(` ⚠️ ${Y}: ${K.error}`)}if(Z.created>0)console.log(` ✓ Synced ${Z.created} personal skill(s): ${Z.names.join(", ")}`);return Z},v$=($={})=>{let{force:Q=!1,forceAgents:q=new Set}=$;for(let X of Nq){let Z=Q||q.has(X.name),Y=X.parentDir(),W=X.skillsDir();if(!b(Y))if(Z)try{r(Y,{recursive:!0}),console.log(`✓ Created ${Y.replace(N(),"~")}`)}catch(H){console.log(`⚠️ Failed to create ${Y.replace(N(),"~")}: ${H.message}`);continue}else{console.log(`⚠️ Skipping ${X.name} (${Y.replace(N(),"~")} not found)`),console.log(" Use --force or --force-<agent> to create directory");continue}if(!b(W))try{r(W,{recursive:!0})}catch(H){console.log(`⚠️ Failed to create skills directory for ${X.name}: ${H.message}`);continue}console.log(`${X.name}:`),jQ(X,$),xq(X,$)}},d$=($={})=>{let{force:Q=!1}=$;for(let q of Nq){let X=q.parentDir(),Z=q.skillsDir();if(!b(X)){if(!Q)continue;try{r(X,{recursive:!0})}catch{continue}}if(!b(Z))try{r(Z,{recursive:!0})}catch{continue}xq(q,$)}};var Rq=($,Q=[])=>{let q;try{q=bq($,{withFileTypes:!0})}catch{return Q}let X=!1,Z=[];for(let Y of q){if(!Y.isDirectory()&&Y.name==="SKILL.md")X=!0;if(Y.isDirectory()&&!Y.name.startsWith("."))Z.push(_($,Y.name))}if(X)Q.push($);for(let Y of Z)Rq(Y,Q);return Q},J$=()=>{let $=E.homeSuperpowersSkills,Q=E.homePersonalSkills;if(!b($))return{created:0,existed:0,updated:0,errors:[`Skills directory not found: ${$}`]};if(!b(Q))try{r(Q,{recursive:!0})}catch(Z){return{created:0,existed:0,updated:0,errors:[`Failed to create ${Q}: ${Z.message}`]}}let q=Rq($),X={created:0,existed:0,updated:0,errors:[]};for(let Z of q){let Y=RQ(Z),W=_(Q,Y);if(Cq(W,Z)){X.existed++;continue}if(I$(W))try{Aq(W),X.updated++}catch(K){X.errors.push(`Failed to remove stale symlink ${W}: ${K.message}`);continue}else if(b(W)){X.errors.push(`Skipped ${W}: path exists and is not a symlink`);continue}let H=Mq();try{if(H==="win32")L$(Z,W,"junction");else L$(Z,W,"dir");let K=W.replace(N(),"~"),z=Z.replace(N(),"~");console.log(` ✓ ${K} -> ${z}`),X.created++}catch(K){X.errors.push(`Failed to create symlink ${W}: ${K.message}`)}}return X},Dq=($={})=>{let Q=$.projectRoot||process.cwd(),q=_(Q,".agents","skills");if(!b(q))return{created:0,existed:0,skipped:0,errors:[]};let X={created:0,existed:0,skipped:0,errors:[]};for(let Z of DQ){if(!Z.detect(Q)){X.skipped++;continue}let Y=Z.skillsDir(Q),W=Z.agentDir(Q);if(!b(W)){X.skipped++;continue}let H=E$(q,Y);if(H.created){let K=Y.replace(Q,".");console.log(` ✓ Created ${K} -> .agents/skills`),X.created++}else if(H.existed)X.existed++;else if(H.error)console.log(` ⚠️ ${Z.name}: ${H.error}`),X.errors.push({platform:Z.name,error:H.error})}return X};var fQ=($)=>{let q={"cursor-hooks":i,"opencode-plugin":W$}[$];if(q)try{return q(),{success:!0,integration:$}}catch(X){return{success:!1,integration:$,error:X.message}}return{success:!1,integration:$,error:"Unknown integration"}},yQ=()=>{console.log("Installing aliases...")},w$=($={})=>{let Q=$.skipReinstall||!1;console.log(`# Checking for Superpowers updates...
98
+ `);let q=O$();if(q.error){console.log("⚠️ Could not check for updates (network issue)");return}if(!q.hasUpdates){console.log("✓ Already up to date");return}if(q.hasLocalChanges){console.log(`⚠️ Cannot auto-update: local changes detected
99
+ Commit or stash your changes first, then run update again
100
+ Or manually update: cd ${E.superpowersRepo} && git pull`);return}if(!H$()){console.log(`⚠️ Not on main branch, skipping auto-update
101
+ Switch to main branch first: cd ${E.superpowersRepo} && git checkout main`);return}console.log(`\uD83D\uDCE6 Updating from ${q.currentCommit.substring(0,7)} to ${q.latestCommit.substring(0,7)}
102
+ (${q.commitsBehind} new commit${q.commitsBehind>1?"s":""})
103
+ `);try{PQ("git pull origin main",{cwd:E.superpowersRepo,stdio:"pipe",timeout:1e4}),console.log("✓ Updated superpowers repository")}catch(H){console.log(`✗ Git pull failed: ${H.message}
104
+ Please resolve manually and try again`);return}if(console.log(""),_$({last_updated_commit:q.latestCommit,last_update_check:new Date().toISOString()}),Q){console.log(`ℹ️ Skipping integration reinstall (--no-reinstall flag)
105
+
106
+ ✓ Update complete!`);return}let X=Jq(q.changedFiles);if(X.length===0){console.log(`ℹ️ No integration files changed, skipping reinstalls
107
+
108
+ ✓ Update complete!`);return}console.log(`\uD83D\uDD04 Reinstalling updated integrations:
109
+ `);let Z=[];for(let H of X){let K=fQ(H);if(Z.push(K),K.success)console.log(` ✓ ${H}`);else console.log(` ✗ ${H} (${K.error})`)}console.log(""),console.log(`
110
+ ---
111
+ `),yQ(),console.log(`
112
+ ---
113
+ `),console.log(`## Syncing Skill Symlinks
114
+ `),v$(),console.log(`
115
+ ## Syncing Repo Skills -> ~/.agents/skills/
116
+ `);let Y=J$();if(Y.created>0||Y.updated>0)console.log(` ✓ ${Y.created} created, ${Y.updated} updated, ${Y.existed} already current`);else if(Y.errors.length>0)for(let H of Y.errors)console.log(` ⚠️ ${H}`);else console.log(` ✓ ${Y.existed} skill symlinks already up to date`);console.log(`
117
+ ---
118
+ `),console.log(`## OpenCode Plugin Symlink
119
+ `),W$();let W=Z.filter((H)=>!H.success);if(W.length>0){console.log("⚠️ Update completed with errors:");for(let H of W){console.log(` - ${H.integration} failed to install`);let K=`install-${H.integration}`;console.log(` Run manually: superpowers-agent ${K}`)}}else console.log("✓ Update complete!")},jq=async()=>{R();let $=g();console.log(`Current version: ${$}`);try{let Q=await zq();if(console.log(`Latest version: ${Q}`),Kq(Q,$))console.log("Update available: Yes"),process.exit(1);else console.log("You are up to date"),process.exit(0)}catch(Q){console.log(`Error checking for updates: ${Q.message}`),process.exit(1)}},Pq=()=>{let $=g();console.log($)};import{existsSync as I,readFileSync as k,writeFileSync as t,rmSync as gQ}from"fs";import{join as v,dirname as yq,parse as s}from"path";import{execSync as F}from"child_process";import{platform as kQ}from"os";import{execSync as SQ}from"child_process";var z$=($)=>{try{return SQ(`which ${$}`,{stdio:"pipe",timeout:2000}),!0}catch{return!1}};var L={opencode:{check:()=>z$("opencode"),cli:!0,name:"OpenCode",installUrl:"https://opencode.ai/docs/installation",bootstrapCommand:"install-opencode-commands"},claude:{check:()=>z$("claude"),cli:!0,name:"Claude Code",installUrl:"https://code.claude.com/docs/en/installation",bootstrapCommand:"install-claude-commands"},gemini:{check:()=>z$("gemini"),cli:!0,name:"Gemini",installUrl:"https://cloud.google.com/gemini/docs/cli/install",bootstrapCommand:"install-gemini-commands"},codex:{check:()=>z$("codex"),cli:!0,name:"Codex",installUrl:"https://developers.openai.com/codex/docs/installation",bootstrapCommand:"install-codex-prompts"},cursor:{check:()=>!0,cli:!1,name:"Cursor",bootstrapCommand:"install-cursor-commands"},copilot:{check:()=>!0,cli:!1,name:"GitHub Copilot",bootstrapCommand:"install-copilot-prompts"}},fq=()=>{let $=[];if(L.copilot.check())$.push("github-copilot");if(L.cursor.check())$.push("cursor");if(L.claude.check())$.push("claude-code");if(L.opencode.check())$.push("opencode");if(L.gemini.check())$.push("gemini");if(L.codex.check())$.push("codex");return $};var uQ=()=>{let $=v(E.superpowersRepo,".agents","templates","TOOLS.md.template");if(I($))try{return k($,"utf8").trim()}catch(Q){return"### Using Tools\n\nUse your native skill tool. Fallback: `superpowers-agent find-skills`"}return""},K$=($,Q,q,X=!0)=>{let Z=I($);if(!Z&&!X)return{updated:!1,created:!1,skipped:!0};let Y=uQ(),W=Q.replace(/\{\{TOOL_MAPPINGS\}\}/g,Y),H=new Date().toISOString().split("T")[0];W=W.replace(/\{\{DATE\}\}/g,H),W=W.replace(/\{\{SUPERPOWERS_PATH\}\}/g,E.superpowersRepo);let K=`<!-- SUPERPOWERS_SKILLS_START -->
120
+ ${W}
121
+ <!-- SUPERPOWERS_SKILLS_END -->`;if(Z){let z=new Date().toISOString().split("T")[0],G=`${$}.backup-${z}`;try{F(`cp "${$}" "${G}"`,{stdio:"pipe"})}catch(J){return{updated:!1,error:!0,message:`Failed to backup: ${J.message}`}}let V;try{V=k($,"utf8")}catch(J){return{updated:!1,error:!0,message:`Failed to read: ${J.message}`}}let O="<!-- SUPERPOWERS_SKILLS_START -->",B="<!-- SUPERPOWERS_SKILLS_END -->",U;if(V.includes(O)&&V.includes(B)){let J=new RegExp(`${O}[\\s\\S]*?${B}`,"g");U=V.replace(J,K)}else{let J=V.match(/^#\s+.+$/m);if(J){let M=V.indexOf(`
122
+ `,J.index)+1;U=V.slice(0,M)+`
123
+ `+K+`
124
+ `+V.slice(M)}else U=K+`
125
+
126
+ `+V}try{return t($,U,"utf8"),{updated:!0,created:!1,backup:G}}catch(J){return{updated:!1,error:!0,message:`Failed to write: ${J.message}`}}}else try{let z=yq($);if(!I(z))F(`mkdir -p "${z}"`,{stdio:"pipe"});let O=`# ${s($).base.toUpperCase()}
127
+
128
+ `+K;return t($,O,"utf8"),{updated:!1,created:!0}}catch(z){return{updated:!1,created:!1,error:!0,message:`Failed to create: ${z.message}`}}},dQ=()=>{console.log("Installing Unix aliases...");let $=v(E.superpowersRepo,".agents","superpowers-agent"),Q=v(E.home,".local","bin"),q=v(Q,"superpowers-agent"),X=v(Q,"superpowers");if(!I($)){console.log("⚠️ superpowers-agent executable not found");return}if(!I(Q))try{F(`mkdir -p "${Q}"`,{stdio:"pipe"}),console.log(`✓ Created ${Q}`)}catch(Y){console.log(`⚠️ Failed to create ${Q}: ${Y.message}`);return}try{if(I(q))F(`rm "${q}"`,{stdio:"pipe"});F(`ln -s "${$}" "${q}"`,{stdio:"pipe"}),console.log(`✓ Created symlink: superpowers-agent -> ${$}`)}catch(Y){console.log(`⚠️ Failed to create superpowers-agent symlink: ${Y.message}`)}try{if(I(X))F(`rm "${X}"`,{stdio:"pipe"});F(`ln -s "${$}" "${X}"`,{stdio:"pipe"}),console.log(`✓ Created symlink: superpowers -> ${$}`)}catch(Y){console.log(`⚠️ Failed to create superpowers symlink: ${Y.message}`)}if(!(process.env.PATH||"").includes(Q))console.log(`
129
+ ⚠️ Warning: ${Q} is not in your PATH`),console.log(" Add this to your shell profile (~/.bashrc, ~/.zshrc, etc.):"),console.log(` export PATH="$HOME/.local/bin:$PATH"
130
+ `)},mQ=()=>{console.log("Installing Windows aliases..."),console.log("✓ Windows alias installation (implementation pending)")},m$=()=>{let $=kQ();if(console.log(`## Installing Universal Aliases
131
+ `),$==="win32")return mQ();else return dQ()},hQ=($)=>{let Q=v(E.superpowersRepo,".github","copilot-instructions.md"),q=v(E.superpowersRepo,"skills","meta","using-superpowers","SKILL.md"),X=v($,".github","copilot-instructions.md"),Z="<!-- SUPERPOWERS_-_INSTRUCTIONS_START -->",Y="<!-- SUPERPOWERS_-_INSTRUCTIONS_END -->";if(!I(Q))return{error:!0,message:"Source template not found"};if(!I(q))return{error:!0,message:"using-superpowers SKILL.md not found"};let W,H;try{W=k(Q,"utf8"),H=k(q,"utf8")}catch(G){return{error:!0,message:`Failed to read source files: ${G.message}`}}let K=W.replace("${content}",H);if(!K.includes("<!-- SUPERPOWERS_-_INSTRUCTIONS_START -->")||!K.includes("<!-- SUPERPOWERS_-_INSTRUCTIONS_END -->"))return{error:!0,message:"Template is missing required markers"};let z=yq(X);try{if(!I(z))F(`mkdir -p "${z}"`,{stdio:"pipe"})}catch(G){return{error:!0,message:`Failed to create .github directory: ${G.message}`}}if(I(X)){let G;try{G=k(X,"utf8")}catch(B){return{error:!0,message:`Failed to read existing file: ${B.message}`}}let V=new Date().toISOString().replace(/[:.]/g,"-"),O=`${X}.backup-${V}`;try{F(`cp "${X}" "${O}"`,{stdio:"pipe"})}catch(B){return{error:!0,message:`Failed to backup: ${B.message}`}}if(G.includes("<!-- SUPERPOWERS_-_INSTRUCTIONS_START -->")&&G.includes("<!-- SUPERPOWERS_-_INSTRUCTIONS_END -->")){let B=new RegExp("<!-- SUPERPOWERS_-_INSTRUCTIONS_START -->[\\s\\S]*?<!-- SUPERPOWERS_-_INSTRUCTIONS_END -->","g"),U=G.replace(B,K.trim());try{return t(X,U,"utf8"),{updated:!0,backup:O}}catch(J){return{error:!0,message:`Failed to update: ${J.message}`}}}else{let B=G.trimEnd()+`
132
+
133
+ `+K.trim()+`
134
+ `;try{return t(X,B,"utf8"),{updated:!0,backup:O}}catch(U){return{error:!0,message:`Failed to append: ${U.message}`}}}}else try{return t(X,K,"utf8"),{created:!0}}catch(G){return{error:!0,message:`Failed to create: ${G.message}`}}},Sq=()=>{R(),console.log(`# Setting up Superpowers skills for this project
135
+ `);let $=process.cwd(),Q=v($,".agents"),q=v(Q,"skills"),X=v($,"AGENTS.md"),Z=v(Q,"AGENTS.md"),Y=I(X)?X:Z,W=v(E.superpowersRepo,".agents","templates","AGENTS.md.template");if(!I(W)){console.log(`✗ Error: AGENTS.md template not found
136
+ Expected at: ${W}
137
+ Please update your Superpowers installation`);return}if(!I(Q))try{F(`mkdir -p "${Q}"`,{stdio:"pipe"}),console.log("✓ Created .agents/ directory")}catch(w){console.log(`✗ Failed to create .agents/ directory: ${w.message}`);return}else console.log("✓ .agents/ directory exists");if(!I(q))try{F(`mkdir -p "${q}"`,{stdio:"pipe"}),F(`touch "${v(q,".gitkeep")}"`,{stdio:"pipe"}),console.log("✓ Created .agents/skills/ directory")}catch(w){console.log(`✗ Failed to create skills directory: ${w.message}`);return}else console.log("✓ .agents/skills/ directory exists");let H=v(Q,"docs"),K=v(H,"SUPERPOWERS.md"),z=v(E.superpowersRepo,".agents","templates","SUPERPOWERS.md.template");if(!I(H))try{F(`mkdir -p "${H}"`,{stdio:"pipe"}),console.log("✓ Created .agents/docs/ directory")}catch(w){console.log(`⚠️ Failed to create docs directory: ${w.message}`)}else console.log("✓ .agents/docs/ directory exists");let G=I(Y);if(G){let w=new Date().toISOString().split("T")[0],G$=`${Y}.backup-${w}`;try{F(`cp "${Y}" "${G$}"`,{stdio:"pipe"}),console.log(`✓ Backed up existing AGENTS.md to ${s(G$).base}`)}catch(sq){console.log(`✗ Failed to backup AGENTS.md: ${sq.message}`);return}}let V;try{V=k(W,"utf8")}catch(w){console.log(`✗ Failed to read template: ${w.message}`);return}let O=g();if(V=V.replace(/\{\{VERSION\}\}/g,O),I(z))try{let w=k(z,"utf8"),G$=new Date().toISOString().split("T")[0];w=w.replace(/\{\{VERSION\}\}/g,O),w=w.replace(/\{\{DATE\}\}/g,G$),t(K,w,"utf8"),console.log("✓ Created .agents/docs/SUPERPOWERS.md")}catch(w){console.log(`⚠️ Failed to create SUPERPOWERS.md: ${w.message}`)}else console.log("⚠️ SUPERPOWERS.md.template not found");let B=[],U=v($,".github","copilot-instructions.md"),J=v(E.home,".github","copilot-instructions.md");if(I(U)||I(J)||L.copilot.check())B.push("github-copilot");let M=v($,"CLAUDE.md"),u=v(Q,"CLAUDE.md");if(I(M)||I(u)||L.claude.check())B.push("claude-code");let j=v($,"GEMINI.md"),a$=v(Q,"GEMINI.md");if(I(j)||I(a$)||L.gemini.check())B.push("gemini");if(L.cursor.check())B.push("cursor");if(L.opencode.check())B.push("opencode");if(L.codex.check())B.push("codex");console.log(`
138
+ Detected platforms for project: ${B.join(", ")||"none"}
139
+ `);let rq=B.filter((w)=>["github-copilot","cursor","opencode","codex"].includes(w)),e=K$(Y,V,rq,!G);if(e.created)console.log(`✓ Created AGENTS.md with platform tool mappings (${Y===X?"root":".agents/"})`);else if(e.updated)console.log(`✓ Updated AGENTS.md with platform tool mappings (${Y===X?"root":".agents/"})`);else if(e.error)console.log("⚠️ Failed to update AGENTS.md");let F$=I(M)?M:u,P=K$(F$,V,["claude-code"],!1);if(P.created)console.log(`✓ Created CLAUDE.md with Claude Code tool mappings (${F$===M?"root":".agents/"})`);else if(P.updated){if(console.log(`✓ Updated CLAUDE.md with Claude Code tool mappings (${F$===M?"root":".agents/"})`),P.backup)console.log(` Backed up to ${s(P.backup).base}`)}else if(P.skipped)console.log("ℹ️ Skipped CLAUDE.md (does not exist)");else if(P.error)console.log("⚠️ Failed to update CLAUDE.md");let x$=I(j)?j:a$,f=K$(x$,V,["gemini"],!1);if(f.created)console.log(`✓ Created GEMINI.md with Gemini tool mappings (${x$===j?"root":".agents/"})`);else if(f.updated){if(console.log(`✓ Updated GEMINI.md with Gemini tool mappings (${x$===j?"root":".agents/"})`),f.backup)console.log(` Backed up to ${s(f.backup).base}`)}else if(f.skipped)console.log("ℹ️ Skipped GEMINI.md (does not exist)");else if(f.error)console.log("⚠️ Failed to update GEMINI.md");let B$=v($,".github","copilot-instructions.md"),D={skipped:!0};if(B.includes("github-copilot")){if(D=hQ($),D.created)console.log("✓ Created .github/copilot-instructions.md with Superpowers instructions");else if(D.updated){if(console.log("✓ Updated .github/copilot-instructions.md with Superpowers instructions"),D.backup)console.log(` Backed up to ${s(D.backup).base}`)}else if(D.error)console.log(`⚠️ Failed to update .github/copilot-instructions.md: ${D.message||""}`)}else console.log("ℹ️ Skipped .github/copilot-instructions.md (GitHub Copilot not detected)");let l$=!I(X)&&!I(Z);if(I(B$)&&l$){let w=K$(B$,V,["github-copilot"],!1);if(w.updated){if(console.log("✓ Updated .github/copilot-instructions.md with GitHub Copilot tool mappings"),w.backup)console.log(` Backed up to ${s(w.backup).base}`)}else if(w.error)console.log("⚠️ Failed to update .github/copilot-instructions.md with tool mappings")}else if(I(B$)&&!l$)console.log("ℹ️ Skipped .github/copilot-instructions.md tool mappings (AGENTS.md exists, using that instead)");else if(!I(B$)&&!B.includes("github-copilot"))console.log("ℹ️ Skipped .github/copilot-instructions.md tool mappings (does not exist)");console.log(`
140
+ ## Syncing Project Skill Symlinks
141
+ `);let n=Dq({projectRoot:$});if(n.created>0)console.log(`
142
+ ✓ Created ${n.created} project skill symlink(s)`);else if(n.existed>0)console.log("ℹ️ Project skill symlinks already exist");else if(n.errors.length>0)console.log("⚠️ Some symlinks could not be created");else console.log("ℹ️ No agent directories detected for symlinking");let y=`
143
+ # Setup complete!
144
+
145
+ Your project now has:
146
+ - .agents/ directory structure`;if(e.updated||e.created)y+=`
147
+ - AGENTS.md with universal skills instructions`;if(P.updated||P.created)y+=`
148
+ - CLAUDE.md with Claude Code skills instructions`;if(f.updated||f.created)y+=`
149
+ - GEMINI.md with Gemini skills instructions`;if(D.updated||D.created)y+=`
150
+ - .github/copilot-instructions.md with Superpowers instructions`;if(n.created>0)y+=`
151
+ - ${n.created} project skill symlink(s) to agent directories`;y+=`
152
+ - .agents/skills/ ready for project-specific skills`,y+=`
153
+ - .agents/docs/SUPERPOWERS.md for detailed reference
154
+ `,console.log(y)},pQ=()=>{let $=[...["brainstorming.prompt.md","execute-plan.prompt.md","write-plan.prompt.md","setup-skills.prompt.md","create-meta-prompt.md","finding-skills.prompt.md","skills.prompt.md","use-skill.prompt.md","using-a-skill.prompt.md"].map((q)=>v(E.vscodeUserDir,"prompts",q)),...["brainstorming.md","create-meta-prompt.md","execute-plan.md","finding-skills.md","skills.md","use-skill.md","using-a-skill.md","write-plan.md","setup-skills.md"].map((q)=>v(E.home,".cursor","commands",q)),...["brainstorm.md","create-meta-prompt.md","execute-plan.md","finding-skills.md","skills.md","use-skill.md","using-a-skill.md","write-plan.md","setup-skills.md"].map((q)=>v(E.home,".claude","commands",q)),...["brainstorm.md","create-meta-prompt.md","execute-plan.md","finding-skills.md","skills.md","use-skill.md","using-a-skill.md","write-plan.md","setup-skills.md"].map((q)=>v(E.home,".config","opencode","command",q)),...["brainstorm.md","create-meta-prompt.md","execute-plan.md","finding-skills.md","skills.md","use-skill.md","using-a-skill.md","write-plan.md","setup-skills.md"].map((q)=>v(E.home,".codex","prompts",q)),...["brainstorm-with-superpowers.toml","create-meta-prompt.toml","execute-plan.toml","finding-skills.toml","skills.toml","use-skill.toml","using-a-skill.toml","write-plan.toml","setup-skills.toml"].map((q)=>v(E.home,".gemini","commands",q))],Q=0;for(let q of $)if(I(q))try{gQ(q),Q++}catch(X){console.log(` ⚠️ Could not remove ${q}: ${X.message}`)}if(Q>0)console.log(`✓ Removed ${Q} legacy prompt/command file${Q!==1?"s":""}`);else console.log("✓ No legacy prompt/command files found")},gq=()=>{R(),console.log(`# Superpowers Bootstrap for Agents
155
+ # ==================================
156
+ `);let $=process.argv.includes("--no-update"),q=new Set(["copilot","cursor","codex","gemini","claude","opencode"].filter((W)=>process.argv.includes(`--force-${W}`))),X=q.size>0;if(!$){let W=Z$(),H=O$();if(H.error)console.log(`## Update Check
157
+
158
+ ⚠️ Could not check for updates (network issue)
159
+
160
+ ---
161
+ `);else if(H.hasUpdates)if(W.auto_update&&!H.hasLocalChanges&&H$())console.log(`## Auto-Update
162
+ `),w$(),console.log(`
163
+ ---
164
+ `);else{if(console.log(`## Update Available
165
+ `),H.hasLocalChanges)console.log("⚠️ Your superpowers installation is behind the latest version.\n Cannot auto-update: local changes detected\n To update, commit/stash changes then run: `superpowers-agent update`");else if(!H$())console.log("⚠️ Your superpowers installation is behind the latest version.\n Cannot auto-update: not on main branch\n To update, switch to main then run: `superpowers-agent update`");else console.log("⚠️ Your superpowers installation is behind the latest version.\n To update, run: `superpowers-agent update`\n Or enable auto-update: `superpowers-agent config-set auto_update true`");console.log(`
166
+ ---
167
+ `)}}if(!X)m$(),console.log(`---
168
+ `);if(!X)console.log(`## Cleaning Up Legacy Files
169
+ `),pQ(),console.log(`
170
+ ---
171
+ `);if(!X||q.has("copilot"))console.log(`## GitHub Copilot Integration
172
+ `),console.log("✓ Skill symlinks handled in sync step below"),console.log(`
173
+ ---
174
+ `);if(!X||q.has("cursor"))console.log(`## Cursor Integration
175
+ `),i(),console.log(`
176
+ ---
177
+ `);if(!X||q.has("codex")){if(console.log(`## OpenAI Codex Integration
178
+ `),!L.codex.check())console.log(`⚠️ Skipped (${L.codex.name} CLI not detected)
179
+ \uD83D\uDCA1 To enable Codex integration:
180
+ 1. Install Codex: ${L.codex.installUrl}
181
+ 2. Run: superpowers-agent ${L.codex.bootstrapCommand}`);else console.log("✓ Skill symlinks handled in sync step below");console.log(`
182
+ ---
183
+ `)}if(!X||q.has("gemini")){if(console.log(`## Gemini Integration
184
+ `),!L.gemini.check())console.log(`⚠️ Skipped (${L.gemini.name} CLI not detected)
185
+ \uD83D\uDCA1 To enable Gemini integration:
186
+ 1. Install Gemini: ${L.gemini.installUrl}
187
+ 2. Run: superpowers-agent ${L.gemini.bootstrapCommand}`);else console.log("✓ Skill symlinks handled in sync step below");console.log(`
188
+ ---
189
+ `)}if(!X||q.has("claude")){if(console.log(`## Claude Code Integration
190
+ `),!L.claude.check())console.log(`⚠️ Skipped (${L.claude.name} CLI not detected)
191
+ \uD83D\uDCA1 To enable Claude Code integration:
192
+ 1. Install Claude Code: ${L.claude.installUrl}
193
+ 2. Run: superpowers-agent ${L.claude.bootstrapCommand}`);else console.log("✓ Skill symlinks handled in sync step below");console.log(`
194
+ ---
195
+ `)}if(!X||q.has("opencode")){if(console.log(`## OpenCode Integration
196
+ `),L.opencode.check())W$();else console.log(`⚠️ Skipped (${L.opencode.name} CLI not detected)
197
+ \uD83D\uDCA1 To enable OpenCode integration:
198
+ 1. Install OpenCode: ${L.opencode.installUrl}
199
+ 2. Run: superpowers-agent ${L.opencode.bootstrapCommand}`);console.log(`
200
+ ---
201
+ `)}if(!X){console.log(`## Generating Platform-Specific Files
202
+ `);let W=fq();console.log(`Detected platforms: ${W.join(", ")||"none"}
203
+ `);let H=v(E.superpowersRepo,".agents","templates","AGENTS.md.template"),K="";try{K=k(H,"utf8")}catch(z){console.log(`⚠️ Could not read AGENTS.md template: ${z.message}
204
+ `)}if(K){let z=g();K=K.replace(/\{\{VERSION\}\}/g,z);let G=v(E.home,".agents","AGENTS.md"),V=K$(G,K,W,!0);if(V.created)console.log(`✓ Created ${G}`);else if(V.updated)console.log(`✓ Updated ${G}`)}console.log(`
205
+ ---
206
+ `)}console.log(`## Syncing Skill Symlinks
207
+ `);let Z=process.argv.includes("--force");v$({force:Z,forceAgents:q}),console.log(`
208
+ ## Syncing Repo Skills -> ~/.agents/skills/
209
+ `);let Y=J$();if(Y.created>0||Y.updated>0)console.log(` ✓ ${Y.created} created, ${Y.updated} updated, ${Y.existed} already current`);else if(Y.errors.length>0)for(let W of Y.errors)console.log(` ⚠️ ${W}`);else console.log(` ✓ ${Y.existed} skill symlinks already up to date`);console.log(`
210
+ ---
211
+ `),console.log(`# Bootstrap Complete!
212
+ `),console.log("✓ All integrations installed"),console.log("✓ Skills system ready"),console.log(`✓ Skill symlinks synced
213
+ `),console.log("Next steps:"),console.log(" - Run `superpowers-agent find-skills` to see available skills"),console.log(" - Run `superpowers-agent setup-skills` in your project directory")};import{existsSync as x,readFileSync as M$,mkdirSync as eQ,rmSync as $X,cpSync as qX}from"fs";import{join as A,dirname as N$,parse as b$,sep as QX}from"path";import{execSync as C}from"child_process";import{homedir as c}from"os";import{readFileSync as nQ,existsSync as c$,unlinkSync as aQ,lstatSync as lQ,mkdirSync as oQ}from"fs";import{join as iQ,dirname as rQ}from"path";import{join as T$}from"path";import{homedir as cQ}from"os";var h$={github:{name:"github",sourceDir:".github/agents",sourceExt:".agent.md",getDestDir:()=>T$(E.vscodeUserDir,"prompts"),destExt:".agent.md"},opencode:{name:"opencode",sourceDir:".opencode/agents",sourceExt:".md",getDestDir:()=>T$(cQ(),".config","opencode","agents"),destExt:".md"}};function kq($,Q,q){let X=h$[Q];if(!X)return null;return T$($,X.sourceDir,`${q}${X.sourceExt}`)}function uq($,Q){let q=h$[$];if(!q)return null;return T$(q.getDestDir(),`${Q}${q.destExt}`)}function p$(){return Object.keys(h$)}function sQ($){if(!$||typeof $!=="object")return{valid:!1,error:"agents.json must be a JSON object"};if(!$.version||typeof $.version!=="string")return{valid:!1,error:'agents.json must have a "version" string field'};if(!$.agents||typeof $.agents!=="object")return{valid:!1,error:'agents.json must have an "agents" object field'};let Q=p$(),q=[];for(let[X,Z]of Object.entries($.agents)){if(!Q.includes(X)){q.push(X);continue}if(!Array.isArray(Z))return{valid:!1,error:`agents.${X} must be an array of agent names`};for(let Y of Z)if(typeof Y!=="string")return{valid:!1,error:`agents.${X} must contain only string agent names`}}return{valid:!0,data:$,skippedPlatforms:q}}function tQ($,Q){if(!c$($))return{installed:!1,error:`Source file not found: ${$}`};if(c$(Q))try{if(!lQ(Q).isSymbolicLink())aQ(Q)}catch(X){}oQ(rQ(Q),{recursive:!0});let q=E$($,Q);if(q.error)return{installed:!1,error:q.error};return{installed:!0}}function n$($,Q={}){let q=iQ($,"agents.json");if(!c$(q))return;let X;try{X=JSON.parse(nQ(q,"utf8"))}catch(B){console.log(`
214
+ ⚠ Could not parse agents.json: ${B.message}`);return}let Z=sQ(X);if(!Z.valid){console.log(`
215
+ ⚠ Invalid agents.json: ${Z.error}`);return}for(let B of Z.skippedPlatforms)console.log(` ⚠ Skipping unknown platform: ${B}`);let Y=X.repository||"unknown",W=X.version,H=Q.isUpdate?"Updating":"Installing",K=Q.isUpdate?"Updated":"Installed";console.log(`
216
+ \uD83D\uDCE6 Found agents.json (${Y} v${W})`);let z=p$(),G=0,V=0,O=[];for(let[B,U]of Object.entries(X.agents)){if(!z.includes(B))continue;console.log(`
217
+ ${H} ${B} agents:`);for(let J of U){let M=kq($,B,J),u=uq(B,J),j=tQ(M,u);if(j.installed)console.log(` ✓ ${J}`),O.push({platformKey:B,agentName:J,sourcePath:M,destPath:u}),G++;else console.log(` ✗ ${J}: ${j.error}`),V++}}if(O.length>0){let B=h(!0);if(!B.installedAgents)B.installedAgents={};if(!B.installedAgents[Y])B.installedAgents[Y]={version:W,agents:{}};B.installedAgents[Y].version=W;for(let{platformKey:U,agentName:J,sourcePath:M,destPath:u}of O){if(!B.installedAgents[Y].agents[U])B.installedAgents[Y].agents[U]={};B.installedAgents[Y].agents[U][J]={source:M,destination:u,installedAt:new Date().toISOString()}}a(B,!0)}if(G>0)console.log(`
218
+ ${K} ${G} agent(s)${V>0?` (${V} failed)`:""}`)}var dq=($,Q)=>{if(Q.type==="local"){let X=$;for(let Z=0;Z<10;Z++){if(x(A(X,"agents.json")))return X;let Y=N$(X);if(Y===X)break;X=Y}return $}let q=A(".agents","tmp");if($.includes(q)){let X=$.indexOf(q),Y=$.substring(X+q.length+1).split(QX)[0];return A($.substring(0,X),".agents","tmp",Y)}return $},mq=($,Q)=>{let q=A(c(),".agents","repos"),X=Q.replace(/^@/,"").replace(/[^a-zA-Z0-9_-]/g,"_"),Z=A(q,X);try{if(eQ(q,{recursive:!0}),x(Z))$X(Z,{recursive:!0,force:!0});return qX($,Z,{recursive:!0}),Z}catch(Y){return console.log(` Warning: Could not persist repository for agents: ${Y.message}`),null}},hq=($)=>{let Q=$.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)\/(.+)$/);if(Q){let[,Z,Y,W,H]=Q;return{type:"git-tree",repoUrl:`https://github.com/${Z}/${Y}.git`,branch:W,path:H,original:$}}let q=$.match(/^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?$/);if(q){let[,Z,Y]=q;return{type:"git-repo",repoUrl:`git@github.com:${Z}/${Y}.git`,branch:null,path:null,original:$}}let X=$.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)(?:\.git)?$/);if(X){let[,Z,Y]=X;return{type:"git-repo",repoUrl:`https://github.com/${Z}/${Y}.git`,branch:null,path:null,original:$}}if(x($))return{type:"local",path:$,original:$};return null},pq=($)=>{let Q=$.includes("--global")||$.includes("-g"),q=$.includes("--project")||$.includes("-p");if(Q)return A(c(),".agents","skills");if(q)return A(process.cwd(),".agents","skills");let X=A(process.cwd(),".agents","config.json"),Z=A(c(),".agents","config.json");for(let Y of[X,Z])if(x(Y))try{if(JSON.parse(M$(Y,"utf8")).installLocation==="project")return A(process.cwd(),".agents","skills")}catch(W){}return A(c(),".agents","skills")},cq=($,Q)=>{let q=A(c(),".agents","tmp",`skill-install-${Date.now()}`);try{if(C(`mkdir -p "${q}"`,{stdio:"pipe"}),Q)C(`git clone --branch ${Q} --depth 1 "${$}" "${q}"`,{stdio:"pipe",timeout:30000});else C(`git clone --depth 1 "${$}" "${q}"`,{stdio:"pipe",timeout:30000});return q}catch(X){try{C(`rm -rf "${q}"`,{stdio:"pipe"})}catch{}throw Error(`Failed to clone repository: ${X.message}`)}},C$=($)=>{let Q=A($,"skill.json");if(!x(Q))return null;try{let q=M$(Q,"utf8");return JSON.parse(q)}catch(q){throw Error(`Failed to read skill.json: ${q.message}`)}},A$=($,Q,q,X)=>{let Z=A($,Q);if(!x(Z)){X.errors.push(`Skill directory not found: ${Q}`);return}let Y=C$(Z);if(!Y){X.errors.push(`No skill.json found in: ${Q}`);return}let W=Y.name||Q,H=A(q,W),K=N$(H);try{C(`mkdir -p "${K}"`,{stdio:"pipe"})}catch(z){X.errors.push(`Failed to create directory ${K}: ${z.message}`);return}try{if(x(H))C(`rm -rf "${H}"`,{stdio:"pipe"});C(`cp -R "${Z}" "${H}"`,{stdio:"pipe"}),X.installed.push({name:W,path:H,title:Y.title||Y.description||W})}catch(z){X.errors.push(`Failed to install ${Q}: ${z.message}`)}},nq=()=>{let $=process.argv.slice(3),Q=$.find((z)=>!z.startsWith("-")),q=$.filter((z)=>z.startsWith("-"));if(!Q){console.log(`Usage: superpowers-agent add <url-or-path|@alias> [skill-path] [options]
219
+
220
+ Options:
221
+ --global, -g Install skills globally in ~/.agents/skills/ (default)
222
+ --project, -p Install skills in current project's .agents/skills/
223
+
224
+ Examples:
225
+ superpowers-agent add https://github.com/example/skills
226
+ superpowers-agent add https://github.com/example/repo/tree/main/skills
227
+ superpowers-agent add ~/my-local-skills
228
+ superpowers-agent add https://github.com/example/skills --project
229
+ superpowers-agent add ~/my-local-skills --global
230
+ superpowers-agent add @myrepo path/to/skill
231
+ superpowers-agent add @myrepo path/to/skills --project
232
+
233
+ Description:
234
+ Installs skill(s) from a Git repository, local directory, or repository alias.
235
+ Supports repositories with single or multiple skills.
236
+ Reads skill.json to determine skill names and installation paths.
237
+
238
+ Repository aliases can be added using:
239
+ superpowers-agent add-repository <git-url> [--as=@alias]`);return}console.log(`Installing skill(s)...
240
+ `);let X=null,Z=null;if(Q.startsWith("@")){let z=Q;Z=$.find((B,U)=>U>0&&!B.startsWith("-")&&B!==z);let G=S(!1),V=S(!0);if(G[z])X=G[z],console.log(`Using project repository alias: ${z}`);else if(V[z])X=V[z],console.log(`Using global repository alias: ${z}`);else{console.log(`Error: Repository alias not found: ${z}`),console.log(`
241
+ Available aliases:`);let B={...V,...G};if(Object.keys(B).length===0)console.log(" (none)"),console.log(`
242
+ Add a repository using:`),console.log(" superpowers-agent add-repository <git-url>");else for(let[U,J]of Object.entries(B))console.log(` ${U} -> ${J}`);return}let O=x(X);if(Z)if(O)Q=A(X,Z),console.log(`Repository path: ${X}`),console.log(`Skill path: ${Z}
243
+ `);else Q=`${X}/tree/main/${Z}`,console.log(`Repository URL: ${X}`),console.log(`Skill path: ${Z}
244
+ `);else if(Q=X,O)console.log(`Repository path: ${X}
245
+ `);else console.log(`Repository URL: ${X}
246
+ `)}let Y=hq(Q);if(!Y){console.log(`Error: Invalid URL or path not found: ${Q}`);return}let W=pq(q);console.log(`Install location: ${W}
247
+ `);let H,K=!1;try{if(Y.type==="git-repo"||Y.type==="git-tree"){if(console.log(`Cloning repository: ${Y.repoUrl}`),Y.branch)console.log(`Branch: ${Y.branch}`);if(H=cq(Y.repoUrl,Y.branch),K=!0,Y.path){if(H=A(H,Y.path),!x(H))throw Error(`Path not found in repository: ${Y.path}`)}console.log("")}else H=Y.path;let z=C$(H);if(!z)throw Error("No skill.json found in source directory");let G={installed:[],errors:[],source:Y.original};if(z.skills&&Array.isArray(z.skills)){console.log(`Found ${z.skills.length} skill(s) to install
248
+ `);for(let B of z.skills)A$(H,B,W,G)}else{let B=z.name||b$(H).base;A$(N$(H),b$(H).base,W,G)}let V=dq(H,Y),O=A(V,"agents.json");if(x(O)){let B=V;if(K){let U;try{U=JSON.parse(M$(O,"utf8"))}catch{}let J=U?.repository||Y.original,M=mq(V,J);if(M)B=M}n$(B,{isUpdate:!1})}if(K&&H)try{let B=H.split("/.agents/tmp/")[0]+"/.agents/tmp/"+H.split("/.agents/tmp/")[1].split("/")[0];C(`rm -rf "${B}"`,{stdio:"pipe"})}catch{}if(console.log(`
249
+ **Successfully installed skills:**`),console.log(`- Source: ${G.source}`),G.installed.length>0)for(let B of G.installed)console.log(` - Installed: ${B.name} at ${B.path}`),console.log(` ${B.title}`);if(G.errors.length>0){console.log(`
250
+ **Errors:**`);for(let B of G.errors)console.log(` - ${B}`)}if(G.installed.length===0&&G.errors.length===0)console.log(" No skills were installed");if(G.installed.length>0)console.log(`
251
+ **Syncing skill symlinks...**`),d$()}catch(z){if(K&&H)try{let G=H.split("/.agents/tmp/")[0]+"/.agents/tmp/"+H.split("/.agents/tmp/")[1].split("/")[0];C(`rm -rf "${G}"`,{stdio:"pipe"})}catch{}console.log(`
252
+ Error: ${z.message}`)}},aq=()=>{let $=process.argv.slice(3),Q=$.find((z)=>!z.startsWith("-")),q=$.filter((z)=>z.startsWith("-"));if(!Q){console.log(`Usage: superpowers-agent pull <url-or-path|@alias> [skill-path] [options]
253
+
254
+ Options:
255
+ --global, -g Update skills globally in ~/.agents/skills/ (default)
256
+ --project, -p Update skills in current project's .agents/skills/
257
+
258
+ Examples:
259
+ superpowers-agent pull https://github.com/example/skills
260
+ superpowers-agent pull https://github.com/example/repo/tree/main/skills
261
+ superpowers-agent pull ~/my-local-skills
262
+ superpowers-agent pull https://github.com/example/skills --project
263
+ superpowers-agent pull ~/my-local-skills --global
264
+ superpowers-agent pull @myrepo
265
+ superpowers-agent pull @myrepo path/to/skill
266
+ superpowers-agent pull @myrepo path/to/skills --project
267
+
268
+ Description:
269
+ Updates or adds skill(s) from a Git repository, local directory, or repository alias.
270
+ If skills already exist, they will be updated (replaced).
271
+ If skills don't exist, they will be added.
272
+ Supports repositories with single or multiple skills.
273
+ Reads skill.json to determine skill names and installation paths.
274
+
275
+ Repository aliases can be added using:
276
+ superpowers-agent add-repository <git-url> [--as=@alias]`);return}console.log(`Updating skill(s)...
277
+ `);let X=null,Z=null;if(Q.startsWith("@")){let z=Q;Z=$.find((B,U)=>U>0&&!B.startsWith("-")&&B!==z);let G=S(!1),V=S(!0);if(G[z])X=G[z],console.log(`Using project repository alias: ${z}`);else if(V[z])X=V[z],console.log(`Using global repository alias: ${z}`);else{console.log(`Error: Repository alias not found: ${z}`),console.log(`
278
+ Available aliases:`);let B={...V,...G};if(Object.keys(B).length===0)console.log(" (none)"),console.log(`
279
+ Add a repository using:`),console.log(" superpowers-agent add-repository <git-url>");else for(let[U,J]of Object.entries(B))console.log(` ${U} -> ${J}`);return}let O=x(X);if(Z)if(O)Q=A(X,Z),console.log(`Repository path: ${X}`),console.log(`Skill path: ${Z}
280
+ `);else Q=`${X}/tree/main/${Z}`,console.log(`Repository URL: ${X}`),console.log(`Skill path: ${Z}
281
+ `);else if(Q=X,O)console.log(`Repository path: ${X}
282
+ `);else console.log(`Repository URL: ${X}
283
+ `)}let Y=hq(Q);if(!Y){console.log(`Error: Invalid URL or path not found: ${Q}`);return}let W=pq(q);console.log(`Install location: ${W}
284
+ `);let H,K=!1;try{if(Y.type==="git-repo"||Y.type==="git-tree"){if(console.log(`Cloning repository: ${Y.repoUrl}`),Y.branch)console.log(`Branch: ${Y.branch}`);if(H=cq(Y.repoUrl,Y.branch),K=!0,Y.path){if(H=A(H,Y.path),!x(H))throw Error(`Path not found in repository: ${Y.path}`)}console.log("")}else H=Y.path;let z=C$(H);if(!z)throw Error("No skill.json found in source directory");let G={installed:[],errors:[],source:Y.original};if(z.skills&&Array.isArray(z.skills)){console.log(`Found ${z.skills.length} skill(s) to update
285
+ `);for(let B of z.skills)A$(H,B,W,G)}else{let B=z.name||b$(H).base;A$(N$(H),b$(H).base,W,G)}let V=dq(H,Y),O=A(V,"agents.json");if(x(O)){let B=V;if(K){let U;try{U=JSON.parse(M$(O,"utf8"))}catch{}let J=U?.repository||Y.original,M=mq(V,J);if(M)B=M}n$(B,{isUpdate:!0})}if(K&&H)try{let B=H.split("/.agents/tmp/")[0]+"/.agents/tmp/"+H.split("/.agents/tmp/")[1].split("/")[0];C(`rm -rf "${B}"`,{stdio:"pipe"})}catch{}if(console.log(`
286
+ **Successfully updated skills:**`),console.log(`- Source: ${G.source}`),G.installed.length>0)for(let B of G.installed)console.log(` - Updated: ${B.name} at ${B.path}`),console.log(` ${B.title}`);if(G.errors.length>0){console.log(`
287
+ **Errors:**`);for(let B of G.errors)console.log(` - ${B}`)}if(G.installed.length===0&&G.errors.length===0)console.log(" No skills were updated");if(G.installed.length>0)console.log(`
288
+ **Syncing skill symlinks...**`),d$()}catch(z){if(K&&H)try{let G=H.split("/.agents/tmp/")[0]+"/.agents/tmp/"+H.split("/.agents/tmp/")[1].split("/")[0];C(`rm -rf "${G}"`,{stdio:"pipe"})}catch{}console.log(`
289
+ Error: ${z.message}`)}},lq=()=>{let $=process.argv.slice(3),Q=$.find((z)=>!z.startsWith("-")),q=$.filter((z)=>z.startsWith("-"));if(!Q){console.log(`Usage: superpowers-agent add-repository <git-url> [options]
290
+
291
+ Options:
292
+ --global, -g Add repository globally in ~/.agents/config.json (default)
293
+ --project, -p Add repository in current project's .agents/config.json
294
+ --as=<alias> Specify custom alias for the repository
295
+
296
+ Examples:
297
+ superpowers-agent add-repository https://github.com/example/skills.git
298
+ superpowers-agent add-repository https://github.com/example/skills.git --as=@myskills
299
+ superpowers-agent add-repository https://github.com/example/skills.git --project
300
+ superpowers-agent add-repository https://github.com/example/skills.git --as=@custom --global
301
+
302
+ Description:
303
+ Adds a skill repository alias to your configuration.
304
+ The repository's skill.json will be read to determine the default alias.
305
+ Use --as to specify a custom alias.
306
+ After adding, you can install skills using: superpowers-agent add @alias path/to/skill`);return}console.log(`Adding repository...
307
+ `);let X=q.some((z)=>z==="--global"||z==="-g"),Z=q.some((z)=>z==="--project"||z==="-p"),Y=q.find((z)=>z.startsWith("--as=")),W=Y?Y.split("=")[1]:null,H=Z?!1:!0,K;try{console.log(`Cloning repository: ${Q}`),K=A(c(),".agents","tmp",`repo-add-${Date.now()}`),C(`mkdir -p "${K}"`,{stdio:"pipe"}),C(`git clone --depth 1 "${Q}" "${K}"`,{stdio:"pipe",timeout:30000}),console.log("");let z=C$(K);if(!z)throw Error("No skill.json found in repository");let G;if(W)G=W;else if(z.repository)G=z.repository;else{let B=Q.match(/\/([^/]+?)(?:\.git)?$/);if(B)G="@"+B[1];else throw Error("Could not determine repository alias. Use --as=@alias to specify manually.")}Hq(G,Q,H),C(`rm -rf "${K}"`,{stdio:"pipe"});let V=H?"globally":"in project",O=H?A(c(),".agents","config.json"):A(process.cwd(),".agents","config.json");console.log(`✓ Repository added ${V}`),console.log(` Alias: ${G}`),console.log(` URL: ${Q}`),console.log(` Config: ${O}`),console.log(`
308
+ You can now install skills using:`),console.log(` superpowers-agent add ${G} <path-to-skill>`)}catch(z){if(K)try{C(`rm -rf "${K}"`,{stdio:"pipe"})}catch{}console.log(`
309
+ Error: ${z.message}`)}};import{dirname as XX}from"path";var oq=($)=>{if(!$){console.log(`Usage: superpowers-agent use-skill <skill-name>
310
+
311
+ Examples (smart matching):
312
+ superpowers-agent use-skill brainstorming # Matches superpowers:collaboration/brainstorming
313
+ superpowers-agent use-skill collaboration/brainstorming # More specific suffix
314
+ superpowers-agent use-skill test-driven-development # Matches superpowers:testing/test-driven-development
315
+
316
+ Examples (explicit paths):
317
+ superpowers-agent use-skill superpowers:collaboration/brainstorming # Full superpowers skill path
318
+ superpowers-agent use-skill claude:email-assistant # Full claude skill path
319
+ superpowers-agent use-skill my-custom-skill # Project skill
320
+
321
+ Smart matching:
322
+ - Type just the skill name or any suffix of the path
323
+ - Priority: .agents/skills/ > .claude/skills/ > ~/.agents/skills/ > ~/.agents/superpowers/skills/
324
+ - If multiple skills match at same priority, you'll see them with descriptions`);return}let Q=d($);if(!Q){console.log(`Error: Skill not found: ${$}
325
+
326
+ Available skills:`),console.log("Run: superpowers-agent find-skills");return}let{skillFile:q,sourceType:X,actualSkillPath:Z}=Q;try{let{content:Y,frontmatter:W}=s$(q),H=Y$[X].prefix+Z,K=XX(q),z=`# ${W.name||H}`;if(W.description)z+=`
327
+ # ${W.description}`;if(W.whenToUse)z+=`
328
+ # When to use: ${W.whenToUse}`;z+=`
329
+ # Supporting tools and docs are in ${K}
330
+ # ============================================
331
+
332
+ ${Y}`,console.log(z)}catch(Y){console.log(Y.message)}};var iq={bootstrap:gq,version:Pq,"check-updates":()=>{jq().catch(($)=>{console.error($.message),process.exit(1)})},update:()=>{let $=process.argv.includes("--no-reinstall");w$({skipReinstall:$})},"config-get":Lq,"config-set":Iq,"setup-skills":Sq,"use-skill":()=>oq(process.argv[3]),execute:Vq,"find-skills":l,add:nq,"add-repository":lq,"list-repositories":vq,pull:aq,dir:Oq,path:_q,"get-helpers":Uq,"install-cursor-hooks":i,"install-aliases":m$,default:()=>{console.log(`Superpowers for Agents
333
+ Usage:
334
+ superpowers-agent bootstrap [--no-update] [--force] # Run complete bootstrap
335
+ superpowers-agent version # Show current version
336
+ superpowers-agent check-updates # Check for updates
337
+ superpowers-agent update [--no-reinstall] # Update to latest version
338
+ superpowers-agent config-get # Show configuration
339
+ superpowers-agent config-set <key> <value> # Update configuration
340
+ superpowers-agent setup-skills # Initialize project skills
341
+ superpowers-agent use-skill <skill-name> # Load a skill
342
+ superpowers-agent find-skills # List available skills
343
+ superpowers-agent add <url-or-path|@alias> [path] [options] # Install skills
344
+ superpowers-agent add-repository <git-url> [--as=@alias] [opts] # Add repository alias
345
+ superpowers-agent list-repositories # List configured repository aliases
346
+ superpowers-agent pull <url-or-path|@alias> [path] [options] # Update skills
347
+ superpowers-agent dir <skill-name> # Get skill directory
348
+ superpowers-agent path <skill-name> # Get skill file path
349
+ superpowers-agent execute <skill-name> # Execute a skill
350
+ superpowers-agent get-helpers <skill> <search-term> # Get helper file path
351
+ superpowers-agent install-cursor-hooks # Install Cursor hooks
352
+ superpowers-agent install-aliases # Install universal aliases (superpowers, superpowers-agent)
353
+
354
+ Documentation: https://github.com/complexthings/superpowers
355
+ `)}},YX=process.argv[2]||"default",ZX=iq[YX]||iq.default;try{ZX()}catch($){console.error(`Error: ${$.message}`),process.exit(1)}
@@ -0,0 +1,42 @@
1
+ # Superpowers Bootstrap for Agents
2
+
3
+ <EXTREMELY_IMPORTANT>
4
+ You have superpowers. Superpowers teach you new skills and capabilities.
5
+
6
+ **Tool for running skills:**
7
+ - `superpowers-agent execute <skill-name>`
8
+
9
+ **Platform-specific tool mappings:**
10
+ Tool mappings for your detected platforms are automatically included in your platform-specific configuration files:
11
+ - GitHub Copilot: `~/.github/copilot-instructions.md`
12
+ - Cursor: Included in `AGENTS.md`
13
+ - Claude Code: `~/.claude/CLAUDE.md`
14
+ - Gemini: `~/.gemini/GEMINI.md`
15
+ - OpenCode: `~/.config/opencode/AGENTS.md`
16
+ - Codex: `~/.codex/AGENTS.md`
17
+
18
+ **Skills naming:**
19
+ - Project skills: `skill-name` (from .agents/skills/ - highest priority)
20
+ - Claude skills: `claude:skill-name` (from .claude/skills/)
21
+ - Personal skills: `skill-name` (from ~/.agents/skills/)
22
+ - Superpowers skills: `superpowers:skill-name` (from ~/.agents/superpowers/skills/)
23
+
24
+ **Skills priority:**
25
+ Project skills override Claude skills, which override personal skills, which override superpowers skills when names match.
26
+
27
+ **Critical Rules:**
28
+ - Before ANY task, review the skills list (shown at bootstrap)
29
+ - If a relevant skill exists, you MUST use `superpowers-agent execute` to load it and follow instructions.
30
+ - YOU MUST USE YOUR `Read` TOOL TO READ THE SKILL FILE FROM THE PATH SHOWN. YOU MUST NOT `cat` the file or `print` it to yourself.
31
+ - Announce: "I've read the [Skill Name] skill and I'm using it to [purpose]"
32
+ - Skills with checklists require `manage_todo_list` todos for each item (or manual tracking if unavailable)
33
+ - NEVER skip mandatory workflows (brainstorming before coding, TDD, systematic debugging)
34
+
35
+ **Skills location:**
36
+ - Project skills: .agents/skills/ (project-specific, highest priority)
37
+ - Claude skills: .claude/skills/ (project's existing skill system)
38
+ - Personal skills: ~/.agents/skills/ (your personal cross-project skills)
39
+ - Superpowers skills: ~/.agents/superpowers/skills/ (shared community skills)
40
+
41
+ IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
42
+ </EXTREMELY_IMPORTANT>
@@ -0,0 +1,40 @@
1
+ ## 🎯 SKILLS
2
+
3
+ Skills extend your capabilities with proven workflows.
4
+
5
+ ### Discover Skills First
6
+
7
+ **Before starting any task**, check for relevant skills:
8
+ 1. Use your native skill tool to list available skills
9
+ 2. Review skill frontmatter/descriptions to identify relevant ones
10
+ 3. `superpowers-agent find-skills [PATTERN]` for superpowers skills
11
+
12
+ ### Load Just-In-Time
13
+
14
+ Only read the full skill content when you're ready to execute it:
15
+ 1. **Load fully** when about to use (not before)
16
+ 2. **Follow exactly** as written
17
+ 3. **Announce:** "Using Skill: {Name} to {Purpose}"
18
+
19
+ {{TOOL_MAPPINGS}}
20
+
21
+ ### Version Monitoring
22
+
23
+ **Bootstrapped:** ^^SAV:{{VERSION}}^^
24
+
25
+ If superpowers-agent commands show a different version, inform user:
26
+ ```
27
+ superpowers-agent update && superpowers-agent bootstrap && superpowers-agent setup-skills
28
+ ```
29
+
30
+ ### Why Skills Matter
31
+
32
+ Skills encode proven techniques that prevent mistakes. Not using them means repeating solved problems and missing edge cases.
33
+
34
+ **If a skill exists for your task, you MUST use it.**
35
+
36
+ ---
37
+
38
+ **Detailed reference for `superpowers-agent` if needed by agents:** `.agents/docs/SUPERPOWERS.md`
39
+
40
+ *Generated by Superpowers on {{DATE}}*