opencastle 0.32.13 → 0.33.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 (24) hide show
  1. package/LICENSE +21 -93
  2. package/README.md +1 -1
  3. package/package.json +2 -2
  4. package/src/dashboard/dist/data/convoys/demo-api-v2.json +3 -3
  5. package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +4 -4
  6. package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +12 -12
  7. package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +3 -3
  8. package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +1 -1
  9. package/src/dashboard/dist/data/convoys/demo-docs-update.json +3 -3
  10. package/src/dashboard/dist/data/convoys/demo-perf-opt.json +4 -4
  11. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  12. package/src/dashboard/public/data/convoys/demo-api-v2.json +3 -3
  13. package/src/dashboard/public/data/convoys/demo-auth-revamp.json +4 -4
  14. package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +12 -12
  15. package/src/dashboard/public/data/convoys/demo-data-pipeline.json +3 -3
  16. package/src/dashboard/public/data/convoys/demo-deploy-ci.json +1 -1
  17. package/src/dashboard/public/data/convoys/demo-docs-update.json +3 -3
  18. package/src/dashboard/public/data/convoys/demo-perf-opt.json +4 -4
  19. package/src/orchestrator/prompts/create-skill.prompt.md +2 -2
  20. package/src/orchestrator/prompts/generate-convoy.prompt.md +6 -0
  21. package/src/orchestrator/prompts/generate-prd.prompt.md +4 -0
  22. package/src/orchestrator/skills/backbone-scaffolding/EXAMPLES.md +16 -0
  23. package/src/orchestrator/skills/backbone-scaffolding/SKILL.md +99 -0
  24. package/src/orchestrator/skills/git-workflow/SKILL.md +12 -1
package/LICENSE CHANGED
@@ -1,93 +1,21 @@
1
- Business Source License 1.1
2
-
3
- Parameters
4
-
5
- Licensor: Filip Mares
6
- Licensed Work: OpenCastle 0.31.6 and later versions.
7
- The Licensed Work is (c) 2026 Filip Mares.
8
- Additional Use Grant: You may make use of the Licensed Work, provided that
9
- you may not use the Licensed Work for a Commercial
10
- Purpose. A "Commercial Purpose" is any use intended
11
- for or directed toward commercial advantage or
12
- monetary compensation. For the avoidance of doubt,
13
- use of the Licensed Work for personal projects,
14
- education, research, evaluation, and non-commercial
15
- production use is permitted.
16
- Change Date: Two years from the date each version of the
17
- Licensed Work is first publicly distributed by
18
- the Licensor.
19
- Change License: Apache License, Version 2.0
20
-
21
- For information about alternative licensing arrangements for the Licensed Work,
22
- please contact Filip Mares.
23
-
24
- Notice
25
-
26
- Business Source License 1.1
27
-
28
- Terms
29
-
30
- The Licensor hereby grants you the right to copy, modify, create derivative
31
- works, redistribute, and make non-production use of the Licensed Work. The
32
- Licensor may make an Additional Use Grant, above, permitting limited production
33
- use.
34
-
35
- Effective on the Change Date, or the fourth anniversary of the first publicly
36
- available distribution of a specific version of the Licensed Work under this
37
- License, whichever comes first, the Licensor hereby grants you rights under the
38
- terms of the Change License, and the rights granted in the paragraph above
39
- terminate.
40
-
41
- If your use of the Licensed Work does not comply with the requirements currently
42
- in effect as described in this License, you must purchase a commercial license
43
- from the Licensor, its affiliated entities, or authorized resellers, or you must
44
- refrain from using the Licensed Work.
45
-
46
- All copies of the original and modified Licensed Work, and derivative works of
47
- the Licensed Work, are subject to this License. This License applies separately
48
- for each version of the Licensed Work and the Change Date may vary for each
49
- version of the Licensed Work released by Licensor.
50
-
51
- You must conspicuously display this License on each original or modified copy of
52
- the Licensed Work. If you receive the Licensed Work in original or modified form
53
- from a third party, the terms and conditions set forth in this License apply to
54
- your use of that work.
55
-
56
- Any use of the Licensed Work in violation of this License will automatically
57
- terminate your rights under this License for the current and all other versions
58
- of the Licensed Work.
59
-
60
- This License does not grant you any right in any trademark or logo of Licensor
61
- or its affiliates (provided that you may use a trademark or logo of Licensor as
62
- expressly required by this License).
63
-
64
- TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
65
- "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS
66
- OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY,
67
- FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
68
-
69
- MariaDB hereby grants you permission to use this License's text to license your
70
- works, and to refer to it using the trademark "Business Source License", as long
71
- as you comply with the Covenants of Licensor below.
72
-
73
- Covenants of Licensor
74
-
75
- In consideration of the right to use this License's text and the "Business
76
- Source License" name and trademark, Licensor covenants to MariaDB, and to all
77
- other recipients of the licensed work to be provided by Licensor:
78
-
79
- 1. To specify as the Change License the GPL Version 2.0 or any later version,
80
- or a license that is compatible with GPL Version 2.0 or a later version,
81
- where "compatible" means that software provided under the Change License can
82
- be included in a program with software provided under GPL Version 2.0 or a
83
- later version. Licensor may specify additional Change Licenses without
84
- limitation.
85
-
86
- 2. To either: (a) specify an additional grant of rights to use that does not
87
- impose any additional condition, limitation, or restriction on the right
88
- granted in this License, as the Additional Use Grant; or (b) insert the text
89
- "None".
90
-
91
- 3. To specify a Change Date.
92
-
93
- 4. Not to modify this License in any other way.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Filip Mares
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -109,7 +109,7 @@ Add `--dry-run` to any command to preview what it would change without writing f
109
109
 
110
110
  **Specialist Agents.** Developer, UI/UX, Database, Security, Testing, Reviewer, and more.
111
111
 
112
- **On-Demand Skills.** Loaded on demand to keep context windows lean. Auto-selected during init based on your stack. All 51 skills and plugins scored 100% on the [tessl Skill Evaluator](https://tessl.io/registry/skills/submit).
112
+ **On-Demand Skills.** Loaded on demand to keep context windows lean. Auto-selected during init based on your stack. All 51 skills and plugins scored 100% on the [tessl Skill Evaluator](https://tessl.io/registry?q=opencastle).
113
113
 
114
114
  **Workflow Templates.** Features, bug fixes, data pipelines, security audits — reproducible execution templates.
115
115
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencastle",
3
- "version": "0.32.13",
3
+ "version": "0.33.0",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration framework for AI coding assistants",
6
6
  "bin": {
@@ -31,7 +31,7 @@
31
31
  "url": "https://github.com/monkilabs/opencastle/issues"
32
32
  },
33
33
  "homepage": "https://www.opencastle.dev/",
34
- "license": "BUSL-1.1",
34
+ "license": "MIT",
35
35
  "author": "Filip Mares",
36
36
  "scripts": {
37
37
  "build": "npm run cli:build && npm run dashboard:build",
@@ -51,21 +51,21 @@
51
51
  "name": "docs/api-v2-contract.json",
52
52
  "type": "json",
53
53
  "task_id": "api-t1",
54
- "created_at": "2026-04-02T08:27:08.548Z"
54
+ "created_at": "2026-04-04T06:06:04.354Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-api-v2-reports-security-gate-failure-md",
58
58
  "name": "reports/security-gate-failure.md",
59
59
  "type": "summary",
60
60
  "task_id": "api-t3",
61
- "created_at": "2026-04-02T08:27:08.548Z"
61
+ "created_at": "2026-04-04T06:06:04.354Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-api-v2-src-api-rate-limiter-ts",
65
65
  "name": "src/api/rate-limiter.ts",
66
66
  "type": "file",
67
67
  "task_id": "api-t2",
68
- "created_at": "2026-04-02T08:27:08.548Z"
68
+ "created_at": "2026-04-04T06:06:04.354Z"
69
69
  }
70
70
  ],
71
71
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "libs/auth/src/jwt-middleware.ts",
43
43
  "type": "file",
44
44
  "task_id": "auth-t2",
45
- "created_at": "2026-04-02T08:27:08.547Z"
45
+ "created_at": "2026-04-04T06:06:04.353Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
49
49
  "name": "libs/auth/src/rls-policies.sql",
50
50
  "type": "file",
51
51
  "task_id": "auth-t3",
52
- "created_at": "2026-04-02T08:27:08.547Z"
52
+ "created_at": "2026-04-04T06:06:04.353Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
56
56
  "name": "reports/auth-review-summary.md",
57
57
  "type": "summary",
58
58
  "task_id": "auth-t5",
59
- "created_at": "2026-04-02T08:27:08.547Z"
59
+ "created_at": "2026-04-04T06:06:04.353Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
63
63
  "name": "tests/auth/integration.test.ts",
64
64
  "type": "file",
65
65
  "task_id": "auth-t4",
66
- "created_at": "2026-04-02T08:27:08.547Z"
66
+ "created_at": "2026-04-04T06:06:04.353Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -46,47 +46,47 @@
46
46
  ],
47
47
  "artifact_count": 6,
48
48
  "artifacts": [
49
- {
50
- "id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
51
- "name": "reports/panel-review-dashboard.md",
52
- "type": "summary",
53
- "task_id": "ui-t7",
54
- "created_at": "2026-04-02T08:27:08.547Z"
55
- },
56
49
  {
57
50
  "id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
58
51
  "name": "reports/visual-regression.json",
59
52
  "type": "json",
60
53
  "task_id": "ui-t6",
61
- "created_at": "2026-04-02T08:27:08.547Z"
54
+ "created_at": "2026-04-04T06:06:04.353Z"
62
55
  },
63
56
  {
64
57
  "id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
65
58
  "name": "src/components/DonutChart.tsx",
66
59
  "type": "file",
67
60
  "task_id": "ui-t3",
68
- "created_at": "2026-04-02T08:27:08.547Z"
61
+ "created_at": "2026-04-04T06:06:04.353Z"
69
62
  },
70
63
  {
71
64
  "id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
72
65
  "name": "src/components/KpiCard.tsx",
73
66
  "type": "file",
74
67
  "task_id": "ui-t2",
75
- "created_at": "2026-04-02T08:27:08.547Z"
68
+ "created_at": "2026-04-04T06:06:04.353Z"
76
69
  },
77
70
  {
78
71
  "id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
79
72
  "name": "src/components/design-tokens.ts",
80
73
  "type": "file",
81
74
  "task_id": "ui-t1",
82
- "created_at": "2026-04-02T08:27:08.547Z"
75
+ "created_at": "2026-04-04T06:06:04.353Z"
83
76
  },
84
77
  {
85
78
  "id": "artifact-demo-dashboard-ui-src-styles-animations-css",
86
79
  "name": "src/styles/animations.css",
87
80
  "type": "file",
88
81
  "task_id": "ui-t4",
89
- "created_at": "2026-04-02T08:27:08.547Z"
82
+ "created_at": "2026-04-04T06:06:04.353Z"
83
+ },
84
+ {
85
+ "id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
86
+ "name": "reports/panel-review-dashboard.md",
87
+ "type": "summary",
88
+ "task_id": "ui-t7",
89
+ "created_at": "2026-04-04T06:06:04.354Z"
90
90
  }
91
91
  ],
92
92
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "src/etl/pipeline.ts",
43
43
  "type": "file",
44
44
  "task_id": "etl-t2",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.354Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-data-pipeline-src-etl-schema-ts",
49
49
  "name": "src/etl/schema.ts",
50
50
  "type": "file",
51
51
  "task_id": "etl-t1",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.354Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
56
56
  "name": "tests/etl/pipeline.test.ts",
57
57
  "type": "file",
58
58
  "task_id": "etl-t3",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.354Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -51,7 +51,7 @@
51
51
  "name": ".github/workflows/ci.yml",
52
52
  "type": "file",
53
53
  "task_id": "ci-t1",
54
- "created_at": "2026-04-02T08:27:08.548Z"
54
+ "created_at": "2026-04-04T06:06:04.355Z"
55
55
  }
56
56
  ],
57
57
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "docs/ARCHITECTURE.md",
43
43
  "type": "file",
44
44
  "task_id": "docs-t1",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.355Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-docs-update-docs-README-md",
49
49
  "name": "docs/README.md",
50
50
  "type": "file",
51
51
  "task_id": "docs-t1",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.355Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-docs-update-docs-api-reference-json",
56
56
  "name": "docs/api-reference.json",
57
57
  "type": "json",
58
58
  "task_id": "docs-t2",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.355Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "reports/bundle-analysis.json",
43
43
  "type": "json",
44
44
  "task_id": "perf-t1",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.354Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
49
49
  "name": "reports/web-vitals-improvement.md",
50
50
  "type": "summary",
51
51
  "task_id": "perf-t4",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.354Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-perf-opt-src-charts-index-ts",
56
56
  "name": "src/charts/index.ts",
57
57
  "type": "file",
58
58
  "task_id": "perf-t2",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.354Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
63
63
  "name": "src/utils/image-loader.ts",
64
64
  "type": "file",
65
65
  "task_id": "perf-t3",
66
- "created_at": "2026-04-02T08:27:08.548Z"
66
+ "created_at": "2026-04-04T06:06:04.354Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -1,25 +1,25 @@
1
1
  {
2
- "hash": "1d5d6e66",
2
+ "hash": "61d3f837",
3
3
  "configHash": "30f8ea04",
4
- "lockfileHash": "c05fce8f",
5
- "browserHash": "2bcc812b",
4
+ "lockfileHash": "4e96edd0",
5
+ "browserHash": "8dc3766c",
6
6
  "optimized": {
7
7
  "astro > cssesc": {
8
8
  "src": "../../../../../node_modules/cssesc/cssesc.js",
9
9
  "file": "astro___cssesc.js",
10
- "fileHash": "9aa2fadf",
10
+ "fileHash": "55e707a4",
11
11
  "needsInterop": true
12
12
  },
13
13
  "astro > aria-query": {
14
14
  "src": "../../../../../node_modules/aria-query/lib/index.js",
15
15
  "file": "astro___aria-query.js",
16
- "fileHash": "cbf34818",
16
+ "fileHash": "45b77171",
17
17
  "needsInterop": true
18
18
  },
19
19
  "astro > axobject-query": {
20
20
  "src": "../../../../../node_modules/axobject-query/lib/index.js",
21
21
  "file": "astro___axobject-query.js",
22
- "fileHash": "59ca6d79",
22
+ "fileHash": "1be87e34",
23
23
  "needsInterop": true
24
24
  }
25
25
  },
@@ -51,21 +51,21 @@
51
51
  "name": "docs/api-v2-contract.json",
52
52
  "type": "json",
53
53
  "task_id": "api-t1",
54
- "created_at": "2026-04-02T08:27:08.548Z"
54
+ "created_at": "2026-04-04T06:06:04.354Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-api-v2-reports-security-gate-failure-md",
58
58
  "name": "reports/security-gate-failure.md",
59
59
  "type": "summary",
60
60
  "task_id": "api-t3",
61
- "created_at": "2026-04-02T08:27:08.548Z"
61
+ "created_at": "2026-04-04T06:06:04.354Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-api-v2-src-api-rate-limiter-ts",
65
65
  "name": "src/api/rate-limiter.ts",
66
66
  "type": "file",
67
67
  "task_id": "api-t2",
68
- "created_at": "2026-04-02T08:27:08.548Z"
68
+ "created_at": "2026-04-04T06:06:04.354Z"
69
69
  }
70
70
  ],
71
71
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "libs/auth/src/jwt-middleware.ts",
43
43
  "type": "file",
44
44
  "task_id": "auth-t2",
45
- "created_at": "2026-04-02T08:27:08.547Z"
45
+ "created_at": "2026-04-04T06:06:04.353Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
49
49
  "name": "libs/auth/src/rls-policies.sql",
50
50
  "type": "file",
51
51
  "task_id": "auth-t3",
52
- "created_at": "2026-04-02T08:27:08.547Z"
52
+ "created_at": "2026-04-04T06:06:04.353Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
56
56
  "name": "reports/auth-review-summary.md",
57
57
  "type": "summary",
58
58
  "task_id": "auth-t5",
59
- "created_at": "2026-04-02T08:27:08.547Z"
59
+ "created_at": "2026-04-04T06:06:04.353Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
63
63
  "name": "tests/auth/integration.test.ts",
64
64
  "type": "file",
65
65
  "task_id": "auth-t4",
66
- "created_at": "2026-04-02T08:27:08.547Z"
66
+ "created_at": "2026-04-04T06:06:04.353Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -46,47 +46,47 @@
46
46
  ],
47
47
  "artifact_count": 6,
48
48
  "artifacts": [
49
- {
50
- "id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
51
- "name": "reports/panel-review-dashboard.md",
52
- "type": "summary",
53
- "task_id": "ui-t7",
54
- "created_at": "2026-04-02T08:27:08.547Z"
55
- },
56
49
  {
57
50
  "id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
58
51
  "name": "reports/visual-regression.json",
59
52
  "type": "json",
60
53
  "task_id": "ui-t6",
61
- "created_at": "2026-04-02T08:27:08.547Z"
54
+ "created_at": "2026-04-04T06:06:04.353Z"
62
55
  },
63
56
  {
64
57
  "id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
65
58
  "name": "src/components/DonutChart.tsx",
66
59
  "type": "file",
67
60
  "task_id": "ui-t3",
68
- "created_at": "2026-04-02T08:27:08.547Z"
61
+ "created_at": "2026-04-04T06:06:04.353Z"
69
62
  },
70
63
  {
71
64
  "id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
72
65
  "name": "src/components/KpiCard.tsx",
73
66
  "type": "file",
74
67
  "task_id": "ui-t2",
75
- "created_at": "2026-04-02T08:27:08.547Z"
68
+ "created_at": "2026-04-04T06:06:04.353Z"
76
69
  },
77
70
  {
78
71
  "id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
79
72
  "name": "src/components/design-tokens.ts",
80
73
  "type": "file",
81
74
  "task_id": "ui-t1",
82
- "created_at": "2026-04-02T08:27:08.547Z"
75
+ "created_at": "2026-04-04T06:06:04.353Z"
83
76
  },
84
77
  {
85
78
  "id": "artifact-demo-dashboard-ui-src-styles-animations-css",
86
79
  "name": "src/styles/animations.css",
87
80
  "type": "file",
88
81
  "task_id": "ui-t4",
89
- "created_at": "2026-04-02T08:27:08.547Z"
82
+ "created_at": "2026-04-04T06:06:04.353Z"
83
+ },
84
+ {
85
+ "id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
86
+ "name": "reports/panel-review-dashboard.md",
87
+ "type": "summary",
88
+ "task_id": "ui-t7",
89
+ "created_at": "2026-04-04T06:06:04.354Z"
90
90
  }
91
91
  ],
92
92
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "src/etl/pipeline.ts",
43
43
  "type": "file",
44
44
  "task_id": "etl-t2",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.354Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-data-pipeline-src-etl-schema-ts",
49
49
  "name": "src/etl/schema.ts",
50
50
  "type": "file",
51
51
  "task_id": "etl-t1",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.354Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
56
56
  "name": "tests/etl/pipeline.test.ts",
57
57
  "type": "file",
58
58
  "task_id": "etl-t3",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.354Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -51,7 +51,7 @@
51
51
  "name": ".github/workflows/ci.yml",
52
52
  "type": "file",
53
53
  "task_id": "ci-t1",
54
- "created_at": "2026-04-02T08:27:08.548Z"
54
+ "created_at": "2026-04-04T06:06:04.355Z"
55
55
  }
56
56
  ],
57
57
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "docs/ARCHITECTURE.md",
43
43
  "type": "file",
44
44
  "task_id": "docs-t1",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.355Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-docs-update-docs-README-md",
49
49
  "name": "docs/README.md",
50
50
  "type": "file",
51
51
  "task_id": "docs-t1",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.355Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-docs-update-docs-api-reference-json",
56
56
  "name": "docs/api-reference.json",
57
57
  "type": "json",
58
58
  "task_id": "docs-t2",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.355Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "reports/bundle-analysis.json",
43
43
  "type": "json",
44
44
  "task_id": "perf-t1",
45
- "created_at": "2026-04-02T08:27:08.548Z"
45
+ "created_at": "2026-04-04T06:06:04.354Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
49
49
  "name": "reports/web-vitals-improvement.md",
50
50
  "type": "summary",
51
51
  "task_id": "perf-t4",
52
- "created_at": "2026-04-02T08:27:08.548Z"
52
+ "created_at": "2026-04-04T06:06:04.354Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-perf-opt-src-charts-index-ts",
56
56
  "name": "src/charts/index.ts",
57
57
  "type": "file",
58
58
  "task_id": "perf-t2",
59
- "created_at": "2026-04-02T08:27:08.548Z"
59
+ "created_at": "2026-04-04T06:06:04.354Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
63
63
  "name": "src/utils/image-loader.ts",
64
64
  "type": "file",
65
65
  "task_id": "perf-t3",
66
- "created_at": "2026-04-02T08:27:08.548Z"
66
+ "created_at": "2026-04-04T06:06:04.354Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -123,11 +123,11 @@ Registration differs by type:
123
123
  - [ ] Skill matrix updated (`directSkills` array or capability slot binding)
124
124
  - [ ] For process skills: at least one agent's `directSkills` array includes it in skill-matrix.json
125
125
  - [ ] For plugin skills: `config.ts` `skillName` matches the `name` in frontmatter
126
- - [ ] Run `npx tessl skill review <path>` — target 100% score (see Scoring Criteria below)
126
+ - [ ] Run `npx tessl skill review <path>` — target 100 score (see Scoring Criteria below)
127
127
 
128
128
  ## Scoring Criteria
129
129
 
130
- Skills are evaluated by `npx tessl skill review` across 8 criteria (3 pts each = 24 total). Target 100%.
130
+ Skills are evaluated by `npx tessl skill review` across 8 criteria (3 pts each = 24 total). Target 100.
131
131
 
132
132
  ### Description (frontmatter `description` field)
133
133
 
@@ -75,6 +75,12 @@ Example prompt suffix to include when content research is needed:
75
75
 
76
76
  ---
77
77
 
78
+ ### Scaffolding Rule
79
+
80
+ New project from scratch? You MUST load the **backbone-scaffolding** skill and follow it.
81
+
82
+ ---
83
+
78
84
  ## Workflow
79
85
 
80
86
  ### 1. Analyse the Goal
@@ -31,6 +31,10 @@ If the feature request involves a specific person, place, organization, topic, o
31
31
  > ℹ️ Content based on training data — verify before launch.
32
32
  3. **Never fabricate or hallucinate content.** If you genuinely have no knowledge about a real-world subject and cannot search, state what is unknown and use placeholder text. This applies to all content: bios, descriptions, histories, statistics, quotes, and any factual claims.
33
33
 
34
+ ## Scaffolding Awareness
35
+
36
+ New project from scratch? You MUST load the **backbone-scaffolding** skill and follow it.
37
+
34
38
  ## Output Rules
35
39
 
36
40
  **CRITICAL:** Return the PRD as your text response. Do NOT create any files. Do NOT use file-writing tools. Simply output the full PRD document as text. Do not wrap it in a code fence — start directly with the `#` heading. Do not summarize — output the complete document.
@@ -0,0 +1,16 @@
1
+ # backbone-scaffolding Examples
2
+
3
+ ## Convoy Scaffolding Task
4
+
5
+ ```json
6
+ {
7
+ "id": "scaffolding",
8
+ "description": "Scaffold monorepo with backbone CLI",
9
+ "agent": "developer",
10
+ "complexity": 2,
11
+ "prompt": "Scaffold the project monorepo using the backbone CLI. Ensure Node.js >= 22.5.0 is available. Run: `npx @monkilabs/backbone my-project` and select the following options when prompted:\n- Monorepo: Turborepo\n- Framework: Next.js\n- Backend: Supabase\n- CMS: Sanity\n- Testing: Playwright\n- Deployment: Vercel\n- Mobile: None\n- Packages: Email Library, LLM Library\n\nAfter scaffolding completes, run `npm install` in the generated `my-project/` directory. Then run `npx turbo build` and verify it exits 0.",
12
+ "files": ["my-project/"]
13
+ }
14
+ ```
15
+
16
+ All subsequent tasks should declare `depends_on: ["scaffolding"]` and build on the generated structure.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: backbone-scaffolding
3
+ description: "Scaffolds production-ready monorepo projects using the backbone CLI: configures workspace packages, wires build tooling, sets up CI pipelines, and initializes framework/backend/CMS integrations. Use when creating, bootstrapping, or initializing a new application, project, starter template, or monorepo from scratch. Trigger terms: scaffold, bootstrap, init, new repo, new app, boilerplate, starter, greenfield."
4
+ ---
5
+
6
+ # backbone-scaffolding Skill
7
+
8
+ ## Requirements
9
+
10
+ - Node.js **>= 22.5.0** must be available in the environment
11
+ - Run backbone with `npx @monkilabs/backbone <project-name>`
12
+
13
+ ## How to Use the CLI
14
+
15
+ Backbone is **interactive** — it uses `@clack/prompts` to ask a series of questions. Agents must run the command and respond to each prompt in sequence.
16
+
17
+ ### Prompt Sequence
18
+
19
+ 1. **Monorepo tool** — `nx` or `turborepo`
20
+ 2. **Framework** — `nextjs` or `astro`
21
+ 3. **Backend** — `convex`, `supabase`, `prisma`, or `none`
22
+ 4. **CMS** — `sanity`, `contentful`, `strapi`, or `none`
23
+ 5. **E2E Testing** — `playwright` or `cypress`
24
+ 6. **Deployment** — `vercel`, `netlify`, or `none`
25
+ 7. **Mobile** — `ionic` or `none` *(only shown for non-Astro frameworks)*
26
+ 8. **Packages** — multi-select: `uiLib`, `emailLib`, `llmLib`
27
+
28
+ ## CLI Options & Constraints
29
+
30
+ | Category | Choices | Notes |
31
+ |-------------|-------------------------------------------|------------------------------------------|
32
+ | Monorepo | `nx`, `turborepo` | Required |
33
+ | Framework | `nextjs`, `astro` | Required |
34
+ | Backend | `convex`, `supabase`, `prisma` | ⛔ `convex` incompatible with `astro` |
35
+ | CMS | `sanity`, `contentful`, `strapi`, `none` | Optional |
36
+ | E2E Testing | `playwright`, `cypress` | Required |
37
+ | Deployment | `vercel`, `netlify`, `none` | Optional |
38
+ | Mobile | `ionic`, `none` | ⛔ `ionic` incompatible with `astro` |
39
+ | Packages | `uiLib`, `emailLib`, `llmLib` | Multi-select; ⛔ `uiLib` incompatible with `astro` |
40
+
41
+ **Astro constraint:** `astro` requires React-free options — never combine with `convex`, `ionic`, or `uiLib`.
42
+
43
+ ## OpenCastle TechTool → Backbone Mapping
44
+
45
+ Most TechTool names map 1:1 to backbone prompt choices (e.g. `nextjs` → select Next.js, `supabase` → select Supabase). Exceptions:
46
+
47
+ | TechTool | Backbone mapping | Notes |
48
+ |----------|-----------------|-------|
49
+ | `resend` | Select `emailLib` in Packages prompt | Only non-obvious mapping |
50
+ | `vitest` | — | Always included automatically |
51
+ | `figma`, `chrome-devtools` | — | Not handled by backbone; configure separately |
52
+
53
+ ## Generated Project Structure
54
+
55
+ After backbone runs, the output directory contains:
56
+
57
+ ```
58
+ <project-name>/
59
+ apps/
60
+ web/ # Next.js or Astro application
61
+ mobile/ # (if ionic selected)
62
+ packages/
63
+ ui/ # (if uiLib selected) shared React component library
64
+ email/ # (if emailLib selected) Resend/React Email package
65
+ llm/ # (if llmLib selected) LLM integration package
66
+ backend/
67
+ convex/ # (if convex selected)
68
+ supabase/ # (if supabase selected)
69
+ e2e/ # Playwright or Cypress tests
70
+ .github/
71
+ workflows/ # GitHub Actions CI pipelines (always included)
72
+ vitest.config.ts # Always included
73
+ tsconfig.base.json # Always included
74
+ package.json # Monorepo root package.json
75
+ turbo.json / nx.json # Monorepo tool config
76
+ ```
77
+
78
+ **Always included regardless of options:** Vitest configuration, GitHub Actions CI workflows, root `tsconfig.base.json`, ESLint, Prettier.
79
+
80
+ Agents working on post-scaffolding tasks must **not recreate** any of these files — they already exist. Build on top of the generated structure.
81
+
82
+ ## Post-Scaffolding Steps
83
+
84
+ After `npx @monkilabs/backbone <project-name>` completes:
85
+
86
+ 1. `cd <project-name>` into the generated directory
87
+ 2. Run `npm install` to install all dependencies
88
+ 3. Verify the project builds: run the monorepo build command (e.g. `npx turbo build` or `npx nx build`)
89
+ 4. All subsequent agent tasks should **import and extend** the generated boilerplate — never overwrite it
90
+
91
+ **If something fails:**
92
+ - `npm install` errors → verify Node.js >= 22.5.0 (`node -v`)
93
+ - Build errors → check that no incompatible options were selected (see Astro constraint above); re-run backbone with corrected choices if needed
94
+ - Wrong option selected → delete the generated directory and re-run `npx @monkilabs/backbone` with the correct selections
95
+
96
+ ## Example Convoy Task
97
+
98
+ See [EXAMPLES.md](EXAMPLES.md) for a complete scaffolding task JSON.
99
+
@@ -22,7 +22,18 @@ description: "Defines branch naming conventions, PR template requirements, commi
22
22
  1. Branch `<type>/<ticket-id>-<slug>` from `main`
23
23
  2. Atomic commits referencing issue ID
24
24
  3. Push branch to origin
25
- 4. Open PR (do NOT merge): `GH_PAGER=cat gh pr create --base main --title "TAS-XX: …" --body "Resolves TAS-XX"`
25
+ 4. Open PR (do NOT merge) write the body to a temp file first, then use `--body-file`:
26
+ ```sh
27
+ # Write PR body to a temp file to avoid shell escaping issues
28
+ cat > /tmp/pr-body.md << 'EOF'
29
+ Resolves TAS-XX
30
+
31
+ ## Changes
32
+ - ...
33
+ EOF
34
+ GH_PAGER=cat gh pr create --base main --title "TAS-XX: Short description" --body-file /tmp/pr-body.md
35
+ ```
36
+ **Never use inline `--body` with markdown/backticks/special chars** — it breaks in zsh heredocs and quoted strings.
26
37
  5. Update issue with PR URL
27
38
 
28
39
  ## Discovered Issues Policy