shmakk 1.1.0 → 1.2.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 (450) hide show
  1. package/README.md +16 -1
  2. package/package.json +6 -3
  3. package/scripts/import-skills.js +536 -0
  4. package/scripts/install-skills.js +64 -0
  5. package/skills/ai-elements.md +482 -0
  6. package/skills/architecture.md +151 -0
  7. package/skills/backend-adapter-aws-lambda.md +204 -0
  8. package/skills/backend-adapter-express.md +177 -0
  9. package/skills/backend-adapter-fastify.md +222 -0
  10. package/skills/backend-adapter-fetch.md +200 -0
  11. package/skills/backend-api-docs.md +22 -0
  12. package/skills/backend-aspire.md +232 -0
  13. package/skills/backend-aspnet-core.md +62 -0
  14. package/skills/backend-build-chatgpt-app.md +321 -0
  15. package/skills/backend-build-mcp-app.md +393 -0
  16. package/skills/backend-build-mcp-server.md +222 -0
  17. package/skills/backend-build-mcpb.md +200 -0
  18. package/skills/backend-building-ai-agent-on-cloudflare.md +401 -0
  19. package/skills/backend-caching.md +206 -0
  20. package/skills/backend-chatgpt-app-submission.md +157 -0
  21. package/skills/backend-chatgpt-apps.md +321 -0
  22. package/skills/backend-client-setup.md +318 -0
  23. package/skills/backend-containerize-aspnet-framework.md +455 -0
  24. package/skills/backend-create-spring-boot-java-project.md +164 -0
  25. package/skills/backend-create-spring-boot-kotlin-project.md +148 -0
  26. package/skills/backend-csharp-async.md +50 -0
  27. package/skills/backend-csharp-docs.md +63 -0
  28. package/skills/backend-csharp-mcp-server-generator.md +60 -0
  29. package/skills/backend-dotenv.md +201 -0
  30. package/skills/backend-dotenvx.md +119 -0
  31. package/skills/backend-env-vars.md +259 -0
  32. package/skills/backend-error-handling.md +254 -0
  33. package/skills/backend-fastapi.md +437 -0
  34. package/skills/backend-go-mcp-server-generator.md +335 -0
  35. package/skills/backend-java-mcp-server-generator.md +757 -0
  36. package/skills/backend-kotlin-mcp-server-generator.md +450 -0
  37. package/skills/backend-middlewares.md +243 -0
  38. package/skills/backend-multi-stage-dockerfile.md +47 -0
  39. package/skills/backend-nestjs.md +192 -0
  40. package/skills/backend-next-forge.md +375 -0
  41. package/skills/backend-nextjs.md +746 -0
  42. package/skills/backend-openapi-to-application-code.md +113 -0
  43. package/skills/backend-php-mcp-server-generator.md +523 -0
  44. package/skills/backend-python-mcp-server-generator.md +106 -0
  45. package/skills/backend-routing-middleware.md +251 -0
  46. package/skills/backend-ruby-mcp-server-generator.md +661 -0
  47. package/skills/backend-rust-mcp-server-generator.md +578 -0
  48. package/skills/backend-semantic-kernel.md +57 -0
  49. package/skills/backend-server-setup.md +379 -0
  50. package/skills/backend-server-side-calls.md +250 -0
  51. package/skills/backend-subscriptions.md +407 -0
  52. package/skills/backend-swift-mcp-server-generator.md +670 -0
  53. package/skills/backend-trpc-router.md +152 -0
  54. package/skills/backend-typescript-mcp-server-generator.md +91 -0
  55. package/skills/backend-validators.md +229 -0
  56. package/skills/backend.md +76 -0
  57. package/skills/backup.md +165 -0
  58. package/skills/budget.md +140 -0
  59. package/skills/business-gtm-0-to-1-launch.md +322 -0
  60. package/skills/business-gtm-operating-cadence.md +421 -0
  61. package/skills/business-gtm-positioning-strategy.md +439 -0
  62. package/skills/business-gtm-product-led-growth.md +340 -0
  63. package/skills/calendar.md +95 -0
  64. package/skills/code-review.md +130 -0
  65. package/skills/compliance.md +168 -0
  66. package/skills/contracts.md +130 -0
  67. package/skills/daily-job-run.md +46 -0
  68. package/skills/daily-webdesign.md +187 -0
  69. package/skills/database-bigquery-pipeline-audit.md +130 -0
  70. package/skills/database-cosmosdb-datamodeling.md +1046 -0
  71. package/skills/database-durable-objects.md +187 -0
  72. package/skills/database-ef-core.md +76 -0
  73. package/skills/database-fabric-lakehouse.md +107 -0
  74. package/skills/database-neon-postgres-egress-optimizer.md +213 -0
  75. package/skills/database-neon-postgres.md +218 -0
  76. package/skills/database-postgresql-code-review.md +213 -0
  77. package/skills/database-postgresql-optimization.md +405 -0
  78. package/skills/database-sql-code-review.md +302 -0
  79. package/skills/database-sql-optimization.md +297 -0
  80. package/skills/dependency-audit.md +165 -0
  81. package/skills/design-kami-landing.md +234 -0
  82. package/skills/design.md +221 -0
  83. package/skills/dev-acquire-codebase-knowledge.md +175 -0
  84. package/skills/dev-add-educational-comments.md +129 -0
  85. package/skills/dev-add-model-descriptions.md +74 -0
  86. package/skills/dev-adr-review.md +56 -0
  87. package/skills/dev-boost-prompt.md +26 -0
  88. package/skills/dev-build-run-debug.md +130 -0
  89. package/skills/dev-chunk.md +49 -0
  90. package/skills/dev-claude-md-improver.md +180 -0
  91. package/skills/dev-code-exemplars-blueprint-generator.md +127 -0
  92. package/skills/dev-code-tour.md +434 -0
  93. package/skills/dev-comment-code-generate-a-tutorial.md +27 -0
  94. package/skills/dev-commit.md +81 -0
  95. package/skills/dev-context-map.md +53 -0
  96. package/skills/dev-conventional-commit.md +73 -0
  97. package/skills/dev-create-architectural-decision-record.md +98 -0
  98. package/skills/dev-create-draft-pr.md +17 -0
  99. package/skills/dev-create-pr.md +17 -0
  100. package/skills/dev-create-readme.md +22 -0
  101. package/skills/dev-csharp-mstest.md +479 -0
  102. package/skills/dev-csharp-nunit.md +72 -0
  103. package/skills/dev-csharp-tunit.md +101 -0
  104. package/skills/dev-csharp-xunit.md +69 -0
  105. package/skills/dev-debug-failing-test.md +90 -0
  106. package/skills/dev-diff-analyze.md +32 -0
  107. package/skills/dev-diffs.md +24 -0
  108. package/skills/dev-dotnet-best-practices.md +86 -0
  109. package/skills/dev-dotnet-design-pattern-review.md +43 -0
  110. package/skills/dev-dotnet-timezone.md +110 -0
  111. package/skills/dev-dotnet-upgrade.md +117 -0
  112. package/skills/dev-doublecheck.md +278 -0
  113. package/skills/dev-explain-error.md +15 -0
  114. package/skills/dev-finding-discovery.md +164 -0
  115. package/skills/dev-fix-finding.md +111 -0
  116. package/skills/dev-full-file-edit.md +25 -0
  117. package/skills/dev-git-commit.md +125 -0
  118. package/skills/dev-git-flow-branch-creator.md +293 -0
  119. package/skills/dev-git-workflow.md +46 -0
  120. package/skills/dev-github-automation.md +64 -0
  121. package/skills/dev-github-code-review.md +1140 -0
  122. package/skills/dev-github-issues.md +202 -0
  123. package/skills/dev-gpt-5-4-prompting.md +55 -0
  124. package/skills/dev-investigation-mode.md +277 -0
  125. package/skills/dev-java-add-graalvm-native-image-support.md +450 -0
  126. package/skills/dev-java-docs.md +24 -0
  127. package/skills/dev-java-refactoring-extract-method.md +105 -0
  128. package/skills/dev-java-refactoring-remove-parameter.md +85 -0
  129. package/skills/dev-merge.md +73 -0
  130. package/skills/dev-migrate-create.md +36 -0
  131. package/skills/dev-migrate-validate.md +36 -0
  132. package/skills/dev-my-issues.md +9 -0
  133. package/skills/dev-my-pull-requests.md +15 -0
  134. package/skills/dev-planning-oracle-to-postgres-migration-integration-testing.md +45 -0
  135. package/skills/dev-playwright-generate-test.md +18 -0
  136. package/skills/dev-playwright.md +148 -0
  137. package/skills/dev-prompt-builder.md +142 -0
  138. package/skills/dev-pytest-coverage.md +29 -0
  139. package/skills/dev-python-manager-discovery.md +330 -0
  140. package/skills/dev-python-pypi-package-builder.md +445 -0
  141. package/skills/dev-readme-blueprint-generator.md +79 -0
  142. package/skills/dev-refactor-method-complexity-reduce.md +99 -0
  143. package/skills/dev-refactor-plan.md +66 -0
  144. package/skills/dev-refactor.md +646 -0
  145. package/skills/dev-review-and-refactor.md +16 -0
  146. package/skills/dev-reviewing-oracle-to-postgres-migration.md +68 -0
  147. package/skills/dev-ruff-recursive-fix.md +201 -0
  148. package/skills/dev-run-e2e-tests.md +126 -0
  149. package/skills/dev-run-pre-commit-checks.md +133 -0
  150. package/skills/dev-run-smoke-tests.md +127 -0
  151. package/skills/dev-scaffolding-oracle-to-postgres-migration-test-project.md +55 -0
  152. package/skills/dev-spring-boot-testing.md +190 -0
  153. package/skills/dev-sync-upstream.md +32 -0
  154. package/skills/dev-sync.md +74 -0
  155. package/skills/dev-tdd-workflow.md +23 -0
  156. package/skills/dev-terraform-azurerm-set-diff-analyzer.md +49 -0
  157. package/skills/dev-test-driven-development.md +372 -0
  158. package/skills/dev-test-gaps.md +18 -0
  159. package/skills/dev-test-triage.md +55 -0
  160. package/skills/dev-typer.md +267 -0
  161. package/skills/dev-typescript-setup.md +25 -0
  162. package/skills/dev-unified-diff-edit.md +16 -0
  163. package/skills/dev-unit-test-vue-pinia.md +198 -0
  164. package/skills/dev-using-git-worktrees.md +216 -0
  165. package/skills/dev-validation.md +99 -0
  166. package/skills/dev-verification.md +168 -0
  167. package/skills/dev-webapp-testing.md +134 -0
  168. package/skills/dev-write-coding-standards-from-file.md +317 -0
  169. package/skills/dev-write-tests.md +16 -0
  170. package/skills/devops-appinsights-instrumentation.md +49 -0
  171. package/skills/devops-az-cost-optimize.md +306 -0
  172. package/skills/devops-chronicle.md +154 -0
  173. package/skills/devops-deployments-cicd.md +331 -0
  174. package/skills/devops-devops-rollout-plan.md +118 -0
  175. package/skills/devops-geistdocs.md +276 -0
  176. package/skills/devops-observability.md +774 -0
  177. package/skills/devops-observe-metrics.md +35 -0
  178. package/skills/devops-observe-trace.md +30 -0
  179. package/skills/devops-phoenix-cli.md +163 -0
  180. package/skills/devops-phoenix-tracing.md +140 -0
  181. package/skills/devops-publish-to-pages.md +108 -0
  182. package/skills/devops-telemetry.md +87 -0
  183. package/skills/devops-update-avm-modules-in-bicep.md +61 -0
  184. package/skills/devops.md +81 -0
  185. package/skills/diagrams-canvas.md +204 -0
  186. package/skills/diagrams-draw-io-diagram-generator.md +463 -0
  187. package/skills/diagrams-excalidraw-diagram-generator.md +614 -0
  188. package/skills/diagrams-graphify.md +1277 -0
  189. package/skills/docs-bear-notes.md +108 -0
  190. package/skills/docs-create-llms.md +211 -0
  191. package/skills/docs-doc-gen.md +20 -0
  192. package/skills/docs-documentation-writer.md +46 -0
  193. package/skills/docs-llm-config.md +33 -0
  194. package/skills/docs-mkdocs-translations.md +109 -0
  195. package/skills/docs-obsidian-vault-maintainer.md +14 -0
  196. package/skills/docs-obsidian.md +82 -0
  197. package/skills/docs-prose.md +324 -0
  198. package/skills/docs-update-llms.md +217 -0
  199. package/skills/docs-update-markdown-file-index.md +77 -0
  200. package/skills/docs-wiki-maintainer.md +20 -0
  201. package/skills/documents.md +120 -0
  202. package/skills/email.md +113 -0
  203. package/skills/expenses.md +140 -0
  204. package/skills/file-ops.md +149 -0
  205. package/skills/files-convert-plaintext-to-md.md +363 -0
  206. package/skills/files-doc.md +81 -0
  207. package/skills/files-docx.md +594 -0
  208. package/skills/files-markdown-to-html.md +917 -0
  209. package/skills/files-nano-pdf.md +39 -0
  210. package/skills/files-pdf.md +315 -0
  211. package/skills/files-pdftk-server.md +163 -0
  212. package/skills/files-pptx-html-fidelity-audit.md +255 -0
  213. package/skills/files-pptx.md +231 -0
  214. package/skills/files-xlsx.md +301 -0
  215. package/skills/find-jobs.md +78 -0
  216. package/skills/format-conversion.md +157 -0
  217. package/skills/frontend-ai-elements.md +483 -0
  218. package/skills/frontend-ai-gateway.md +563 -0
  219. package/skills/frontend-ai-generation-persistence.md +242 -0
  220. package/skills/frontend-ai-sdk.md +799 -0
  221. package/skills/frontend-ai-visibility.md +127 -0
  222. package/skills/frontend-angular-developer.md +130 -0
  223. package/skills/frontend-aspnet-minimal-api-openapi.md +42 -0
  224. package/skills/frontend-bencium-innovative-ux-designer.md +719 -0
  225. package/skills/frontend-chat-sdk.md +666 -0
  226. package/skills/frontend-chrome-devtools.md +98 -0
  227. package/skills/frontend-frontend-app-builder.md +186 -0
  228. package/skills/frontend-frontend-design.md +43 -0
  229. package/skills/frontend-frontend-testing-debugging.md +143 -0
  230. package/skills/frontend-gsap-framer-scroll-animation.md +152 -0
  231. package/skills/frontend-internal-linking.md +109 -0
  232. package/skills/frontend-json-render.md +335 -0
  233. package/skills/frontend-keyword-clustering.md +118 -0
  234. package/skills/frontend-next-intl-add-language.md +20 -0
  235. package/skills/frontend-on-page-seo.md +112 -0
  236. package/skills/frontend-premium-frontend-ui.md +114 -0
  237. package/skills/frontend-react-best-practices.md +143 -0
  238. package/skills/frontend-schema-markup.md +160 -0
  239. package/skills/frontend-seo-audit.md +110 -0
  240. package/skills/frontend-swr.md +215 -0
  241. package/skills/frontend-technical-seo.md +162 -0
  242. package/skills/frontend-use-dom.md +418 -0
  243. package/skills/frontend-web-coder.md +564 -0
  244. package/skills/frontend-web-design-reviewer.md +369 -0
  245. package/skills/frontend-web-perf.md +202 -0
  246. package/skills/frontend.md +125 -0
  247. package/skills/general-adapter-standalone.md +199 -0
  248. package/skills/general-auth.md +356 -0
  249. package/skills/general-containerize-aspnetcore.md +393 -0
  250. package/skills/general-create-technical-spike.md +231 -0
  251. package/skills/general-cron-jobs.md +72 -0
  252. package/skills/general-ddd-aggregate.md +52 -0
  253. package/skills/general-ddd-context.md +46 -0
  254. package/skills/general-ddd-validate.md +51 -0
  255. package/skills/general-dependency-check.md +26 -0
  256. package/skills/general-email-marketing.md +86 -0
  257. package/skills/general-healthcheck.md +246 -0
  258. package/skills/general-import-infrastructure-as-code.md +368 -0
  259. package/skills/general-init.md +49 -0
  260. package/skills/general-java-junit.md +64 -0
  261. package/skills/general-java-springboot.md +66 -0
  262. package/skills/general-javascript-typescript-jest.md +45 -0
  263. package/skills/general-kotlin-springboot.md +71 -0
  264. package/skills/general-make-repo-contribution.md +91 -0
  265. package/skills/general-market-research.md +78 -0
  266. package/skills/general-marketplace.md +468 -0
  267. package/skills/general-model-recommendation.md +673 -0
  268. package/skills/general-payments.md +352 -0
  269. package/skills/general-quality-playbook.md +480 -0
  270. package/skills/general-run-integration-tests.md +113 -0
  271. package/skills/general-superjson.md +274 -0
  272. package/skills/general-swiftpm-macos.md +51 -0
  273. package/skills/general-threat-model.md +61 -0
  274. package/skills/invoices.md +167 -0
  275. package/skills/licenses.md +159 -0
  276. package/skills/logs.md +156 -0
  277. package/skills/marketing.md +139 -0
  278. package/skills/media-image-manipulation-image-magick.md +253 -0
  279. package/skills/media-imagegen.md +357 -0
  280. package/skills/media-openai-whisper-api.md +63 -0
  281. package/skills/media-openai-whisper.md +39 -0
  282. package/skills/media-peekaboo.md +191 -0
  283. package/skills/media-screenshot.md +268 -0
  284. package/skills/media-speech.md +145 -0
  285. package/skills/media-transcribe.md +82 -0
  286. package/skills/media-video-frames.md +47 -0
  287. package/skills/mobile-android-emulator-qa.md +81 -0
  288. package/skills/mobile-android-performance.md +280 -0
  289. package/skills/mobile-building-mcp-server-on-cloudflare.md +267 -0
  290. package/skills/mobile-building-native-ui.md +322 -0
  291. package/skills/mobile-expo-api-routes.md +369 -0
  292. package/skills/mobile-expo-cicd-workflows.md +92 -0
  293. package/skills/mobile-expo-deployment.md +191 -0
  294. package/skills/mobile-expo-dev-client.md +165 -0
  295. package/skills/mobile-expo-module.md +177 -0
  296. package/skills/mobile-expo-tailwind-setup.md +481 -0
  297. package/skills/mobile-expo-ui-jetpack-compose.md +41 -0
  298. package/skills/mobile-expo-ui-swift-ui.md +40 -0
  299. package/skills/mobile-ios-app-intents.md +78 -0
  300. package/skills/mobile-ios-debugger-agent.md +52 -0
  301. package/skills/mobile-ios-ettrace-performance.md +198 -0
  302. package/skills/mobile-ios-memgraph-leaks.md +77 -0
  303. package/skills/mobile-native-data-fetching.md +508 -0
  304. package/skills/mobile-packaging-notarization.md +48 -0
  305. package/skills/mobile-react-native-architecture.md +672 -0
  306. package/skills/mobile-react-native-mobile-design.md +438 -0
  307. package/skills/mobile-signing-entitlements.md +59 -0
  308. package/skills/mobile-swiftui-liquid-glass.md +91 -0
  309. package/skills/mobile-swiftui-patterns.md +210 -0
  310. package/skills/mobile-swiftui-performance-audit.md +108 -0
  311. package/skills/mobile-swiftui-ui-patterns.md +97 -0
  312. package/skills/mobile-swiftui-view-refactor.md +204 -0
  313. package/skills/mobile-upgrading-expo.md +134 -0
  314. package/skills/mobile.md +183 -0
  315. package/skills/notes.md +106 -0
  316. package/skills/planning-adr-create.md +62 -0
  317. package/skills/planning-adr-index.md +67 -0
  318. package/skills/planning-architecture-blueprint-generator.md +323 -0
  319. package/skills/planning-brainstorming.md +165 -0
  320. package/skills/planning-breakdown-epic-arch.md +67 -0
  321. package/skills/planning-breakdown-epic-pm.md +59 -0
  322. package/skills/planning-breakdown-feature-implementation.md +129 -0
  323. package/skills/planning-breakdown-feature-prd.md +62 -0
  324. package/skills/planning-breakdown-plan.md +510 -0
  325. package/skills/planning-breakdown-test.md +366 -0
  326. package/skills/planning-cloud-design-patterns.md +63 -0
  327. package/skills/planning-content-brief.md +128 -0
  328. package/skills/planning-content-strategy.md +138 -0
  329. package/skills/planning-content-translation.md +143 -0
  330. package/skills/planning-create-github-action-workflow-specification.md +277 -0
  331. package/skills/planning-create-github-issues-feature-from-implementation-plan.md +29 -0
  332. package/skills/planning-create-github-issues-for-unmet-specification-requirements.md +36 -0
  333. package/skills/planning-create-github-pull-request-from-specification.md +25 -0
  334. package/skills/planning-create-implementation-plan.md +158 -0
  335. package/skills/planning-create-specification.md +128 -0
  336. package/skills/planning-first-ask.md +31 -0
  337. package/skills/planning-folder-structure-blueprint-generator.md +406 -0
  338. package/skills/planning-gen-specs-as-issues.md +166 -0
  339. package/skills/planning-generate-snapshot.md +144 -0
  340. package/skills/planning-generate-status-report.md +336 -0
  341. package/skills/planning-metric-pack-designer.md +27 -0
  342. package/skills/planning-pm-spec.md +53 -0
  343. package/skills/planning-prd.md +144 -0
  344. package/skills/planning-project-assessment.md +182 -0
  345. package/skills/planning-project-setup-info-local.md +128 -0
  346. package/skills/planning-project-workflow-analysis-blueprint-generator.md +294 -0
  347. package/skills/planning-service-oriented-architecture.md +248 -0
  348. package/skills/planning-spec-to-backlog.md +544 -0
  349. package/skills/planning-technology-stack-blueprint-generator.md +243 -0
  350. package/skills/planning-update-implementation-plan.md +158 -0
  351. package/skills/planning-update-specification.md +128 -0
  352. package/skills/planning-what-context-needed.md +40 -0
  353. package/skills/planning-writing-plans.md +153 -0
  354. package/skills/prepare-application.md +81 -0
  355. package/skills/productivity-apple-notes.md +78 -0
  356. package/skills/productivity-apple-reminders.md +119 -0
  357. package/skills/productivity-capture-tasks-from-meeting-notes.md +680 -0
  358. package/skills/productivity-daily-prep.md +156 -0
  359. package/skills/productivity-email-drafter.md +101 -0
  360. package/skills/productivity-hr-onboarding.md +53 -0
  361. package/skills/productivity-things-mac.md +87 -0
  362. package/skills/productivity-update.md +169 -0
  363. package/skills/reminders.md +109 -0
  364. package/skills/research-dossier-collect.md +71 -0
  365. package/skills/research-kg-extract.md +37 -0
  366. package/skills/research-openai-docs.md +89 -0
  367. package/skills/research-research-add-items.md +31 -0
  368. package/skills/research-research-report.md +94 -0
  369. package/skills/research-research-synthesize.md +63 -0
  370. package/skills/research-summarize.md +88 -0
  371. package/skills/research-transformers-js.md +635 -0
  372. package/skills/research.md +119 -0
  373. package/skills/security-ai-prompt-engineering-safety-review.md +231 -0
  374. package/skills/security-attack-path-analysis.md +182 -0
  375. package/skills/security-gdpr-compliant.md +284 -0
  376. package/skills/security-mcp-security-audit.md +279 -0
  377. package/skills/security-pii-detect.md +31 -0
  378. package/skills/security-secret-scanning.md +243 -0
  379. package/skills/security-security-best-practices.md +87 -0
  380. package/skills/security-security-ownership-map.md +207 -0
  381. package/skills/security-security-review.md +169 -0
  382. package/skills/security-security-scan.md +138 -0
  383. package/skills/security-security-threat-model.md +82 -0
  384. package/skills/security-threat-model-analyst.md +76 -0
  385. package/skills/sysmon.md +181 -0
  386. package/skills/system-arch-linux-triage.md +32 -0
  387. package/skills/system-centos-linux-triage.md +32 -0
  388. package/skills/system-debian-linux-triage.md +32 -0
  389. package/skills/system-fedora-linux-triage.md +32 -0
  390. package/skills/system-geofeed-tuner.md +865 -0
  391. package/skills/system-iot-anomalies.md +15 -0
  392. package/skills/system-iot-firmware.md +16 -0
  393. package/skills/system-iot-fleet.md +14 -0
  394. package/skills/system-iot-register.md +19 -0
  395. package/skills/system-iot-witness-verify.md +15 -0
  396. package/skills/system-tmux.md +171 -0
  397. package/skills/system-window-management.md +228 -0
  398. package/skills/task-management.md +90 -0
  399. package/skills/tasks.md +102 -0
  400. package/skills/test-coverage.md +188 -0
  401. package/skills/ux-ui.md +128 -0
  402. package/skills/web.md +186 -0
  403. package/skills/workflow-act-on-feedback.md +15 -0
  404. package/skills/workflow-automate-this.md +245 -0
  405. package/skills/workflow-autoresearch.md +276 -0
  406. package/skills/workflow-coding-agent.md +317 -0
  407. package/skills/workflow-deep-research.md +44 -0
  408. package/skills/workflow-dispatching-parallel-agents.md +183 -0
  409. package/skills/workflow-eval-driven-dev.md +148 -0
  410. package/skills/workflow-executing-plans.md +71 -0
  411. package/skills/workflow-mentoring-juniors.md +311 -0
  412. package/skills/workflow-receiving-code-review.md +214 -0
  413. package/skills/workflow-repo-story-time.md +155 -0
  414. package/skills/workflow-requesting-code-review.md +104 -0
  415. package/skills/workflow-session-report.md +43 -0
  416. package/skills/workflow-structured-autonomy-generate.md +126 -0
  417. package/skills/workflow-subagent-driven-development.md +280 -0
  418. package/skills/writing.md +106 -0
  419. package/src/agent.js +0 -0
  420. package/src/browser.js +297 -0
  421. package/src/cli.js +25 -4
  422. package/src/code-reviewer.js +119 -0
  423. package/src/completions.js +1 -1
  424. package/src/control.js +222 -30
  425. package/src/coordinator.js +303 -0
  426. package/src/correction.js +29 -8
  427. package/src/edit-tracker.js +21 -0
  428. package/src/edit-viewer.js +414 -0
  429. package/src/endpoints.js +64 -15
  430. package/src/index.js +45 -11
  431. package/src/llm.js +86 -2
  432. package/src/mcp-client.js +416 -0
  433. package/src/memory.js +182 -0
  434. package/src/planner.js +216 -0
  435. package/src/rules.js +90 -0
  436. package/src/self-commands.js +757 -0
  437. package/src/services/voice.js +10 -7
  438. package/src/session-search.js +427 -0
  439. package/src/session.js +487 -99
  440. package/src/shmakk-server.js +91 -0
  441. package/src/skills.js +410 -3
  442. package/src/subagent.js +4 -1
  443. package/src/system-prompt.js +13 -5
  444. package/src/task-file.js +114 -0
  445. package/src/taskClassifier.js +246 -0
  446. package/src/team.js +752 -0
  447. package/src/tools.js +142 -21
  448. package/src/web.js +35 -5
  449. package/src/workflows.js +261 -0
  450. package/src/workspace-index.js +25 -6
@@ -0,0 +1,274 @@
1
+ ---
2
+ name: superjson
3
+ description: >
4
+ Configure SuperJSON transformer on both server initTRPC.create({ transformer:
5
+ superjson }) and every client terminating link (httpBatchLink, httpLink, wsLink,
6
+ httpSubscriptionLink) to support Date, Map, Set, BigInt over the wire. Transformer
7
+ must match on both sides. In v11, transformer goes on individual links, not the
8
+ client constructor.
9
+ type: composition
10
+ library: trpc
11
+ library_version: '11.15.1'
12
+ requires:
13
+ - server-setup
14
+ - client-setup
15
+ sources:
16
+ - www/docs/server/data-transformers.md
17
+ category: general
18
+ ---
19
+
20
+ # tRPC -- SuperJSON Transformer
21
+
22
+ ## Setup
23
+
24
+ ### 1. Install superjson
25
+
26
+ ```bash
27
+ npm install superjson
28
+ ```
29
+
30
+ ### 2. Add to initTRPC on the server
31
+
32
+ ```ts
33
+ // server/trpc.ts
34
+ import { initTRPC } from '@trpc/server';
35
+ import superjson from 'superjson';
36
+
37
+ const t = initTRPC.create({
38
+ transformer: superjson,
39
+ });
40
+
41
+ export const router = t.router;
42
+ export const publicProcedure = t.procedure;
43
+ ```
44
+
45
+ ### 3. Add to every terminating link on the client
46
+
47
+ ```ts
48
+ // client.ts
49
+ import { createTRPCClient, httpBatchLink } from '@trpc/client';
50
+ import superjson from 'superjson';
51
+ import type { AppRouter } from './server/trpc';
52
+
53
+ const client = createTRPCClient<AppRouter>({
54
+ links: [
55
+ httpBatchLink({
56
+ url: 'http://localhost:3000/trpc',
57
+ transformer: superjson,
58
+ }),
59
+ ],
60
+ });
61
+ ```
62
+
63
+ Now Date, Map, Set, BigInt, RegExp, undefined, and other non-JSON types survive the round trip.
64
+
65
+ ## Core Patterns
66
+
67
+ ### SuperJSON with splitLink and Subscriptions
68
+
69
+ ```ts
70
+ import {
71
+ createTRPCClient,
72
+ httpBatchLink,
73
+ httpSubscriptionLink,
74
+ splitLink,
75
+ } from '@trpc/client';
76
+ import superjson from 'superjson';
77
+ import type { AppRouter } from './server/trpc';
78
+
79
+ const client = createTRPCClient<AppRouter>({
80
+ links: [
81
+ splitLink({
82
+ condition: (op) => op.type === 'subscription',
83
+ true: httpSubscriptionLink({
84
+ url: 'http://localhost:3000/trpc',
85
+ transformer: superjson,
86
+ }),
87
+ false: httpBatchLink({
88
+ url: 'http://localhost:3000/trpc',
89
+ transformer: superjson,
90
+ }),
91
+ }),
92
+ ],
93
+ });
94
+ ```
95
+
96
+ Every terminating link in every branch must have `transformer: superjson`.
97
+
98
+ ### SuperJSON with wsLink
99
+
100
+ ```ts
101
+ import { createTRPCClient, createWSClient, wsLink } from '@trpc/client';
102
+ import superjson from 'superjson';
103
+ import type { AppRouter } from './server/trpc';
104
+
105
+ const wsClient = createWSClient({
106
+ url: 'ws://localhost:3000',
107
+ });
108
+
109
+ const client = createTRPCClient<AppRouter>({
110
+ links: [
111
+ wsLink<AppRouter>({
112
+ client: wsClient,
113
+ transformer: superjson,
114
+ }),
115
+ ],
116
+ });
117
+ ```
118
+
119
+ ### Returning Dates from Procedures
120
+
121
+ ```ts
122
+ // server
123
+ import { z } from 'zod';
124
+ import { publicProcedure, router } from './trpc';
125
+
126
+ const appRouter = router({
127
+ getEvent: publicProcedure
128
+ .input(z.object({ id: z.string() }))
129
+ .query(({ input }) => {
130
+ return {
131
+ id: input.id,
132
+ name: 'Launch Party',
133
+ date: new Date('2025-01-01T00:00:00Z'),
134
+ };
135
+ }),
136
+ });
137
+
138
+ export type AppRouter = typeof appRouter;
139
+ ```
140
+
141
+ ```ts
142
+ // client
143
+ const event = await client.getEvent.query({ id: '1' });
144
+ console.log(event.date instanceof Date); // true
145
+ console.log(event.date.getFullYear()); // 2025
146
+ ```
147
+
148
+ Without superjson, `event.date` would be a string like `"2025-01-01T00:00:00.000Z"`.
149
+
150
+ ## Common Mistakes
151
+
152
+ ### [CRITICAL] Transformer on server but missing from client link
153
+
154
+ Wrong:
155
+
156
+ ```ts
157
+ // Server
158
+ const t = initTRPC.create({ transformer: superjson });
159
+
160
+ // Client
161
+ const client = createTRPCClient<AppRouter>({
162
+ links: [httpBatchLink({ url: 'http://localhost:3000/trpc' })],
163
+ });
164
+ ```
165
+
166
+ Correct:
167
+
168
+ ```ts
169
+ // Server
170
+ const t = initTRPC.create({ transformer: superjson });
171
+
172
+ // Client
173
+ const client = createTRPCClient<AppRouter>({
174
+ links: [
175
+ httpBatchLink({
176
+ url: 'http://localhost:3000/trpc',
177
+ transformer: superjson,
178
+ }),
179
+ ],
180
+ });
181
+ ```
182
+
183
+ Server encodes with superjson but client tries to parse raw JSON, causing "Unable to transform response" or garbled data.
184
+
185
+ Source: www/docs/server/data-transformers.md
186
+
187
+ ### [CRITICAL] Transformer goes on individual links, not createTRPCClient
188
+
189
+ The `transformer` option is on individual terminating links:
190
+
191
+ ```ts
192
+ createTRPCClient<AppRouter>({
193
+ links: [
194
+ httpBatchLink({
195
+ url: 'http://localhost:3000/trpc',
196
+ transformer: superjson,
197
+ }),
198
+ ],
199
+ });
200
+ ```
201
+
202
+ In v11, `transformer` was moved from the client constructor to individual links. Passing it to `createTRPCClient` throws a TypeError.
203
+
204
+ Source: packages/client/src/internals/TRPCUntypedClient.ts
205
+
206
+ ### [CRITICAL] Transformer on only some terminating links in splitLink
207
+
208
+ Wrong:
209
+
210
+ ```ts
211
+ splitLink({
212
+ condition: (op) => op.type === 'subscription',
213
+ true: httpSubscriptionLink({
214
+ url: 'http://localhost:3000/trpc',
215
+ // missing transformer!
216
+ }),
217
+ false: httpBatchLink({
218
+ url: 'http://localhost:3000/trpc',
219
+ transformer: superjson,
220
+ }),
221
+ });
222
+ ```
223
+
224
+ Correct:
225
+
226
+ ```ts
227
+ splitLink({
228
+ condition: (op) => op.type === 'subscription',
229
+ true: httpSubscriptionLink({
230
+ url: 'http://localhost:3000/trpc',
231
+ transformer: superjson,
232
+ }),
233
+ false: httpBatchLink({
234
+ url: 'http://localhost:3000/trpc',
235
+ transformer: superjson,
236
+ }),
237
+ });
238
+ ```
239
+
240
+ Every terminating link must have the same transformer. A missing transformer on one branch causes deserialization failures only for operations routed through that branch.
241
+
242
+ Source: www/docs/server/data-transformers.md
243
+
244
+ ### [HIGH] Using transformer on client but not on server
245
+
246
+ Wrong:
247
+
248
+ ```ts
249
+ // Server -- no transformer
250
+ const t = initTRPC.create();
251
+
252
+ // Client
253
+ httpBatchLink({ url, transformer: superjson });
254
+ ```
255
+
256
+ Correct:
257
+
258
+ ```ts
259
+ // Server
260
+ const t = initTRPC.create({ transformer: superjson });
261
+
262
+ // Client
263
+ httpBatchLink({ url, transformer: superjson });
264
+ ```
265
+
266
+ The transformer must be configured on both `initTRPC.create()` and every client link. Client-only transformer corrupts the request encoding because the server expects plain JSON.
267
+
268
+ Source: www/docs/server/data-transformers.md
269
+
270
+ ## See Also
271
+
272
+ - `client-setup` -- create the tRPC client and configure links
273
+ - `links` -- detailed options for each link type including transformer
274
+ - `server-setup` -- initTRPC.create() where the server transformer is configured
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: swiftpm-macos
3
+ description: Build, run, and test pure SwiftPM-based macOS packages and executables. Use when the repo is package-first, when there is no Xcode project, or when Swift package workflows are the fastest path to diagnosis.
4
+ category: general
5
+ ---
6
+
7
+ # SwiftPM for macOS
8
+
9
+ ## Quick Start
10
+
11
+ Use this skill when `Package.swift` is the primary entrypoint or when SwiftPM is
12
+ the fastest path to a reproducible result.
13
+
14
+ ## Workflow
15
+
16
+ 1. Inspect the package.
17
+ - Read `Package.swift`.
18
+ - Identify executable, library, and test products.
19
+
20
+ 2. Build with SwiftPM.
21
+ - Use `swift build` by default.
22
+ - Use release mode only when the user explicitly needs it.
23
+
24
+ 3. Run the right product.
25
+ - Use `swift run <product>` when an executable exists.
26
+ - If multiple executables exist, explain the default choice.
27
+
28
+ 4. Test narrowly.
29
+ - Use `swift test`.
30
+ - Apply filters when a specific test target or case is known.
31
+
32
+ 5. Summarize failures.
33
+ - Module/import resolution
34
+ - Package graph or dependency issue
35
+ - Linker failure
36
+ - Runtime failure
37
+ - Test regression
38
+
39
+ ## Guardrails
40
+
41
+ - Prefer SwiftPM over Xcode when both exist and the package path is clearly simpler.
42
+ - Do not assume an app bundle exists in a pure package workflow.
43
+ - Explain when the package is library-only and therefore not directly runnable.
44
+
45
+ ## Output Expectations
46
+
47
+ Provide:
48
+ - the package products you found
49
+ - the command you ran
50
+ - whether build, run, or test succeeded
51
+ - the top blocker if not
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: threat-model
3
+ description: Use when Codex is already in the threat-modeling phase of a security scan, the user explicitly invokes $threat-model, or the user explicitly asks to create, update, or persist a repository threat model. Do not use as the primary trigger for full PR, commit, branch, patch, or repository scans.
4
+ metadata:
5
+ short-description: Build a repository threat model
6
+ category: general
7
+ ---
8
+
9
+ # Security Threat Model
10
+
11
+ ## Objective
12
+
13
+ Establish the repository-scoped threat model at the path defined in `../../references/scan-artifacts.md`. If this already exists, stop here. If a threat model or clearly authoritative security scan guidance is provided or already exists, persist it unchanged to this file, then stop here.
14
+
15
+ `AGENTS.md` can be that authoritative source when it is sufficiently specific about the repository's product surfaces, trust boundaries, attacker-controlled inputs, assumptions, or security scan guidance to serve as the threat model.
16
+
17
+ If no threat model is provided, generate a repository-scoped threat model to be used in future bug discovery. The threat model should holistically cover the entire repository and should make it obvious:
18
+
19
+ - what assets or privileges matter
20
+ - what trust boundaries exist
21
+ - what inputs are attacker-controlled
22
+ - what invariants the code must preserve
23
+ - what repository-wide failure modes would matter most
24
+
25
+ ## Artifact Resolution
26
+
27
+ The path references in this skill are the default locations for this phase.
28
+ If the user explicitly provides a different path for a required input or output, use the user-provided path instead of the corresponding default path referenced in this skill.
29
+ If a required input is still missing, stop and ask the user for it before continuing.
30
+ Use the shared scan artifact path conventions in `../../references/scan-artifacts.md`.
31
+
32
+ ## Workflow
33
+
34
+ 1. Resolve `repo_name`, `security_scans_dir`, and the repository-scoped threat model path using `../../references/scan-artifacts.md`.
35
+ 2. If the repository-scoped threat model already exists, stop here.
36
+ 3. If a threat model or authoritative security scan guidance is provided or referenced:
37
+ - write it exactly to the repository-scoped threat model path
38
+ - treat that file as the only threat model source of truth
39
+ - do not expand, summarize, or reinterpret it
40
+ - `AGENTS.md` is acceptable here when it is clearly being used as the security scan guidance or threat model source for this scan and is sufficiently repository-specific to stand in for a threat model
41
+ 4. Otherwise, generate a repository-scoped threat model using the checklist below.
42
+ 5. Before finalizing this phase, sanity-check that:
43
+ - the threat model is repository-scoped rather than being centered around any specific scan target
44
+ - it describes repository-wide primary product or runtime surfaces and trust boundaries before covering any narrower examples
45
+ - any vulnerability-class discussion is about repository-context classes, not findings about any current diff
46
+ 6. Write the exact threat model to the repository-scoped threat model path.
47
+
48
+ ## Threat Model Generation Guidance
49
+
50
+ Generate and structure the threat model using `references/threat-model-guidance.md`.
51
+
52
+ ## Hard Rules
53
+
54
+ - A provided threat model or authoritative security scan guidance is authoritative.
55
+ - Threat model generation must stay at repository scope unless the user explicitly asks for narrower scope.
56
+ - Do not turn this phase into findings about any current diff.
57
+ - Do not let the current scan target, touched subsystem, or changed directories become the center of gravity for this phase unless the user explicitly asks for that narrower scope.
58
+ - In large monorepos, avoid centering `personal/`, `test/`, `tests/`, `docs/`, `examples/`, or one-off developer tooling unless repository evidence shows those are real deployed or privileged workflow surfaces.
59
+ - Call out trust boundaries and assumptions explicitly.
60
+ - Keep references to vulnerability types at the level of repository-context classes, rather than any diff findings.
61
+ - Persist the threat model output to the repository-scoped threat model path from `../../references/scan-artifacts.md`.
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: invoices
3
+ version: 1
4
+ category: business
5
+ ---
6
+
7
+ # Invoice Generation
8
+
9
+ Create professional invoices in PDF or markdown format from a template and line items.
10
+
11
+ ## When to use this skill
12
+
13
+ - User wants to create an invoice for a client
14
+ - User wants to generate a recurring invoice
15
+ - User asks about billing, invoicing, payment request
16
+ - User mentions "invoice", "bill the client", "send invoice"
17
+
18
+ ## Prerequisites
19
+
20
+ ```
21
+ which pandoc wkhtmltopdf 2>/dev/null
22
+ ```
23
+
24
+ - `pandoc` — converts markdown to PDF (via LaTeX or wkhtmltopdf)
25
+ - `wkhtmltopdf` — HTML to PDF (alternative to LaTeX for simpler output)
26
+
27
+ If neither: create a clean markdown file the user can export manually.
28
+
29
+ ## Procedure
30
+
31
+ ### Step 1: Gather invoice details
32
+
33
+ Ask the user for (or infer from context):
34
+ - **Your info**: name/company, address, email, payment details (bank, PayPal, etc.)
35
+ - **Client info**: client name/company, address
36
+ - **Invoice number**: use a sequential numbering scheme (INV-2024-001)
37
+ - **Issue date and due date** (typically net 30 days)
38
+ - **Line items**: description, quantity, unit price
39
+ - **Tax rate** (if applicable)
40
+ - **Notes** (payment instructions, late fees, etc.)
41
+
42
+ ### Step 2: Calculate totals
43
+
44
+ ```python
45
+ items = [
46
+ {"description": "Website development", "qty": 1, "unit": 5000},
47
+ {"description": "Hosting setup", "qty": 1, "unit": 200},
48
+ {"description": "Monthly maintenance", "qty": 3, "unit": 150},
49
+ ]
50
+
51
+ subtotal = sum(item["qty"] * item["unit"] for item in items)
52
+ tax_rate = 0.20 # 20% VAT
53
+ tax = subtotal * tax_rate
54
+ total = subtotal + tax
55
+ ```
56
+
57
+ ### Step 3: Generate invoice markdown
58
+
59
+ Write to `invoices/INV-2024-001.md`:
60
+
61
+ ```markdown
62
+ # INVOICE
63
+
64
+ **From:**
65
+ Marcus Bader
66
+ 123 Main Street, Stockholm, Sweden
67
+ marcus@example.com
68
+
69
+ **To:**
70
+ Client Company Name
71
+ 456 Client Street, London, UK
72
+ billing@client.com
73
+
74
+ ---
75
+
76
+ | | |
77
+ |---|---|
78
+ | **Invoice #** | INV-2024-001 |
79
+ | **Issue Date** | 15 January 2024 |
80
+ | **Due Date** | 14 February 2024 |
81
+ | **Status** | Due |
82
+
83
+ ---
84
+
85
+ ## Services
86
+
87
+ | Description | Qty | Unit Price | Total |
88
+ |---|---|---|---|
89
+ | Website development | 1 | €5,000.00 | €5,000.00 |
90
+ | Hosting setup | 1 | €200.00 | €200.00 |
91
+ | Monthly maintenance | 3 | €150.00 | €450.00 |
92
+
93
+ ---
94
+
95
+ | | |
96
+ |---|---|
97
+ | **Subtotal** | €5,650.00 |
98
+ | **VAT (20%)** | €1,130.00 |
99
+ | **Total Due** | **€6,780.00** |
100
+
101
+ ---
102
+
103
+ ## Payment Details
104
+
105
+ Bank: Example Bank
106
+ IBAN: SE00 0000 0000 0000 0000
107
+ BIC: EXAMPLEXX
108
+
109
+ Please reference invoice number **INV-2024-001** with your payment.
110
+
111
+ Late payments are subject to 1.5% monthly interest after due date.
112
+ ```
113
+
114
+ ### Step 4: Convert to PDF
115
+
116
+ With pandoc + wkhtmltopdf:
117
+ ```
118
+ pandoc INV-2024-001.md -o INV-2024-001.pdf --pdf-engine=wkhtmltopdf
119
+ ```
120
+
121
+ With pandoc + LaTeX (better typography):
122
+ ```
123
+ pandoc INV-2024-001.md -o INV-2024-001.pdf
124
+ ```
125
+
126
+ With a CSS stylesheet for better styling:
127
+ ```
128
+ pandoc INV-2024-001.md -o INV-2024-001.pdf --pdf-engine=wkhtmltopdf --css=invoice.css
129
+ ```
130
+
131
+ ### Step 5: Track invoice
132
+
133
+ Update an invoice log file (`~/invoices/log.csv`):
134
+ ```
135
+ date,invoice_no,client,amount,status,due_date
136
+ 2024-01-15,INV-2024-001,Client Company,6780.00,sent,2024-02-14
137
+ ```
138
+
139
+ ## Output format
140
+
141
+ After creating the invoice, summarize:
142
+ ```
143
+ INVOICE CREATED: INV-2024-001
144
+
145
+ Client: Client Company Name
146
+ Amount: €6,780.00 (incl. 20% VAT)
147
+ Due: 14 February 2024
148
+
149
+ Files:
150
+ Markdown: ~/invoices/INV-2024-001.md
151
+ PDF: ~/invoices/INV-2024-001.pdf
152
+
153
+ Next steps:
154
+ • Send PDF to billing@client.com
155
+ • Log entry added to ~/invoices/log.csv
156
+ ```
157
+
158
+ ## Pitfalls
159
+
160
+ - Always confirm the amounts with the user before generating PDF
161
+ - Use the same invoice numbering scheme consistently — don't restart the sequence
162
+ - Keep copies of all invoices (don't overwrite)
163
+ - For international clients, be clear about currency; for EU B2B, include VAT numbers
164
+
165
+ ## Verification
166
+
167
+ After generating: open/read the PDF or markdown to verify totals are correct before sending.
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: licenses
3
+ version: 1
4
+ category: business
5
+ ---
6
+
7
+ # Software License Analysis
8
+
9
+ Analyze dependency licenses for compatibility, generate NOTICE files, and flag compliance risks.
10
+
11
+ ## When to use this skill
12
+
13
+ - User wants to know what licenses their dependencies use
14
+ - User wants to check if licenses are compatible with their project's license
15
+ - User wants to generate a NOTICE or ATTRIBUTIONS file
16
+ - User is preparing for open-source release or commercial distribution
17
+ - User mentions "license", "GPL", "MIT", "open source compliance", "attribution"
18
+
19
+ ## License Compatibility Quick Reference
20
+
21
+ | Dependency License | Can use in MIT project? | Can use in commercial closed-source? |
22
+ |-------------------|------------------------|-------------------------------------|
23
+ | MIT | ✅ Yes | ✅ Yes (attribution required) |
24
+ | ISC | ✅ Yes | ✅ Yes (attribution required) |
25
+ | Apache-2.0 | ✅ Yes | ✅ Yes (attribution + NOTICE required)|
26
+ | BSD-2/3-Clause | ✅ Yes | ✅ Yes (attribution required) |
27
+ | MPL-2.0 | ⚠️ Check | ⚠️ Modified MPL files must stay open |
28
+ | LGPL-2.1/3.0 | ⚠️ Check | ⚠️ OK if dynamically linked, complex otherwise |
29
+ | GPL-2.0/3.0 | ❌ Copyleft | ❌ Forces project to go GPL |
30
+ | AGPL-3.0 | ❌ Strong copyleft | ❌ Also covers network use |
31
+ | CC-BY-SA | ❌ For data/content | ❌ Copyleft, requires same license |
32
+ | Proprietary | ❌ Check terms | ❌ Need commercial license |
33
+
34
+ ## Procedure
35
+
36
+ ### Step 1: Extract all dependency licenses
37
+
38
+ **npm / Node.js:**
39
+ ```
40
+ npx license-checker --json --out licenses.json
41
+ npx license-checker --summary
42
+ npx license-checker --csv --out licenses.csv
43
+ ```
44
+
45
+ **Python:**
46
+ ```
47
+ pip install pip-licenses 2>/dev/null
48
+ pip-licenses --format=json --output-file=licenses.json
49
+ pip-licenses --format=table
50
+ ```
51
+
52
+ **Go:**
53
+ ```
54
+ go-licenses report ./... 2>/dev/null
55
+ # or: golicense .
56
+ ```
57
+
58
+ **Cargo (Rust):**
59
+ ```
60
+ cargo license
61
+ cargo license --json
62
+ ```
63
+
64
+ ### Step 2: Check for problematic licenses
65
+
66
+ **npm — fail on copyleft:**
67
+ ```
68
+ npx license-checker --failOn "GPL-2.0;GPL-3.0;AGPL-3.0;LGPL-2.1;LGPL-3.0"
69
+ ```
70
+
71
+ **Scan the output JSON for anything that isn't in the safe list:**
72
+
73
+ Safe licenses (permissive): MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0, CC0-1.0, Unlicense, 0BSD
74
+
75
+ Review carefully: MPL-2.0, LGPL-*, CC-BY-*, EUPL-1.2
76
+
77
+ Red flag: GPL-*, AGPL-*, CC-BY-SA-*, SSPL
78
+
79
+ ### Step 3: Investigate "Unknown" licenses
80
+
81
+ For packages with unknown or unusual licenses:
82
+ 1. Find the package's repository URL
83
+ 2. Look for a LICENSE or COPYING file in the repo root
84
+ 3. Identify the license and add it to your records
85
+
86
+ ### Step 4: Generate NOTICE / ATTRIBUTIONS file
87
+
88
+ For projects using Apache-licensed dependencies (required) or for general attribution:
89
+
90
+ ```python
91
+ import json
92
+
93
+ with open('licenses.json') as f:
94
+ deps = json.load(f)
95
+
96
+ lines = ["THIRD-PARTY SOFTWARE NOTICES\n", "=" * 40 + "\n\n"]
97
+ for name, info in sorted(deps.items()):
98
+ lines.append(f"Package: {name}\n")
99
+ if info.get('licenseFile'):
100
+ lines.append(f"License: {info.get('licenses', 'Unknown')}\n")
101
+ lines.append(f"Repository: {info.get('repository', 'N/A')}\n")
102
+ lines.append("\n")
103
+
104
+ with open('NOTICE', 'w') as f:
105
+ f.writelines(lines)
106
+ ```
107
+
108
+ ### Step 5: For LGPL dependencies
109
+
110
+ LGPL is acceptable IF:
111
+ - You dynamically link to the library (not statically embed it)
112
+ - You allow users to relink with a modified version of the library
113
+ - You include a copy of the LGPL license text
114
+
115
+ Verify your build system uses dynamic linking for LGPL packages.
116
+
117
+ ## Output format
118
+
119
+ ```
120
+ LICENSE ANALYSIS: my-project (MIT)
121
+
122
+ SUMMARY
123
+ Total packages: 142
124
+ License types: MIT (89), ISC (23), Apache-2.0 (18), BSD-3-Clause (8), Other (4)
125
+
126
+ ✅ COMPATIBLE — No action needed
127
+ MIT, ISC, BSD-*, Apache-2.0 packages are all compatible with MIT license.
128
+
129
+ ⚠️ REVIEW REQUIRED
130
+ • lodash-addons@2.4.2 — license: "Unlicense" — generally permissive, but verify.
131
+ • uuid-tool@1.0.0 — license listed as "WTFPL" — effectively public domain, but
132
+ double-check company policy.
133
+
134
+ ❌ POTENTIAL ISSUES
135
+ • analytics-lib@3.1.0 — GPL-3.0 — INCOMPATIBLE with closed-source commercial use.
136
+ Alternatives: consider mixpanel-browser (MIT) or custom implementation.
137
+
138
+ REQUIRED ATTRIBUTIONS
139
+ Apache-2.0 packages require inclusion of NOTICE file in distributions:
140
+ • typescript-eslint@6.0.0 (Apache-2.0)
141
+ • @aws-sdk/client-s3@3.0.0 (Apache-2.0)
142
+
143
+ ACTION ITEMS
144
+ 1. Replace analytics-lib with a MIT/Apache-2.0 alternative
145
+ 2. Generate NOTICE file before next commercial release
146
+ 3. Verify Unlicense/WTFPL packages are acceptable under company IP policy
147
+ ```
148
+
149
+ ## Pitfalls
150
+
151
+ - "MIT OR Apache-2.0" means you can choose either — pick MIT for simplicity
152
+ - Some packages declare one license in package.json but include a different LICENSE file — the file takes precedence
153
+ - LGPL compliance is complex: consult legal counsel for commercial products that embed LGPL libraries
154
+ - This analysis informs decisions but is not legal advice — for significant commercial products, have a lawyer review
155
+
156
+ ## Verification
157
+
158
+ After generating NOTICE file: verify it includes entries for all Apache-2.0 packages (which require it).
159
+ Cross-check the flagged GPL packages actually appear in `npm ls` to confirm they're truly in your dependency tree (not just listed in package.json but tree-shaken).