@codyswann/lisa 1.47.0 → 1.48.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 (216) hide show
  1. package/all/copy-overwrite/.claude/rules/lisa.md +23 -10
  2. package/all/copy-overwrite/.claude/settings.json +10 -230
  3. package/all/deletions.json +67 -1
  4. package/cdk/copy-overwrite/.claude/settings.json +80 -0
  5. package/cdk/create-only/.github/workflows/ci.yml +1 -1
  6. package/cdk/create-only/.github/workflows/deploy.yml +1 -1
  7. package/dist/core/lisa.d.ts +14 -0
  8. package/dist/core/lisa.d.ts.map +1 -1
  9. package/dist/core/lisa.js +47 -0
  10. package/dist/core/lisa.js.map +1 -1
  11. package/expo/copy-overwrite/.claude/settings.json +80 -0
  12. package/expo/copy-overwrite/eslint.expo.ts +2 -2
  13. package/expo/create-only/.github/workflows/ci.yml +1 -1
  14. package/expo/create-only/.github/workflows/deploy.yml +1 -1
  15. package/expo/deletions.json +33 -0
  16. package/expo/package-lisa/package.lisa.json +2 -2
  17. package/nestjs/copy-overwrite/.claude/settings.json +80 -0
  18. package/nestjs/create-only/.github/workflows/ci.yml +1 -1
  19. package/nestjs/create-only/.github/workflows/deploy.yml +1 -1
  20. package/nestjs/deletions.json +8 -0
  21. package/package.json +8 -4
  22. package/rails/copy-overwrite/.claude/settings.json +80 -0
  23. package/rails/create-only/.github/workflows/ci.yml +1 -1
  24. package/rails/deletions.json +11 -1
  25. package/typescript/copy-overwrite/.claude/settings.json +13 -231
  26. package/typescript/copy-overwrite/.github/workflows/claude-ci-auto-fix.yml +1 -0
  27. package/typescript/copy-overwrite/.github/workflows/claude-code-review-response.yml +11 -10
  28. package/typescript/copy-overwrite/.github/workflows/claude-deploy-auto-fix.yml +1 -0
  29. package/typescript/copy-overwrite/.github/workflows/claude-nightly-code-complexity.yml +1 -0
  30. package/typescript/copy-overwrite/.github/workflows/claude-nightly-test-coverage.yml +1 -0
  31. package/typescript/copy-overwrite/.github/workflows/claude-nightly-test-improvement.yml +2 -0
  32. package/typescript/copy-overwrite/.github/workflows/claude.yml +1 -0
  33. package/typescript/copy-overwrite/eslint.typescript.ts +1 -1
  34. package/typescript/create-only/.github/workflows/ci.yml +1 -1
  35. package/typescript/deletions.json +12 -1
  36. package/typescript/package-lisa/package.lisa.json +1 -1
  37. package/all/copy-overwrite/.claude/agents/agent-architect.md +0 -310
  38. package/all/copy-overwrite/.claude/agents/architecture-specialist.md +0 -53
  39. package/all/copy-overwrite/.claude/agents/debug-specialist.md +0 -204
  40. package/all/copy-overwrite/.claude/agents/git-history-analyzer.md +0 -183
  41. package/all/copy-overwrite/.claude/agents/hooks-expert.md +0 -74
  42. package/all/copy-overwrite/.claude/agents/implementer.md +0 -54
  43. package/all/copy-overwrite/.claude/agents/learner.md +0 -44
  44. package/all/copy-overwrite/.claude/agents/performance-specialist.md +0 -95
  45. package/all/copy-overwrite/.claude/agents/product-specialist.md +0 -72
  46. package/all/copy-overwrite/.claude/agents/quality-specialist.md +0 -55
  47. package/all/copy-overwrite/.claude/agents/security-specialist.md +0 -58
  48. package/all/copy-overwrite/.claude/agents/skill-evaluator.md +0 -246
  49. package/all/copy-overwrite/.claude/agents/slash-command-architect.md +0 -87
  50. package/all/copy-overwrite/.claude/agents/test-specialist.md +0 -64
  51. package/all/copy-overwrite/.claude/agents/verification-specialist.md +0 -189
  52. package/all/copy-overwrite/.claude/agents/web-search-researcher.md +0 -112
  53. package/all/copy-overwrite/.claude/commands/git/commit-and-submit-pr.md +0 -7
  54. package/all/copy-overwrite/.claude/commands/git/commit-submit-pr-and-verify.md +0 -7
  55. package/all/copy-overwrite/.claude/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  56. package/all/copy-overwrite/.claude/commands/git/commit.md +0 -7
  57. package/all/copy-overwrite/.claude/commands/git/prune.md +0 -6
  58. package/all/copy-overwrite/.claude/commands/git/submit-pr.md +0 -7
  59. package/all/copy-overwrite/.claude/commands/jira/create.md +0 -7
  60. package/all/copy-overwrite/.claude/commands/jira/sync.md +0 -7
  61. package/all/copy-overwrite/.claude/commands/jira/verify.md +0 -7
  62. package/all/copy-overwrite/.claude/commands/lisa/review-implementation.md +0 -7
  63. package/all/copy-overwrite/.claude/commands/plan/add-test-coverage.md +0 -7
  64. package/all/copy-overwrite/.claude/commands/plan/create.md +0 -6
  65. package/all/copy-overwrite/.claude/commands/plan/execute.md +0 -7
  66. package/all/copy-overwrite/.claude/commands/plan/fix-linter-error.md +0 -7
  67. package/all/copy-overwrite/.claude/commands/plan/local-code-review.md +0 -6
  68. package/all/copy-overwrite/.claude/commands/plan/lower-code-complexity.md +0 -6
  69. package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines-per-function.md +0 -7
  70. package/all/copy-overwrite/.claude/commands/plan/reduce-max-lines.md +0 -7
  71. package/all/copy-overwrite/.claude/commands/pull-request/review.md +0 -7
  72. package/all/copy-overwrite/.claude/commands/security/zap-scan.md +0 -6
  73. package/all/copy-overwrite/.claude/commands/sonarqube/check.md +0 -6
  74. package/all/copy-overwrite/.claude/commands/sonarqube/fix.md +0 -6
  75. package/all/copy-overwrite/.claude/commands/tasks/load.md +0 -7
  76. package/all/copy-overwrite/.claude/commands/tasks/sync.md +0 -7
  77. package/all/copy-overwrite/.claude/hooks/check-tired-boss.sh +0 -61
  78. package/all/copy-overwrite/.claude/hooks/debug-hook.sh +0 -47
  79. package/all/copy-overwrite/.claude/hooks/enforce-plan-rules.sh +0 -15
  80. package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +0 -183
  81. package/all/copy-overwrite/.claude/hooks/setup-jira-cli.sh +0 -52
  82. package/all/copy-overwrite/.claude/hooks/sync-tasks.sh +0 -107
  83. package/all/copy-overwrite/.claude/hooks/ticket-sync-reminder.sh +0 -23
  84. package/all/copy-overwrite/.claude/hooks/track-plan-sessions.sh +0 -164
  85. package/all/copy-overwrite/.claude/rules/coding-philosophy.md +0 -428
  86. package/all/copy-overwrite/.claude/rules/verfication.md +0 -541
  87. package/all/copy-overwrite/.claude/skills/agent-design-best-practices/SKILL.md +0 -219
  88. package/all/copy-overwrite/.claude/skills/git-commit/SKILL.md +0 -48
  89. package/all/copy-overwrite/.claude/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  90. package/all/copy-overwrite/.claude/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  91. package/all/copy-overwrite/.claude/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  92. package/all/copy-overwrite/.claude/skills/git-prune/SKILL.md +0 -35
  93. package/all/copy-overwrite/.claude/skills/git-submit-pr/SKILL.md +0 -44
  94. package/all/copy-overwrite/.claude/skills/jira-create/SKILL.md +0 -41
  95. package/all/copy-overwrite/.claude/skills/jira-sync/SKILL.md +0 -63
  96. package/all/copy-overwrite/.claude/skills/jira-verify/SKILL.md +0 -29
  97. package/all/copy-overwrite/.claude/skills/lisa-review-implementation/SKILL.md +0 -209
  98. package/all/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +0 -44
  99. package/all/copy-overwrite/.claude/skills/plan-execute/SKILL.md +0 -89
  100. package/all/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +0 -45
  101. package/all/copy-overwrite/.claude/skills/plan-local-code-review/SKILL.md +0 -88
  102. package/all/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +0 -44
  103. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +0 -45
  104. package/all/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  105. package/all/copy-overwrite/.claude/skills/pull-request-review/SKILL.md +0 -68
  106. package/all/copy-overwrite/.claude/skills/security-zap-scan/SKILL.md +0 -33
  107. package/all/copy-overwrite/.claude/skills/skill-creator/LICENSE.txt +0 -202
  108. package/all/copy-overwrite/.claude/skills/skill-creator/SKILL.md +0 -210
  109. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  110. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +0 -305
  111. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +0 -112
  112. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +0 -67
  113. package/all/copy-overwrite/.claude/skills/sonarqube-check/SKILL.md +0 -11
  114. package/all/copy-overwrite/.claude/skills/sonarqube-fix/SKILL.md +0 -8
  115. package/all/copy-overwrite/.claude/skills/tasks-load/SKILL.md +0 -88
  116. package/all/copy-overwrite/.claude/skills/tasks-sync/SKILL.md +0 -108
  117. package/eslint-plugin-code-organization/README.md +0 -149
  118. package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +0 -473
  119. package/eslint-plugin-code-organization/index.js +0 -28
  120. package/eslint-plugin-code-organization/package.json +0 -10
  121. package/eslint-plugin-code-organization/rules/enforce-statement-order.js +0 -162
  122. package/expo/copy-overwrite/.claude/agents/ops-specialist.md +0 -124
  123. package/expo/copy-overwrite/.claude/rules/expo-verification.md +0 -261
  124. package/expo/copy-overwrite/.claude/skills/apollo-client/SKILL.md +0 -238
  125. package/expo/copy-overwrite/.claude/skills/apollo-client/references/mutation-patterns.md +0 -360
  126. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/SKILL.md +0 -360
  127. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/atomic-levels.md +0 -417
  128. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/folder-structure.md +0 -257
  129. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/gluestack-mapping.md +0 -233
  130. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +0 -329
  131. package/expo/copy-overwrite/.claude/skills/container-view-pattern/SKILL.md +0 -299
  132. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/examples.md +0 -749
  133. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/patterns.md +0 -318
  134. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +0 -200
  135. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +0 -209
  136. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/SKILL.md +0 -268
  137. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/common-issues.md +0 -619
  138. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/file-extensions.md +0 -340
  139. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/platform-api.md +0 -276
  140. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +0 -416
  141. package/expo/copy-overwrite/.claude/skills/directory-structure/SKILL.md +0 -202
  142. package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +0 -445
  143. package/expo/copy-overwrite/.claude/skills/expo-env-config/SKILL.md +0 -309
  144. package/expo/copy-overwrite/.claude/skills/expo-env-config/references/validation-patterns.md +0 -417
  145. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/SKILL.md +0 -431
  146. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/references/official-docs.md +0 -290
  147. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +0 -171
  148. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/SKILL.md +0 -411
  149. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/color-tokens.md +0 -343
  150. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/component-mapping.md +0 -307
  151. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/spacing-scale.md +0 -300
  152. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +0 -315
  153. package/expo/copy-overwrite/.claude/skills/local-state/SKILL.md +0 -362
  154. package/expo/copy-overwrite/.claude/skills/local-state/references/async-storage.md +0 -505
  155. package/expo/copy-overwrite/.claude/skills/local-state/references/persistence-patterns.md +0 -711
  156. package/expo/copy-overwrite/.claude/skills/local-state/references/reactive-variables.md +0 -446
  157. package/expo/copy-overwrite/.claude/skills/ops-browser-uat/SKILL.md +0 -124
  158. package/expo/copy-overwrite/.claude/skills/ops-check-logs/SKILL.md +0 -211
  159. package/expo/copy-overwrite/.claude/skills/ops-db-ops/SKILL.md +0 -119
  160. package/expo/copy-overwrite/.claude/skills/ops-deploy/SKILL.md +0 -119
  161. package/expo/copy-overwrite/.claude/skills/ops-monitor-errors/SKILL.md +0 -99
  162. package/expo/copy-overwrite/.claude/skills/ops-performance/SKILL.md +0 -165
  163. package/expo/copy-overwrite/.claude/skills/ops-run-local/SKILL.md +0 -166
  164. package/expo/copy-overwrite/.claude/skills/ops-verify-health/SKILL.md +0 -101
  165. package/expo/copy-overwrite/.claude/skills/owasp-zap/SKILL.md +0 -56
  166. package/expo/copy-overwrite/.claude/skills/playwright-selectors/SKILL.md +0 -223
  167. package/expo/copy-overwrite/.claude/skills/testing-library/SKILL.md +0 -314
  168. package/expo/copy-overwrite/.claude/skills/testing-library/references/async-patterns.md +0 -420
  169. package/expo/copy-overwrite/.claude/skills/testing-library/references/expo-router-testing.md +0 -556
  170. package/expo/copy-overwrite/.claude/skills/testing-library/references/mocking-patterns.md +0 -590
  171. package/expo/copy-overwrite/.claude/skills/testing-library/references/query-priority.md +0 -291
  172. package/expo/copy-overwrite/eslint-plugin-component-structure/README.md +0 -234
  173. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +0 -89
  174. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +0 -201
  175. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +0 -294
  176. package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +0 -37
  177. package/expo/copy-overwrite/eslint-plugin-component-structure/package.json +0 -10
  178. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +0 -235
  179. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +0 -96
  180. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +0 -183
  181. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +0 -243
  182. package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +0 -192
  183. package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +0 -31
  184. package/expo/copy-overwrite/eslint-plugin-ui-standards/package.json +0 -10
  185. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +0 -56
  186. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +0 -60
  187. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/SKILL.md +0 -176
  188. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/advanced-features.md +0 -527
  189. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/project-patterns.md +0 -483
  190. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/quick-start.md +0 -257
  191. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/resolvers-mutations.md +0 -413
  192. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/types-scalars.md +0 -513
  193. package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +0 -536
  194. package/nestjs/copy-overwrite/.claude/skills/security-zap-scan/SKILL.md +0 -33
  195. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/SKILL.md +0 -275
  196. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/configuration-patterns.md +0 -487
  197. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/entity-patterns.md +0 -450
  198. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/observability-patterns.md +0 -536
  199. package/rails/copy-overwrite/.claude/skills/action-controller-best-practices/SKILL.md +0 -374
  200. package/rails/copy-overwrite/.claude/skills/action-view-best-practices/SKILL.md +0 -335
  201. package/rails/copy-overwrite/.claude/skills/active-record-model-best-practices/SKILL.md +0 -166
  202. package/rails/copy-overwrite/.claude/skills/plan-add-test-coverage/SKILL.md +0 -45
  203. package/rails/copy-overwrite/.claude/skills/plan-fix-linter-error/SKILL.md +0 -45
  204. package/rails/copy-overwrite/.claude/skills/plan-lower-code-complexity/SKILL.md +0 -48
  205. package/rails/copy-overwrite/.claude/skills/plan-reduce-max-lines/SKILL.md +0 -46
  206. package/rails/copy-overwrite/.claude/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  207. package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +0 -76
  208. package/typescript/copy-overwrite/.claude/hooks/install-pkgs.sh +0 -64
  209. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +0 -105
  210. package/typescript/copy-overwrite/.claude/hooks/sg-scan-on-edit.sh +0 -68
  211. package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +0 -432
  212. package/typescript/copy-overwrite/eslint-plugin-code-organization/README.md +0 -149
  213. package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +0 -473
  214. package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +0 -28
  215. package/typescript/copy-overwrite/eslint-plugin-code-organization/package.json +0 -10
  216. package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +0 -162
@@ -1,305 +0,0 @@
1
- #!/usr/bin/env python3
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
- """
5
- Skill Initializer - Creates a new skill from template
6
-
7
- Usage:
8
- init_skill.py <skill-name> --path <path>
9
-
10
- Examples:
11
- init_skill.py my-new-skill --path skills/public
12
- init_skill.py my-api-helper --path skills/private
13
- init_skill.py custom-skill --path /custom/location
14
- """
15
-
16
- import sys
17
- from pathlib import Path
18
-
19
-
20
- SKILL_TEMPLATE = """---
21
- name: {skill_name}
22
- description: [TODO: Complete and informative explanation of what the skill does and when to use it. Include WHEN to use this skill - specific scenarios, file types, or tasks that trigger it.]
23
- ---
24
-
25
- # {skill_title}
26
-
27
- ## Overview
28
-
29
- [TODO: 1-2 sentences explaining what this skill enables]
30
-
31
- ## Structuring This Skill
32
-
33
- [TODO: Choose the structure that best fits this skill's purpose. Common patterns:
34
-
35
- **1. Workflow-Based** (best for sequential processes)
36
- - Works well when there are clear step-by-step procedures
37
- - Example: DOCX skill with "Workflow Decision Tree" → "Reading" → "Creating" → "Editing"
38
- - Structure: ## Overview → ## Workflow Decision Tree → ## Step 1 → ## Step 2...
39
-
40
- **2. Task-Based** (best for tool collections)
41
- - Works well when the skill offers different operations/capabilities
42
- - Example: PDF skill with "Quick Start" → "Merge PDFs" → "Split PDFs" → "Extract Text"
43
- - Structure: ## Overview → ## Quick Start → ## Task Category 1 → ## Task Category 2...
44
-
45
- **3. Reference/Guidelines** (best for standards or specifications)
46
- - Works well for brand guidelines, coding standards, or requirements
47
- - Example: Brand styling with "Brand Guidelines" → "Colors" → "Typography" → "Features"
48
- - Structure: ## Overview → ## Guidelines → ## Specifications → ## Usage...
49
-
50
- **4. Capabilities-Based** (best for integrated systems)
51
- - Works well when the skill provides multiple interrelated features
52
- - Example: Product Management with "Core Capabilities" → numbered capability list
53
- - Structure: ## Overview → ## Core Capabilities → ### 1. Feature → ### 2. Feature...
54
-
55
- Patterns can be mixed and matched as needed. Most skills combine patterns (e.g., start with task-based, add workflow for complex operations).
56
-
57
- Delete this entire "Structuring This Skill" section when done - it's just guidance.]
58
-
59
- ## [TODO: Replace with the first main section based on chosen structure]
60
-
61
- [TODO: Add content here. See examples in existing skills:
62
- - Code samples for technical skills
63
- - Decision trees for complex workflows
64
- - Concrete examples with realistic user requests
65
- - References to scripts/templates/references as needed]
66
-
67
- ## Resources
68
-
69
- This skill includes example resource directories that demonstrate how to organize different types of bundled resources:
70
-
71
- ### scripts/
72
- Executable code (Python/Bash/etc.) that can be run directly to perform specific operations.
73
-
74
- **Examples from other skills:**
75
- - PDF skill: `fill_fillable_fields.py`, `extract_form_field_info.py` - utilities for PDF manipulation
76
- - DOCX skill: `document.py`, `utilities.py` - Python modules for document processing
77
-
78
- **Appropriate for:** Python scripts, shell scripts, or any executable code that performs automation, data processing, or specific operations.
79
-
80
- **Note:** Scripts may be executed without loading into context, but can still be read by Claude for patching or environment adjustments.
81
-
82
- ### references/
83
- Documentation and reference material intended to be loaded into context to inform Claude's process and thinking.
84
-
85
- **Examples from other skills:**
86
- - Product management: `communication.md`, `context_building.md` - detailed workflow guides
87
- - BigQuery: API reference documentation and query examples
88
- - Finance: Schema documentation, company policies
89
-
90
- **Appropriate for:** In-depth documentation, API references, database schemas, comprehensive guides, or any detailed information that Claude should reference while working.
91
-
92
- ### assets/
93
- Files not intended to be loaded into context, but rather used within the output Claude produces.
94
-
95
- **Examples from other skills:**
96
- - Brand styling: PowerPoint template files (.pptx), logo files
97
- - Frontend builder: HTML/React boilerplate project directories
98
- - Typography: Font files (.ttf, .woff2)
99
-
100
- **Appropriate for:** Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output.
101
-
102
- ---
103
-
104
- **Any unneeded directories can be deleted.** Not every skill requires all three types of resources.
105
- """
106
-
107
- EXAMPLE_SCRIPT = '''#!/usr/bin/env python3
108
- """
109
- Example helper script for {skill_name}
110
-
111
- This is a placeholder script that can be executed directly.
112
- Replace with actual implementation or delete if not needed.
113
-
114
- Example real scripts from other skills:
115
- - pdf/scripts/fill_fillable_fields.py - Fills PDF form fields
116
- - pdf/scripts/convert_pdf_to_images.py - Converts PDF pages to images
117
- """
118
-
119
- def main():
120
- print("This is an example script for {skill_name}")
121
- # TODO: Add actual script logic here
122
- # This could be data processing, file conversion, API calls, etc.
123
-
124
- if __name__ == "__main__":
125
- main()
126
- '''
127
-
128
- EXAMPLE_REFERENCE = """# Reference Documentation for {skill_title}
129
-
130
- This is a placeholder for detailed reference documentation.
131
- Replace with actual reference content or delete if not needed.
132
-
133
- Example real reference docs from other skills:
134
- - product-management/references/communication.md - Comprehensive guide for status updates
135
- - product-management/references/context_building.md - Deep-dive on gathering context
136
- - bigquery/references/ - API references and query examples
137
-
138
- ## When Reference Docs Are Useful
139
-
140
- Reference docs are ideal for:
141
- - Comprehensive API documentation
142
- - Detailed workflow guides
143
- - Complex multi-step processes
144
- - Information too lengthy for main SKILL.md
145
- - Content that's only needed for specific use cases
146
-
147
- ## Structure Suggestions
148
-
149
- ### API Reference Example
150
- - Overview
151
- - Authentication
152
- - Endpoints with examples
153
- - Error codes
154
- - Rate limits
155
-
156
- ### Workflow Guide Example
157
- - Prerequisites
158
- - Step-by-step instructions
159
- - Common patterns
160
- - Troubleshooting
161
- - Best practices
162
- """
163
-
164
- EXAMPLE_ASSET = """# Example Asset File
165
-
166
- This placeholder represents where asset files would be stored.
167
- Replace with actual asset files (templates, images, fonts, etc.) or delete if not needed.
168
-
169
- Asset files are NOT intended to be loaded into context, but rather used within
170
- the output Claude produces.
171
-
172
- Example asset files from other skills:
173
- - Brand guidelines: logo.png, slides_template.pptx
174
- - Frontend builder: hello-world/ directory with HTML/React boilerplate
175
- - Typography: custom-font.ttf, font-family.woff2
176
- - Data: sample_data.csv, test_dataset.json
177
-
178
- ## Common Asset Types
179
-
180
- - Templates: .pptx, .docx, boilerplate directories
181
- - Images: .png, .jpg, .svg, .gif
182
- - Fonts: .ttf, .otf, .woff, .woff2
183
- - Boilerplate code: Project directories, starter files
184
- - Icons: .ico, .svg
185
- - Data files: .csv, .json, .xml, .yaml
186
-
187
- Note: This is a text placeholder. Actual assets can be any file type.
188
- """
189
-
190
-
191
- def title_case_skill_name(skill_name):
192
- """Convert hyphenated skill name to Title Case for display."""
193
- return ' '.join(word.capitalize() for word in skill_name.split('-'))
194
-
195
-
196
- def init_skill(skill_name, path):
197
- """
198
- Initialize a new skill directory with template SKILL.md.
199
-
200
- Args:
201
- skill_name: Name of the skill
202
- path: Path where the skill directory should be created
203
-
204
- Returns:
205
- Path to created skill directory, or None if error
206
- """
207
- # Determine skill directory path
208
- skill_dir = Path(path).resolve() / skill_name
209
-
210
- # Check if directory already exists
211
- if skill_dir.exists():
212
- print(f"❌ Error: Skill directory already exists: {skill_dir}")
213
- return None
214
-
215
- # Create skill directory
216
- try:
217
- skill_dir.mkdir(parents=True, exist_ok=False)
218
- print(f"✅ Created skill directory: {skill_dir}")
219
- except Exception as e:
220
- print(f"❌ Error creating directory: {e}")
221
- return None
222
-
223
- # Create SKILL.md from template
224
- skill_title = title_case_skill_name(skill_name)
225
- skill_content = SKILL_TEMPLATE.format(
226
- skill_name=skill_name,
227
- skill_title=skill_title
228
- )
229
-
230
- skill_md_path = skill_dir / 'SKILL.md'
231
- try:
232
- skill_md_path.write_text(skill_content)
233
- print("✅ Created SKILL.md")
234
- except Exception as e:
235
- print(f"❌ Error creating SKILL.md: {e}")
236
- return None
237
-
238
- # Create resource directories with example files
239
- try:
240
- # Create scripts/ directory with example script
241
- scripts_dir = skill_dir / 'scripts'
242
- scripts_dir.mkdir(exist_ok=True)
243
- example_script = scripts_dir / 'example.py'
244
- example_script.write_text(EXAMPLE_SCRIPT.format(skill_name=skill_name))
245
- example_script.chmod(0o755)
246
- print("✅ Created scripts/example.py")
247
-
248
- # Create references/ directory with example reference doc
249
- references_dir = skill_dir / 'references'
250
- references_dir.mkdir(exist_ok=True)
251
- example_reference = references_dir / 'api_reference.md'
252
- example_reference.write_text(EXAMPLE_REFERENCE.format(skill_title=skill_title))
253
- print("✅ Created references/api_reference.md")
254
-
255
- # Create assets/ directory with example asset placeholder
256
- assets_dir = skill_dir / 'assets'
257
- assets_dir.mkdir(exist_ok=True)
258
- example_asset = assets_dir / 'example_asset.txt'
259
- example_asset.write_text(EXAMPLE_ASSET)
260
- print("✅ Created assets/example_asset.txt")
261
- except Exception as e:
262
- print(f"❌ Error creating resource directories: {e}")
263
- return None
264
-
265
- # Print next steps
266
- print(f"\n✅ Skill '{skill_name}' initialized successfully at {skill_dir}")
267
- print("\nNext steps:")
268
- print("1. Edit SKILL.md to complete the TODO items and update the description")
269
- print("2. Customize or delete the example files in scripts/, references/, and assets/")
270
- print("3. Run the validator when ready to check the skill structure")
271
-
272
- return skill_dir
273
-
274
-
275
- def main():
276
- if len(sys.argv) < 4 or sys.argv[2] != '--path':
277
- print("Usage: init_skill.py <skill-name> --path <path>")
278
- print("\nSkill name requirements:")
279
- print(" - Hyphen-case identifier (e.g., 'data-analyzer')")
280
- print(" - Lowercase letters, digits, and hyphens only")
281
- print(" - Max 40 characters")
282
- print(" - Must match directory name exactly")
283
- print("\nExamples:")
284
- print(" init_skill.py my-new-skill --path skills/public")
285
- print(" init_skill.py my-api-helper --path skills/private")
286
- print(" init_skill.py custom-skill --path /custom/location")
287
- sys.exit(1)
288
-
289
- skill_name = sys.argv[1]
290
- path = sys.argv[3]
291
-
292
- print(f"🚀 Initializing skill: {skill_name}")
293
- print(f" Location: {path}")
294
- print()
295
-
296
- result = init_skill(skill_name, path)
297
-
298
- if result:
299
- sys.exit(0)
300
- else:
301
- sys.exit(1)
302
-
303
-
304
- if __name__ == "__main__":
305
- main()
@@ -1,112 +0,0 @@
1
- #!/usr/bin/env python3
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
- """
5
- Skill Packager - Creates a distributable zip file of a skill folder
6
-
7
- Usage:
8
- python utils/package_skill.py <path/to/skill-folder> [output-directory]
9
-
10
- Example:
11
- python utils/package_skill.py skills/public/my-skill
12
- python utils/package_skill.py skills/public/my-skill ./dist
13
- """
14
-
15
- import sys
16
- import zipfile
17
- from pathlib import Path
18
- from quick_validate import validate_skill
19
-
20
-
21
- def package_skill(skill_path, output_dir=None):
22
- """
23
- Package a skill folder into a zip file.
24
-
25
- Args:
26
- skill_path: Path to the skill folder
27
- output_dir: Optional output directory for the zip file (defaults to current directory)
28
-
29
- Returns:
30
- Path to the created zip file, or None if error
31
- """
32
- skill_path = Path(skill_path).resolve()
33
-
34
- # Validate skill folder exists
35
- if not skill_path.exists():
36
- print(f"❌ Error: Skill folder not found: {skill_path}")
37
- return None
38
-
39
- if not skill_path.is_dir():
40
- print(f"❌ Error: Path is not a directory: {skill_path}")
41
- return None
42
-
43
- # Validate SKILL.md exists
44
- skill_md = skill_path / "SKILL.md"
45
- if not skill_md.exists():
46
- print(f"❌ Error: SKILL.md not found in {skill_path}")
47
- return None
48
-
49
- # Run validation before packaging
50
- print("🔍 Validating skill...")
51
- valid, message = validate_skill(skill_path)
52
- if not valid:
53
- print(f"❌ Validation failed: {message}")
54
- print(" Please fix the validation errors before packaging.")
55
- return None
56
- print(f"✅ {message}\n")
57
-
58
- # Determine output location
59
- skill_name = skill_path.name
60
- if output_dir:
61
- output_path = Path(output_dir).resolve()
62
- output_path.mkdir(parents=True, exist_ok=True)
63
- else:
64
- output_path = Path.cwd()
65
-
66
- zip_filename = output_path / f"{skill_name}.zip"
67
-
68
- # Create the zip file
69
- try:
70
- with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
71
- # Walk through the skill directory
72
- for file_path in skill_path.rglob('*'):
73
- if file_path.is_file():
74
- # Calculate the relative path within the zip
75
- arcname = file_path.relative_to(skill_path.parent)
76
- zipf.write(file_path, arcname)
77
- print(f" Added: {arcname}")
78
-
79
- print(f"\n✅ Successfully packaged skill to: {zip_filename}")
80
- return zip_filename
81
-
82
- except Exception as e:
83
- print(f"❌ Error creating zip file: {e}")
84
- return None
85
-
86
-
87
- def main():
88
- if len(sys.argv) < 2:
89
- print("Usage: python utils/package_skill.py <path/to/skill-folder> [output-directory]")
90
- print("\nExample:")
91
- print(" python utils/package_skill.py skills/public/my-skill")
92
- print(" python utils/package_skill.py skills/public/my-skill ./dist")
93
- sys.exit(1)
94
-
95
- skill_path = sys.argv[1]
96
- output_dir = sys.argv[2] if len(sys.argv) > 2 else None
97
-
98
- print(f"📦 Packaging skill: {skill_path}")
99
- if output_dir:
100
- print(f" Output directory: {output_dir}")
101
- print()
102
-
103
- result = package_skill(skill_path, output_dir)
104
-
105
- if result:
106
- sys.exit(0)
107
- else:
108
- sys.exit(1)
109
-
110
-
111
- if __name__ == "__main__":
112
- main()
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env python3
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
- """
5
- Quick validation script for skills - minimal version
6
- """
7
-
8
- import sys
9
- import os
10
- import re
11
- from pathlib import Path
12
-
13
- def validate_skill(skill_path):
14
- """Basic validation of a skill"""
15
- skill_path = Path(skill_path)
16
-
17
- # Check SKILL.md exists
18
- skill_md = skill_path / 'SKILL.md'
19
- if not skill_md.exists():
20
- return False, "SKILL.md not found"
21
-
22
- # Read and validate frontmatter
23
- content = skill_md.read_text()
24
- if not content.startswith('---'):
25
- return False, "No YAML frontmatter found"
26
-
27
- # Extract frontmatter
28
- match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
29
- if not match:
30
- return False, "Invalid frontmatter format"
31
-
32
- frontmatter = match.group(1)
33
-
34
- # Check required fields
35
- if 'name:' not in frontmatter:
36
- return False, "Missing 'name' in frontmatter"
37
- if 'description:' not in frontmatter:
38
- return False, "Missing 'description' in frontmatter"
39
-
40
- # Extract name for validation
41
- name_match = re.search(r'name:\s*(.+)', frontmatter)
42
- if name_match:
43
- name = name_match.group(1).strip()
44
- # Check naming convention (hyphen-case: lowercase with hyphens)
45
- if not re.match(r'^[a-z0-9-]+$', name):
46
- return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)"
47
- if name.startswith('-') or name.endswith('-') or '--' in name:
48
- return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens"
49
-
50
- # Extract and validate description
51
- desc_match = re.search(r'description:\s*(.+)', frontmatter)
52
- if desc_match:
53
- description = desc_match.group(1).strip()
54
- # Check for angle brackets
55
- if '<' in description or '>' in description:
56
- return False, "Description cannot contain angle brackets (< or >)"
57
-
58
- return True, "Skill is valid!"
59
-
60
- if __name__ == "__main__":
61
- if len(sys.argv) != 2:
62
- print("Usage: python quick_validate.py <skill_directory>")
63
- sys.exit(1)
64
-
65
- valid, message = validate_skill(sys.argv[1])
66
- print(message)
67
- sys.exit(0 if valid else 1)
@@ -1,11 +0,0 @@
1
- ---
2
- name: sonarqube-check
3
- description: This skill should be used when checking why the last pull request failed SonarQube/SonarCloud quality gates. It uses the SonarQube MCP server to retrieve failure details and report the reasons.
4
- allowed-tools: ["mcp__sonarqube__*"]
5
- ---
6
-
7
- # SonarQube Check
8
-
9
- Use the SonarQube MCP server to get the reason the last PR failed checks.
10
-
11
- Retrieve the quality gate status and report all failures with their details.
@@ -1,8 +0,0 @@
1
- ---
2
- name: sonarqube-fix
3
- description: This skill should be used when fixing SonarQube quality gate failures. It runs the sonarqube:check skill to identify failures, fixes the identified issues, and then commits the changes using the git:commit skill.
4
- ---
5
-
6
- 1. Run /sonarqube-check
7
- 2. Fix the SonarQube quality gate failures identified in step 1
8
- 3. Run /git-commit
@@ -1,88 +0,0 @@
1
- ---
2
- name: tasks-load
3
- description: This skill should be used when loading tasks from a project directory into the current Claude Code session. It reads task JSON files from session subdirectories, recreates them in the current session, and sets the active project marker.
4
- allowed-tools: ["Read", "Bash", "TaskCreate", "TaskUpdate", "TaskList"]
5
- ---
6
-
7
- # Load Project Tasks
8
-
9
- Load tasks from `projects/$ARGUMENTS/tasks/` into the current Claude Code session.
10
-
11
- Tasks are stored in session subdirectories to preserve history across `/clear` commands:
12
- ```
13
- projects/$ARGUMENTS/tasks/
14
- ├── {session-1-uuid}/
15
- │ ├── 1.json
16
- │ └── 2.json
17
- └── {session-2-uuid}/
18
- ├── 1.json
19
- └── 2.json
20
- ```
21
-
22
- ## Process
23
-
24
- ### Step 1: Validate Project
25
-
26
- Check if the project exists and has task files:
27
-
28
- ```bash
29
- find projects/$ARGUMENTS/tasks -name "*.json" 2>/dev/null | head -5
30
- ```
31
-
32
- If no task files exist, report: "No tasks found in projects/$ARGUMENTS/tasks/"
33
-
34
- List available sessions:
35
-
36
- ```bash
37
- ls -dt projects/$ARGUMENTS/tasks/*/ 2>/dev/null | head -10
38
- ```
39
-
40
- ### Step 2: Set Active Project
41
-
42
- Create the active project marker:
43
-
44
- ```bash
45
- echo "$ARGUMENTS" > .claude-active-project
46
- ```
47
-
48
- This ensures any new tasks created will sync back to this project.
49
-
50
- ### Step 3: Load Tasks
51
-
52
- Find and load all task JSON files from ALL session directories:
53
-
54
- ```bash
55
- find projects/$ARGUMENTS/tasks -name "*.json" -type f
56
- ```
57
-
58
- For each JSON file found:
59
-
60
- 1. Read the task JSON file
61
- 2. Use TaskCreate to recreate the task with:
62
- - subject from JSON
63
- - description from JSON
64
- - activeForm from JSON
65
- - metadata: `{ "project": "$ARGUMENTS" }`
66
- 3. If the task was already completed (status: "completed"), use TaskUpdate to mark it completed
67
-
68
- ### Step 4: Report
69
-
70
- After loading all tasks, report:
71
-
72
- ```
73
- Loaded X tasks from projects/$ARGUMENTS/tasks/
74
- - Sessions found: N
75
- - Pending: Y
76
- - Completed: Z
77
-
78
- Active project set to: $ARGUMENTS
79
- New tasks will automatically sync to this project.
80
- ```
81
-
82
- ## Notes
83
-
84
- - Tasks are recreated with new IDs in the current session
85
- - The original task IDs from the project are not preserved
86
- - Tasks from ALL sessions are loaded (full history)
87
- - Task dependencies (blocks/blockedBy) are NOT currently preserved across load/sync cycles
88
- - Use TaskList to see the loaded tasks
@@ -1,108 +0,0 @@
1
- ---
2
- name: tasks-sync
3
- description: This skill should be used when syncing current session tasks to a project directory. It exports all tasks from the current Claude Code session to JSON files in the project's tasks directory, enabling persistence across sessions.
4
- allowed-tools: ["Read", "Write", "Bash", "TaskList", "TaskGet"]
5
- ---
6
-
7
- # Sync Tasks to Project
8
-
9
- Sync all tasks from the current session to `projects/$ARGUMENTS/tasks/{session-id}/`.
10
-
11
- This skill is for manual syncing when work started without setting an active project. Once synced, the automatic hook handles future task updates.
12
-
13
- ## Process
14
-
15
- ### Step 1: Validate Project
16
-
17
- Check if the project directory exists:
18
-
19
- ```bash
20
- ls -d projects/$ARGUMENTS 2>/dev/null
21
- ```
22
-
23
- If the project doesn't exist, ask: "Project '$ARGUMENTS' doesn't exist. Create it?"
24
-
25
- If yes, create the project structure:
26
-
27
- ```bash
28
- mkdir -p projects/$ARGUMENTS/tasks
29
- ```
30
-
31
- ### Step 2: Determine Session ID
32
-
33
- Find the current session by looking for the most recently modified task directory:
34
-
35
- ```bash
36
- ls -dt ~/.claude/tasks/*/ 2>/dev/null | head -1 | xargs basename
37
- ```
38
-
39
- If no session found, use a timestamp-based identifier:
40
-
41
- ```bash
42
- echo "manual-$(date +%Y%m%d-%H%M%S)"
43
- ```
44
-
45
- Store the session ID for use in subsequent steps.
46
-
47
- ### Step 3: Set Active Project
48
-
49
- Create/update the active project marker:
50
-
51
- ```bash
52
- echo "$ARGUMENTS" > .claude-active-project
53
- ```
54
-
55
- ### Step 4: Get Current Tasks
56
-
57
- Use TaskList to get all tasks in the current session.
58
-
59
- ### Step 5: Sync Each Task
60
-
61
- For each task from TaskList:
62
-
63
- 1. Use TaskGet to get full task details
64
- 2. Create the session directory:
65
-
66
- ```bash
67
- mkdir -p projects/$ARGUMENTS/tasks/{session-id}
68
- ```
69
-
70
- 3. Create a JSON file with the task data:
71
-
72
- ```json
73
- {
74
- "id": "<task-id>",
75
- "subject": "<subject>",
76
- "description": "<description>",
77
- "activeForm": "<activeForm>",
78
- "status": "<status>",
79
- "blocks": [],
80
- "blockedBy": []
81
- }
82
- ```
83
-
84
- 4. Write to `projects/$ARGUMENTS/tasks/{session-id}/<id>.json`
85
-
86
- ### Step 6: Stage for Git
87
-
88
- ```bash
89
- git add projects/$ARGUMENTS/tasks/{session-id}/*.json
90
- ```
91
-
92
- ### Step 7: Report
93
-
94
- ```
95
- Synced X tasks to projects/$ARGUMENTS/tasks/{session-id}/
96
- - Pending: Y
97
- - In Progress: Z
98
- - Completed: W
99
-
100
- Files staged for commit. Run /git-commit when ready.
101
- ```
102
-
103
- ## Notes
104
-
105
- - This skill manually syncs all current tasks to a project
106
- - Use this when work started without a project context
107
- - After syncing, the active project is set so future tasks auto-sync via the hook
108
- - Each sync creates a new session directory to preserve history