@macpaw/cctk 1.0.0-beta.1

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 (415) hide show
  1. package/License +21 -0
  2. package/README.md +142 -0
  3. package/bin/index.js +5 -0
  4. package/dist/index.js +1 -0
  5. package/package.json +65 -0
  6. package/templates/claude/agents/brainstormer.md +113 -0
  7. package/templates/claude/agents/code-reviewer.md +157 -0
  8. package/templates/claude/agents/copywriter.md +110 -0
  9. package/templates/claude/agents/database-admin.md +92 -0
  10. package/templates/claude/agents/debugger.md +137 -0
  11. package/templates/claude/agents/docs-manager.md +208 -0
  12. package/templates/claude/agents/fullstack-developer.md +95 -0
  13. package/templates/claude/agents/git-manager.md +394 -0
  14. package/templates/claude/agents/journal-writer.md +113 -0
  15. package/templates/claude/agents/mcp-manager.md +89 -0
  16. package/templates/claude/agents/planner.md +108 -0
  17. package/templates/claude/agents/project-manager.md +125 -0
  18. package/templates/claude/agents/registry.json +304 -0
  19. package/templates/claude/agents/researcher.md +37 -0
  20. package/templates/claude/agents/scout-external.md +140 -0
  21. package/templates/claude/agents/scout.md +106 -0
  22. package/templates/claude/agents/tester.md +105 -0
  23. package/templates/claude/agents/ui-ux-designer.md +208 -0
  24. package/templates/claude/commands/ask.md +56 -0
  25. package/templates/claude/commands/bootstrap/auto/fast.md +106 -0
  26. package/templates/claude/commands/bootstrap/auto/parallel.md +64 -0
  27. package/templates/claude/commands/bootstrap/auto.md +110 -0
  28. package/templates/claude/commands/bootstrap.md +130 -0
  29. package/templates/claude/commands/brainstorm.md +75 -0
  30. package/templates/claude/commands/code/auto.md +198 -0
  31. package/templates/claude/commands/code/no-test.md +172 -0
  32. package/templates/claude/commands/code/parallel.md +100 -0
  33. package/templates/claude/commands/code.md +197 -0
  34. package/templates/claude/commands/coding-level.md +37 -0
  35. package/templates/claude/commands/content/cro.md +41 -0
  36. package/templates/claude/commands/content/enhance.md +12 -0
  37. package/templates/claude/commands/content/fast.md +11 -0
  38. package/templates/claude/commands/content/good.md +14 -0
  39. package/templates/claude/commands/cook/auto/fast.md +26 -0
  40. package/templates/claude/commands/cook/auto/parallel.md +49 -0
  41. package/templates/claude/commands/cook/auto.md +15 -0
  42. package/templates/claude/commands/cook.md +101 -0
  43. package/templates/claude/commands/debug.md +13 -0
  44. package/templates/claude/commands/docs/init.md +37 -0
  45. package/templates/claude/commands/docs/summarize.md +22 -0
  46. package/templates/claude/commands/docs/update.md +78 -0
  47. package/templates/claude/commands/fix/ci.md +17 -0
  48. package/templates/claude/commands/fix/fast.md +18 -0
  49. package/templates/claude/commands/fix/hard.md +35 -0
  50. package/templates/claude/commands/fix/logs.md +26 -0
  51. package/templates/claude/commands/fix/parallel.md +54 -0
  52. package/templates/claude/commands/fix/test.md +20 -0
  53. package/templates/claude/commands/fix/types.md +9 -0
  54. package/templates/claude/commands/fix/ui.md +33 -0
  55. package/templates/claude/commands/fix.md +43 -0
  56. package/templates/claude/commands/git/cm.md +5 -0
  57. package/templates/claude/commands/git/cp.md +4 -0
  58. package/templates/claude/commands/git/merge.md +40 -0
  59. package/templates/claude/commands/git/pr.md +50 -0
  60. package/templates/claude/commands/journal.md +7 -0
  61. package/templates/claude/commands/kanban.md +99 -0
  62. package/templates/claude/commands/plan/archive.md +57 -0
  63. package/templates/claude/commands/plan/ci.md +33 -0
  64. package/templates/claude/commands/plan/cro.md +67 -0
  65. package/templates/claude/commands/plan/fast.md +66 -0
  66. package/templates/claude/commands/plan/hard.md +92 -0
  67. package/templates/claude/commands/plan/parallel.md +129 -0
  68. package/templates/claude/commands/plan/two.md +45 -0
  69. package/templates/claude/commands/plan/validate.md +117 -0
  70. package/templates/claude/commands/plan.md +30 -0
  71. package/templates/claude/commands/preview.md +87 -0
  72. package/templates/claude/commands/registry.json +313 -0
  73. package/templates/claude/commands/review/codebase/parallel.md +122 -0
  74. package/templates/claude/commands/review/codebase.md +47 -0
  75. package/templates/claude/commands/scout/ext.md +35 -0
  76. package/templates/claude/commands/scout.md +28 -0
  77. package/templates/claude/commands/skill/add.md +36 -0
  78. package/templates/claude/commands/skill/create.md +29 -0
  79. package/templates/claude/commands/skill/fix-logs.md +22 -0
  80. package/templates/claude/commands/skill/optimize/auto.md +25 -0
  81. package/templates/claude/commands/skill/optimize.md +34 -0
  82. package/templates/claude/commands/skill/plan.md +45 -0
  83. package/templates/claude/commands/test/ui.md +91 -0
  84. package/templates/claude/commands/test.md +8 -0
  85. package/templates/claude/commands/use-mcp.md +34 -0
  86. package/templates/claude/commands/watzup.md +8 -0
  87. package/templates/claude/commands/worktree.md +126 -0
  88. package/templates/claude/hooks/dev-rules-reminder.cjs +258 -0
  89. package/templates/claude/hooks/docs/README.md +42 -0
  90. package/templates/claude/hooks/lib/cctk-config-utils.cjs +751 -0
  91. package/templates/claude/hooks/lib/cctk-paths.cjs +106 -0
  92. package/templates/claude/hooks/lib/context-tracker.cjs +346 -0
  93. package/templates/claude/hooks/privacy-block.cjs +289 -0
  94. package/templates/claude/hooks/registry.json +77 -0
  95. package/templates/claude/hooks/scout-block/broad-pattern-detector.cjs +293 -0
  96. package/templates/claude/hooks/scout-block/error-formatter.cjs +156 -0
  97. package/templates/claude/hooks/scout-block/path-extractor.cjs +359 -0
  98. package/templates/claude/hooks/scout-block/pattern-matcher.cjs +184 -0
  99. package/templates/claude/hooks/scout-block/vendor/ignore.js +626 -0
  100. package/templates/claude/hooks/scout-block.cjs +167 -0
  101. package/templates/claude/hooks/session-end.cjs +35 -0
  102. package/templates/claude/hooks/session-init.cjs +214 -0
  103. package/templates/claude/hooks/subagent-init.cjs +161 -0
  104. package/templates/claude/hooks/write-compact-marker.cjs +153 -0
  105. package/templates/claude/output-styles/coding-level-1.md +148 -0
  106. package/templates/claude/output-styles/coding-level-2.md +159 -0
  107. package/templates/claude/output-styles/coding-level-3.md +91 -0
  108. package/templates/claude/scripts/README.md +33 -0
  109. package/templates/claude/scripts/generate-catalogs.cjs +318 -0
  110. package/templates/claude/scripts/registry.json +48 -0
  111. package/templates/claude/scripts/set-active-plan.cjs +45 -0
  112. package/templates/claude/scripts/validate-docs.cjs +447 -0
  113. package/templates/claude/scripts/worktree.cjs +658 -0
  114. package/templates/claude/skills/README.md +112 -0
  115. package/templates/claude/skills/ai-artist/SKILL.md +75 -0
  116. package/templates/claude/skills/ai-artist/references/advanced-techniques.md +184 -0
  117. package/templates/claude/skills/ai-artist/references/domain-code.md +66 -0
  118. package/templates/claude/skills/ai-artist/references/domain-data.md +72 -0
  119. package/templates/claude/skills/ai-artist/references/domain-marketing.md +66 -0
  120. package/templates/claude/skills/ai-artist/references/domain-patterns.md +33 -0
  121. package/templates/claude/skills/ai-artist/references/domain-writing.md +68 -0
  122. package/templates/claude/skills/ai-artist/references/image-prompting.md +141 -0
  123. package/templates/claude/skills/ai-artist/references/llm-prompting.md +165 -0
  124. package/templates/claude/skills/ai-artist/references/nano-banana.md +59 -0
  125. package/templates/claude/skills/ai-artist/references/reasoning-techniques.md +201 -0
  126. package/templates/claude/skills/backend-development/SKILL.md +95 -0
  127. package/templates/claude/skills/backend-development/references/backend-api-design.md +495 -0
  128. package/templates/claude/skills/backend-development/references/backend-architecture.md +454 -0
  129. package/templates/claude/skills/backend-development/references/backend-authentication.md +338 -0
  130. package/templates/claude/skills/backend-development/references/backend-code-quality.md +659 -0
  131. package/templates/claude/skills/backend-development/references/backend-debugging.md +904 -0
  132. package/templates/claude/skills/backend-development/references/backend-devops.md +494 -0
  133. package/templates/claude/skills/backend-development/references/backend-mindset.md +387 -0
  134. package/templates/claude/skills/backend-development/references/backend-performance.md +397 -0
  135. package/templates/claude/skills/backend-development/references/backend-security.md +290 -0
  136. package/templates/claude/skills/backend-development/references/backend-technologies.md +256 -0
  137. package/templates/claude/skills/backend-development/references/backend-testing.md +429 -0
  138. package/templates/claude/skills/better-auth/SKILL.md +204 -0
  139. package/templates/claude/skills/better-auth/references/advanced-features.md +553 -0
  140. package/templates/claude/skills/better-auth/references/database-integration.md +577 -0
  141. package/templates/claude/skills/better-auth/references/email-password-auth.md +416 -0
  142. package/templates/claude/skills/better-auth/references/oauth-providers.md +430 -0
  143. package/templates/claude/skills/better-auth/scripts/better_auth_init.py +521 -0
  144. package/templates/claude/skills/chrome-devtools/SKILL.md +473 -0
  145. package/templates/claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
  146. package/templates/claude/skills/chrome-devtools/references/performance-guide.md +940 -0
  147. package/templates/claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
  148. package/templates/claude/skills/chrome-devtools/scripts/README.md +288 -0
  149. package/templates/claude/skills/chrome-devtools/scripts/aria-snapshot.js +368 -0
  150. package/templates/claude/skills/chrome-devtools/scripts/click.js +92 -0
  151. package/templates/claude/skills/chrome-devtools/scripts/console.js +85 -0
  152. package/templates/claude/skills/chrome-devtools/scripts/evaluate.js +59 -0
  153. package/templates/claude/skills/chrome-devtools/scripts/fill.js +84 -0
  154. package/templates/claude/skills/chrome-devtools/scripts/inject-auth.js +247 -0
  155. package/templates/claude/skills/chrome-devtools/scripts/install-deps.sh +11 -0
  156. package/templates/claude/skills/chrome-devtools/scripts/install.sh +36 -0
  157. package/templates/claude/skills/chrome-devtools/scripts/lib/browser.js +335 -0
  158. package/templates/claude/skills/chrome-devtools/scripts/lib/selector.js +183 -0
  159. package/templates/claude/skills/chrome-devtools/scripts/navigate.js +60 -0
  160. package/templates/claude/skills/chrome-devtools/scripts/network.js +113 -0
  161. package/templates/claude/skills/chrome-devtools/scripts/package.json +16 -0
  162. package/templates/claude/skills/chrome-devtools/scripts/performance.js +159 -0
  163. package/templates/claude/skills/chrome-devtools/scripts/screenshot.js +212 -0
  164. package/templates/claude/skills/chrome-devtools/scripts/select-ref.js +151 -0
  165. package/templates/claude/skills/chrome-devtools/scripts/snapshot.js +143 -0
  166. package/templates/claude/skills/chrome-devtools/scripts/ws-debug.js +47 -0
  167. package/templates/claude/skills/chrome-devtools/scripts/ws-full-debug.js +115 -0
  168. package/templates/claude/skills/claude-code/references/advanced-features.md +399 -0
  169. package/templates/claude/skills/claude-code/references/agent-skills.md +399 -0
  170. package/templates/claude/skills/claude-code/references/api-reference.md +498 -0
  171. package/templates/claude/skills/claude-code/references/best-practices.md +447 -0
  172. package/templates/claude/skills/claude-code/references/cicd-integration.md +428 -0
  173. package/templates/claude/skills/claude-code/references/common-workflows.md +107 -0
  174. package/templates/claude/skills/claude-code/references/configuration.md +480 -0
  175. package/templates/claude/skills/claude-code/references/enterprise-features.md +472 -0
  176. package/templates/claude/skills/claude-code/references/getting-started.md +244 -0
  177. package/templates/claude/skills/claude-code/references/hooks-and-plugins.md +444 -0
  178. package/templates/claude/skills/claude-code/references/hooks-comprehensive.md +622 -0
  179. package/templates/claude/skills/claude-code/references/ide-integration.md +316 -0
  180. package/templates/claude/skills/claude-code/references/mcp-integration.md +386 -0
  181. package/templates/claude/skills/claude-code/references/slash-commands.md +460 -0
  182. package/templates/claude/skills/claude-code/references/troubleshooting.md +455 -0
  183. package/templates/claude/skills/claude-code/skill.md +60 -0
  184. package/templates/claude/skills/code-review/SKILL.md +143 -0
  185. package/templates/claude/skills/code-review/references/code-review-reception.md +209 -0
  186. package/templates/claude/skills/code-review/references/requesting-code-review.md +105 -0
  187. package/templates/claude/skills/code-review/references/verification-before-completion.md +139 -0
  188. package/templates/claude/skills/context-engineering/SKILL.md +86 -0
  189. package/templates/claude/skills/context-engineering/references/context-compression.md +84 -0
  190. package/templates/claude/skills/context-engineering/references/context-degradation.md +93 -0
  191. package/templates/claude/skills/context-engineering/references/context-fundamentals.md +75 -0
  192. package/templates/claude/skills/context-engineering/references/context-optimization.md +82 -0
  193. package/templates/claude/skills/context-engineering/references/evaluation.md +89 -0
  194. package/templates/claude/skills/context-engineering/references/memory-systems.md +88 -0
  195. package/templates/claude/skills/context-engineering/references/multi-agent-patterns.md +90 -0
  196. package/templates/claude/skills/context-engineering/references/project-development.md +97 -0
  197. package/templates/claude/skills/context-engineering/references/tool-design.md +86 -0
  198. package/templates/claude/skills/context-engineering/scripts/compression_evaluator.py +329 -0
  199. package/templates/claude/skills/context-engineering/scripts/context_analyzer.py +294 -0
  200. package/templates/claude/skills/databases/SKILL.md +232 -0
  201. package/templates/claude/skills/databases/references/mongodb-aggregation.md +447 -0
  202. package/templates/claude/skills/databases/references/mongodb-atlas.md +465 -0
  203. package/templates/claude/skills/databases/references/mongodb-crud.md +408 -0
  204. package/templates/claude/skills/databases/references/mongodb-indexing.md +442 -0
  205. package/templates/claude/skills/databases/references/postgresql-administration.md +594 -0
  206. package/templates/claude/skills/databases/references/postgresql-performance.md +527 -0
  207. package/templates/claude/skills/databases/references/postgresql-psql-cli.md +467 -0
  208. package/templates/claude/skills/databases/references/postgresql-queries.md +475 -0
  209. package/templates/claude/skills/databases/scripts/db_backup.py +502 -0
  210. package/templates/claude/skills/databases/scripts/db_migrate.py +414 -0
  211. package/templates/claude/skills/databases/scripts/db_performance_check.py +445 -0
  212. package/templates/claude/skills/debugging/SKILL.md +84 -0
  213. package/templates/claude/skills/debugging/references/defense-in-depth.md +124 -0
  214. package/templates/claude/skills/debugging/references/root-cause-tracing.md +122 -0
  215. package/templates/claude/skills/debugging/references/systematic-debugging.md +102 -0
  216. package/templates/claude/skills/debugging/references/verification.md +123 -0
  217. package/templates/claude/skills/debugging/scripts/find-polluter.sh +63 -0
  218. package/templates/claude/skills/debugging/scripts/find-polluter.test.md +102 -0
  219. package/templates/claude/skills/devops/SKILL.md +293 -0
  220. package/templates/claude/skills/devops/references/browser-rendering.md +305 -0
  221. package/templates/claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
  222. package/templates/claude/skills/devops/references/cloudflare-platform.md +271 -0
  223. package/templates/claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
  224. package/templates/claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
  225. package/templates/claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
  226. package/templates/claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
  227. package/templates/claude/skills/devops/references/docker-basics.md +297 -0
  228. package/templates/claude/skills/devops/references/docker-compose.md +292 -0
  229. package/templates/claude/skills/devops/references/gcloud-platform.md +307 -0
  230. package/templates/claude/skills/devops/references/gcloud-services.md +304 -0
  231. package/templates/claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
  232. package/templates/claude/skills/devops/scripts/docker_optimize.py +320 -0
  233. package/templates/claude/skills/docs-seeker/SKILL.md +95 -0
  234. package/templates/claude/skills/docs-seeker/package.json +24 -0
  235. package/templates/claude/skills/docs-seeker/references/advanced.md +78 -0
  236. package/templates/claude/skills/docs-seeker/references/context7-patterns.md +68 -0
  237. package/templates/claude/skills/docs-seeker/references/errors.md +68 -0
  238. package/templates/claude/skills/docs-seeker/scripts/analyze-llms-txt.js +245 -0
  239. package/templates/claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
  240. package/templates/claude/skills/docs-seeker/scripts/fetch-docs.js +212 -0
  241. package/templates/claude/skills/docs-seeker/workflows/library-search.md +87 -0
  242. package/templates/claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
  243. package/templates/claude/skills/docs-seeker/workflows/topic-search.md +77 -0
  244. package/templates/claude/skills/frontend-design/SKILL.md +85 -0
  245. package/templates/claude/skills/frontend-design/references/analysis-best-practices.md +80 -0
  246. package/templates/claude/skills/frontend-design/references/analysis-prompts.md +141 -0
  247. package/templates/claude/skills/frontend-design/references/analysis-techniques.md +118 -0
  248. package/templates/claude/skills/frontend-design/references/animejs.md +396 -0
  249. package/templates/claude/skills/frontend-design/references/design-extraction-overview.md +71 -0
  250. package/templates/claude/skills/frontend-design/references/extraction-best-practices.md +141 -0
  251. package/templates/claude/skills/frontend-design/references/extraction-output-templates.md +162 -0
  252. package/templates/claude/skills/frontend-design/references/extraction-prompts.md +127 -0
  253. package/templates/claude/skills/frontend-design/references/technical-accessibility.md +119 -0
  254. package/templates/claude/skills/frontend-design/references/technical-best-practices.md +97 -0
  255. package/templates/claude/skills/frontend-design/references/technical-optimization.md +44 -0
  256. package/templates/claude/skills/frontend-design/references/technical-overview.md +90 -0
  257. package/templates/claude/skills/frontend-design/references/technical-workflows.md +150 -0
  258. package/templates/claude/skills/frontend-design/references/visual-analysis-overview.md +95 -0
  259. package/templates/claude/skills/frontend-development/SKILL.md +399 -0
  260. package/templates/claude/skills/frontend-development/resources/common-patterns.md +331 -0
  261. package/templates/claude/skills/frontend-development/resources/complete-examples.md +872 -0
  262. package/templates/claude/skills/frontend-development/resources/component-patterns.md +502 -0
  263. package/templates/claude/skills/frontend-development/resources/data-fetching.md +767 -0
  264. package/templates/claude/skills/frontend-development/resources/file-organization.md +502 -0
  265. package/templates/claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
  266. package/templates/claude/skills/frontend-development/resources/performance.md +406 -0
  267. package/templates/claude/skills/frontend-development/resources/routing-guide.md +364 -0
  268. package/templates/claude/skills/frontend-development/resources/styling-guide.md +428 -0
  269. package/templates/claude/skills/frontend-development/resources/typescript-standards.md +418 -0
  270. package/templates/claude/skills/markdown-novel-viewer/SKILL.md +272 -0
  271. package/templates/claude/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
  272. package/templates/claude/skills/markdown-novel-viewer/assets/favicon.png +0 -0
  273. package/templates/claude/skills/markdown-novel-viewer/assets/novel-theme.css +872 -0
  274. package/templates/claude/skills/markdown-novel-viewer/assets/reader.js +378 -0
  275. package/templates/claude/skills/markdown-novel-viewer/assets/template.html +85 -0
  276. package/templates/claude/skills/markdown-novel-viewer/package.json +15 -0
  277. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  278. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
  279. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
  280. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +49 -0
  281. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  282. package/templates/claude/skills/markdown-novel-viewer/scripts/server.cjs +398 -0
  283. package/templates/claude/skills/mcp-builder/SKILL.md +328 -0
  284. package/templates/claude/skills/mcp-builder/reference/evaluation.md +602 -0
  285. package/templates/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  286. package/templates/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  287. package/templates/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  288. package/templates/claude/skills/mcp-builder/scripts/connections.py +151 -0
  289. package/templates/claude/skills/mcp-builder/scripts/evaluation.py +381 -0
  290. package/templates/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  291. package/templates/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  292. package/templates/claude/skills/mcp-management/README.md +219 -0
  293. package/templates/claude/skills/mcp-management/SKILL.md +209 -0
  294. package/templates/claude/skills/mcp-management/assets/tools.json +3146 -0
  295. package/templates/claude/skills/mcp-management/references/configuration.md +114 -0
  296. package/templates/claude/skills/mcp-management/references/gemini-cli-integration.md +209 -0
  297. package/templates/claude/skills/mcp-management/references/mcp-protocol.md +116 -0
  298. package/templates/claude/skills/mcp-management/scripts/.env.example +10 -0
  299. package/templates/claude/skills/mcp-management/scripts/cli.ts +202 -0
  300. package/templates/claude/skills/mcp-management/scripts/mcp-client.ts +247 -0
  301. package/templates/claude/skills/mcp-management/scripts/package.json +20 -0
  302. package/templates/claude/skills/mcp-management/scripts/tsconfig.json +15 -0
  303. package/templates/claude/skills/media-processing/SKILL.md +91 -0
  304. package/templates/claude/skills/media-processing/references/common-workflows.md +132 -0
  305. package/templates/claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
  306. package/templates/claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
  307. package/templates/claude/skills/media-processing/references/ffmpeg-streaming.md +395 -0
  308. package/templates/claude/skills/media-processing/references/format-compatibility.md +375 -0
  309. package/templates/claude/skills/media-processing/references/imagemagick-batch.md +612 -0
  310. package/templates/claude/skills/media-processing/references/imagemagick-editing.md +623 -0
  311. package/templates/claude/skills/media-processing/references/rmbg-background-removal.md +66 -0
  312. package/templates/claude/skills/media-processing/references/troubleshooting.md +109 -0
  313. package/templates/claude/skills/media-processing/scripts/README.md +102 -0
  314. package/templates/claude/skills/media-processing/scripts/batch-remove-background.sh +124 -0
  315. package/templates/claude/skills/media-processing/scripts/batch_resize.py +342 -0
  316. package/templates/claude/skills/media-processing/scripts/media_convert.py +311 -0
  317. package/templates/claude/skills/media-processing/scripts/remove-background.sh +96 -0
  318. package/templates/claude/skills/media-processing/scripts/remove-bg-node.js +181 -0
  319. package/templates/claude/skills/mermaidjs-v11/SKILL.md +115 -0
  320. package/templates/claude/skills/mermaidjs-v11/references/cli-usage.md +228 -0
  321. package/templates/claude/skills/mermaidjs-v11/references/configuration.md +232 -0
  322. package/templates/claude/skills/mermaidjs-v11/references/diagram-types.md +315 -0
  323. package/templates/claude/skills/mermaidjs-v11/references/examples.md +344 -0
  324. package/templates/claude/skills/mermaidjs-v11/references/integration.md +310 -0
  325. package/templates/claude/skills/planning/SKILL.md +115 -0
  326. package/templates/claude/skills/planning/references/codebase-understanding.md +62 -0
  327. package/templates/claude/skills/planning/references/output-standards.md +127 -0
  328. package/templates/claude/skills/planning/references/plan-organization.md +150 -0
  329. package/templates/claude/skills/planning/references/research-phase.md +49 -0
  330. package/templates/claude/skills/planning/references/solution-design.md +63 -0
  331. package/templates/claude/skills/plans-kanban/SKILL.md +157 -0
  332. package/templates/claude/skills/plans-kanban/assets/dashboard-template.html +119 -0
  333. package/templates/claude/skills/plans-kanban/assets/dashboard.css +1594 -0
  334. package/templates/claude/skills/plans-kanban/assets/dashboard.js +659 -0
  335. package/templates/claude/skills/plans-kanban/assets/favicon.png +0 -0
  336. package/templates/claude/skills/plans-kanban/package.json +13 -0
  337. package/templates/claude/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +941 -0
  338. package/templates/claude/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
  339. package/templates/claude/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
  340. package/templates/claude/skills/plans-kanban/scripts/lib/plan-parser.cjs +194 -0
  341. package/templates/claude/skills/plans-kanban/scripts/lib/plan-scanner.cjs +277 -0
  342. package/templates/claude/skills/plans-kanban/scripts/lib/port-finder.cjs +49 -0
  343. package/templates/claude/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
  344. package/templates/claude/skills/plans-kanban/scripts/server.cjs +249 -0
  345. package/templates/claude/skills/problem-solving/SKILL.md +96 -0
  346. package/templates/claude/skills/problem-solving/references/attribution.md +69 -0
  347. package/templates/claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
  348. package/templates/claude/skills/problem-solving/references/inversion-exercise.md +91 -0
  349. package/templates/claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
  350. package/templates/claude/skills/problem-solving/references/scale-game.md +95 -0
  351. package/templates/claude/skills/problem-solving/references/simplification-cascades.md +80 -0
  352. package/templates/claude/skills/problem-solving/references/when-stuck.md +72 -0
  353. package/templates/claude/skills/registry.json +258 -0
  354. package/templates/claude/skills/repomix/SKILL.md +247 -0
  355. package/templates/claude/skills/repomix/references/configuration.md +211 -0
  356. package/templates/claude/skills/repomix/references/usage-patterns.md +232 -0
  357. package/templates/claude/skills/repomix/scripts/README.md +179 -0
  358. package/templates/claude/skills/repomix/scripts/repomix_batch.py +455 -0
  359. package/templates/claude/skills/repomix/scripts/repos.example.json +15 -0
  360. package/templates/claude/skills/research/SKILL.md +168 -0
  361. package/templates/claude/skills/sequential-thinking/.env.example +8 -0
  362. package/templates/claude/skills/sequential-thinking/README.md +183 -0
  363. package/templates/claude/skills/sequential-thinking/SKILL.md +94 -0
  364. package/templates/claude/skills/sequential-thinking/package.json +31 -0
  365. package/templates/claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
  366. package/templates/claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
  367. package/templates/claude/skills/sequential-thinking/references/core-patterns.md +95 -0
  368. package/templates/claude/skills/sequential-thinking/references/examples-api.md +88 -0
  369. package/templates/claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
  370. package/templates/claude/skills/sequential-thinking/references/examples-debug.md +90 -0
  371. package/templates/claude/skills/sequential-thinking/scripts/format-thought.js +182 -0
  372. package/templates/claude/skills/sequential-thinking/scripts/process-thought.js +252 -0
  373. package/templates/claude/skills/skill-creator/LICENSE.txt +202 -0
  374. package/templates/claude/skills/skill-creator/SKILL.md +266 -0
  375. package/templates/claude/skills/skill-creator/references/agent-skills-spec.md +51 -0
  376. package/templates/claude/skills/skill-creator/scripts/encoding_utils.py +21 -0
  377. package/templates/claude/skills/skill-creator/scripts/init_skill.py +304 -0
  378. package/templates/claude/skills/skill-creator/scripts/package_skill.py +110 -0
  379. package/templates/claude/skills/skill-creator/scripts/quick_validate.py +66 -0
  380. package/templates/claude/skills/template-skill/SKILL.md +6 -0
  381. package/templates/claude/skills/vitest/SKILL.md +595 -0
  382. package/templates/claude/skills/vitest/references/async-patterns.md +82 -0
  383. package/templates/claude/skills/vitest/references/mock-patterns.md +78 -0
  384. package/templates/claude/skills/vitest/references/monorepo-setup.md +185 -0
  385. package/templates/claude/skills/vitest/references/turborepo-setup.md +332 -0
  386. package/templates/claude/skills/web-frameworks/SKILL.md +324 -0
  387. package/templates/claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
  388. package/templates/claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
  389. package/templates/claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
  390. package/templates/claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
  391. package/templates/claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
  392. package/templates/claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
  393. package/templates/claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
  394. package/templates/claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
  395. package/templates/claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
  396. package/templates/claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
  397. package/templates/claude/workflows/development-rules.md +40 -0
  398. package/templates/claude/workflows/documentation-management.md +121 -0
  399. package/templates/claude/workflows/orchestration-protocol.md +16 -0
  400. package/templates/claude/workflows/primary-workflow.md +45 -0
  401. package/templates/claude/workflows/registry.json +37 -0
  402. package/templates/common/.cct.json +41 -0
  403. package/templates/common/.cctkignore +22 -0
  404. package/templates/common/.env.example +39 -0
  405. package/templates/common/.mcp.json.example +16 -0
  406. package/templates/common/metadata.json +15 -0
  407. package/templates/common/settings.json +79 -0
  408. package/templates/common/statusline.cjs +271 -0
  409. package/templates/config/.repomixignore +22 -0
  410. package/templates/config/AGENTS.md +55 -0
  411. package/templates/config/CLAUDE.md +87 -0
  412. package/templates/plans/bug-fix-template.md +69 -0
  413. package/templates/plans/feature-implementation-template.md +84 -0
  414. package/templates/plans/refactor-template.md +82 -0
  415. package/templates/plans/template-usage-guide.md +58 -0
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Click an element
4
+ * Usage: node click.js --selector ".button" [--url https://example.com] [--wait-for ".result"]
5
+ * Supports both CSS and XPath selectors:
6
+ * - CSS: node click.js --selector "button.submit"
7
+ * - XPath: node click.js --selector "//button[contains(text(),'Submit')]"
8
+ */
9
+ import {
10
+ getBrowser,
11
+ getPage,
12
+ closeBrowser,
13
+ disconnectBrowser,
14
+ parseArgs,
15
+ outputJSON,
16
+ outputError,
17
+ } from './lib/browser.js';
18
+ import { parseSelector, waitForElement, clickElement, enhanceError } from './lib/selector.js';
19
+
20
+ async function click() {
21
+ const args = parseArgs(process.argv.slice(2));
22
+
23
+ if (!args.selector) {
24
+ outputError(new Error('--selector is required'));
25
+
26
+ return;
27
+ }
28
+
29
+ try {
30
+ const browser = await getBrowser({
31
+ headless: args.headless !== 'false',
32
+ });
33
+
34
+ const page = await getPage(browser);
35
+
36
+ // Navigate if URL provided
37
+ if (args.url) {
38
+ await page.goto(args.url, {
39
+ waitUntil: args['wait-until'] || 'networkidle2',
40
+ });
41
+ }
42
+
43
+ // Parse and validate selector
44
+ const parsed = parseSelector(args.selector);
45
+
46
+ // Wait for element based on selector type
47
+ await waitForElement(page, parsed, {
48
+ visible: true,
49
+ timeout: Number.parseInt(args.timeout || '5000'),
50
+ });
51
+
52
+ // Set up navigation promise BEFORE clicking (in case click triggers immediate navigation)
53
+ const navigationPromise = page
54
+ .waitForNavigation({
55
+ waitUntil: 'load',
56
+ timeout: 5000,
57
+ })
58
+ .catch(() => null); // Catch timeout - navigation may not occur
59
+
60
+ // Click element
61
+ await clickElement(page, parsed);
62
+
63
+ // Wait for optional selector after click
64
+ if (args['wait-for']) {
65
+ await page.waitForSelector(args['wait-for'], {
66
+ timeout: Number.parseInt(args.timeout || '5000'),
67
+ });
68
+ } else {
69
+ // Wait for navigation to complete (or timeout if no navigation)
70
+ await navigationPromise;
71
+ }
72
+
73
+ outputJSON({
74
+ success: true,
75
+ url: page.url(),
76
+ title: await page.title(),
77
+ });
78
+
79
+ // Default: disconnect to keep browser running for session persistence
80
+ // Use --close true to fully close browser
81
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
82
+ process.exit(0);
83
+ } catch (error) {
84
+ // Enhance error message with troubleshooting tips
85
+ const enhanced = enhanceError(error, args.selector);
86
+
87
+ outputError(enhanced);
88
+ process.exit(1);
89
+ }
90
+ }
91
+
92
+ click();
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Monitor console messages
4
+ * Usage: node console.js --url https://example.com [--types error,warn] [--duration 5000]
5
+ */
6
+ import {
7
+ getBrowser,
8
+ getPage,
9
+ closeBrowser,
10
+ disconnectBrowser,
11
+ parseArgs,
12
+ outputJSON,
13
+ outputError,
14
+ } from './lib/browser.js';
15
+
16
+ async function monitorConsole() {
17
+ const args = parseArgs(process.argv.slice(2));
18
+
19
+ if (!args.url) {
20
+ outputError(new Error('--url is required'));
21
+
22
+ return;
23
+ }
24
+
25
+ try {
26
+ const browser = await getBrowser({
27
+ headless: args.headless !== 'false',
28
+ });
29
+
30
+ const page = await getPage(browser);
31
+
32
+ const messages = [];
33
+ const filterTypes = args.types ? args.types.split(',') : null;
34
+
35
+ // Listen for console messages
36
+ page.on('console', (msg) => {
37
+ const type = msg.type();
38
+
39
+ if (!filterTypes || filterTypes.includes(type)) {
40
+ messages.push({
41
+ type,
42
+ text: msg.text(),
43
+ location: msg.location(),
44
+ timestamp: Date.now(),
45
+ });
46
+ }
47
+ });
48
+
49
+ // Listen for page errors
50
+ page.on('pageerror', (error) => {
51
+ messages.push({
52
+ type: 'pageerror',
53
+ text: error.message,
54
+ stack: error.stack,
55
+ timestamp: Date.now(),
56
+ });
57
+ });
58
+
59
+ // Navigate
60
+ await page.goto(args.url, {
61
+ waitUntil: args['wait-until'] || 'networkidle2',
62
+ });
63
+
64
+ // Wait for additional time if specified
65
+ if (args.duration) {
66
+ await new Promise((resolve) => setTimeout(resolve, Number.parseInt(args.duration)));
67
+ }
68
+
69
+ outputJSON({
70
+ success: true,
71
+ url: page.url(),
72
+ messageCount: messages.length,
73
+ messages,
74
+ });
75
+
76
+ // Default: disconnect to keep browser running for session persistence
77
+ // Use --close true to fully close browser
78
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
79
+ process.exit(0);
80
+ } catch (error) {
81
+ outputError(error);
82
+ }
83
+ }
84
+
85
+ monitorConsole();
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Execute JavaScript in page context
4
+ * Usage: node evaluate.js --script "document.title" [--url https://example.com]
5
+ */
6
+ import {
7
+ getBrowser,
8
+ getPage,
9
+ closeBrowser,
10
+ disconnectBrowser,
11
+ parseArgs,
12
+ outputJSON,
13
+ outputError,
14
+ } from './lib/browser.js';
15
+
16
+ async function evaluate() {
17
+ const args = parseArgs(process.argv.slice(2));
18
+
19
+ if (!args.script) {
20
+ outputError(new Error('--script is required'));
21
+
22
+ return;
23
+ }
24
+
25
+ try {
26
+ const browser = await getBrowser({
27
+ headless: args.headless !== 'false',
28
+ });
29
+
30
+ const page = await getPage(browser);
31
+
32
+ // Navigate if URL provided
33
+ if (args.url) {
34
+ await page.goto(args.url, {
35
+ waitUntil: args['wait-until'] || 'networkidle2',
36
+ });
37
+ }
38
+
39
+ const result = await page.evaluate((script) => {
40
+ // eslint-disable-next-line no-eval
41
+ return eval(script);
42
+ }, args.script);
43
+
44
+ outputJSON({
45
+ success: true,
46
+ result,
47
+ url: page.url(),
48
+ });
49
+
50
+ // Default: disconnect to keep browser running for session persistence
51
+ // Use --close true to fully close browser
52
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
53
+ process.exit(0);
54
+ } catch (error) {
55
+ outputError(error);
56
+ }
57
+ }
58
+
59
+ evaluate();
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Fill form fields
4
+ * Usage: node fill.js --selector "#input" --value "text" [--url https://example.com]
5
+ * Supports both CSS and XPath selectors:
6
+ * - CSS: node fill.js --selector "#email" --value "user@example.com"
7
+ * - XPath: node fill.js --selector "//input[@type='email']" --value "user@example.com"
8
+ */
9
+ import {
10
+ getBrowser,
11
+ getPage,
12
+ closeBrowser,
13
+ disconnectBrowser,
14
+ parseArgs,
15
+ outputJSON,
16
+ outputError,
17
+ } from './lib/browser.js';
18
+ import { parseSelector, waitForElement, typeIntoElement, enhanceError } from './lib/selector.js';
19
+
20
+ async function fill() {
21
+ const args = parseArgs(process.argv.slice(2));
22
+
23
+ if (!args.selector) {
24
+ outputError(new Error('--selector is required'));
25
+
26
+ return;
27
+ }
28
+
29
+ if (!args.value) {
30
+ outputError(new Error('--value is required'));
31
+
32
+ return;
33
+ }
34
+
35
+ try {
36
+ const browser = await getBrowser({
37
+ headless: args.headless !== 'false',
38
+ });
39
+
40
+ const page = await getPage(browser);
41
+
42
+ // Navigate if URL provided
43
+ if (args.url) {
44
+ await page.goto(args.url, {
45
+ waitUntil: args['wait-until'] || 'networkidle2',
46
+ });
47
+ }
48
+
49
+ // Parse and validate selector
50
+ const parsed = parseSelector(args.selector);
51
+
52
+ // Wait for element based on selector type
53
+ await waitForElement(page, parsed, {
54
+ visible: true,
55
+ timeout: Number.parseInt(args.timeout || '5000'),
56
+ });
57
+
58
+ // Type into element
59
+ await typeIntoElement(page, parsed, args.value, {
60
+ clear: args.clear === 'true',
61
+ delay: Number.parseInt(args.delay || '0'),
62
+ });
63
+
64
+ outputJSON({
65
+ success: true,
66
+ selector: args.selector,
67
+ value: args.value,
68
+ url: page.url(),
69
+ });
70
+
71
+ // Default: disconnect to keep browser running for session persistence
72
+ // Use --close true to fully close browser
73
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
74
+ process.exit(0);
75
+ } catch (error) {
76
+ // Enhance error message with troubleshooting tips
77
+ const enhanced = enhanceError(error, args.selector);
78
+
79
+ outputError(enhanced);
80
+ process.exit(1);
81
+ }
82
+ }
83
+
84
+ fill();
@@ -0,0 +1,247 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Inject authentication cookies/tokens into browser session
4
+ * Usage: node inject-auth.js --url https://example.com --cookies '[{"name":"token","value":"xxx","domain":".example.com"}]'
5
+ * node inject-auth.js --url https://example.com --token "Bearer xxx" [--header Authorization]
6
+ * node inject-auth.js --url https://example.com --local-storage '{"key":"value"}'
7
+ * node inject-auth.js --url https://example.com --session-storage '{"key":"value"}'
8
+ *
9
+ * This script injects authentication data into browser session for testing protected routes.
10
+ * The session persists across script executions until --close true is used.
11
+ *
12
+ * Workflow for testing protected routes:
13
+ * 1. User manually logs into the site in their browser
14
+ * 2. User extracts cookies/tokens from browser DevTools
15
+ * 3. Run this script to inject auth into puppeteer session
16
+ * 4. Run other scripts (screenshot, navigate, etc.) which will use authenticated session
17
+ *
18
+ * Session behavior:
19
+ * --close false : Keep browser running (default for chaining)
20
+ * --close true : Close browser completely and clear session
21
+ */
22
+ import {
23
+ getBrowser,
24
+ getPage,
25
+ closeBrowser,
26
+ disconnectBrowser,
27
+ parseArgs,
28
+ outputJSON,
29
+ outputError,
30
+ saveAuthSession,
31
+ clearAuthSession,
32
+ } from './lib/browser.js';
33
+
34
+ /**
35
+ * Parse cookies from JSON string or file
36
+ * @param {string} cookiesInput - JSON string or file path
37
+ * @returns {Array} - Array of cookie objects
38
+ */
39
+ function parseCookies(cookiesInput) {
40
+ try {
41
+ // Try parsing as JSON string
42
+ return JSON.parse(cookiesInput);
43
+ } catch {
44
+ throw new Error(
45
+ `Invalid cookies format. Expected JSON array: [{"name":"cookie_name","value":"cookie_value","domain":".example.com"}]`,
46
+ );
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Parse storage data from JSON string
52
+ * @param {string} storageInput - JSON string
53
+ * @returns {Object} - Storage key-value pairs
54
+ */
55
+ function parseStorage(storageInput) {
56
+ try {
57
+ return JSON.parse(storageInput);
58
+ } catch {
59
+ throw new Error(`Invalid storage format. Expected JSON object: {"key":"value"}`);
60
+ }
61
+ }
62
+
63
+ async function injectAuth() {
64
+ const args = parseArgs(process.argv.slice(2));
65
+
66
+ if (!args.url) {
67
+ outputError(new Error('--url is required (base URL for the protected site)'));
68
+
69
+ return;
70
+ }
71
+
72
+ // Validate at least one auth method provided
73
+ if (!args.cookies && !args.token && !args['local-storage'] && !args['session-storage']) {
74
+ outputError(
75
+ new Error('At least one auth method required: --cookies, --token, --local-storage, or --session-storage'),
76
+ );
77
+
78
+ return;
79
+ }
80
+
81
+ try {
82
+ const browser = await getBrowser({
83
+ headless: args.headless !== 'false',
84
+ });
85
+
86
+ const page = await getPage(browser);
87
+
88
+ // Navigate to the URL first to set the domain context
89
+ await page.goto(args.url, {
90
+ waitUntil: args['wait-until'] || 'networkidle2',
91
+ timeout: Number.parseInt(args.timeout || '30000'),
92
+ });
93
+
94
+ const result = {
95
+ success: true,
96
+ url: args.url,
97
+ injected: [],
98
+ };
99
+
100
+ // Inject cookies
101
+ if (args.cookies) {
102
+ const cookies = parseCookies(args.cookies);
103
+
104
+ // Validate and normalize cookies
105
+ const normalizedCookies = cookies.map((cookie) => {
106
+ if (!cookie.name || !cookie.value) {
107
+ throw new Error(`Cookie must have 'name' and 'value' properties`);
108
+ }
109
+
110
+ // Extract domain from URL if not provided
111
+ if (!cookie.domain) {
112
+ const urlObj = new URL(args.url);
113
+
114
+ cookie.domain = urlObj.hostname;
115
+ }
116
+
117
+ return {
118
+ name: cookie.name,
119
+ value: cookie.value,
120
+ domain: cookie.domain,
121
+ path: cookie.path || '/',
122
+ httpOnly: cookie.httpOnly === undefined ? false : cookie.httpOnly,
123
+ secure: cookie.secure === undefined ? args.url.startsWith('https') : cookie.secure,
124
+ sameSite: cookie.sameSite || 'Lax',
125
+ ...(cookie.expires && { expires: cookie.expires }),
126
+ };
127
+ });
128
+
129
+ await page.setCookie(...normalizedCookies);
130
+ result.injected.push({
131
+ type: 'cookies',
132
+ count: normalizedCookies.length,
133
+ names: normalizedCookies.map((c) => c.name),
134
+ });
135
+ }
136
+
137
+ // Inject Bearer token via localStorage (common pattern)
138
+ if (args.token) {
139
+ const tokenKey = args['token-key'] || 'access_token';
140
+ const token = args.token.startsWith('Bearer ') ? args.token.slice(7) : args.token;
141
+
142
+ await page.evaluate(
143
+ (key, value) => {
144
+ localStorage.setItem(key, value);
145
+ },
146
+ tokenKey,
147
+ token,
148
+ );
149
+
150
+ result.injected.push({
151
+ type: 'token',
152
+ key: tokenKey,
153
+ storage: 'localStorage',
154
+ });
155
+
156
+ // Also set Authorization header for future requests if header option provided
157
+ if (args.header) {
158
+ await page.setExtraHTTPHeaders({
159
+ [args.header]: args.token.startsWith('Bearer ') ? args.token : `Bearer ${args.token}`,
160
+ });
161
+ result.injected.push({
162
+ type: 'header',
163
+ name: args.header,
164
+ });
165
+ }
166
+ }
167
+
168
+ // Inject localStorage items
169
+ if (args['local-storage']) {
170
+ const storageData = parseStorage(args['local-storage']);
171
+
172
+ await page.evaluate((data) => {
173
+ Object.entries(data).forEach(([key, value]) => {
174
+ localStorage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
175
+ });
176
+ }, storageData);
177
+
178
+ result.injected.push({
179
+ type: 'localStorage',
180
+ keys: Object.keys(storageData),
181
+ });
182
+ }
183
+
184
+ // Inject sessionStorage items
185
+ if (args['session-storage']) {
186
+ const storageData = parseStorage(args['session-storage']);
187
+
188
+ await page.evaluate((data) => {
189
+ Object.entries(data).forEach(([key, value]) => {
190
+ sessionStorage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
191
+ });
192
+ }, storageData);
193
+
194
+ result.injected.push({
195
+ type: 'sessionStorage',
196
+ keys: Object.keys(storageData),
197
+ });
198
+ }
199
+
200
+ // Reload page to apply auth (optional, use --reload true)
201
+ if (args.reload === 'true') {
202
+ await page.reload({ waitUntil: 'networkidle2' });
203
+ result.reloaded = true;
204
+ }
205
+
206
+ // Save auth session to file for persistence across script executions
207
+ const authSessionData = {};
208
+
209
+ if (args.cookies) {
210
+ authSessionData.cookies = parseCookies(args.cookies);
211
+ }
212
+ if (args['local-storage']) {
213
+ authSessionData.localStorage = parseStorage(args['local-storage']);
214
+ }
215
+ if (args['session-storage']) {
216
+ authSessionData.sessionStorage = parseStorage(args['session-storage']);
217
+ }
218
+ if (args.token && args.header) {
219
+ authSessionData.headers = {
220
+ [args.header]: args.token.startsWith('Bearer ') ? args.token : `Bearer ${args.token}`,
221
+ };
222
+ }
223
+
224
+ // Clear existing auth if --clear flag used
225
+ if (args.clear === 'true') {
226
+ clearAuthSession();
227
+ result.cleared = true;
228
+ } else if (Object.keys(authSessionData).length > 0) {
229
+ saveAuthSession(authSessionData);
230
+ result.persisted = true;
231
+ }
232
+
233
+ // Verify auth by checking page title and URL after injection
234
+ result.finalUrl = page.url();
235
+ result.title = await page.title();
236
+
237
+ outputJSON(result);
238
+
239
+ // Default: disconnect to keep browser running for session persistence
240
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
241
+ process.exit(0);
242
+ } catch (error) {
243
+ outputError(error);
244
+ }
245
+ }
246
+
247
+ injectAuth();
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ # System dependencies installation script for Chrome DevTools Agent Skill
3
+ # macOS-only: Chrome/Chromium includes all dependencies
4
+
5
+ echo "✅ macOS detected - no additional system dependencies needed"
6
+ echo ""
7
+ echo "Chrome/Chromium runs natively on macOS without additional libraries."
8
+ echo ""
9
+ echo "📝 To install the skill, run:"
10
+ echo " cd .claude/skills/chrome-devtools/scripts && npm install"
11
+ echo ""
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+ # Installation script for Chrome DevTools Agent Skill (macOS)
3
+
4
+ set -e
5
+
6
+ echo "🚀 Installing Chrome DevTools Agent Skill..."
7
+ echo ""
8
+
9
+ # Check Node.js version
10
+ echo "Checking Node.js version..."
11
+ NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
12
+
13
+ if [ "$NODE_VERSION" -lt 18 ]; then
14
+ echo "❌ Error: Node.js 18+ is required. Current version: $(node --version)"
15
+ echo " Install via Homebrew: brew install node"
16
+ exit 1
17
+ fi
18
+
19
+ echo "✓ Node.js version: $(node --version)"
20
+ echo ""
21
+ echo "Platform: macOS (no system dependencies needed)"
22
+ echo ""
23
+
24
+ # Install Node.js dependencies
25
+ echo "Installing Node.js dependencies..."
26
+ npm install
27
+
28
+ echo ""
29
+ echo "✅ Installation complete!"
30
+ echo ""
31
+ echo "Test the installation:"
32
+ echo " node navigate.js --url https://example.com"
33
+ echo ""
34
+ echo "For more information:"
35
+ echo " cat README.md"
36
+ echo ""