opencastle 0.6.0 → 0.8.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 (223) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/cli/adapters/claude-code.js +30 -3
  4. package/dist/cli/adapters/claude-code.js.map +1 -1
  5. package/dist/cli/adapters/cursor.d.ts.map +1 -1
  6. package/dist/cli/adapters/cursor.js +27 -3
  7. package/dist/cli/adapters/cursor.js.map +1 -1
  8. package/dist/cli/adapters/opencode.d.ts +20 -0
  9. package/dist/cli/adapters/opencode.d.ts.map +1 -0
  10. package/dist/cli/adapters/opencode.js +265 -0
  11. package/dist/cli/adapters/opencode.js.map +1 -0
  12. package/dist/cli/adapters/vscode.d.ts.map +1 -1
  13. package/dist/cli/adapters/vscode.js +37 -6
  14. package/dist/cli/adapters/vscode.js.map +1 -1
  15. package/dist/cli/copy.d.ts +12 -0
  16. package/dist/cli/copy.d.ts.map +1 -1
  17. package/dist/cli/copy.js +27 -0
  18. package/dist/cli/copy.js.map +1 -1
  19. package/dist/cli/detect.d.ts +1 -1
  20. package/dist/cli/detect.js +21 -15
  21. package/dist/cli/detect.js.map +1 -1
  22. package/dist/cli/init.d.ts.map +1 -1
  23. package/dist/cli/init.js +143 -94
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/manifest.d.ts +1 -1
  26. package/dist/cli/manifest.d.ts.map +1 -1
  27. package/dist/cli/manifest.js +2 -1
  28. package/dist/cli/manifest.js.map +1 -1
  29. package/dist/cli/mcp.d.ts +6 -6
  30. package/dist/cli/mcp.d.ts.map +1 -1
  31. package/dist/cli/mcp.js +104 -33
  32. package/dist/cli/mcp.js.map +1 -1
  33. package/dist/cli/prompt.d.ts +19 -0
  34. package/dist/cli/prompt.d.ts.map +1 -1
  35. package/dist/cli/prompt.js +143 -0
  36. package/dist/cli/prompt.js.map +1 -1
  37. package/dist/cli/stack-config.d.ts +23 -0
  38. package/dist/cli/stack-config.d.ts.map +1 -1
  39. package/dist/cli/stack-config.js +128 -124
  40. package/dist/cli/stack-config.js.map +1 -1
  41. package/dist/cli/types.d.ts +26 -9
  42. package/dist/cli/types.d.ts.map +1 -1
  43. package/dist/cli/types.js +26 -1
  44. package/dist/cli/types.js.map +1 -1
  45. package/dist/cli/update.d.ts.map +1 -1
  46. package/dist/cli/update.js +60 -19
  47. package/dist/cli/update.js.map +1 -1
  48. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
  49. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
  50. package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
  51. package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
  52. package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
  53. package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
  54. package/dist/orchestrator/plugins/contentful/config.js +48 -0
  55. package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
  56. package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
  57. package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
  58. package/dist/orchestrator/plugins/convex/config.js +32 -0
  59. package/dist/orchestrator/plugins/convex/config.js.map +1 -0
  60. package/dist/orchestrator/plugins/index.d.ts +28 -0
  61. package/dist/orchestrator/plugins/index.d.ts.map +1 -0
  62. package/dist/orchestrator/plugins/index.js +63 -0
  63. package/dist/orchestrator/plugins/index.js.map +1 -0
  64. package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
  65. package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
  66. package/dist/orchestrator/plugins/jira/config.js +29 -0
  67. package/dist/orchestrator/plugins/jira/config.js.map +1 -0
  68. package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
  69. package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
  70. package/dist/orchestrator/plugins/linear/config.js +33 -0
  71. package/dist/orchestrator/plugins/linear/config.js.map +1 -0
  72. package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
  73. package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
  74. package/dist/orchestrator/plugins/nx/config.js +28 -0
  75. package/dist/orchestrator/plugins/nx/config.js.map +1 -0
  76. package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
  77. package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
  78. package/dist/orchestrator/plugins/sanity/config.js +43 -0
  79. package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
  80. package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
  81. package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
  82. package/dist/orchestrator/plugins/slack/config.js +34 -0
  83. package/dist/orchestrator/plugins/slack/config.js.map +1 -0
  84. package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
  85. package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
  86. package/dist/orchestrator/plugins/strapi/config.js +40 -0
  87. package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
  88. package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
  89. package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
  90. package/dist/orchestrator/plugins/supabase/config.js +33 -0
  91. package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
  92. package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
  93. package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
  94. package/dist/orchestrator/plugins/teams/config.js +43 -0
  95. package/dist/orchestrator/plugins/teams/config.js.map +1 -0
  96. package/dist/orchestrator/plugins/types.d.ts +61 -0
  97. package/dist/orchestrator/plugins/types.d.ts.map +1 -0
  98. package/dist/orchestrator/plugins/types.js +2 -0
  99. package/dist/orchestrator/plugins/types.js.map +1 -0
  100. package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
  101. package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
  102. package/dist/orchestrator/plugins/vercel/config.js +32 -0
  103. package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/cli/adapters/claude-code.ts +36 -4
  106. package/src/cli/adapters/cursor.ts +42 -4
  107. package/src/cli/adapters/opencode.ts +320 -0
  108. package/src/cli/adapters/vscode.ts +40 -8
  109. package/src/cli/copy.ts +32 -0
  110. package/src/cli/detect.ts +17 -17
  111. package/src/cli/init.ts +157 -99
  112. package/src/cli/manifest.ts +2 -1
  113. package/src/cli/mcp.ts +129 -50
  114. package/src/cli/prompt.ts +176 -0
  115. package/src/cli/stack-config.ts +174 -145
  116. package/src/cli/types.ts +39 -8
  117. package/src/cli/update.ts +71 -20
  118. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  119. package/src/orchestrator/agent-workflows/README.md +1 -1
  120. package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
  121. package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
  122. package/src/orchestrator/agent-workflows/database-migration.md +11 -11
  123. package/src/orchestrator/agent-workflows/feature-implementation.md +19 -12
  124. package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
  125. package/src/orchestrator/agent-workflows/refactoring.md +10 -10
  126. package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
  127. package/src/orchestrator/agent-workflows/security-audit.md +12 -12
  128. package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
  129. package/src/orchestrator/agents/api-designer.agent.md +1 -1
  130. package/src/orchestrator/agents/architect.agent.md +2 -2
  131. package/src/orchestrator/agents/content-engineer.agent.md +3 -3
  132. package/src/orchestrator/agents/copywriter.agent.md +2 -2
  133. package/src/orchestrator/agents/data-expert.agent.md +6 -6
  134. package/src/orchestrator/agents/database-engineer.agent.md +3 -3
  135. package/src/orchestrator/agents/developer.agent.md +4 -4
  136. package/src/orchestrator/agents/devops-expert.agent.md +5 -5
  137. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  138. package/src/orchestrator/agents/performance-expert.agent.md +2 -2
  139. package/src/orchestrator/agents/release-manager.agent.md +4 -4
  140. package/src/orchestrator/agents/researcher.agent.md +3 -3
  141. package/src/orchestrator/agents/reviewer.agent.md +1 -1
  142. package/src/orchestrator/agents/security-expert.agent.md +4 -4
  143. package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
  144. package/src/orchestrator/agents/team-lead.agent.md +56 -38
  145. package/src/orchestrator/agents/testing-expert.agent.md +5 -5
  146. package/src/orchestrator/agents/ui-ux-expert.agent.md +6 -6
  147. package/src/orchestrator/copilot-instructions.md +1 -1
  148. package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
  149. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
  150. package/src/orchestrator/customizations/DISPUTES.md +5 -5
  151. package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
  152. package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
  153. package/src/orchestrator/customizations/README.md +5 -2
  154. package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
  155. package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
  156. package/src/orchestrator/customizations/logs/README.md +1 -1
  157. package/src/orchestrator/customizations/project/decisions.md +31 -0
  158. package/src/orchestrator/customizations/project/docs-structure.md +16 -5
  159. package/src/orchestrator/customizations/project/roadmap.md +24 -0
  160. package/src/orchestrator/customizations/project/tracker-config.md +1 -1
  161. package/src/orchestrator/customizations/stack/cms-config.md +1 -1
  162. package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
  163. package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
  164. package/src/orchestrator/instructions/general.instructions.md +102 -40
  165. package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
  166. package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
  167. package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
  168. package/src/orchestrator/plugins/contentful/config.ts +49 -0
  169. package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
  170. package/src/orchestrator/plugins/convex/config.ts +33 -0
  171. package/src/orchestrator/plugins/index.ts +85 -0
  172. package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
  173. package/src/orchestrator/plugins/jira/config.ts +30 -0
  174. package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
  175. package/src/orchestrator/plugins/linear/config.ts +34 -0
  176. package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
  177. package/src/orchestrator/plugins/nx/config.ts +29 -0
  178. package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
  179. package/src/orchestrator/plugins/sanity/config.ts +44 -0
  180. package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
  181. package/src/orchestrator/plugins/slack/config.ts +35 -0
  182. package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
  183. package/src/orchestrator/plugins/strapi/config.ts +41 -0
  184. package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
  185. package/src/orchestrator/plugins/supabase/config.ts +34 -0
  186. package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
  187. package/src/orchestrator/plugins/teams/config.ts +44 -0
  188. package/src/orchestrator/plugins/types.ts +79 -0
  189. package/src/orchestrator/plugins/vercel/config.ts +33 -0
  190. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +8 -8
  191. package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
  192. package/src/orchestrator/prompts/bug-fix.prompt.md +27 -22
  193. package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
  194. package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
  195. package/src/orchestrator/prompts/implement-feature.prompt.md +34 -29
  196. package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
  197. package/src/orchestrator/prompts/quick-refinement.prompt.md +23 -19
  198. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +19 -5
  199. package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
  200. package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
  201. package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
  202. package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
  203. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  204. package/src/orchestrator/skills/context-map/SKILL.md +4 -4
  205. package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
  206. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
  207. package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
  208. package/src/orchestrator/skills/fast-review/SKILL.md +18 -7
  209. package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
  210. package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
  211. package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
  212. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
  213. package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
  214. package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
  215. package/src/orchestrator/skills/react-development/SKILL.md +3 -3
  216. package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
  217. package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
  218. package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
  219. package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
  220. package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
  221. package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
  222. package/src/orchestrator/skills/validation-gates/SKILL.md +157 -27
  223. package/src/orchestrator/mcp.json +0 -69
@@ -0,0 +1,31 @@
1
+ <!-- Populated by agents. Add ADRs here when architectural decisions are made. -->
2
+
3
+ # Architecture Decision Records
4
+
5
+ Log of architectural decisions made during the project. Each ADR captures the context, decision, and consequences so future sessions understand why things are the way they are.
6
+
7
+ ## How to Use
8
+
9
+ - **Before making an architectural decision:** Check existing ADRs for prior decisions in the same area
10
+ - **After making a decision:** Add a new ADR with the next available ID
11
+ - **When revisiting a decision:** Update the status to `Superseded` and reference the new ADR
12
+
13
+ ## Decisions
14
+
15
+ ### ADR-001: _Template — Short Decision Title_
16
+
17
+ | Field | Value |
18
+ |-------|-------|
19
+ | **ID** | ADR-001 |
20
+ | **Date** | YYYY-MM-DD |
21
+ | **Status** | Proposed / Accepted / Deprecated / Superseded |
22
+
23
+ **Context:** _What is the issue that we're seeing that motivates this decision?_
24
+
25
+ **Decision:** _What is the change that we're proposing and/or doing?_
26
+
27
+ **Consequences:** _What becomes easier or more difficult to do because of this change?_
28
+
29
+ ---
30
+
31
+ _Add new ADRs above this line, incrementing the ID._
@@ -4,20 +4,31 @@
4
4
 
5
5
  Project-specific documentation layout referenced by the `documentation-standards` skill.
6
6
 
7
+ Documentation files live in the `.github/customizations/` directory alongside other project-specific configuration. Key documentation files:
8
+
9
+ - `.github/customizations/KNOWN-ISSUES.md` — Tracked issues, limitations, and accepted risks
10
+ - `.github/customizations/project/roadmap.md` — Project roadmap and feature status
11
+ - `.github/customizations/project/decisions.md` — Architecture Decision Records
12
+ - `.github/customizations/LESSONS-LEARNED.md` — Agent knowledge base of retries and workarounds
13
+
7
14
  ## Directory Tree
8
15
 
9
- <!-- Map your project's docs/ directory here -->
16
+ <!-- Map your project's documentation directory here if one exists -->
10
17
 
11
18
  ```
12
- docs/
13
- ├── README.md Documentation index
14
- └── ... Add entries as docs are created
19
+ .github/customizations/
20
+ ├── KNOWN-ISSUES.md Tracked issues and limitations
21
+ ├── LESSONS-LEARNED.md Agent knowledge base
22
+ └── project/
23
+ ├── roadmap.md — Feature roadmap
24
+ ├── decisions.md — Architecture Decision Records
25
+ └── docs-structure.md — This file
15
26
  ```
16
27
 
17
28
  ## Practices
18
29
 
19
30
  - **Check Known Issues** before starting any task
20
- - **Review Architecture** docs for context
31
+ - **Review Architecture** decisions for context
21
32
  - **Update roadmap** after completing features
22
33
  - **Add new issues** with: Issue ID, Status, Severity, Evidence, Root Cause, Solution Options
23
34
  - **Archive** outdated docs rather than deleting
@@ -0,0 +1,24 @@
1
+ <!-- Populated by the bootstrap-customizations prompt or manually. -->
2
+
3
+ # Project Roadmap
4
+
5
+ High-level roadmap of planned features and improvements. Updated by agents as tasks are completed.
6
+
7
+ ## How to Use
8
+
9
+ - **Before implementing a feature:** Check the roadmap for scope, status, and acceptance criteria
10
+ - **After completing a feature:** Mark the item with ✅, add the completion date and tracker issue IDs
11
+ - **When planning:** Add new items with priority and description
12
+
13
+ ## Roadmap Items
14
+
15
+ | Status | Priority | Description | Tracker Issues |
16
+ |--------|----------|-------------|----------------|
17
+ | Planned | High | _Example: Short description of the feature_ | — |
18
+
19
+ ### Status Values
20
+
21
+ - **Planned** — Scoped but not yet started
22
+ - **In Progress** — Actively being worked on
23
+ - **Done** — Completed and verified
24
+ - **Cancelled** — Removed from scope with documented reason
@@ -3,7 +3,7 @@
3
3
  <!-- Populated by the `bootstrap-customizations` prompt.
4
4
  Rename this file to match your tracker: linear-config.md, jira-config.md, etc. -->
5
5
 
6
- Project-specific task tracker details referenced by the `task-management` skill.
6
+ Project-specific task tracker details referenced by task management workflows.
7
7
 
8
8
  ## Workspace
9
9
 
@@ -19,7 +19,7 @@ Project-specific CMS details referenced by the corresponding CMS skill (e.g., `s
19
19
 
20
20
  ## Query Examples
21
21
 
22
- <!-- Provide representative query examples for the CMS query language (GROQ, GraphQL, etc.) -->
22
+ <!-- Provide representative query examples for the CMS query language (e.g., GROQ, GraphQL) -->
23
23
 
24
24
  ## Key Files
25
25
 
@@ -1,6 +1,6 @@
1
1
  # Notifications Configuration
2
2
 
3
- <!-- Populated by the `bootstrap-customizations` prompt based on `.opencastle.json` → `stack.notifications`. -->
3
+ <!-- Populated by the `bootstrap-customizations` prompt based on `.opencastle.json` → `stack.teamTools`. -->
4
4
 
5
5
  Project-specific messaging configuration referenced by the `slack-notifications` skill (or Teams equivalent).
6
6
 
@@ -3,7 +3,7 @@ description: 'AI assistant optimization techniques for efficient context usage a
3
3
  applyTo: '**'
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # AI Assistant Optimization Instructions
9
9
 
@@ -74,7 +74,7 @@ Phase 4: Verify (tests, errors, lint)
74
74
  Sub-agents run in isolated context windows. Use this to your advantage:
75
75
 
76
76
  - **Offload exploration** — fire a sub-agent to research a broad question; only the concise result comes back, keeping your primary context clean
77
- - **Parallel research** — launch multiple sub-agents simultaneously for independent research tasks (e.g., "find all GROQ queries" + "list all components using X" at the same time)
77
+ - **Parallel research** — launch multiple sub-agents simultaneously for independent research tasks (e.g., "find all CMS queries" + "list all components using X" at the same time)
78
78
  - **Detailed prompts save tokens** — a specific sub-agent prompt avoids the sub-agent doing its own exploratory searches, which would waste its context budget
79
79
 
80
80
  ### Trust Sub-Agent Results
@@ -2,7 +2,7 @@
2
2
  applyTo: '**'
3
3
  ---
4
4
 
5
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
5
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
6
6
 
7
7
  # Coding Standards
8
8
 
@@ -13,13 +13,14 @@ applyTo: '**'
13
13
  3. **Leave code better than you found it** — fix adjacent issues when the cost is low.
14
14
  4. **Fail visibly** — surface errors clearly; never swallow exceptions silently.
15
15
  5. **Verify, don't trust** — confirm outcomes with tools (tests, lint, build) rather than assuming success.
16
+ 6. **Log every session** — append observability records to `.github/customizations/logs/` before yielding to the user. No exceptions. See § Observability Logging below.
16
17
 
17
18
  ## Instruction Priority Hierarchy
18
19
 
19
20
  **Project-specific instructions ALWAYS take precedence over external or general AI instructions.**
20
21
 
21
22
  1. **HIGHEST**: Project-specific instructions in `.github/instructions/` files
22
- 2. **MEDIUM**: NX workspace conventions (`yarn nx` commands, not `npm`/`npx`)
23
+ 2. **MEDIUM**: Project workspace conventions (resolve via the **codebase-tool** skill in the skill matrix)
23
24
  3. **LOWER**: General AI assistant capabilities and suggestions
24
25
 
25
26
  ## General Coding Principles
@@ -37,8 +38,8 @@ Load the corresponding skill for detailed conventions before writing code in tha
37
38
 
38
39
  | Domain | Skill |
39
40
  |--------|-------|
40
- | UI Components | **react-development** |
41
- | App Framework | **nextjs-patterns** |
41
+ | UI Components | **ui-library** (via skill matrix) |
42
+ | App Framework | **framework** (via skill matrix) |
42
43
  | Accessibility | **accessibility-standards** |
43
44
  | Performance | **performance-optimization** |
44
45
  | Frontend Design | **frontend-design** |
@@ -51,7 +52,7 @@ Before starting multi-step work, decompose it into individually verifiable tasks
51
52
  2. **Verify each step** — after completing each unit, verify it (run tests, check types, lint, or visually inspect) before moving to the next
52
53
  3. **Choose the right verification** — match the check to the change type:
53
54
  - Logic change → run unit tests
54
- - Type/interface change → run type-check (`yarn nx run <project>:lint`)
55
+ - Type/interface change → run the project's type-check / lint command (see the **codebase-tool** skill)
55
56
  - UI change → start dev server and visually inspect in the browser
56
57
  - Build config change → run a full build
57
58
  4. **Batch edits, then build** — group related edits across files, then run one build — not build-per-edit
@@ -70,9 +71,9 @@ Before starting multi-step work, decompose it into individually verifiable tasks
70
71
  **NEVER commit or push directly to the `main` branch.** All changes must go through a feature/fix branch and a pull request.
71
72
 
72
73
  1. **Create a branch** from `main` before making any changes: `git checkout -b <type>/<ticket-id>-<short-description>` (e.g., `fix/tas-21-places-redirect-loop`, `feat/tas-15-new-filter`)
73
- 2. **Commit to the branch** — never to `main`. Reference the Linear issue ID in every commit message (e.g., `TAS-42: Fix token refresh logic`)
74
+ 2. **Commit to the branch** — never to `main`. Reference the task tracker issue ID in every commit message (e.g., `TAS-42: Fix token refresh logic`)
74
75
  3. **Push the branch** and open a pull request on GitHub. **Do NOT merge** — PRs are opened for review only
75
- 4. **Link the PR to Linear** — Update the Linear issue description with the PR URL so progress is traceable
76
+ 4. **Link the PR to the task tracker** — Update the issue description with the PR URL so progress is traceable
76
77
  5. **Merge via PR** — the only way code reaches `main`, and only after review/approval
77
78
 
78
79
  Branch naming convention: `<type>/<ticket-id>-<short-description>` where type is `fix`, `feat`, `chore`, `refactor`, `perf`, or `docs`.
@@ -91,31 +92,27 @@ Branch naming convention: `<type>/<ticket-id>-<short-description>` where type is
91
92
  Every task that produces code changes — whether a roadmap feature, bug fix, follow-up, data pipeline, or refactor — must deliver:
92
93
 
93
94
  1. **Dedicated branch** — `<type>/<ticket-id>-<short-description>` created from `main`
94
- 2. **Atomic commits** — Each commit references the Linear issue ID (e.g., `TAS-42: Add filter component`)
95
+ 2. **Atomic commits** — Each commit references the issue ID (e.g., `TAS-42: Add filter component`)
95
96
  3. **Pushed branch** — Branch pushed to origin
96
97
  4. **Open PR** — Use `gh` CLI to create the PR. **Do NOT merge** — PRs are opened for review only:
97
98
  ```bash
98
99
  GH_PAGER=cat gh pr create --base main --title "TAS-XX: Short description" --body "Resolves TAS-XX"
99
100
  ```
100
- 5. **Linear linkage** — The Linear issue is updated with the PR URL, and the PR description references the Linear issue ID
101
+ 5. **Task tracker linkage** — The issue is updated with the PR URL, and the PR description references the issue ID
101
102
 
102
- ## NX Commands
103
+ ## Build & Task Commands
103
104
 
104
- **NEVER use `npm`/`npx`/`jest`/`eslint` directly. Always use `yarn nx` commands.**
105
+ Use the project's configured task runner for all build, test, lint, and serve commands. **Never invoke test runners or linters directly** always use the task runner wrapper.
105
106
 
106
- ```bash
107
- yarn nx run <project-name>:test [--coverage] [-u]
108
- yarn nx run <project-name>:lint --fix
109
- yarn nx run <project-name>:lint-styles --fix
110
- yarn nx run <project-name>:build
111
- yarn nx run <project-name>:serve
112
- yarn nx generate <generator-name>
113
- yarn nx affected -t <target>
114
- ```
107
+ Resolve exact commands by loading the **codebase-tool** skill from the skill matrix. Common tasks:
115
108
 
116
- **Exception:** Tools without NX targets may be invoked directly e.g., `npx sanity@latest schema deploy`, `npx supabase gen types`, `next start`. Check `project.json` targets first; only bypass NX when no target exists.
109
+ - **Test**run project tests (with optional coverage)
110
+ - **Lint** — run linter with auto-fix
111
+ - **Build** — production build
112
+ - **Serve** — start dev server
113
+ - **Affected** — run a target for all projects affected by current changes
117
114
 
118
- For comprehensive NX conventions, load the **nx-workspace** skill.
115
+ **Exception:** Tools without task runner targets may be invoked directly (e.g., CMS CLI commands, database CLI commands). Check the project's task runner config first; only bypass it when no target exists.
119
116
 
120
117
  ## Documentation
121
118
 
@@ -127,25 +124,27 @@ Follow prompt caching and batch processing best practices. See [AI Optimization
127
124
 
128
125
  ## Discovered Issues Policy
129
126
 
130
- **No issue gets ignored.** When you encounter a bug, error, or unexpected behavior that is unrelated to the current task:
127
+ > **⛔ No issue gets ignored.** Untracked bugs discovered during work are a quality gate failure.
128
+
129
+ When you encounter a bug, error, or unexpected behavior that is unrelated to the current task:
131
130
 
132
131
  1. **Check if already tracked:**
133
- - Search `docs/KNOWN-ISSUES.md` for a matching entry
134
- - If you have Linear tools available, also search Linear for open bugs (use `search_issues` or `list_issues` with bug label)
132
+ - Search `.github/customizations/KNOWN-ISSUES.md` for a matching entry
133
+ - If you have task tracker tools available, also search for open bugs (use `search_issues` or `list_issues` with bug label)
135
134
  2. **If found tracked** — skip it, continue with your current work
136
135
  3. **If NOT tracked** — you must act:
137
- - **Unfixable limitation** (third-party constraint, platform restriction, upstream dependency) → add it to `docs/KNOWN-ISSUES.md` with: Issue ID, Status, Severity, Evidence, Root Cause, Solution Options
138
- - **Fixable bug** → if you have Linear tools, create a ticket with label `bug`, appropriate priority, and a clear description of the symptoms, reproduction steps, and affected files. If you do NOT have Linear tools, add a `**Discovered Issues**` section to your output listing the bug details so the Team Lead can track it.
136
+ - **Unfixable limitation** (third-party constraint, platform restriction, upstream dependency) → add it to `.github/customizations/KNOWN-ISSUES.md` with: Issue ID, Status, Severity, Evidence, Root Cause, Solution Options
137
+ - **Fixable bug** → if you have task tracker tools, create a ticket with label `bug`, appropriate priority, and a clear description of the symptoms, reproduction steps, and affected files. If you do NOT have task tracker tools, add a `**Discovered Issues**` section to your output listing the bug details so the Team Lead can track it.
139
138
 
140
139
  Never assume a pre-existing issue is somebody else's problem. If it's not tracked, track it.
141
140
 
142
141
  ## Task Tracking
143
142
 
144
- Feature work is tracked on **Linear** (see `linear-config.md` for team and project details). The Team Lead agent creates and updates issues via MCP. For conventions, load the **task-management** skill.
143
+ Feature work is tracked in the **task tracker** (see `tracker-config.md` for project details). The Team Lead agent creates and updates issues via MCP. For conventions, load the **task-management** skill.
145
144
 
146
- ### When Linear MCP Tools Are Unavailable
145
+ ### When Task Tracker MCP Tools Are Unavailable
147
146
 
148
- If Linear MCP tools are not available in the current session, do NOT block on issue creation. Instead:
147
+ If task tracker MCP tools are not available in the current session, do NOT block on issue creation. Instead:
149
148
 
150
149
  1. **Document planned issues** in your output with the title, description, and acceptance criteria you would have used
151
150
  2. **Proceed with implementation** — the work is still valuable without a ticket number
@@ -155,37 +154,79 @@ If Linear MCP tools are not available in the current session, do NOT block on is
155
154
 
156
155
  ## Observability Logging (Mandatory)
157
156
 
157
+ > **⛔ HARD GATE — This is a blocking requirement, not a suggestion.**
158
+ > Do NOT respond to the user until you have appended the required log records.
159
+ > A session without log records is a failed session — regardless of code quality.
160
+
158
161
  **Every agent MUST log every session to the observability NDJSON files.** No exceptions. No threshold. No "too small to log." The dashboard depends on this data.
159
162
 
160
163
  ### What to log
161
164
 
162
- | File | Who appends | When |
163
- |------|------------|------|
164
- | `sessions.ndjson` | **All agents** | After every session — always |
165
- | `delegations.ndjson` | **Team Lead** | After each delegation to a specialist agent |
166
- | `panels.ndjson` | **Panel runner** | After each majority-vote review |
165
+ | File | Who appends | When | Example command below |
166
+ |------|------------|------|----------------------|
167
+ | `sessions.ndjson` | **All agents** | After every session — always | ✅ |
168
+ | `delegations.ndjson` | **Team Lead** | After each delegation to a specialist agent | ✅ |
169
+ | `reviews.ndjson` | **Team Lead** (via fast-review skill) | After each fast review | ✅ |
170
+ | `panels.ndjson` | **Panel runner** (via panel majority vote skill) | After each majority-vote review | ✅ |
171
+ | `disputes.ndjson` | **Team Lead** (via dispute protocol) | After each dispute record | ✅ |
167
172
 
168
173
  See `.github/customizations/logs/README.md` for the full schema of each record.
169
174
 
170
175
  ### How to log
171
176
 
172
- Append one JSON line per task. When the Team Lead works directly, use the agent role that best describes the work (e.g., `"agent": "Developer"`, `"agent": "UI-UX Expert"`). If a single conversation involves multiple distinct tasks, log one record per task.
177
+ Append one JSON line per task using `echo '...' >> <file>`. When the Team Lead works directly, use the agent role that best describes the work (e.g., `"agent": "Developer"`, `"agent": "UI-UX Expert"`). If a single conversation involves multiple distinct tasks, log one record per task.
173
178
 
179
+ **Session record** (ALL agents, EVERY session):
174
180
  ```bash
175
181
  echo '{"timestamp":"2026-03-01T14:00:00Z","agent":"Developer","model":"claude-opus-4-6","task":"Fix login redirect bug","outcome":"success","duration_min":15,"files_changed":3,"retries":0,"lessons_added":[],"discoveries":[]}' >> .github/customizations/logs/sessions.ndjson
176
182
  ```
177
183
 
184
+ **Delegation record** (Team Lead only, after each delegation):
185
+ ```bash
186
+ echo '{"timestamp":"2026-03-01T14:00:00Z","session_id":"feat/prj-57","agent":"Developer","model":"gpt-5.3-codex","tier":"fast","mechanism":"sub-agent","linear_issue":"PRJ-57","outcome":"success","retries":0,"phase":2,"file_partition":["src/components/"]}' >> .github/customizations/logs/delegations.ndjson
187
+ ```
188
+
189
+ **Fast review record** (Team Lead, after each fast review):
190
+ ```bash
191
+ echo '{"timestamp":"2026-03-01T14:30:00Z","linear_issue":"PRJ-42","agent":"Developer","reviewer_model":"gpt-5-mini","verdict":"pass","attempt":1,"issues_critical":0,"issues_major":0,"issues_minor":2,"confidence":"high","escalated":false,"duration_sec":45}' >> .github/customizations/logs/reviews.ndjson
192
+ ```
193
+
194
+ **Panel record** (after each panel majority vote):
195
+ ```bash
196
+ echo '{"timestamp":"2026-03-01T15:00:00Z","panel_key":"auth-review","verdict":"pass","pass_count":2,"block_count":1,"must_fix":0,"should_fix":3,"reviewer_model":"claude-opus-4-6","weighted":false,"attempt":1,"linear_issue":"PRJ-42","artifacts_count":5}' >> .github/customizations/logs/panels.ndjson
197
+ ```
198
+
199
+ **Dispute record** (Team Lead, after each dispute):
200
+ ```bash
201
+ echo '{"timestamp":"2026-03-01T16:00:00Z","dispute_id":"DSP-001","linear_issue":"PRJ-42","priority":"high","trigger":"panel-3x-block","implementing_agent":"Developer","reviewing_agents":["Reviewer","Panel (3x)"],"total_attempts":6,"est_tokens_spent":120000,"status":"pending","resolution_option_chosen":null,"resolved_at":null}' >> .github/customizations/logs/disputes.ndjson
202
+ ```
203
+
204
+ ### Pre-Response Logging Checklist
205
+
206
+ **STOP before responding to the user.** Verify each applicable item:
207
+
208
+ - [ ] **Session logged** — `sessions.ndjson` has a new line for this session (ALWAYS required)
209
+ - [ ] **Delegations logged** — `delegations.ndjson` has a line for each delegation (Team Lead only)
210
+ - [ ] **Reviews logged** — `reviews.ndjson` has a line for each fast review performed (if any)
211
+ - [ ] **Panels logged** — `panels.ndjson` has a line for each panel review performed (if any)
212
+ - [ ] **Disputes logged** — `disputes.ndjson` has a line for each dispute created (if any)
213
+
214
+ If ANY required log is missing, append it NOW before responding.
215
+
178
216
  ### Rules
179
217
 
180
- - **Log before yielding to the user** — logging is the last action before responding.
218
+ - **Log before yielding to the user** — logging is the LAST action before responding. This is Constitution rule #6.
181
219
  - **Log per task**, not per conversation. Multiple tasks = multiple records.
182
220
  - **Never batch-log retrospectively** across sessions.
221
+ - **Verify the append succeeded** — if unsure, `tail -1` the file to confirm.
183
222
 
184
223
  ## Self-Improvement Protocol
185
224
 
225
+ > **⛔ HARD GATE — Lessons are the team's collective memory. Skipping them causes repeated failures.**
226
+
186
227
  **Every agent must learn from mistakes and share knowledge.** This prevents the same pitfalls from being repeated across sessions.
187
228
 
188
- 1. **Before starting work:** Read `.github/customizations/LESSONS-LEARNED.md` — apply relevant lessons proactively
229
+ 1. **Before starting work:** Read `.github/customizations/LESSONS-LEARNED.md` — apply relevant lessons proactively. This is NOT optional.
189
230
  2. **During execution:** If you retry a command/tool with a different approach and it works, **immediately** add a lesson entry to `.github/customizations/LESSONS-LEARNED.md`
190
231
  3. **Update source files:** If the lesson reveals a gap in instruction/skill files, update those files too
191
232
  4. **Update instructions:** Proactively suggest updates to `.github/instructions/` or `.github/skills/` files when:
@@ -210,16 +251,37 @@ These rules apply to ALL specialist agents automatically. **Do not duplicate the
210
251
  1. **Never delegate** — Specialist agents complete their own work and return results. Never invoke the Team Lead or spawn sub-agents. If work requires another domain, document the need in your output contract.
211
252
  2. **Follow the Discovered Issues Policy** — Track any pre-existing bugs found during your work (see § Discovered Issues Policy above).
212
253
  3. **Read and update lessons** — Read `.github/customizations/LESSONS-LEARNED.md` before starting. If you retry anything with a different approach that works, add a lesson immediately.
213
- 4. **Log every session** — Append to `.github/customizations/logs/sessions.ndjson` after every session. No exceptions. See § Observability Logging above.
254
+ 4. **Log every session** — Append to `.github/customizations/logs/sessions.ndjson` after every session. No exceptions. See § Observability Logging above. This is Constitution rule #6 — a blocking gate, not optional.
214
255
 
215
256
  ## Base Output Contract
216
257
 
217
258
  Every specialist agent's Output Contract MUST end with these standard items (in addition to domain-specific items above them):
218
259
 
219
- - **Session Logged** — Confirm that a session record was appended to `.github/customizations/logs/sessions.ndjson` (mandatory per § Observability Logging)
260
+ - **Observability Logged** — Confirm ALL applicable log records were appended (Constitution rule #6):
261
+ - `sessions.ndjson` — ALWAYS (every agent, every session)
262
+ - `delegations.ndjson` — if delegations occurred (Team Lead only)
263
+ - `reviews.ndjson` — if fast reviews occurred
264
+ - `panels.ndjson` — if panel reviews occurred
265
+ - `disputes.ndjson` — if disputes were created
220
266
  - **Discovered Issues** — Pre-existing bugs or anomalies found during work, with tracking action taken per the Discovered Issues Policy
221
267
  - **Lessons Applied** — Lessons from `.github/customizations/LESSONS-LEARNED.md` that influenced this work, and any new lessons added
222
268
 
223
269
  Agents reference this contract with: `See **Base Output Contract** in general.instructions.md for the standard closing items.`
224
270
 
271
+ ## Pre-Response Quality Gate
272
+
273
+ > **⛔ STOP before responding to the user.** Run through this checklist. If ANY required item is missing, fix it NOW.
274
+
275
+ This is the single exit gate for every session. All items are mandatory unless marked conditional.
276
+
277
+ - [ ] **Lessons read** — `.github/customizations/LESSONS-LEARNED.md` was read at session start (Self-Improvement Protocol)
278
+ - [ ] **Lessons captured** — If any retry occurred, a new lesson was added to `LESSONS-LEARNED.md`
279
+ - [ ] **Discovered issues tracked** — Any pre-existing bugs found were added to `KNOWN-ISSUES.md` or a tracker ticket was created (Discovered Issues Policy)
280
+ - [ ] **Lint/type/test pass** — No new errors introduced; verification ran after code changes (Constitution rule #5)
281
+ - [ ] **Session logged** — `sessions.ndjson` has a new line for this session (Constitution rule #6 — ALWAYS required)
282
+ - [ ] **Delegations logged** — `delegations.ndjson` has a line for each delegation (Team Lead only)
283
+ - [ ] **Reviews logged** — `reviews.ndjson` has a line for each fast review performed (if any)
284
+ - [ ] **Panels logged** — `panels.ndjson` has a line for each panel review performed (if any)
285
+ - [ ] **Disputes logged** — `disputes.ndjson` has a line for each dispute created (if any)
286
+
225
287
  <!-- End of Coding Standards -->
@@ -3,7 +3,7 @@ name: browser-testing
3
3
  description: "Chrome DevTools MCP automation patterns for validating UI changes in real browsers. Use when performing E2E browser testing, validating visual changes, testing user interactions, or debugging UI issues with Chrome DevTools."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Browser Testing with Chrome DevTools MCP
9
9
 
@@ -0,0 +1,29 @@
1
+ import type { PluginConfig } from '../types.js';
2
+
3
+ export const config: PluginConfig = {
4
+ id: 'chrome-devtools',
5
+ name: 'Chrome DevTools',
6
+ category: 'tech',
7
+ subCategory: 'testing',
8
+ label: 'Chrome DevTools',
9
+ hint: 'Browser testing, screenshots, DOM inspection',
10
+ skillName: 'browser-testing',
11
+ mcpServerKey: 'chrome-devtools',
12
+ mcpConfig: {
13
+ type: 'stdio',
14
+ command: 'npx',
15
+ args: ['-y', 'chrome-devtools-mcp@latest'],
16
+ },
17
+ authType: 'none',
18
+ envVars: [],
19
+ agentToolMap: {
20
+ 'performance-expert': ['chrome-devtools/*'],
21
+ 'seo-specialist': ['chrome-devtools/*'],
22
+ 'testing-expert': ['chrome-devtools/*'],
23
+ 'ui-ux-expert': ['chrome-devtools/*'],
24
+ },
25
+ docsUrl: '/guides/plugins#chrome-devtools',
26
+ officialDocs: 'https://developer.chrome.com/docs/devtools',
27
+ mcpPackage: 'chrome-devtools-mcp',
28
+ preselected: true,
29
+ };
@@ -3,7 +3,7 @@ name: contentful-cms
3
3
  description: "Contentful CMS development patterns, GraphQL/REST API usage, content modeling, and migration best practices. Use when working with Contentful content types, entries, assets, or the Management API."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Contentful CMS
9
9
 
@@ -0,0 +1,49 @@
1
+ import type { PluginConfig } from '../types.js';
2
+
3
+ export const config: PluginConfig = {
4
+ id: 'contentful',
5
+ name: 'Contentful',
6
+ category: 'tech',
7
+ subCategory: 'cms',
8
+ label: 'Contentful',
9
+ hint: 'GraphQL / REST API, structured content',
10
+ skillName: 'contentful-cms',
11
+ mcpServerKey: 'Contentful',
12
+ mcpConfig: {
13
+ type: 'stdio',
14
+ command: 'npx',
15
+ args: ['-y', '@contentful/mcp-server'],
16
+ },
17
+ authType: 'none',
18
+ envVars: [],
19
+ agentToolMap: {
20
+ 'content-engineer': [
21
+ 'contentful/get_initial_context', 'contentful/list_content_types', 'contentful/get_content_type',
22
+ 'contentful/create_content_type', 'contentful/update_content_type', 'contentful/publish_content_type',
23
+ 'contentful/unpublish_content_type', 'contentful/delete_content_type', 'contentful/search_entries',
24
+ 'contentful/get_entry', 'contentful/create_entry', 'contentful/update_entry',
25
+ 'contentful/publish_entry', 'contentful/unpublish_entry', 'contentful/delete_entry',
26
+ 'contentful/list_editor_interfaces', 'contentful/get_editor_interface', 'contentful/update_editor_interface',
27
+ 'contentful/upload_asset', 'contentful/list_assets', 'contentful/get_asset',
28
+ 'contentful/update_asset', 'contentful/publish_asset', 'contentful/unpublish_asset',
29
+ 'contentful/delete_asset', 'contentful/list_spaces', 'contentful/get_space',
30
+ 'contentful/list_environments', 'contentful/create_environment', 'contentful/delete_environment',
31
+ 'contentful/list_locales', 'contentful/get_locale', 'contentful/create_locale',
32
+ 'contentful/update_locale', 'contentful/delete_locale', 'contentful/list_tags',
33
+ 'contentful/create_tag', 'contentful/list_orgs', 'contentful/get_org',
34
+ ],
35
+ 'copywriter': [
36
+ 'contentful/get_initial_context', 'contentful/list_content_types', 'contentful/get_content_type',
37
+ 'contentful/search_entries', 'contentful/get_entry', 'contentful/update_entry',
38
+ 'contentful/publish_entry', 'contentful/list_spaces', 'contentful/get_space',
39
+ ],
40
+ 'data-expert': [
41
+ 'contentful/get_initial_context', 'contentful/list_content_types', 'contentful/get_content_type',
42
+ 'contentful/search_entries', 'contentful/get_entry', 'contentful/create_entry',
43
+ 'contentful/update_entry', 'contentful/list_spaces', 'contentful/get_space',
44
+ ],
45
+ },
46
+ docsUrl: null,
47
+ officialDocs: 'https://www.contentful.com/developers/docs/',
48
+ mcpPackage: '@contentful/mcp-server',
49
+ };
@@ -3,7 +3,7 @@ name: convex-database
3
3
  description: "Convex reactive database patterns, schema design, real-time queries, mutations, actions, and deployment best practices. Use when designing Convex schemas, writing queries/mutations, or managing the Convex backend."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Convex Database
9
9
 
@@ -0,0 +1,33 @@
1
+ import type { PluginConfig } from '../types.js';
2
+
3
+ export const config: PluginConfig = {
4
+ id: 'convex',
5
+ name: 'Convex',
6
+ category: 'tech',
7
+ subCategory: 'database',
8
+ label: 'Convex',
9
+ hint: 'Reactive backend with real-time sync',
10
+ skillName: 'convex-database',
11
+ mcpServerKey: 'Convex',
12
+ mcpConfig: {
13
+ type: 'stdio',
14
+ command: 'npx',
15
+ args: ['-y', 'convex@latest', 'mcp', 'start'],
16
+ },
17
+ authType: 'none',
18
+ envVars: [],
19
+ agentToolMap: {
20
+ 'database-engineer': [
21
+ 'convex/status', 'convex/data', 'convex/tables', 'convex/functionSpec',
22
+ 'convex/run', 'convex/envList', 'convex/envGet', 'convex/envSet',
23
+ 'convex/envRemove', 'convex/runOneoffQuery', 'convex/logs', 'convex/insights',
24
+ ],
25
+ 'security-expert': [
26
+ 'convex/status', 'convex/tables', 'convex/functionSpec',
27
+ 'convex/envList', 'convex/envGet', 'convex/logs', 'convex/insights',
28
+ ],
29
+ },
30
+ docsUrl: null,
31
+ officialDocs: 'https://docs.convex.dev/',
32
+ mcpPackage: 'convex',
33
+ };
@@ -0,0 +1,85 @@
1
+ import type { PluginConfig } from './types.js';
2
+ import { config as sanity } from './sanity/config.js';
3
+ import { config as contentful } from './contentful/config.js';
4
+ import { config as strapi } from './strapi/config.js';
5
+ import { config as supabase } from './supabase/config.js';
6
+ import { config as convex } from './convex/config.js';
7
+ import { config as vercel } from './vercel/config.js';
8
+ import { config as nx } from './nx/config.js';
9
+ import { config as linear } from './linear/config.js';
10
+ import { config as jira } from './jira/config.js';
11
+ import { config as slack } from './slack/config.js';
12
+ import { config as teams } from './teams/config.js';
13
+ import { config as chromeDevtools } from './chrome-devtools/config.js';
14
+
15
+ export type { PluginConfig, McpServerConfig, McpInput, EnvVarRequirement } from './types.js';
16
+
17
+ /** All registered plugins, keyed by ID. */
18
+ export const PLUGINS: Record<string, PluginConfig> = {
19
+ sanity,
20
+ contentful,
21
+ strapi,
22
+ supabase,
23
+ convex,
24
+ vercel,
25
+ nx,
26
+ 'chrome-devtools': chromeDevtools,
27
+ linear,
28
+ jira,
29
+ slack,
30
+ teams,
31
+ };
32
+
33
+ /** Tech tool plugins only. */
34
+ export const TECH_PLUGINS = Object.values(PLUGINS).filter(
35
+ (p) => p.category === 'tech'
36
+ );
37
+
38
+ /** Team tool plugins only. */
39
+ export const TEAM_PLUGINS = Object.values(PLUGINS).filter(
40
+ (p) => p.category === 'team'
41
+ );
42
+
43
+ /** CMS plugins (subset of tech). */
44
+ export const CMS_PLUGINS = TECH_PLUGINS.filter(
45
+ (p) => p.subCategory === 'cms'
46
+ );
47
+
48
+ /** Database plugins (subset of tech). */
49
+ export const DB_PLUGINS = TECH_PLUGINS.filter(
50
+ (p) => p.subCategory === 'database'
51
+ );
52
+
53
+ /** Get a plugin by ID. */
54
+ export function getPlugin(id: string): PluginConfig | undefined {
55
+ return PLUGINS[id];
56
+ }
57
+
58
+ /** Get all plugins in a category. */
59
+ export function getPluginsByCategory(category: 'tech' | 'team'): PluginConfig[] {
60
+ return Object.values(PLUGINS).filter((p) => p.category === category);
61
+ }
62
+
63
+ /** Get all plugins in a sub-category. */
64
+ export function getPluginsBySubCategory(
65
+ subCategory: PluginConfig['subCategory']
66
+ ): PluginConfig[] {
67
+ return Object.values(PLUGINS).filter((p) => p.subCategory === subCategory);
68
+ }
69
+
70
+ /**
71
+ * Get all skill names from selected plugins.
72
+ * Returns only non-null skill names for the given tool IDs.
73
+ */
74
+ export function getSelectedSkillNames(toolIds: string[]): string[] {
75
+ return toolIds
76
+ .map((id) => PLUGINS[id]?.skillName)
77
+ .filter((s): s is string => s !== null);
78
+ }
79
+
80
+ /**
81
+ * All possible tool-specific skill names (used to compute exclusions).
82
+ */
83
+ export const ALL_PLUGIN_SKILL_NAMES: string[] = Object.values(PLUGINS)
84
+ .map((p) => p.skillName)
85
+ .filter((s): s is string => s !== null);