@lavralabs/lavra 0.7.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 (452) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/bin/install.js +302 -0
  4. package/bin/plan-export.js +300 -0
  5. package/bin/plan-view.js +695 -0
  6. package/install.sh +136 -0
  7. package/package.json +28 -0
  8. package/plugins/lavra/.claude-plugin/plugin.json +22 -0
  9. package/plugins/lavra/.mcp.json +8 -0
  10. package/plugins/lavra/README.md +125 -0
  11. package/plugins/lavra/agents/design/design-implementation-reviewer.md +123 -0
  12. package/plugins/lavra/agents/design/design-iterator.md +219 -0
  13. package/plugins/lavra/agents/design/figma-design-sync.md +212 -0
  14. package/plugins/lavra/agents/docs/ankane-readme-writer.md +90 -0
  15. package/plugins/lavra/agents/research/best-practices-researcher.md +131 -0
  16. package/plugins/lavra/agents/research/framework-docs-researcher.md +111 -0
  17. package/plugins/lavra/agents/research/git-history-analyzer.md +73 -0
  18. package/plugins/lavra/agents/research/learnings-researcher.md +255 -0
  19. package/plugins/lavra/agents/research/repo-research-analyst.md +157 -0
  20. package/plugins/lavra/agents/review/agent-native-reviewer.md +274 -0
  21. package/plugins/lavra/agents/review/architecture-strategist.md +82 -0
  22. package/plugins/lavra/agents/review/code-simplicity-reviewer.md +109 -0
  23. package/plugins/lavra/agents/review/data-integrity-guardian.md +89 -0
  24. package/plugins/lavra/agents/review/data-migration-expert.md +118 -0
  25. package/plugins/lavra/agents/review/deployment-verification-agent.md +178 -0
  26. package/plugins/lavra/agents/review/dhh-rails-reviewer.md +94 -0
  27. package/plugins/lavra/agents/review/goal-verifier.md +109 -0
  28. package/plugins/lavra/agents/review/julik-frontend-races-reviewer.md +239 -0
  29. package/plugins/lavra/agents/review/kieran-python-reviewer.md +148 -0
  30. package/plugins/lavra/agents/review/kieran-rails-reviewer.md +130 -0
  31. package/plugins/lavra/agents/review/kieran-typescript-reviewer.md +139 -0
  32. package/plugins/lavra/agents/review/migration-drift-detector.md +307 -0
  33. package/plugins/lavra/agents/review/pattern-recognition-specialist.md +87 -0
  34. package/plugins/lavra/agents/review/performance-oracle.md +154 -0
  35. package/plugins/lavra/agents/review/security-sentinel.md +125 -0
  36. package/plugins/lavra/agents/workflow/bug-reproduction-validator.md +119 -0
  37. package/plugins/lavra/agents/workflow/every-style-editor.md +97 -0
  38. package/plugins/lavra/agents/workflow/lint.md +30 -0
  39. package/plugins/lavra/agents/workflow/pr-comment-resolver.md +95 -0
  40. package/plugins/lavra/agents/workflow/spec-flow-analyzer.md +156 -0
  41. package/plugins/lavra/commands/changelog.md +149 -0
  42. package/plugins/lavra/commands/heal-skill.md +130 -0
  43. package/plugins/lavra/commands/lavra-brainstorm.md +388 -0
  44. package/plugins/lavra/commands/lavra-ceo-review.md +388 -0
  45. package/plugins/lavra/commands/lavra-checkpoint.md +162 -0
  46. package/plugins/lavra/commands/lavra-design.md +621 -0
  47. package/plugins/lavra/commands/lavra-eng-review.md +262 -0
  48. package/plugins/lavra/commands/lavra-import.md +194 -0
  49. package/plugins/lavra/commands/lavra-learn.md +176 -0
  50. package/plugins/lavra/commands/lavra-plan.md +515 -0
  51. package/plugins/lavra/commands/lavra-qa.md +357 -0
  52. package/plugins/lavra/commands/lavra-quick.md +178 -0
  53. package/plugins/lavra/commands/lavra-recall.md +279 -0
  54. package/plugins/lavra/commands/lavra-research.md +267 -0
  55. package/plugins/lavra/commands/lavra-retro.md +400 -0
  56. package/plugins/lavra/commands/lavra-review.md +401 -0
  57. package/plugins/lavra/commands/lavra-ship.md +330 -0
  58. package/plugins/lavra/commands/lavra-triage.md +159 -0
  59. package/plugins/lavra/commands/lavra-work-ralph.md +521 -0
  60. package/plugins/lavra/commands/lavra-work-teams.md +504 -0
  61. package/plugins/lavra/commands/lavra-work.md +1019 -0
  62. package/plugins/lavra/commands/optional/agent-native-audit.md +282 -0
  63. package/plugins/lavra/commands/optional/feature-video.md +262 -0
  64. package/plugins/lavra/commands/optional/generate-command.md +146 -0
  65. package/plugins/lavra/commands/optional/reproduce-bug.md +97 -0
  66. package/plugins/lavra/commands/optional/xcode-test.md +287 -0
  67. package/plugins/lavra/commands/report-bug.md +155 -0
  68. package/plugins/lavra/commands/test-browser.md +305 -0
  69. package/plugins/lavra/cortex/agents/design/design-implementation-reviewer.md +127 -0
  70. package/plugins/lavra/cortex/agents/design/design-iterator.md +222 -0
  71. package/plugins/lavra/cortex/agents/design/figma-design-sync.md +215 -0
  72. package/plugins/lavra/cortex/agents/docs/ankane-readme-writer.md +93 -0
  73. package/plugins/lavra/cortex/agents/research/best-practices-researcher.md +135 -0
  74. package/plugins/lavra/cortex/agents/research/framework-docs-researcher.md +115 -0
  75. package/plugins/lavra/cortex/agents/research/git-history-analyzer.md +77 -0
  76. package/plugins/lavra/cortex/agents/research/learnings-researcher.md +259 -0
  77. package/plugins/lavra/cortex/agents/research/repo-research-analyst.md +161 -0
  78. package/plugins/lavra/cortex/agents/review/agent-native-reviewer.md +278 -0
  79. package/plugins/lavra/cortex/agents/review/architecture-strategist.md +86 -0
  80. package/plugins/lavra/cortex/agents/review/code-simplicity-reviewer.md +113 -0
  81. package/plugins/lavra/cortex/agents/review/data-integrity-guardian.md +93 -0
  82. package/plugins/lavra/cortex/agents/review/data-migration-expert.md +122 -0
  83. package/plugins/lavra/cortex/agents/review/deployment-verification-agent.md +182 -0
  84. package/plugins/lavra/cortex/agents/review/dhh-rails-reviewer.md +98 -0
  85. package/plugins/lavra/cortex/agents/review/goal-verifier.md +113 -0
  86. package/plugins/lavra/cortex/agents/review/julik-frontend-races-reviewer.md +243 -0
  87. package/plugins/lavra/cortex/agents/review/kieran-python-reviewer.md +152 -0
  88. package/plugins/lavra/cortex/agents/review/kieran-rails-reviewer.md +134 -0
  89. package/plugins/lavra/cortex/agents/review/kieran-typescript-reviewer.md +143 -0
  90. package/plugins/lavra/cortex/agents/review/migration-drift-detector.md +311 -0
  91. package/plugins/lavra/cortex/agents/review/pattern-recognition-specialist.md +91 -0
  92. package/plugins/lavra/cortex/agents/review/performance-oracle.md +158 -0
  93. package/plugins/lavra/cortex/agents/review/security-sentinel.md +129 -0
  94. package/plugins/lavra/cortex/agents/workflow/bug-reproduction-validator.md +123 -0
  95. package/plugins/lavra/cortex/agents/workflow/every-style-editor.md +101 -0
  96. package/plugins/lavra/cortex/agents/workflow/lint.md +33 -0
  97. package/plugins/lavra/cortex/agents/workflow/pr-comment-resolver.md +98 -0
  98. package/plugins/lavra/cortex/agents/workflow/spec-flow-analyzer.md +160 -0
  99. package/plugins/lavra/cortex/commands/agent-native-audit.md +286 -0
  100. package/plugins/lavra/cortex/commands/changelog.md +153 -0
  101. package/plugins/lavra/cortex/commands/create-agent-skill.md +21 -0
  102. package/plugins/lavra/cortex/commands/deploy-docs.md +69 -0
  103. package/plugins/lavra/cortex/commands/feature-video.md +266 -0
  104. package/plugins/lavra/cortex/commands/generate-command.md +150 -0
  105. package/plugins/lavra/cortex/commands/heal-skill.md +134 -0
  106. package/plugins/lavra/cortex/commands/lavra-brainstorm.md +392 -0
  107. package/plugins/lavra/cortex/commands/lavra-ceo-review.md +392 -0
  108. package/plugins/lavra/cortex/commands/lavra-checkpoint.md +166 -0
  109. package/plugins/lavra/cortex/commands/lavra-compound.md +168 -0
  110. package/plugins/lavra/cortex/commands/lavra-deepen.md +389 -0
  111. package/plugins/lavra/cortex/commands/lavra-design.md +625 -0
  112. package/plugins/lavra/cortex/commands/lavra-eng-review.md +266 -0
  113. package/plugins/lavra/cortex/commands/lavra-import.md +198 -0
  114. package/plugins/lavra/cortex/commands/lavra-learn.md +180 -0
  115. package/plugins/lavra/cortex/commands/lavra-parallel.md +910 -0
  116. package/plugins/lavra/cortex/commands/lavra-plan.md +519 -0
  117. package/plugins/lavra/cortex/commands/lavra-qa.md +361 -0
  118. package/plugins/lavra/cortex/commands/lavra-quick.md +182 -0
  119. package/plugins/lavra/cortex/commands/lavra-recall.md +283 -0
  120. package/plugins/lavra/cortex/commands/lavra-research.md +271 -0
  121. package/plugins/lavra/cortex/commands/lavra-retro.md +404 -0
  122. package/plugins/lavra/cortex/commands/lavra-review.md +405 -0
  123. package/plugins/lavra/cortex/commands/lavra-ship.md +334 -0
  124. package/plugins/lavra/cortex/commands/lavra-triage.md +163 -0
  125. package/plugins/lavra/cortex/commands/lavra-work-ralph.md +525 -0
  126. package/plugins/lavra/cortex/commands/lavra-work-teams.md +508 -0
  127. package/plugins/lavra/cortex/commands/lavra-work.md +1023 -0
  128. package/plugins/lavra/cortex/commands/lfg.md +30 -0
  129. package/plugins/lavra/cortex/commands/release-docs.md +148 -0
  130. package/plugins/lavra/cortex/commands/report-bug.md +159 -0
  131. package/plugins/lavra/cortex/commands/reproduce-bug.md +101 -0
  132. package/plugins/lavra/cortex/commands/resolve-pr-parallel.md +58 -0
  133. package/plugins/lavra/cortex/commands/resolve-todo-parallel.md +56 -0
  134. package/plugins/lavra/cortex/commands/test-browser.md +309 -0
  135. package/plugins/lavra/cortex/commands/xcode-test.md +291 -0
  136. package/plugins/lavra/cortex/skills/agent-browser/SKILL.md +227 -0
  137. package/plugins/lavra/cortex/skills/agent-native-architecture/SKILL.md +439 -0
  138. package/plugins/lavra/cortex/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  139. package/plugins/lavra/cortex/skills/brainstorming/SKILL.md +197 -0
  140. package/plugins/lavra/cortex/skills/create-agent-skills/SKILL.md +304 -0
  141. package/plugins/lavra/cortex/skills/dhh-rails-style/SKILL.md +189 -0
  142. package/plugins/lavra/cortex/skills/dspy-ruby/SKILL.md +741 -0
  143. package/plugins/lavra/cortex/skills/every-style-editor/SKILL.md +138 -0
  144. package/plugins/lavra/cortex/skills/file-todos/SKILL.md +256 -0
  145. package/plugins/lavra/cortex/skills/frontend-design/SKILL.md +46 -0
  146. package/plugins/lavra/cortex/skills/gemini-imagegen/SKILL.md +242 -0
  147. package/plugins/lavra/cortex/skills/git-worktree/SKILL.md +307 -0
  148. package/plugins/lavra/cortex/skills/lavra-knowledge/SKILL.md +464 -0
  149. package/plugins/lavra/cortex/skills/project-setup/SKILL.md +418 -0
  150. package/plugins/lavra/cortex/skills/rclone/SKILL.md +155 -0
  151. package/plugins/lavra/docs/quickstart.md +267 -0
  152. package/plugins/lavra/examples/example-plan.md +197 -0
  153. package/plugins/lavra/gemini/agents/design/design-implementation-reviewer.md +130 -0
  154. package/plugins/lavra/gemini/agents/design/design-iterator.md +225 -0
  155. package/plugins/lavra/gemini/agents/design/figma-design-sync.md +218 -0
  156. package/plugins/lavra/gemini/agents/docs/ankane-readme-writer.md +96 -0
  157. package/plugins/lavra/gemini/agents/research/best-practices-researcher.md +138 -0
  158. package/plugins/lavra/gemini/agents/research/framework-docs-researcher.md +118 -0
  159. package/plugins/lavra/gemini/agents/research/git-history-analyzer.md +80 -0
  160. package/plugins/lavra/gemini/agents/research/learnings-researcher.md +262 -0
  161. package/plugins/lavra/gemini/agents/research/repo-research-analyst.md +164 -0
  162. package/plugins/lavra/gemini/agents/review/agent-native-reviewer.md +281 -0
  163. package/plugins/lavra/gemini/agents/review/architecture-strategist.md +89 -0
  164. package/plugins/lavra/gemini/agents/review/code-simplicity-reviewer.md +116 -0
  165. package/plugins/lavra/gemini/agents/review/data-integrity-guardian.md +96 -0
  166. package/plugins/lavra/gemini/agents/review/data-migration-expert.md +125 -0
  167. package/plugins/lavra/gemini/agents/review/deployment-verification-agent.md +185 -0
  168. package/plugins/lavra/gemini/agents/review/dhh-rails-reviewer.md +101 -0
  169. package/plugins/lavra/gemini/agents/review/goal-verifier.md +116 -0
  170. package/plugins/lavra/gemini/agents/review/julik-frontend-races-reviewer.md +246 -0
  171. package/plugins/lavra/gemini/agents/review/kieran-python-reviewer.md +155 -0
  172. package/plugins/lavra/gemini/agents/review/kieran-rails-reviewer.md +137 -0
  173. package/plugins/lavra/gemini/agents/review/kieran-typescript-reviewer.md +146 -0
  174. package/plugins/lavra/gemini/agents/review/migration-drift-detector.md +314 -0
  175. package/plugins/lavra/gemini/agents/review/pattern-recognition-specialist.md +94 -0
  176. package/plugins/lavra/gemini/agents/review/performance-oracle.md +161 -0
  177. package/plugins/lavra/gemini/agents/review/security-sentinel.md +132 -0
  178. package/plugins/lavra/gemini/agents/workflow/bug-reproduction-validator.md +126 -0
  179. package/plugins/lavra/gemini/agents/workflow/every-style-editor.md +103 -0
  180. package/plugins/lavra/gemini/agents/workflow/lint.md +36 -0
  181. package/plugins/lavra/gemini/agents/workflow/pr-comment-resolver.md +101 -0
  182. package/plugins/lavra/gemini/agents/workflow/spec-flow-analyzer.md +163 -0
  183. package/plugins/lavra/gemini/commands/agent-native-audit.toml +284 -0
  184. package/plugins/lavra/gemini/commands/beads-brainstorm.toml +292 -0
  185. package/plugins/lavra/gemini/commands/beads-checkpoint.toml +145 -0
  186. package/plugins/lavra/gemini/commands/beads-compound.toml +167 -0
  187. package/plugins/lavra/gemini/commands/beads-deepen.toml +388 -0
  188. package/plugins/lavra/gemini/commands/beads-design.toml +295 -0
  189. package/plugins/lavra/gemini/commands/beads-import.toml +197 -0
  190. package/plugins/lavra/gemini/commands/beads-parallel.toml +909 -0
  191. package/plugins/lavra/gemini/commands/beads-plan-review.toml +201 -0
  192. package/plugins/lavra/gemini/commands/beads-plan.toml +391 -0
  193. package/plugins/lavra/gemini/commands/beads-quick.toml +134 -0
  194. package/plugins/lavra/gemini/commands/beads-recall.toml +281 -0
  195. package/plugins/lavra/gemini/commands/beads-review.toml +338 -0
  196. package/plugins/lavra/gemini/commands/beads-triage.toml +161 -0
  197. package/plugins/lavra/gemini/commands/beads-work.toml +347 -0
  198. package/plugins/lavra/gemini/commands/changelog.toml +151 -0
  199. package/plugins/lavra/gemini/commands/create-agent-skill.toml +18 -0
  200. package/plugins/lavra/gemini/commands/deploy-docs.toml +68 -0
  201. package/plugins/lavra/gemini/commands/feature-video.toml +264 -0
  202. package/plugins/lavra/gemini/commands/generate-command.toml +148 -0
  203. package/plugins/lavra/gemini/commands/heal-skill.toml +131 -0
  204. package/plugins/lavra/gemini/commands/lavra-brainstorm.toml +391 -0
  205. package/plugins/lavra/gemini/commands/lavra-ceo-review.toml +391 -0
  206. package/plugins/lavra/gemini/commands/lavra-checkpoint.toml +165 -0
  207. package/plugins/lavra/gemini/commands/lavra-design.toml +624 -0
  208. package/plugins/lavra/gemini/commands/lavra-eng-review.toml +265 -0
  209. package/plugins/lavra/gemini/commands/lavra-import.toml +197 -0
  210. package/plugins/lavra/gemini/commands/lavra-learn.toml +179 -0
  211. package/plugins/lavra/gemini/commands/lavra-plan-review.toml +201 -0
  212. package/plugins/lavra/gemini/commands/lavra-plan.toml +518 -0
  213. package/plugins/lavra/gemini/commands/lavra-qa.toml +360 -0
  214. package/plugins/lavra/gemini/commands/lavra-quick.toml +181 -0
  215. package/plugins/lavra/gemini/commands/lavra-recall.toml +281 -0
  216. package/plugins/lavra/gemini/commands/lavra-research.toml +270 -0
  217. package/plugins/lavra/gemini/commands/lavra-retro.toml +403 -0
  218. package/plugins/lavra/gemini/commands/lavra-review.toml +404 -0
  219. package/plugins/lavra/gemini/commands/lavra-ship.toml +333 -0
  220. package/plugins/lavra/gemini/commands/lavra-triage.toml +161 -0
  221. package/plugins/lavra/gemini/commands/lavra-work-ralph.toml +523 -0
  222. package/plugins/lavra/gemini/commands/lavra-work-teams.toml +507 -0
  223. package/plugins/lavra/gemini/commands/lavra-work.toml +1022 -0
  224. package/plugins/lavra/gemini/commands/lfg.toml +28 -0
  225. package/plugins/lavra/gemini/commands/release-docs.toml +146 -0
  226. package/plugins/lavra/gemini/commands/report-bug.toml +157 -0
  227. package/plugins/lavra/gemini/commands/reproduce-bug.toml +99 -0
  228. package/plugins/lavra/gemini/commands/resolve-pr-parallel.toml +56 -0
  229. package/plugins/lavra/gemini/commands/resolve-todo-parallel.toml +54 -0
  230. package/plugins/lavra/gemini/commands/test-browser.toml +307 -0
  231. package/plugins/lavra/gemini/commands/xcode-test.toml +289 -0
  232. package/plugins/lavra/gemini/docs/MCP_SETUP.md +41 -0
  233. package/plugins/lavra/gemini/skills/agent-browser/SKILL.md +227 -0
  234. package/plugins/lavra/gemini/skills/agent-native-architecture/SKILL.md +439 -0
  235. package/plugins/lavra/gemini/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  236. package/plugins/lavra/gemini/skills/beads-knowledge/SKILL.md +464 -0
  237. package/plugins/lavra/gemini/skills/brainstorming/SKILL.md +197 -0
  238. package/plugins/lavra/gemini/skills/create-agent-skills/SKILL.md +304 -0
  239. package/plugins/lavra/gemini/skills/dhh-rails-style/SKILL.md +189 -0
  240. package/plugins/lavra/gemini/skills/dspy-ruby/SKILL.md +741 -0
  241. package/plugins/lavra/gemini/skills/every-style-editor/SKILL.md +138 -0
  242. package/plugins/lavra/gemini/skills/file-todos/SKILL.md +256 -0
  243. package/plugins/lavra/gemini/skills/frontend-design/SKILL.md +46 -0
  244. package/plugins/lavra/gemini/skills/gemini-imagegen/SKILL.md +242 -0
  245. package/plugins/lavra/gemini/skills/git-worktree/SKILL.md +307 -0
  246. package/plugins/lavra/gemini/skills/lavra-knowledge/SKILL.md +464 -0
  247. package/plugins/lavra/gemini/skills/project-setup/SKILL.md +418 -0
  248. package/plugins/lavra/gemini/skills/rclone/SKILL.md +155 -0
  249. package/plugins/lavra/gemini-extension.json +50 -0
  250. package/plugins/lavra/gemini-src/settings.json +37 -0
  251. package/plugins/lavra/hooks/auto-recall.sh +210 -0
  252. package/plugins/lavra/hooks/check-memory.sh +169 -0
  253. package/plugins/lavra/hooks/hooks.json +47 -0
  254. package/plugins/lavra/hooks/knowledge-db.sh +255 -0
  255. package/plugins/lavra/hooks/memory-capture.sh +132 -0
  256. package/plugins/lavra/hooks/provision-memory.sh +144 -0
  257. package/plugins/lavra/hooks/recall.sh +152 -0
  258. package/plugins/lavra/hooks/subagent-wrapup.sh +44 -0
  259. package/plugins/lavra/hooks/teammate-idle-check.sh +29 -0
  260. package/plugins/lavra/opencode/agents/design/design-implementation-reviewer.md +127 -0
  261. package/plugins/lavra/opencode/agents/design/design-iterator.md +222 -0
  262. package/plugins/lavra/opencode/agents/design/figma-design-sync.md +215 -0
  263. package/plugins/lavra/opencode/agents/docs/ankane-readme-writer.md +93 -0
  264. package/plugins/lavra/opencode/agents/research/best-practices-researcher.md +135 -0
  265. package/plugins/lavra/opencode/agents/research/framework-docs-researcher.md +115 -0
  266. package/plugins/lavra/opencode/agents/research/git-history-analyzer.md +77 -0
  267. package/plugins/lavra/opencode/agents/research/learnings-researcher.md +259 -0
  268. package/plugins/lavra/opencode/agents/research/repo-research-analyst.md +161 -0
  269. package/plugins/lavra/opencode/agents/review/agent-native-reviewer.md +278 -0
  270. package/plugins/lavra/opencode/agents/review/architecture-strategist.md +86 -0
  271. package/plugins/lavra/opencode/agents/review/code-simplicity-reviewer.md +113 -0
  272. package/plugins/lavra/opencode/agents/review/data-integrity-guardian.md +93 -0
  273. package/plugins/lavra/opencode/agents/review/data-migration-expert.md +122 -0
  274. package/plugins/lavra/opencode/agents/review/deployment-verification-agent.md +182 -0
  275. package/plugins/lavra/opencode/agents/review/dhh-rails-reviewer.md +98 -0
  276. package/plugins/lavra/opencode/agents/review/goal-verifier.md +113 -0
  277. package/plugins/lavra/opencode/agents/review/julik-frontend-races-reviewer.md +243 -0
  278. package/plugins/lavra/opencode/agents/review/kieran-python-reviewer.md +152 -0
  279. package/plugins/lavra/opencode/agents/review/kieran-rails-reviewer.md +134 -0
  280. package/plugins/lavra/opencode/agents/review/kieran-typescript-reviewer.md +143 -0
  281. package/plugins/lavra/opencode/agents/review/migration-drift-detector.md +311 -0
  282. package/plugins/lavra/opencode/agents/review/pattern-recognition-specialist.md +91 -0
  283. package/plugins/lavra/opencode/agents/review/performance-oracle.md +158 -0
  284. package/plugins/lavra/opencode/agents/review/security-sentinel.md +129 -0
  285. package/plugins/lavra/opencode/agents/workflow/bug-reproduction-validator.md +123 -0
  286. package/plugins/lavra/opencode/agents/workflow/every-style-editor.md +100 -0
  287. package/plugins/lavra/opencode/agents/workflow/lint.md +33 -0
  288. package/plugins/lavra/opencode/agents/workflow/pr-comment-resolver.md +98 -0
  289. package/plugins/lavra/opencode/agents/workflow/spec-flow-analyzer.md +160 -0
  290. package/plugins/lavra/opencode/commands/agent-native-audit.md +286 -0
  291. package/plugins/lavra/opencode/commands/changelog.md +153 -0
  292. package/plugins/lavra/opencode/commands/create-agent-skill.md +21 -0
  293. package/plugins/lavra/opencode/commands/deploy-docs.md +69 -0
  294. package/plugins/lavra/opencode/commands/feature-video.md +266 -0
  295. package/plugins/lavra/opencode/commands/generate-command.md +150 -0
  296. package/plugins/lavra/opencode/commands/heal-skill.md +134 -0
  297. package/plugins/lavra/opencode/commands/lavra-brainstorm.md +392 -0
  298. package/plugins/lavra/opencode/commands/lavra-ceo-review.md +392 -0
  299. package/plugins/lavra/opencode/commands/lavra-checkpoint.md +166 -0
  300. package/plugins/lavra/opencode/commands/lavra-compound.md +168 -0
  301. package/plugins/lavra/opencode/commands/lavra-deepen.md +389 -0
  302. package/plugins/lavra/opencode/commands/lavra-design.md +625 -0
  303. package/plugins/lavra/opencode/commands/lavra-eng-review.md +266 -0
  304. package/plugins/lavra/opencode/commands/lavra-import.md +198 -0
  305. package/plugins/lavra/opencode/commands/lavra-learn.md +180 -0
  306. package/plugins/lavra/opencode/commands/lavra-parallel.md +910 -0
  307. package/plugins/lavra/opencode/commands/lavra-plan.md +519 -0
  308. package/plugins/lavra/opencode/commands/lavra-qa.md +361 -0
  309. package/plugins/lavra/opencode/commands/lavra-quick.md +182 -0
  310. package/plugins/lavra/opencode/commands/lavra-recall.md +283 -0
  311. package/plugins/lavra/opencode/commands/lavra-research.md +271 -0
  312. package/plugins/lavra/opencode/commands/lavra-retro.md +404 -0
  313. package/plugins/lavra/opencode/commands/lavra-review.md +405 -0
  314. package/plugins/lavra/opencode/commands/lavra-ship.md +334 -0
  315. package/plugins/lavra/opencode/commands/lavra-triage.md +163 -0
  316. package/plugins/lavra/opencode/commands/lavra-work-ralph.md +525 -0
  317. package/plugins/lavra/opencode/commands/lavra-work-teams.md +508 -0
  318. package/plugins/lavra/opencode/commands/lavra-work.md +1023 -0
  319. package/plugins/lavra/opencode/commands/lfg.md +30 -0
  320. package/plugins/lavra/opencode/commands/release-docs.md +148 -0
  321. package/plugins/lavra/opencode/commands/report-bug.md +159 -0
  322. package/plugins/lavra/opencode/commands/reproduce-bug.md +101 -0
  323. package/plugins/lavra/opencode/commands/resolve-pr-parallel.md +58 -0
  324. package/plugins/lavra/opencode/commands/resolve-todo-parallel.md +56 -0
  325. package/plugins/lavra/opencode/commands/test-browser.md +309 -0
  326. package/plugins/lavra/opencode/commands/xcode-test.md +291 -0
  327. package/plugins/lavra/opencode/docs/MCP_SETUP.md +48 -0
  328. package/plugins/lavra/opencode/skills/agent-browser/SKILL.md +227 -0
  329. package/plugins/lavra/opencode/skills/agent-native-architecture/SKILL.md +439 -0
  330. package/plugins/lavra/opencode/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  331. package/plugins/lavra/opencode/skills/brainstorming/SKILL.md +197 -0
  332. package/plugins/lavra/opencode/skills/create-agent-skills/SKILL.md +304 -0
  333. package/plugins/lavra/opencode/skills/dhh-rails-style/SKILL.md +189 -0
  334. package/plugins/lavra/opencode/skills/dspy-ruby/SKILL.md +741 -0
  335. package/plugins/lavra/opencode/skills/every-style-editor/SKILL.md +138 -0
  336. package/plugins/lavra/opencode/skills/file-todos/SKILL.md +256 -0
  337. package/plugins/lavra/opencode/skills/frontend-design/SKILL.md +46 -0
  338. package/plugins/lavra/opencode/skills/gemini-imagegen/SKILL.md +242 -0
  339. package/plugins/lavra/opencode/skills/git-worktree/SKILL.md +307 -0
  340. package/plugins/lavra/opencode/skills/lavra-knowledge/SKILL.md +464 -0
  341. package/plugins/lavra/opencode/skills/project-setup/SKILL.md +418 -0
  342. package/plugins/lavra/opencode/skills/rclone/SKILL.md +155 -0
  343. package/plugins/lavra/opencode-src/package.json +13 -0
  344. package/plugins/lavra/opencode-src/plugin.ts +176 -0
  345. package/plugins/lavra/scripts/import-plan.sh +141 -0
  346. package/plugins/lavra/skills/agent-browser/SKILL.md +223 -0
  347. package/plugins/lavra/skills/agent-native-architecture/SKILL.md +435 -0
  348. package/plugins/lavra/skills/agent-native-architecture/references/action-parity-discipline.md +353 -0
  349. package/plugins/lavra/skills/agent-native-architecture/references/agent-execution-patterns.md +362 -0
  350. package/plugins/lavra/skills/agent-native-architecture/references/agent-native-testing.md +508 -0
  351. package/plugins/lavra/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
  352. package/plugins/lavra/skills/agent-native-architecture/references/dynamic-context-injection.md +281 -0
  353. package/plugins/lavra/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
  354. package/plugins/lavra/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +227 -0
  355. package/plugins/lavra/skills/agent-native-architecture/references/mcp-tool-design.md +427 -0
  356. package/plugins/lavra/skills/agent-native-architecture/references/mobile-patterns.md +410 -0
  357. package/plugins/lavra/skills/agent-native-architecture/references/product-implications.md +341 -0
  358. package/plugins/lavra/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
  359. package/plugins/lavra/skills/agent-native-architecture/references/self-modification.md +269 -0
  360. package/plugins/lavra/skills/agent-native-architecture/references/shared-workspace-architecture.md +517 -0
  361. package/plugins/lavra/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
  362. package/plugins/lavra/skills/brainstorming/SKILL.md +193 -0
  363. package/plugins/lavra/skills/create-agent-skills/SKILL.md +300 -0
  364. package/plugins/lavra/skills/create-agent-skills/references/api-security.md +60 -0
  365. package/plugins/lavra/skills/create-agent-skills/references/be-clear-and-direct.md +84 -0
  366. package/plugins/lavra/skills/create-agent-skills/references/best-practices.md +404 -0
  367. package/plugins/lavra/skills/create-agent-skills/references/common-patterns.md +121 -0
  368. package/plugins/lavra/skills/create-agent-skills/references/core-principles.md +103 -0
  369. package/plugins/lavra/skills/create-agent-skills/references/executable-code.md +92 -0
  370. package/plugins/lavra/skills/create-agent-skills/references/iteration-and-testing.md +164 -0
  371. package/plugins/lavra/skills/create-agent-skills/references/official-spec.md +185 -0
  372. package/plugins/lavra/skills/create-agent-skills/references/recommended-structure.md +168 -0
  373. package/plugins/lavra/skills/create-agent-skills/references/skill-structure.md +215 -0
  374. package/plugins/lavra/skills/create-agent-skills/references/using-scripts.md +113 -0
  375. package/plugins/lavra/skills/create-agent-skills/references/using-templates.md +112 -0
  376. package/plugins/lavra/skills/create-agent-skills/references/workflows-and-validation.md +122 -0
  377. package/plugins/lavra/skills/create-agent-skills/templates/router-skill.md +73 -0
  378. package/plugins/lavra/skills/create-agent-skills/templates/simple-skill.md +33 -0
  379. package/plugins/lavra/skills/create-agent-skills/workflows/add-reference.md +55 -0
  380. package/plugins/lavra/skills/create-agent-skills/workflows/add-script.md +59 -0
  381. package/plugins/lavra/skills/create-agent-skills/workflows/add-template.md +51 -0
  382. package/plugins/lavra/skills/create-agent-skills/workflows/add-workflow.md +54 -0
  383. package/plugins/lavra/skills/create-agent-skills/workflows/audit-skill.md +63 -0
  384. package/plugins/lavra/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +68 -0
  385. package/plugins/lavra/skills/create-agent-skills/workflows/create-new-skill.md +92 -0
  386. package/plugins/lavra/skills/create-agent-skills/workflows/get-guidance.md +70 -0
  387. package/plugins/lavra/skills/create-agent-skills/workflows/upgrade-to-router.md +68 -0
  388. package/plugins/lavra/skills/create-agent-skills/workflows/verify-skill.md +63 -0
  389. package/plugins/lavra/skills/file-todos/SKILL.md +252 -0
  390. package/plugins/lavra/skills/file-todos/assets/todo-template.md +155 -0
  391. package/plugins/lavra/skills/git-worktree/SKILL.md +303 -0
  392. package/plugins/lavra/skills/git-worktree/scripts/worktree-manager.sh +345 -0
  393. package/plugins/lavra/skills/lavra-knowledge/SKILL.md +460 -0
  394. package/plugins/lavra/skills/lavra-knowledge/references/jsonl-schema.md +104 -0
  395. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/SKILL.md +184 -0
  396. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  397. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/module-organization.md +121 -0
  398. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  399. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/resources.md +119 -0
  400. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  401. package/plugins/lavra/skills/optional/dhh-rails-style/SKILL.md +185 -0
  402. package/plugins/lavra/skills/optional/dhh-rails-style/references/architecture.md +653 -0
  403. package/plugins/lavra/skills/optional/dhh-rails-style/references/controllers.md +303 -0
  404. package/plugins/lavra/skills/optional/dhh-rails-style/references/frontend.md +510 -0
  405. package/plugins/lavra/skills/optional/dhh-rails-style/references/gems.md +266 -0
  406. package/plugins/lavra/skills/optional/dhh-rails-style/references/models.md +359 -0
  407. package/plugins/lavra/skills/optional/dhh-rails-style/references/testing.md +338 -0
  408. package/plugins/lavra/skills/optional/dspy-ruby/SKILL.md +737 -0
  409. package/plugins/lavra/skills/optional/dspy-ruby/assets/config-template.rb +187 -0
  410. package/plugins/lavra/skills/optional/dspy-ruby/assets/module-template.rb +300 -0
  411. package/plugins/lavra/skills/optional/dspy-ruby/assets/signature-template.rb +221 -0
  412. package/plugins/lavra/skills/optional/dspy-ruby/references/core-concepts.md +674 -0
  413. package/plugins/lavra/skills/optional/dspy-ruby/references/observability.md +366 -0
  414. package/plugins/lavra/skills/optional/dspy-ruby/references/optimization.md +603 -0
  415. package/plugins/lavra/skills/optional/dspy-ruby/references/providers.md +418 -0
  416. package/plugins/lavra/skills/optional/dspy-ruby/references/toolsets.md +502 -0
  417. package/plugins/lavra/skills/optional/every-style-editor/SKILL.md +134 -0
  418. package/plugins/lavra/skills/optional/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  419. package/plugins/lavra/skills/optional/frontend-design/SKILL.md +42 -0
  420. package/plugins/lavra/skills/optional/gemini-imagegen/SKILL.md +238 -0
  421. package/plugins/lavra/skills/optional/gemini-imagegen/requirements.txt +2 -0
  422. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/compose_images.py +157 -0
  423. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/edit_image.py +144 -0
  424. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/gemini_images.py +263 -0
  425. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/generate_image.py +133 -0
  426. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
  427. package/plugins/lavra/skills/optional/rclone/SKILL.md +151 -0
  428. package/plugins/lavra/skills/optional/rclone/scripts/check_setup.sh +60 -0
  429. package/plugins/lavra/skills/project-setup/SKILL.md +414 -0
  430. package/plugins/lavra/tests/build-index.sh +116 -0
  431. package/plugins/lavra/tests/recall-bench.sh +224 -0
  432. package/plugins/lavra/tests/search-fts5.sh +65 -0
  433. package/plugins/lavra/tests/search-grep.sh +54 -0
  434. package/plugins/lavra/tests/test-queries.jsonl +25 -0
  435. package/scripts/apply-context-optimizations.py +345 -0
  436. package/scripts/convert-cortex.ts +257 -0
  437. package/scripts/convert-gemini.ts +369 -0
  438. package/scripts/convert-opencode.ts +313 -0
  439. package/scripts/package.json +27 -0
  440. package/scripts/pre-release-check.sh +176 -0
  441. package/scripts/select-opencode-models.sh +178 -0
  442. package/scripts/shared/model-config.json +17 -0
  443. package/scripts/shared/model-mapping.ts +129 -0
  444. package/scripts/shared/security.ts +97 -0
  445. package/scripts/shared/yaml-parser.ts +55 -0
  446. package/scripts/sqlite-to-jsonl.py +207 -0
  447. package/scripts/test-compatibility.ts +539 -0
  448. package/scripts/test-features.sh +342 -0
  449. package/scripts/test-installation.sh +514 -0
  450. package/scripts/test-security.ts +275 -0
  451. package/scripts/trim-agent-descriptions.py +177 -0
  452. package/uninstall.sh +133 -0
@@ -0,0 +1,275 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * Security controls test suite
5
+ * Tests path traversal, file size limits, YAML parsing, and other security controls
6
+ */
7
+
8
+ import { mkdir, writeFile, rm } from "node:fs/promises";
9
+ import { join } from "node:path";
10
+ import {
11
+ validatePath,
12
+ sanitizeFilename,
13
+ validateModelName,
14
+ readFileSafe,
15
+ } from "./shared/security";
16
+ import { parseFrontmatter } from "./shared/yaml-parser";
17
+
18
+ const TEST_DIR = join(import.meta.dir, "../test-output");
19
+ const PASSED: string[] = [];
20
+ const FAILED: string[] = [];
21
+
22
+ function pass(name: string) {
23
+ PASSED.push(name);
24
+ console.log(`āœ“ ${name}`);
25
+ }
26
+
27
+ function fail(name: string, error: string) {
28
+ FAILED.push(name);
29
+ console.log(`āœ— ${name}: ${error}`);
30
+ }
31
+
32
+ async function testPathTraversal() {
33
+ console.log("\nšŸ”’ Testing path traversal protection...");
34
+
35
+ // Test 1: Valid path should work
36
+ try {
37
+ const valid = validatePath(TEST_DIR, "test.md");
38
+ if (valid.includes(TEST_DIR)) {
39
+ pass("Valid path accepted");
40
+ } else {
41
+ fail("Valid path", "Path validation returned unexpected result");
42
+ }
43
+ } catch (err: any) {
44
+ fail("Valid path", err.message);
45
+ }
46
+
47
+ // Test 2: Path traversal should be rejected
48
+ try {
49
+ validatePath(TEST_DIR, "../../../etc/passwd");
50
+ fail("Path traversal", "Should have thrown error");
51
+ } catch (err: any) {
52
+ if (err.message.includes("Path traversal detected")) {
53
+ pass("Path traversal rejected");
54
+ } else {
55
+ fail("Path traversal", `Wrong error: ${err.message}`);
56
+ }
57
+ }
58
+
59
+ // Test 3: Symlink-style path should be rejected
60
+ try {
61
+ validatePath(TEST_DIR, "../../sensitive/data");
62
+ fail("Symlink path", "Should have thrown error");
63
+ } catch (err: any) {
64
+ if (err.message.includes("Path traversal detected")) {
65
+ pass("Symlink path rejected");
66
+ } else {
67
+ fail("Symlink path", `Wrong error: ${err.message}`);
68
+ }
69
+ }
70
+ }
71
+
72
+ async function testFilenameSanitization() {
73
+ console.log("\n🧹 Testing filename sanitization...");
74
+
75
+ // Test 1: Valid filename unchanged
76
+ const valid = sanitizeFilename("test-file_v2.md");
77
+ if (valid === "test-file_v2.md") {
78
+ pass("Valid filename unchanged");
79
+ } else {
80
+ fail("Valid filename", `Expected test-file_v2.md, got ${valid}`);
81
+ }
82
+
83
+ // Test 2: Special characters removed
84
+ const malicious = sanitizeFilename("../../../etc/passwd");
85
+ if (malicious === ".._.._.._etc_passwd") {
86
+ pass("Special characters sanitized");
87
+ } else {
88
+ fail("Special characters", `Expected .._.._.._etc_passwd, got ${malicious}`);
89
+ }
90
+
91
+ // Test 3: Spaces converted
92
+ const spaces = sanitizeFilename("file with spaces.md");
93
+ if (spaces === "file_with_spaces.md") {
94
+ pass("Spaces converted to underscores");
95
+ } else {
96
+ fail("Spaces", `Expected file_with_spaces.md, got ${spaces}`);
97
+ }
98
+ }
99
+
100
+ async function testFileSizeLimit() {
101
+ console.log("\nšŸ“ Testing file size limits...");
102
+
103
+ await mkdir(TEST_DIR, { recursive: true, mode: 0o755 });
104
+
105
+ // Test 1: Small file accepted
106
+ const smallFile = join(TEST_DIR, "small.md");
107
+ await writeFile(smallFile, "# Small file\n\nContent here.");
108
+
109
+ try {
110
+ const content = await readFileSafe(smallFile);
111
+ if (content.includes("Small file")) {
112
+ pass("Small file accepted");
113
+ } else {
114
+ fail("Small file", "Content not read correctly");
115
+ }
116
+ } catch (err: any) {
117
+ fail("Small file", err.message);
118
+ }
119
+
120
+ // Test 2: Large file rejected (create 11MB file)
121
+ const largeFile = join(TEST_DIR, "large.md");
122
+ const largeContent = "x".repeat(11 * 1024 * 1024); // 11MB
123
+ await writeFile(largeFile, largeContent);
124
+
125
+ try {
126
+ await readFileSafe(largeFile);
127
+ fail("Large file", "Should have thrown size limit error");
128
+ } catch (err: any) {
129
+ if (err.message.includes("File too large")) {
130
+ pass("Large file rejected (>10MB)");
131
+ } else {
132
+ fail("Large file", `Wrong error: ${err.message}`);
133
+ }
134
+ }
135
+
136
+ // Cleanup
137
+ await rm(TEST_DIR, { recursive: true, force: true });
138
+ }
139
+
140
+ async function testModelNameValidation() {
141
+ console.log("\nšŸŽÆ Testing model name validation...");
142
+
143
+ // Test 1: Valid model names accepted
144
+ const validModels = [
145
+ "sonnet",
146
+ "opus",
147
+ "haiku",
148
+ "inherit",
149
+ "anthropic/claude-sonnet-4-20250514",
150
+ "gemini-2.5-pro",
151
+ ];
152
+
153
+ for (const model of validModels) {
154
+ try {
155
+ const result = validateModelName(model);
156
+ if (result === model) {
157
+ pass(`Valid model accepted: ${model}`);
158
+ } else {
159
+ fail(`Valid model: ${model}`, `Expected ${model}, got ${result}`);
160
+ }
161
+ } catch (err: any) {
162
+ fail(`Valid model: ${model}`, err.message);
163
+ }
164
+ }
165
+
166
+ // Test 2: Invalid model names rejected
167
+ const invalidModels = [
168
+ "; rm -rf /",
169
+ "../../../etc/passwd",
170
+ "$(whoami)",
171
+ "malicious' OR '1'='1",
172
+ ];
173
+
174
+ for (const model of invalidModels) {
175
+ try {
176
+ validateModelName(model);
177
+ fail(`Invalid model: ${model}`, "Should have thrown error");
178
+ } catch (err: any) {
179
+ if (
180
+ err.message.includes("Invalid model name format") ||
181
+ err.message.includes("Unsupported model")
182
+ ) {
183
+ pass(`Invalid model rejected: ${model}`);
184
+ } else {
185
+ fail(`Invalid model: ${model}`, `Wrong error: ${err.message}`);
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ async function testYAMLParsing() {
192
+ console.log("\nšŸ“ Testing YAML parsing security...");
193
+
194
+ // Test 1: Valid YAML accepted
195
+ const validYAML = `---
196
+ name: test-agent
197
+ description: Test agent description
198
+ model: sonnet
199
+ ---
200
+ Body content here`;
201
+
202
+ try {
203
+ const parsed = parseFrontmatter(validYAML);
204
+ if (parsed.name === "test-agent" && parsed.model === "sonnet") {
205
+ pass("Valid YAML parsed correctly");
206
+ } else {
207
+ fail("Valid YAML", "Parsed values incorrect");
208
+ }
209
+ } catch (err: any) {
210
+ fail("Valid YAML", err.message);
211
+ }
212
+
213
+ // Test 2: Malicious YAML rejected (code execution attempt)
214
+ const maliciousYAML = `---
215
+ !!python/object/apply:os.system
216
+ args: ['echo pwned']
217
+ ---
218
+ Body`;
219
+
220
+ try {
221
+ parseFrontmatter(maliciousYAML);
222
+ fail("Malicious YAML", "Should have thrown error on unsafe tag");
223
+ } catch (err: any) {
224
+ if (err.message.includes("parse error") || err.message.toLowerCase().includes("unknown tag")) {
225
+ pass("Malicious YAML rejected (code execution blocked)");
226
+ } else {
227
+ fail("Malicious YAML", `Wrong error: ${err.message}`);
228
+ }
229
+ }
230
+
231
+ // Test 3: Invalid structure rejected
232
+ const invalidYAML = `---
233
+ this is not valid yaml at all!!!
234
+ ---
235
+ Body`;
236
+
237
+ try {
238
+ parseFrontmatter(invalidYAML);
239
+ fail("Invalid YAML", "Should have thrown parse error");
240
+ } catch (err: any) {
241
+ if (err.message.includes("parse error")) {
242
+ pass("Invalid YAML rejected");
243
+ } else {
244
+ fail("Invalid YAML", `Wrong error: ${err.message}`);
245
+ }
246
+ }
247
+ }
248
+
249
+ async function main() {
250
+ console.log("šŸ›”ļø Security Controls Test Suite\n");
251
+ console.log("Testing lavra conversion script security...\n");
252
+
253
+ await testPathTraversal();
254
+ await testFilenameSanitization();
255
+ await testFileSizeLimit();
256
+ await testModelNameValidation();
257
+ await testYAMLParsing();
258
+
259
+ console.log("\n" + "=".repeat(60));
260
+ console.log(`āœ“ Passed: ${PASSED.length}`);
261
+ console.log(`āœ— Failed: ${FAILED.length}`);
262
+ console.log("=".repeat(60));
263
+
264
+ if (FAILED.length > 0) {
265
+ console.log("\nāŒ Some tests failed:");
266
+ FAILED.forEach((test) => console.log(` - ${test}`));
267
+ process.exit(1);
268
+ } else {
269
+ console.log("\nāœ… All security tests passed!");
270
+ }
271
+ }
272
+
273
+ if (import.meta.main) {
274
+ main();
275
+ }
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Trim agent descriptions to under 250 chars and move examples to body.
4
+ """
5
+ import re
6
+ from pathlib import Path
7
+
8
+ # Agent descriptions to use (1-2 sentences, under 250 chars)
9
+ DESCRIPTIONS = {
10
+ # Review agents (14)
11
+ "kieran-rails-reviewer": "Rails code review enforcing strict conventions: inline turbo streams, proper namespacing, service extraction signals, testability, naming clarity, and duplication over complexity. Use after implementing or modifying Rails code.",
12
+ "agent-native-reviewer": "Reviews code for agent-native compliance - ensuring any user action has an agent equivalent, and agents see what users see. Checks action parity, context parity, and shared workspace design.",
13
+ "architecture-strategist": "Analyzes code changes from an architectural perspective - evaluating system design, component boundaries, SOLID compliance, and dependency analysis. Use for structural changes, new services, or refactorings.",
14
+ "code-simplicity-reviewer": "Final review pass ensuring code is as simple and minimal as possible. Identifies unnecessary complexity, challenges premature abstractions, applies YAGNI rigorously. Use after implementation is complete.",
15
+ "data-integrity-guardian": "Reviews database migrations, data models, and code that manipulates persistent data. Checks migration safety, validates constraints, verifies referential integrity, and audits privacy compliance.",
16
+ "data-migration-expert": "Reviews PRs touching database migrations, data backfills, or production data transformations. Validates ID mappings, checks for swapped values, verifies rollback safety, ensures data integrity.",
17
+ "deployment-verification-agent": "Produces concrete pre/post-deploy checklists with SQL verification queries, rollback procedures, and monitoring plans. Use when PRs touch production data, migrations, or behavior that could silently fail.",
18
+ "dhh-rails-reviewer": "Brutally honest Rails code review from DHH's perspective. Identifies anti-patterns, JavaScript framework contamination, unnecessary abstractions, and Rails convention violations. Flags JWT over sessions, microservices over monoliths.",
19
+ "julik-frontend-races-reviewer": "Reviews JavaScript and Stimulus code for race conditions, timing issues, and DOM irregularities. Checks Hotwire/Turbo compatibility, event handler cleanup, timer cancellation, CSS animation races. Use after implementing or modifying JavaScript.",
20
+ "kieran-python-reviewer": "Python code review enforcing strict conventions: mandatory type hints (modern 3.10+ syntax), Pythonic patterns, proper module organization, testability, naming clarity, and duplication over complexity. Use after implementing or modifying Python code.",
21
+ "kieran-typescript-reviewer": "TypeScript code review enforcing strict conventions: no-any policy, proper type safety, modern TS 5+ patterns, import organization, testability, naming clarity, and duplication over complexity. Use after implementing or modifying TypeScript code.",
22
+ "pattern-recognition-specialist": "Analyzes code for design patterns, anti-patterns, naming conventions, code duplication, and architectural boundary violations. Produces structured reports with actionable refactoring recommendations.",
23
+ "performance-oracle": "Analyzes code for performance bottlenecks, algorithmic complexity, N+1 queries, memory leaks, caching opportunities, and scalability concerns. Projects performance at 10x/100x/1000x data volumes.",
24
+ "security-sentinel": "Performs security audits covering input validation, SQL injection, XSS, authentication/authorization, hardcoded secrets, and OWASP Top 10 compliance. Use when reviewing code that handles user input, authentication, payments, or sensitive data.",
25
+
26
+ # Research agents (5)
27
+ "best-practices-researcher": "Researches external best practices, documentation, and examples for any technology, framework, or development practice. Checks available skills first, then official docs and community standards. Includes mandatory deprecation checks.",
28
+ "framework-docs-researcher": "Gathers comprehensive documentation and best practices for frameworks, libraries, or project dependencies. Fetches official docs via Context7, explores source code, identifies version-specific constraints, and checks for API deprecations.",
29
+ "git-history-analyzer": "Analyzes git history to understand code evolution, trace origins of specific code patterns, identify key contributors and their expertise areas, and extract development patterns from commit history.",
30
+ "learnings-researcher": "Searches institutional learnings in .lavra/memory/knowledge.jsonl for relevant past solutions. Finds applicable patterns, gotchas, and lessons learned by type, tags, content, and bead references to prevent repeated mistakes.",
31
+ "repo-research-analyst": "Conducts thorough research on repository structure, documentation, and patterns. Analyzes architecture files, examines GitHub issues for conventions, reviews contribution guidelines, discovers templates, and searches for implementation patterns.",
32
+
33
+ # Design agents (3)
34
+ "design-implementation-reviewer": "Verifies UI implementations match Figma design specifications. Use after HTML/CSS/React components are created or modified to compare live implementation against Figma and identify visual discrepancies.",
35
+ "design-iterator": "Iteratively refines UI design through N screenshot-analyze-improve cycles. Use PROACTIVELY when design changes aren't coming together after 1-2 attempts, or when user requests iterative refinement.",
36
+ "figma-design-sync": "Detects and fixes visual differences between web implementation and Figma design. Use iteratively when syncing implementation to match Figma specs - captures screenshots, compares, and makes precise CSS/Tailwind corrections.",
37
+
38
+ # Workflow agents (5)
39
+ "bug-reproduction-validator": "Systematically attempts to reproduce reported bugs, validates steps to reproduce, and confirms whether behavior deviates from expected functionality. Classifies issues as confirmed bugs, cannot-reproduce, not-a-bug, environmental, data, or user error.",
40
+ "every-style-editor": "Reviews and edits text content to conform to Every's house style guide - checking headline casing, company usage, adverbs, active voice, number formatting, and punctuation rules.",
41
+ "lint": "Runs linting and code quality checks on Ruby and ERB files. Use before pushing to origin to catch style violations, syntax errors, and code quality issues.",
42
+ "pr-comment-resolver": "Addresses pull request review comments by implementing requested changes and reporting back. Handles the full workflow: understanding the comment, implementing the fix, verifying correctness, and providing a structured resolution summary.",
43
+ "spec-flow-analyzer": "Analyzes specifications, plans, and feature descriptions to map all possible user flows, identify gaps and ambiguities, and surface critical questions. Use when reviewing feature specs, planning new features, or validating implementation plans.",
44
+
45
+ # Docs agents (1)
46
+ "ankane-readme-writer": "Creates or updates README files following Ankane-style template for Ruby gems. Enforces imperative voice, sentences under 15 words, proper section ordering, and single-purpose code fences.",
47
+ }
48
+
49
+ def extract_frontmatter_and_body(content):
50
+ """Extract frontmatter and body from markdown file."""
51
+ # Match YAML frontmatter between --- delimiters
52
+ match = re.match(r'^---\n(.*?)\n---\n(.*)$', content, re.DOTALL)
53
+ if not match:
54
+ raise ValueError("Could not parse frontmatter")
55
+ return match.group(1), match.group(2)
56
+
57
+ def parse_frontmatter(frontmatter):
58
+ """Parse YAML frontmatter into dict."""
59
+ fields = {}
60
+ current_key = None
61
+ current_value = []
62
+
63
+ for line in frontmatter.split('\n'):
64
+ # Check if this is a new key
65
+ if ':' in line and not line.startswith(' '):
66
+ # Save previous key if exists
67
+ if current_key:
68
+ fields[current_key] = '\n'.join(current_value).strip()
69
+
70
+ # Start new key
71
+ key, value = line.split(':', 1)
72
+ current_key = key.strip()
73
+ current_value = [value.strip()] if value.strip() else []
74
+ elif current_key:
75
+ # Continuation of current value
76
+ current_value.append(line)
77
+
78
+ # Save last key
79
+ if current_key:
80
+ fields[current_key] = '\n'.join(current_value).strip()
81
+
82
+ return fields
83
+
84
+ def build_frontmatter(fields):
85
+ """Build YAML frontmatter from dict."""
86
+ lines = ['---']
87
+ for key, value in fields.items():
88
+ if '\n' in value or len(value) > 80:
89
+ # Multiline string - use quoted format
90
+ lines.append(f'{key}: "{value}"')
91
+ else:
92
+ lines.append(f'{key}: {value}')
93
+ lines.append('---')
94
+ return '\n'.join(lines)
95
+
96
+ def extract_examples(body):
97
+ """Extract <example> blocks from body."""
98
+ examples = []
99
+ # Find all <example>...</example> blocks
100
+ pattern = r'<example>.*?</example>'
101
+ matches = re.finditer(pattern, body, re.DOTALL)
102
+ for match in matches:
103
+ examples.append(match.group(0))
104
+ return examples
105
+
106
+ def remove_delegation_examples_section(body):
107
+ """Remove ## Delegation Examples section from body."""
108
+ # Remove the section header and all examples under it until next ## or end
109
+ pattern = r'## Delegation Examples\s*\n\n(?:<example>.*?</example>\s*\n*)*'
110
+ return re.sub(pattern, '', body, flags=re.DOTALL)
111
+
112
+ def process_agent(file_path, new_description):
113
+ """Process a single agent file."""
114
+ print(f"Processing {file_path.name}...")
115
+
116
+ content = file_path.read_text()
117
+
118
+ # Extract frontmatter and body
119
+ frontmatter, body = extract_frontmatter_and_body(content)
120
+ fields = parse_frontmatter(frontmatter)
121
+
122
+ # Extract examples from body if they exist
123
+ examples = extract_examples(body)
124
+
125
+ # Update description in frontmatter
126
+ fields['description'] = new_description
127
+
128
+ # Remove ## Delegation Examples section from body
129
+ body = remove_delegation_examples_section(body)
130
+
131
+ # Add examples section to body if examples exist
132
+ if examples:
133
+ examples_section = '\n<examples>\n' + '\n\n'.join(examples) + '\n</examples>\n\n'
134
+ body = examples_section + body
135
+
136
+ # Rebuild file
137
+ new_frontmatter = build_frontmatter(fields)
138
+ new_content = f"{new_frontmatter}\n{body}"
139
+
140
+ # Write back
141
+ file_path.write_text(new_content)
142
+ print(f" āœ“ Description: {len(new_description)} chars")
143
+
144
+ def main():
145
+ base = Path("/Users/rbm/Documents/projects/lavra/plugins/lavra/agents")
146
+
147
+ processed = 0
148
+ errors = 0
149
+
150
+ for agent_name, description in DESCRIPTIONS.items():
151
+ # Find the agent file
152
+ matches = list(base.rglob(f"{agent_name}.md"))
153
+ if not matches:
154
+ print(f"ERROR: Could not find {agent_name}.md")
155
+ errors += 1
156
+ continue
157
+
158
+ if len(matches) > 1:
159
+ print(f"ERROR: Found multiple files for {agent_name}")
160
+ errors += 1
161
+ continue
162
+
163
+ try:
164
+ process_agent(matches[0], description)
165
+ processed += 1
166
+ except Exception as e:
167
+ print(f"ERROR processing {agent_name}: {e}")
168
+ errors += 1
169
+
170
+ print(f"\nāœ“ Processed {processed} agents")
171
+ if errors:
172
+ print(f"āœ— {errors} errors")
173
+ return 1
174
+ return 0
175
+
176
+ if __name__ == "__main__":
177
+ exit(main())
package/uninstall.sh ADDED
@@ -0,0 +1,133 @@
1
+ #!/bin/bash
2
+ #
3
+ # lavra plugin uninstaller router
4
+ #
5
+ # Routes to platform-specific uninstallers based on flags.
6
+ # Defaults to Claude Code for backwards compatibility.
7
+ #
8
+ # Usage:
9
+ # ./uninstall.sh # Claude Code (default)
10
+ # ./uninstall.sh -claude /path/to/project # Claude Code explicit
11
+ # ./uninstall.sh -opencode # OpenCode
12
+ # ./uninstall.sh -gemini # Gemini CLI
13
+ #
14
+
15
+ set -euo pipefail
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
18
+ PLATFORM=""
19
+
20
+ # Display help
21
+ show_help() {
22
+ cat <<EOF
23
+ lavra Plugin Uninstaller
24
+
25
+ Usage:
26
+ ./uninstall.sh [PLATFORM] [TARGET]
27
+
28
+ Platforms:
29
+ -claude, --claude Uninstall from Claude Code (default)
30
+ -opencode, --opencode Uninstall from OpenCode
31
+ -gemini, --gemini Uninstall from Gemini CLI
32
+ -cortex, --cortex Uninstall from Cortex Code
33
+
34
+ Target:
35
+ [path] Uninstall from specific project directory
36
+ (omit) Uninstall from global install (~/.claude or platform equivalent)
37
+
38
+ Options:
39
+ -h, --help Show this help message
40
+
41
+ Examples:
42
+ ./uninstall.sh # Global Claude Code uninstall
43
+ ./uninstall.sh /path/to/project # Project-specific Claude Code
44
+ ./uninstall.sh -opencode # Global OpenCode uninstall
45
+ ./uninstall.sh -gemini /path/to/project # Project-specific Gemini uninstall
46
+ ./uninstall.sh -cortex # Global Cortex Code uninstall
47
+
48
+ EOF
49
+ exit 0
50
+ }
51
+
52
+ # Validate platform name (security: prevent command injection)
53
+ validate_platform() {
54
+ local platform="$1"
55
+
56
+ case "$platform" in
57
+ claude|opencode|gemini|cortex)
58
+ return 0
59
+ ;;
60
+ *)
61
+ echo "[!] Error: Invalid platform '$platform'"
62
+ echo " Allowed platforms: claude, opencode, gemini, cortex"
63
+ echo ""
64
+ echo "Run './uninstall.sh --help' for usage information."
65
+ exit 1
66
+ ;;
67
+ esac
68
+ }
69
+
70
+ # Parse arguments
71
+ while [[ $# -gt 0 ]]; do
72
+ case "$1" in
73
+ -h|--help)
74
+ show_help
75
+ ;;
76
+ -claude|--claude)
77
+ PLATFORM="claude"
78
+ shift
79
+ ;;
80
+ -opencode|--opencode)
81
+ PLATFORM="opencode"
82
+ shift
83
+ ;;
84
+ -gemini|--gemini)
85
+ PLATFORM="gemini"
86
+ shift
87
+ ;;
88
+ -cortex|--cortex)
89
+ PLATFORM="cortex"
90
+ shift
91
+ ;;
92
+ *)
93
+ # Pass through to platform-specific uninstaller
94
+ break
95
+ ;;
96
+ esac
97
+ done
98
+
99
+ # Default to Claude Code for backwards compatibility
100
+ if [ -z "$PLATFORM" ]; then
101
+ PLATFORM="claude"
102
+ fi
103
+
104
+ # Validate platform name (security check)
105
+ validate_platform "$PLATFORM"
106
+
107
+ # Construct uninstaller path
108
+ UNINSTALLER="$SCRIPT_DIR/installers/uninstall-${PLATFORM}.sh"
109
+
110
+ # Verify uninstaller exists
111
+ if [[ ! -f "$UNINSTALLER" ]]; then
112
+ echo "[!] Error: Uninstaller not found: $UNINSTALLER"
113
+ echo " Platform '$PLATFORM' may not be supported yet."
114
+ exit 1
115
+ fi
116
+
117
+ # Security: Verify uninstaller path is in expected directory
118
+ UNINSTALLER_REAL="$(realpath "$UNINSTALLER")"
119
+ EXPECTED_DIR="$(realpath "$SCRIPT_DIR/installers")"
120
+
121
+ if [[ ! "$UNINSTALLER_REAL" =~ ^"$EXPECTED_DIR"/uninstall-[a-z]+\.sh$ ]]; then
122
+ echo "[!] Error: Uninstaller path validation failed"
123
+ echo " Expected: $EXPECTED_DIR/uninstall-*.sh"
124
+ echo " Got: $UNINSTALLER_REAL"
125
+ exit 1
126
+ fi
127
+
128
+ # Execute platform-specific uninstaller
129
+ # Use source instead of exec to allow better error handling
130
+ echo "šŸ”„ Uninstalling lavra for $PLATFORM..."
131
+ echo ""
132
+
133
+ source "$UNINSTALLER" "$@"