@starlein/paperclip-plugin-company-wizard 0.2.1
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.
- package/LICENSE +21 -0
- package/README.md +748 -0
- package/dist/manifest.js +91 -0
- package/dist/manifest.js.map +7 -0
- package/dist/ui/index.css +1647 -0
- package/dist/ui/index.css.map +7 -0
- package/dist/ui/index.js +6738 -0
- package/dist/ui/index.js.map +7 -0
- package/dist/worker.js +8247 -0
- package/dist/worker.js.map +7 -0
- package/package.json +73 -0
- package/templates/ai-wizard/config-format.md +21 -0
- package/templates/ai-wizard/interview-system.md +67 -0
- package/templates/ai-wizard/messages.json +6 -0
- package/templates/ai-wizard/single-shot-system.md +42 -0
- package/templates/bootstrap-instructions.md +30 -0
- package/templates/modules/accessibility/agents/engineer/skills/accessibility-audit.fallback.md +18 -0
- package/templates/modules/accessibility/agents/ui-designer/skills/accessibility-audit.fallback.md +18 -0
- package/templates/modules/accessibility/module.meta.json +22 -0
- package/templates/modules/accessibility/skills/accessibility-audit.md +27 -0
- package/templates/modules/architecture-plan/agents/ceo/skills/architecture-plan.fallback.md +16 -0
- package/templates/modules/architecture-plan/agents/engineer/skills/design-system.fallback.md +17 -0
- package/templates/modules/architecture-plan/agents/ui-designer/skills/architecture-plan.md +19 -0
- package/templates/modules/architecture-plan/agents/ui-designer/skills/design-system.md +24 -0
- package/templates/modules/architecture-plan/docs/architecture-template.md +38 -0
- package/templates/modules/architecture-plan/docs/design-system-template.md +61 -0
- package/templates/modules/architecture-plan/module.meta.json +37 -0
- package/templates/modules/architecture-plan/skills/architecture-plan.md +23 -0
- package/templates/modules/auto-assign/README.md +23 -0
- package/templates/modules/auto-assign/agents/ceo/heartbeat-section.md +9 -0
- package/templates/modules/auto-assign/agents/ceo/skills/auto-assign.fallback.md +18 -0
- package/templates/modules/auto-assign/agents/product-owner/heartbeat-section.md +10 -0
- package/templates/modules/auto-assign/module.meta.json +27 -0
- package/templates/modules/auto-assign/skills/auto-assign.md +23 -0
- package/templates/modules/backlog/README.md +26 -0
- package/templates/modules/backlog/agents/ceo/heartbeat-section.md +10 -0
- package/templates/modules/backlog/agents/ceo/skills/backlog-health.fallback.md +20 -0
- package/templates/modules/backlog/agents/product-owner/heartbeat-section.md +15 -0
- package/templates/modules/backlog/docs/backlog-process.md +62 -0
- package/templates/modules/backlog/docs/backlog-template.md +53 -0
- package/templates/modules/backlog/module.meta.json +31 -0
- package/templates/modules/backlog/skills/backlog-health.md +47 -0
- package/templates/modules/brand-identity/agents/ceo/skills/brand-identity.fallback.md +19 -0
- package/templates/modules/brand-identity/agents/cmo/skills/brand-identity.fallback.md +19 -0
- package/templates/modules/brand-identity/docs/brand-identity-template.md +43 -0
- package/templates/modules/brand-identity/module.meta.json +22 -0
- package/templates/modules/brand-identity/skills/brand-identity.md +30 -0
- package/templates/modules/build-api/module.meta.json +118 -0
- package/templates/modules/build-api/skills/api-design.md +43 -0
- package/templates/modules/ci-cd/agents/devops/skills/ci-cd.md +28 -0
- package/templates/modules/ci-cd/agents/engineer/skills/ci-cd.fallback.md +18 -0
- package/templates/modules/ci-cd/docs/ci-cd-template.md +42 -0
- package/templates/modules/ci-cd/module.meta.json +105 -0
- package/templates/modules/ci-cd/skills/ci-cd.md +26 -0
- package/templates/modules/codebase-onboarding/agents/ceo/skills/codebase-audit.fallback.md +19 -0
- package/templates/modules/codebase-onboarding/module.meta.json +24 -0
- package/templates/modules/codebase-onboarding/skills/codebase-audit.md +45 -0
- package/templates/modules/competitive-intel/agents/ceo/skills/competitive-tracking.fallback.md +17 -0
- package/templates/modules/competitive-intel/agents/cmo/skills/competitive-tracking.fallback.md +17 -0
- package/templates/modules/competitive-intel/agents/customer-success/skills/competitive-tracking.md +25 -0
- package/templates/modules/competitive-intel/module.meta.json +23 -0
- package/templates/modules/competitive-intel/skills/competitive-tracking.md +27 -0
- package/templates/modules/dependency-management/agents/engineer/skills/dependency-audit.fallback.md +18 -0
- package/templates/modules/dependency-management/module.meta.json +25 -0
- package/templates/modules/dependency-management/skills/dependency-audit.md +43 -0
- package/templates/modules/documentation/agents/ceo/skills/project-docs.fallback.md +16 -0
- package/templates/modules/documentation/agents/engineer/skills/project-docs.fallback.md +16 -0
- package/templates/modules/documentation/module.meta.json +22 -0
- package/templates/modules/documentation/skills/project-docs.md +25 -0
- package/templates/modules/game-design/agents/ceo/skills/game-design.fallback.md +17 -0
- package/templates/modules/game-design/agents/game-designer/skills/game-design.md +51 -0
- package/templates/modules/game-design/docs/engine-phaser.md +310 -0
- package/templates/modules/game-design/docs/engine-pixijs.md +289 -0
- package/templates/modules/game-design/docs/engine-threejs.md +304 -0
- package/templates/modules/game-design/docs/gdd-template.md +72 -0
- package/templates/modules/game-design/module.meta.json +22 -0
- package/templates/modules/game-design/skills/game-design.md +41 -0
- package/templates/modules/github-repo/README.md +23 -0
- package/templates/modules/github-repo/agents/engineer/skills/git-workflow.md +23 -0
- package/templates/modules/github-repo/docs/git-workflow.md +50 -0
- package/templates/modules/github-repo/module.meta.json +12 -0
- package/templates/modules/hiring-review/agents/ceo/skills/hiring-review.fallback.md +17 -0
- package/templates/modules/hiring-review/module.meta.json +21 -0
- package/templates/modules/hiring-review/skills/hiring-review.md +24 -0
- package/templates/modules/launch-mvp/module.meta.json +86 -0
- package/templates/modules/market-analysis/agents/ceo/skills/market-analysis.fallback.md +17 -0
- package/templates/modules/market-analysis/agents/cmo/skills/market-analysis.fallback.md +19 -0
- package/templates/modules/market-analysis/agents/product-owner/skills/market-analysis.fallback.md +18 -0
- package/templates/modules/market-analysis/agents/ux-researcher/skills/market-analysis.md +23 -0
- package/templates/modules/market-analysis/docs/market-analysis-template.md +32 -0
- package/templates/modules/market-analysis/module.meta.json +23 -0
- package/templates/modules/market-analysis/skills/market-analysis.md +21 -0
- package/templates/modules/monitoring/agents/devops/skills/monitoring.md +23 -0
- package/templates/modules/monitoring/agents/engineer/skills/monitoring.fallback.md +18 -0
- package/templates/modules/monitoring/docs/monitoring-template.md +46 -0
- package/templates/modules/monitoring/module.meta.json +24 -0
- package/templates/modules/monitoring/skills/monitoring.md +20 -0
- package/templates/modules/pr-review/README.md +43 -0
- package/templates/modules/pr-review/agents/code-reviewer/skills/code-review.md +29 -0
- package/templates/modules/pr-review/agents/devops/skills/infra-review.md +29 -0
- package/templates/modules/pr-review/agents/engineer/skills/pr-workflow.md +24 -0
- package/templates/modules/pr-review/agents/product-owner/skills/product-review.md +27 -0
- package/templates/modules/pr-review/agents/qa/skills/qa-review.md +29 -0
- package/templates/modules/pr-review/agents/ui-designer/skills/design-review.md +29 -0
- package/templates/modules/pr-review/agents/ux-researcher/skills/ux-review.md +29 -0
- package/templates/modules/pr-review/docs/pr-conventions.md +78 -0
- package/templates/modules/pr-review/module.meta.json +24 -0
- package/templates/modules/release-management/agents/engineer/skills/release-process.fallback.md +18 -0
- package/templates/modules/release-management/module.meta.json +25 -0
- package/templates/modules/release-management/skills/release-process.md +45 -0
- package/templates/modules/security-audit/agents/devops/skills/security-review.fallback.md +17 -0
- package/templates/modules/security-audit/agents/devops/skills/threat-model.fallback.md +17 -0
- package/templates/modules/security-audit/agents/engineer/skills/security-review.fallback.md +17 -0
- package/templates/modules/security-audit/agents/engineer/skills/threat-model.fallback.md +17 -0
- package/templates/modules/security-audit/module.meta.json +36 -0
- package/templates/modules/security-audit/skills/security-review.md +25 -0
- package/templates/modules/security-audit/skills/threat-model.md +22 -0
- package/templates/modules/stall-detection/README.md +27 -0
- package/templates/modules/stall-detection/agents/ceo/heartbeat-section.md +12 -0
- package/templates/modules/stall-detection/agents/ceo/skills/stall-detection.md +21 -0
- package/templates/modules/stall-detection/module.meta.json +15 -0
- package/templates/modules/tech-stack/agents/ceo/skills/tech-stack.fallback.md +16 -0
- package/templates/modules/tech-stack/docs/tech-stack-template.md +28 -0
- package/templates/modules/tech-stack/module.meta.json +21 -0
- package/templates/modules/tech-stack/skills/tech-stack.md +25 -0
- package/templates/modules/triage/agents/ceo/skills/issue-triage.fallback.md +19 -0
- package/templates/modules/triage/module.meta.json +25 -0
- package/templates/modules/triage/skills/issue-triage.md +42 -0
- package/templates/modules/user-testing/agents/ceo/skills/user-testing.fallback.md +17 -0
- package/templates/modules/user-testing/agents/product-owner/skills/user-testing.fallback.md +17 -0
- package/templates/modules/user-testing/agents/qa/skills/user-testing.md +30 -0
- package/templates/modules/user-testing/agents/ux-researcher/skills/user-testing.fallback.md +18 -0
- package/templates/modules/user-testing/docs/user-testing-template.md +37 -0
- package/templates/modules/user-testing/module.meta.json +23 -0
- package/templates/modules/user-testing/skills/user-testing.md +27 -0
- package/templates/modules/vision-workshop/agents/ceo/skills/vision-workshop.md +23 -0
- package/templates/modules/vision-workshop/agents/ux-researcher/skills/vision-workshop.md +19 -0
- package/templates/modules/vision-workshop/docs/vision-template.md +28 -0
- package/templates/modules/vision-workshop/module.meta.json +12 -0
- package/templates/modules/website-relaunch/agents/ui-designer/skills/site-audit.md +65 -0
- package/templates/modules/website-relaunch/module.meta.json +168 -0
- package/templates/modules/website-relaunch/skills/design-ingestion.md +111 -0
- package/templates/modules/website-relaunch/skills/site-audit.md +54 -0
- package/templates/presets/build-api/preset.meta.json +16 -0
- package/templates/presets/build-game/preset.meta.json +150 -0
- package/templates/presets/content/preset.meta.json +20 -0
- package/templates/presets/fast/preset.meta.json +16 -0
- package/templates/presets/full/preset.meta.json +22 -0
- package/templates/presets/gtm/preset.meta.json +21 -0
- package/templates/presets/launch-mvp/preset.meta.json +17 -0
- package/templates/presets/launch-pack/preset.meta.json +25 -0
- package/templates/presets/quality/preset.meta.json +17 -0
- package/templates/presets/rad/preset.meta.json +19 -0
- package/templates/presets/repo-maintenance/preset.meta.json +104 -0
- package/templates/presets/research/preset.meta.json +13 -0
- package/templates/presets/secure/preset.meta.json +22 -0
- package/templates/presets/startup/preset.meta.json +19 -0
- package/templates/presets/website-relaunch/preset.meta.json +18 -0
- package/templates/roles/audio-designer/AGENTS.md +29 -0
- package/templates/roles/audio-designer/HEARTBEAT.md +37 -0
- package/templates/roles/audio-designer/SOUL.md +17 -0
- package/templates/roles/audio-designer/TOOLS.md +3 -0
- package/templates/roles/audio-designer/role.meta.json +14 -0
- package/templates/roles/ceo/AGENTS.md +28 -0
- package/templates/roles/ceo/HEARTBEAT.md +75 -0
- package/templates/roles/ceo/SOUL.md +33 -0
- package/templates/roles/ceo/TOOLS.md +3 -0
- package/templates/roles/ceo/role.meta.json +14 -0
- package/templates/roles/cfo/AGENTS.md +31 -0
- package/templates/roles/cfo/HEARTBEAT.md +37 -0
- package/templates/roles/cfo/SOUL.md +17 -0
- package/templates/roles/cfo/TOOLS.md +3 -0
- package/templates/roles/cfo/role.meta.json +17 -0
- package/templates/roles/cmo/AGENTS.md +31 -0
- package/templates/roles/cmo/HEARTBEAT.md +37 -0
- package/templates/roles/cmo/SOUL.md +17 -0
- package/templates/roles/cmo/TOOLS.md +3 -0
- package/templates/roles/cmo/role.meta.json +17 -0
- package/templates/roles/code-reviewer/AGENTS.md +42 -0
- package/templates/roles/code-reviewer/HEARTBEAT.md +33 -0
- package/templates/roles/code-reviewer/SOUL.md +18 -0
- package/templates/roles/code-reviewer/TOOLS.md +3 -0
- package/templates/roles/code-reviewer/role.meta.json +12 -0
- package/templates/roles/cto/AGENTS.md +30 -0
- package/templates/roles/cto/HEARTBEAT.md +45 -0
- package/templates/roles/cto/SOUL.md +25 -0
- package/templates/roles/cto/TOOLS.md +3 -0
- package/templates/roles/cto/role.meta.json +18 -0
- package/templates/roles/customer-success/AGENTS.md +42 -0
- package/templates/roles/customer-success/HEARTBEAT.md +33 -0
- package/templates/roles/customer-success/SOUL.md +17 -0
- package/templates/roles/customer-success/TOOLS.md +3 -0
- package/templates/roles/customer-success/role.meta.json +17 -0
- package/templates/roles/devops/AGENTS.md +31 -0
- package/templates/roles/devops/HEARTBEAT.md +42 -0
- package/templates/roles/devops/SOUL.md +17 -0
- package/templates/roles/devops/TOOLS.md +3 -0
- package/templates/roles/devops/role.meta.json +17 -0
- package/templates/roles/engineer/AGENTS.md +29 -0
- package/templates/roles/engineer/HEARTBEAT.md +39 -0
- package/templates/roles/engineer/SOUL.md +20 -0
- package/templates/roles/engineer/TOOLS.md +3 -0
- package/templates/roles/engineer/role.meta.json +13 -0
- package/templates/roles/game-artist/AGENTS.md +29 -0
- package/templates/roles/game-artist/HEARTBEAT.md +37 -0
- package/templates/roles/game-artist/SOUL.md +24 -0
- package/templates/roles/game-artist/TOOLS.md +3 -0
- package/templates/roles/game-artist/role.meta.json +14 -0
- package/templates/roles/game-designer/AGENTS.md +29 -0
- package/templates/roles/game-designer/HEARTBEAT.md +37 -0
- package/templates/roles/game-designer/SOUL.md +17 -0
- package/templates/roles/game-designer/TOOLS.md +3 -0
- package/templates/roles/game-designer/role.meta.json +14 -0
- package/templates/roles/level-designer/AGENTS.md +29 -0
- package/templates/roles/level-designer/HEARTBEAT.md +37 -0
- package/templates/roles/level-designer/SOUL.md +17 -0
- package/templates/roles/level-designer/TOOLS.md +3 -0
- package/templates/roles/level-designer/role.meta.json +13 -0
- package/templates/roles/product-owner/AGENTS.md +29 -0
- package/templates/roles/product-owner/HEARTBEAT.md +35 -0
- package/templates/roles/product-owner/SOUL.md +17 -0
- package/templates/roles/product-owner/TOOLS.md +3 -0
- package/templates/roles/product-owner/role.meta.json +14 -0
- package/templates/roles/qa/AGENTS.md +31 -0
- package/templates/roles/qa/HEARTBEAT.md +37 -0
- package/templates/roles/qa/SOUL.md +17 -0
- package/templates/roles/qa/TOOLS.md +3 -0
- package/templates/roles/qa/role.meta.json +17 -0
- package/templates/roles/security-engineer/AGENTS.md +42 -0
- package/templates/roles/security-engineer/HEARTBEAT.md +33 -0
- package/templates/roles/security-engineer/SOUL.md +17 -0
- package/templates/roles/security-engineer/TOOLS.md +3 -0
- package/templates/roles/security-engineer/role.meta.json +17 -0
- package/templates/roles/technical-writer/AGENTS.md +41 -0
- package/templates/roles/technical-writer/HEARTBEAT.md +32 -0
- package/templates/roles/technical-writer/SOUL.md +17 -0
- package/templates/roles/technical-writer/TOOLS.md +3 -0
- package/templates/roles/technical-writer/role.meta.json +16 -0
- package/templates/roles/ui-designer/AGENTS.md +29 -0
- package/templates/roles/ui-designer/HEARTBEAT.md +37 -0
- package/templates/roles/ui-designer/SOUL.md +17 -0
- package/templates/roles/ui-designer/TOOLS.md +3 -0
- package/templates/roles/ui-designer/role.meta.json +17 -0
- package/templates/roles/ux-researcher/AGENTS.md +29 -0
- package/templates/roles/ux-researcher/HEARTBEAT.md +37 -0
- package/templates/roles/ux-researcher/SOUL.md +17 -0
- package/templates/roles/ux-researcher/TOOLS.md +3 -0
- package/templates/roles/ux-researcher/role.meta.json +14 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Engine Guide: Three.js
|
|
2
|
+
|
|
3
|
+
Three.js is a 3D rendering library for the web. Use it for: 3D games, first-person/third-person games, voxel worlds, procedural environments, 3D puzzle games, and any game that needs a 3D scene. Runs on WebGL and WebGPU.
|
|
4
|
+
|
|
5
|
+
Like PixiJS, Three.js is a renderer — you build the game loop, physics, and input yourself (or bring libraries like Rapier, cannon-es, or Ammo.js).
|
|
6
|
+
|
|
7
|
+
## Project Setup
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm init -y && npm install three
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For TypeScript: `npm install three @types/three`
|
|
14
|
+
|
|
15
|
+
## Core Architecture
|
|
16
|
+
|
|
17
|
+
### Scene, Camera, Renderer
|
|
18
|
+
|
|
19
|
+
Every Three.js app needs these three things:
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
import * as THREE from 'three';
|
|
23
|
+
|
|
24
|
+
// Scene — the container for all 3D objects
|
|
25
|
+
const scene = new THREE.Scene();
|
|
26
|
+
scene.background = new THREE.Color(0x87ceeb); // sky blue
|
|
27
|
+
scene.fog = new THREE.Fog(0x87ceeb, 50, 200); // distance fog
|
|
28
|
+
|
|
29
|
+
// Camera — the viewpoint
|
|
30
|
+
const camera = new THREE.PerspectiveCamera(
|
|
31
|
+
75, // FOV
|
|
32
|
+
window.innerWidth / window.innerHeight, // aspect
|
|
33
|
+
0.1, // near clipping
|
|
34
|
+
1000 // far clipping
|
|
35
|
+
);
|
|
36
|
+
camera.position.set(0, 5, 10);
|
|
37
|
+
camera.lookAt(0, 0, 0);
|
|
38
|
+
|
|
39
|
+
// Renderer
|
|
40
|
+
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
41
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
42
|
+
renderer.setPixelRatio(window.devicePixelRatio);
|
|
43
|
+
renderer.shadowMap.enabled = true;
|
|
44
|
+
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
45
|
+
document.body.appendChild(renderer.domElement);
|
|
46
|
+
|
|
47
|
+
// Animation loop
|
|
48
|
+
const timer = new THREE.Timer();
|
|
49
|
+
timer.connect(document);
|
|
50
|
+
|
|
51
|
+
renderer.setAnimationLoop(() => {
|
|
52
|
+
timer.update();
|
|
53
|
+
const delta = timer.getDelta();
|
|
54
|
+
update(delta);
|
|
55
|
+
renderer.render(scene, camera);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Handle resize
|
|
59
|
+
window.addEventListener('resize', () => {
|
|
60
|
+
camera.aspect = window.innerWidth / window.innerHeight;
|
|
61
|
+
camera.updateProjectionMatrix();
|
|
62
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Meshes, Materials, Geometry
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
// Built-in geometries
|
|
70
|
+
const ground = new THREE.Mesh(
|
|
71
|
+
new THREE.PlaneGeometry(100, 100),
|
|
72
|
+
new THREE.MeshStandardMaterial({ color: 0x228b22 })
|
|
73
|
+
);
|
|
74
|
+
ground.rotation.x = -Math.PI / 2;
|
|
75
|
+
ground.receiveShadow = true;
|
|
76
|
+
scene.add(ground);
|
|
77
|
+
|
|
78
|
+
// Box
|
|
79
|
+
const cube = new THREE.Mesh(
|
|
80
|
+
new THREE.BoxGeometry(1, 1, 1),
|
|
81
|
+
new THREE.MeshStandardMaterial({ color: 0xff4444 })
|
|
82
|
+
);
|
|
83
|
+
cube.position.set(0, 0.5, 0);
|
|
84
|
+
cube.castShadow = true;
|
|
85
|
+
scene.add(cube);
|
|
86
|
+
|
|
87
|
+
// Instanced mesh (for many identical objects — trees, enemies, particles)
|
|
88
|
+
const count = 1000;
|
|
89
|
+
const mesh = new THREE.InstancedMesh(geometry, material, count);
|
|
90
|
+
const dummy = new THREE.Object3D();
|
|
91
|
+
for (let i = 0; i < count; i++) {
|
|
92
|
+
dummy.position.set(Math.random() * 100 - 50, 0, Math.random() * 100 - 50);
|
|
93
|
+
dummy.updateMatrix();
|
|
94
|
+
mesh.setMatrixAt(i, dummy.matrix);
|
|
95
|
+
}
|
|
96
|
+
scene.add(mesh);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Lighting
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
// Ambient — baseline illumination
|
|
103
|
+
const ambient = new THREE.AmbientLight(0x404040, 0.5);
|
|
104
|
+
scene.add(ambient);
|
|
105
|
+
|
|
106
|
+
// Hemisphere — sky/ground gradient
|
|
107
|
+
const hemi = new THREE.HemisphereLight(0x87ceeb, 0x228b22, 0.6);
|
|
108
|
+
scene.add(hemi);
|
|
109
|
+
|
|
110
|
+
// Directional — sun-like, casts shadows
|
|
111
|
+
const sun = new THREE.DirectionalLight(0xffffff, 1);
|
|
112
|
+
sun.position.set(10, 20, 10);
|
|
113
|
+
sun.castShadow = true;
|
|
114
|
+
sun.shadow.mapSize.width = 2048;
|
|
115
|
+
sun.shadow.mapSize.height = 2048;
|
|
116
|
+
sun.shadow.camera.near = 0.5;
|
|
117
|
+
sun.shadow.camera.far = 50;
|
|
118
|
+
sun.shadow.camera.left = -20;
|
|
119
|
+
sun.shadow.camera.right = 20;
|
|
120
|
+
sun.shadow.camera.top = 20;
|
|
121
|
+
sun.shadow.camera.bottom = -20;
|
|
122
|
+
scene.add(sun);
|
|
123
|
+
|
|
124
|
+
// Point — omnidirectional (torch, lamp)
|
|
125
|
+
const point = new THREE.PointLight(0xff8800, 1, 20);
|
|
126
|
+
point.position.set(5, 3, 5);
|
|
127
|
+
scene.add(point);
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Loading 3D Models (GLTF)
|
|
131
|
+
|
|
132
|
+
GLTF/GLB is the standard format for 3D web content.
|
|
133
|
+
|
|
134
|
+
```javascript
|
|
135
|
+
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
|
|
136
|
+
|
|
137
|
+
const loader = new GLTFLoader();
|
|
138
|
+
loader.load('models/character.glb', (gltf) => {
|
|
139
|
+
const model = gltf.scene;
|
|
140
|
+
model.traverse((child) => {
|
|
141
|
+
if (child.isMesh) {
|
|
142
|
+
child.castShadow = true;
|
|
143
|
+
child.receiveShadow = true;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
scene.add(model);
|
|
147
|
+
|
|
148
|
+
// Animations
|
|
149
|
+
const mixer = new THREE.AnimationMixer(model);
|
|
150
|
+
const idleAction = mixer.clipAction(gltf.animations[0]);
|
|
151
|
+
const walkAction = mixer.clipAction(gltf.animations[1]);
|
|
152
|
+
idleAction.play();
|
|
153
|
+
|
|
154
|
+
// In update loop:
|
|
155
|
+
// mixer.update(delta);
|
|
156
|
+
|
|
157
|
+
// Crossfade between animations
|
|
158
|
+
// walkAction.reset().fadeIn(0.3).play();
|
|
159
|
+
// idleAction.fadeOut(0.3);
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Raycasting (Input / Click Detection)
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
const raycaster = new THREE.Raycaster();
|
|
167
|
+
const pointer = new THREE.Vector2();
|
|
168
|
+
|
|
169
|
+
window.addEventListener('click', (event) => {
|
|
170
|
+
pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
|
|
171
|
+
pointer.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
|
172
|
+
|
|
173
|
+
raycaster.setFromCamera(pointer, camera);
|
|
174
|
+
const intersects = raycaster.intersectObjects(scene.children, true);
|
|
175
|
+
|
|
176
|
+
if (intersects.length > 0) {
|
|
177
|
+
const hit = intersects[0];
|
|
178
|
+
console.log('Hit:', hit.object.name, 'at', hit.point);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Camera Controls
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
187
|
+
|
|
188
|
+
// Orbit camera (debug / strategy games)
|
|
189
|
+
const controls = new OrbitControls(camera, renderer.domElement);
|
|
190
|
+
controls.target.set(0, 1, 0);
|
|
191
|
+
controls.enableDamping = true;
|
|
192
|
+
controls.dampingFactor = 0.05;
|
|
193
|
+
controls.update(); // call in animation loop
|
|
194
|
+
|
|
195
|
+
// First-person: use PointerLockControls
|
|
196
|
+
import { PointerLockControls } from 'three/addons/controls/PointerLockControls.js';
|
|
197
|
+
const fpControls = new PointerLockControls(camera, renderer.domElement);
|
|
198
|
+
renderer.domElement.addEventListener('click', () => fpControls.lock());
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Third-Person Camera Pattern
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
function updateCamera(player, camera) {
|
|
205
|
+
const offset = new THREE.Vector3(0, 5, 10); // behind and above
|
|
206
|
+
const targetPos = player.position.clone().add(offset);
|
|
207
|
+
camera.position.lerp(targetPos, 0.1); // smooth follow
|
|
208
|
+
camera.lookAt(player.position);
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Physics Integration
|
|
213
|
+
|
|
214
|
+
Three.js has no built-in physics. Common choices:
|
|
215
|
+
|
|
216
|
+
### Rapier (recommended — fast, WASM, Rust-based)
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npm install @dimforge/rapier3d-compat
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```javascript
|
|
223
|
+
import RAPIER from '@dimforge/rapier3d-compat';
|
|
224
|
+
|
|
225
|
+
await RAPIER.init();
|
|
226
|
+
const world = new RAPIER.World({ x: 0, y: -9.81, z: 0 });
|
|
227
|
+
|
|
228
|
+
// Ground
|
|
229
|
+
const groundBody = world.createRigidBody(RAPIER.RigidBodyDesc.fixed());
|
|
230
|
+
world.createCollider(
|
|
231
|
+
RAPIER.ColliderDesc.cuboid(50, 0.1, 50),
|
|
232
|
+
groundBody
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
// Dynamic box
|
|
236
|
+
const boxBody = world.createRigidBody(
|
|
237
|
+
RAPIER.RigidBodyDesc.dynamic().setTranslation(0, 5, 0)
|
|
238
|
+
);
|
|
239
|
+
world.createCollider(RAPIER.ColliderDesc.cuboid(0.5, 0.5, 0.5), boxBody);
|
|
240
|
+
|
|
241
|
+
// In update loop:
|
|
242
|
+
world.step();
|
|
243
|
+
const pos = boxBody.translation();
|
|
244
|
+
cube.position.set(pos.x, pos.y, pos.z);
|
|
245
|
+
const rot = boxBody.rotation();
|
|
246
|
+
cube.quaternion.set(rot.x, rot.y, rot.z, rot.w);
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Cannon-es (pure JS, simpler API)
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
npm install cannon-es
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Project Structure Convention
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
src/
|
|
259
|
+
├── scenes/
|
|
260
|
+
│ ├── MenuScene.js
|
|
261
|
+
│ ├── GameScene.js
|
|
262
|
+
│ └── GameOverScene.js
|
|
263
|
+
├── objects/
|
|
264
|
+
│ ├── Player.js # Mesh + physics body + animation mixer
|
|
265
|
+
│ ├── Enemy.js
|
|
266
|
+
│ └── Terrain.js
|
|
267
|
+
├── systems/
|
|
268
|
+
│ ├── InputManager.js # Keyboard + pointer state
|
|
269
|
+
│ ├── PhysicsWorld.js # Rapier/cannon-es wrapper
|
|
270
|
+
│ ├── SceneManager.js # Scene switching
|
|
271
|
+
│ └── AudioManager.js # Spatial audio via Web Audio API
|
|
272
|
+
├── config/
|
|
273
|
+
│ └── constants.js # Tuning parameters
|
|
274
|
+
├── assets/
|
|
275
|
+
│ ├── models/ # .glb files
|
|
276
|
+
│ ├── textures/
|
|
277
|
+
│ └── audio/
|
|
278
|
+
└── main.js # Renderer, scene, loop setup
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Tuning Parameters Pattern
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
export const PLAYER = {
|
|
285
|
+
MOVE_SPEED: 5,
|
|
286
|
+
SPRINT_MULTIPLIER: 1.8,
|
|
287
|
+
JUMP_FORCE: 8,
|
|
288
|
+
MASS: 70,
|
|
289
|
+
CAMERA_OFFSET: { x: 0, y: 5, z: 10 },
|
|
290
|
+
CAMERA_LERP: 0.1,
|
|
291
|
+
};
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Performance Notes
|
|
295
|
+
|
|
296
|
+
- Use `InstancedMesh` for repeated geometry (trees, bullets, particles) — massive perf gain
|
|
297
|
+
- LOD (Level of Detail): `THREE.LOD` swaps geometry based on camera distance
|
|
298
|
+
- Frustum culling is on by default — objects outside camera view skip rendering
|
|
299
|
+
- Texture compression: use KTX2 + Basis Universal for GPU-compressed textures
|
|
300
|
+
- Shadow map resolution: 1024 is fine for most cases, 2048 for hero shadows
|
|
301
|
+
- Object pooling: reuse meshes instead of creating/disposing
|
|
302
|
+
- `renderer.info` shows draw calls, triangles, textures in memory
|
|
303
|
+
- Use `dispose()` on geometries, materials, and textures when removing objects
|
|
304
|
+
- WebGPU renderer (`THREE.WebGPURenderer`) available for modern browsers — same API, better performance
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Game Design Document
|
|
2
|
+
|
|
3
|
+
## Concept
|
|
4
|
+
|
|
5
|
+
**Title:** [Working title]
|
|
6
|
+
**Genre:** [e.g., Platformer, Roguelike, Puzzle, Tower Defense]
|
|
7
|
+
**Platform:** [e.g., Web (HTML5), Desktop, Mobile]
|
|
8
|
+
**Target audience:** [e.g., Casual players, Speedrunners, Strategy fans]
|
|
9
|
+
**Pitch:** [One paragraph: what is this game and why is it fun?]
|
|
10
|
+
|
|
11
|
+
## Core Mechanic
|
|
12
|
+
|
|
13
|
+
[The one thing the player does most. Describe the full loop: input → action → feedback → consequence.]
|
|
14
|
+
|
|
15
|
+
## Game Loop
|
|
16
|
+
|
|
17
|
+
### Moment-to-moment (5 seconds)
|
|
18
|
+
[What does the player do every few seconds?]
|
|
19
|
+
|
|
20
|
+
### Session loop (15 minutes)
|
|
21
|
+
[What does a single play session look like? How does it start, flow, and end?]
|
|
22
|
+
|
|
23
|
+
### Meta loop (multi-session)
|
|
24
|
+
[What brings the player back? Progression, unlocks, story, scores?]
|
|
25
|
+
|
|
26
|
+
## Mechanics
|
|
27
|
+
|
|
28
|
+
| Mechanic | Description | Introduced | Interacts with |
|
|
29
|
+
| :------- | :---------- | :--------- | :------------- |
|
|
30
|
+
| | | | |
|
|
31
|
+
|
|
32
|
+
## Progression
|
|
33
|
+
|
|
34
|
+
[How does difficulty increase? What gates progress? Skill vs content gates. Unlock schedule.]
|
|
35
|
+
|
|
36
|
+
## Win / Lose
|
|
37
|
+
|
|
38
|
+
[How does a session end? How does the overall game end? Fail states and recovery.]
|
|
39
|
+
|
|
40
|
+
## Controls
|
|
41
|
+
|
|
42
|
+
| Action | Keyboard | Gamepad | Touch |
|
|
43
|
+
| :----- | :------- | :------ | :---- |
|
|
44
|
+
| | | | |
|
|
45
|
+
|
|
46
|
+
## Art Direction
|
|
47
|
+
|
|
48
|
+
**Style:** [e.g., Pixel art 16x16, Low-poly, Hand-drawn]
|
|
49
|
+
**Color language:** [What colors mean in gameplay — player, enemy, pickup, hazard, neutral]
|
|
50
|
+
**References:** [Games or art that capture the target aesthetic]
|
|
51
|
+
|
|
52
|
+
## Audio Direction
|
|
53
|
+
|
|
54
|
+
**Music:** [Style, mood, adaptive triggers]
|
|
55
|
+
**SFX:** [Key sounds: player actions, feedback, UI]
|
|
56
|
+
|
|
57
|
+
## Tuning Parameters
|
|
58
|
+
|
|
59
|
+
### Player
|
|
60
|
+
| Parameter | Default | Range | Affects |
|
|
61
|
+
| :-------- | :------ | :---- | :------ |
|
|
62
|
+
| | | | |
|
|
63
|
+
|
|
64
|
+
### Enemies
|
|
65
|
+
| Parameter | Default | Range | Affects |
|
|
66
|
+
| :-------- | :------ | :---- | :------ |
|
|
67
|
+
| | | | |
|
|
68
|
+
|
|
69
|
+
### Economy
|
|
70
|
+
| Parameter | Default | Range | Affects |
|
|
71
|
+
| :-------- | :------ | :---- | :------ |
|
|
72
|
+
| | | | |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "game-design",
|
|
3
|
+
"description": "Creates the game design document defining core mechanics, game loop, and player experience. Foundation for any game project.",
|
|
4
|
+
"capabilities": [
|
|
5
|
+
{
|
|
6
|
+
"skill": "game-design",
|
|
7
|
+
"owners": [
|
|
8
|
+
"game-designer",
|
|
9
|
+
"engineer",
|
|
10
|
+
"ceo"
|
|
11
|
+
],
|
|
12
|
+
"fallbackSkill": "game-design.fallback"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"issues": [
|
|
16
|
+
{
|
|
17
|
+
"title": "Create Game Design Document",
|
|
18
|
+
"assignTo": "capability:game-design",
|
|
19
|
+
"description": "Define the game's core design: genre, core mechanic, game loop, progression system, win/lose conditions, control scheme, and target audience. Document everything in docs/GDD.md. This is the single source of truth for what the game is."
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Skill: Game Design
|
|
2
|
+
|
|
3
|
+
You own the Game Design Document (GDD) and the ongoing design of the game's mechanics, systems, and player experience.
|
|
4
|
+
|
|
5
|
+
## Game Design Document
|
|
6
|
+
|
|
7
|
+
Create and maintain `docs/GDD.md` as the single source of truth. It must cover:
|
|
8
|
+
|
|
9
|
+
1. **Concept** — One-paragraph pitch. Genre, theme, target platform, target audience.
|
|
10
|
+
2. **Core mechanic** — The one thing the player does most. Define it precisely: input → action → feedback → consequence.
|
|
11
|
+
3. **Game loop** — Three layers:
|
|
12
|
+
- **Moment-to-moment** — What happens every few seconds (jump, shoot, match, place)
|
|
13
|
+
- **Session loop** — What a single play session looks like (level, round, run, match)
|
|
14
|
+
- **Meta loop** — What keeps players coming back (progression, unlocks, story, leaderboards)
|
|
15
|
+
4. **Progression** — How difficulty and complexity increase. What gates progress. What the player earns.
|
|
16
|
+
5. **Win/lose conditions** — How does a session end? How does the overall game end? Is there permadeath, lives, continues?
|
|
17
|
+
6. **Controls** — Input scheme for each platform. Keep it simple — if it needs a tutorial, simplify.
|
|
18
|
+
7. **Art direction** — Visual style (pixel art, low-poly, hand-drawn, etc.), color palette guidance, reference games/art.
|
|
19
|
+
8. **Audio direction** — Music style, SFX approach, adaptive audio (if any).
|
|
20
|
+
9. **Tuning parameters** — List every value that affects balance as a named parameter with default:
|
|
21
|
+
- Player speed, jump height, health, damage, cooldowns
|
|
22
|
+
- Enemy stats, spawn rates, AI behavior thresholds
|
|
23
|
+
- Economy values: costs, rewards, drop rates
|
|
24
|
+
|
|
25
|
+
## Ongoing Design Work
|
|
26
|
+
|
|
27
|
+
On each heartbeat when `docs/GDD.md` exists:
|
|
28
|
+
|
|
29
|
+
1. Review recent playtesting feedback (if `docs/PLAYTEST-RESULTS.md` exists).
|
|
30
|
+
2. Identify mechanics that aren't working — not fun, confusing, or broken.
|
|
31
|
+
3. Propose design changes with clear rationale: what's wrong, what to try, expected impact.
|
|
32
|
+
4. Update tuning parameters based on playtest data.
|
|
33
|
+
5. Create issues for new mechanics, balancing passes, or design experiments.
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
- The GDD is a living document. Update it as the design evolves — don't let it get stale.
|
|
38
|
+
- Every mechanic must pass the "why is this fun?" test. If you can't answer, cut it.
|
|
39
|
+
- Design for the minimum viable game first. What's the smallest version that's fun?
|
|
40
|
+
- Tuning values must be parameterized, never hardcoded. Document them in the GDD with ranges.
|
|
41
|
+
- When in doubt, prototype and playtest. Don't design in a vacuum.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Module: github-repo
|
|
2
|
+
|
|
3
|
+
Enables the Engineer to work in a GitHub repository.
|
|
4
|
+
|
|
5
|
+
## What it adds
|
|
6
|
+
|
|
7
|
+
- **Shared docs**: `docs/git-workflow.md` — commit conventions, branch rules
|
|
8
|
+
- **Engineer skill**: Git workflow instructions for working in a repo
|
|
9
|
+
|
|
10
|
+
## Variants
|
|
11
|
+
|
|
12
|
+
- **direct-to-main** (default): Engineer commits directly on main. No branches, no PRs. Fast iteration for solo engineer setups.
|
|
13
|
+
- When combined with `pr-review` module: switches to feature-branch workflow automatically.
|
|
14
|
+
|
|
15
|
+
## Best for
|
|
16
|
+
|
|
17
|
+
- Solo engineer shipping quickly
|
|
18
|
+
- Prototypes and MVPs
|
|
19
|
+
- Projects where speed > process
|
|
20
|
+
|
|
21
|
+
## Example
|
|
22
|
+
|
|
23
|
+
A company building a web app with one engineer. The engineer picks up issues, implements them, commits to main, and marks the issue done. CI runs on push.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Skill: Git Workflow
|
|
2
|
+
|
|
3
|
+
You work in a GitHub repository. Follow the conventions in `docs/git-workflow.md` in the project root.
|
|
4
|
+
|
|
5
|
+
## Direct-to-Main Flow
|
|
6
|
+
|
|
7
|
+
1. Pull latest: `git pull origin main`
|
|
8
|
+
2. Make your changes
|
|
9
|
+
3. Run available checks (lint, typecheck, tests)
|
|
10
|
+
4. Commit using Conventional Commits: `<type>: <description>`
|
|
11
|
+
5. Push to main: `git push origin main`
|
|
12
|
+
6. If CI fails, fix immediately
|
|
13
|
+
|
|
14
|
+
## Rules
|
|
15
|
+
|
|
16
|
+
- Always pull before starting work to avoid conflicts.
|
|
17
|
+
- Keep commits focused — one concern per commit.
|
|
18
|
+
- Never force push to main.
|
|
19
|
+
- If you encounter merge conflicts, resolve them carefully. When in doubt, escalate to the CEO.
|
|
20
|
+
- Reference the issue ID in the commit body (e.g., `Closes YES-5`).
|
|
21
|
+
- Never mark an issue as `done` unless at least one new commit was created for that issue's work and pushed.
|
|
22
|
+
- Before marking `done`, verify there is no uncommitted work (`git status --short` should be clean).
|
|
23
|
+
- If no repository change is required, do not mark `done` silently: leave an issue comment explaining why no code change was needed and escalate to the CEO for decision.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Git Workflow
|
|
2
|
+
|
|
3
|
+
## Commit Conventions
|
|
4
|
+
|
|
5
|
+
Use Conventional Commits format for all commit messages:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
<type>: <short description>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Types: `feat`, `fix`, `docs`, `chore`, `refactor`, `test`, `perf`
|
|
12
|
+
|
|
13
|
+
Examples:
|
|
14
|
+
- `feat: add user authentication endpoint`
|
|
15
|
+
- `fix: resolve null pointer in game loop`
|
|
16
|
+
- `docs: update README with setup instructions`
|
|
17
|
+
|
|
18
|
+
Rules:
|
|
19
|
+
- Lowercase after colon
|
|
20
|
+
- No period at end
|
|
21
|
+
- Under 72 characters
|
|
22
|
+
- Reference issue ID in commit body when applicable
|
|
23
|
+
|
|
24
|
+
## Direct-to-Main Workflow
|
|
25
|
+
|
|
26
|
+
1. Pull latest from main
|
|
27
|
+
2. Make changes
|
|
28
|
+
3. Run tests/linting locally if available
|
|
29
|
+
4. Commit with conventional commit message
|
|
30
|
+
5. Push to main
|
|
31
|
+
6. Verify CI passes (if configured)
|
|
32
|
+
|
|
33
|
+
## What Requires a Commit
|
|
34
|
+
|
|
35
|
+
- Code logic changes
|
|
36
|
+
- Configuration changes
|
|
37
|
+
- Feature additions
|
|
38
|
+
- Bug fixes
|
|
39
|
+
- Documentation updates
|
|
40
|
+
- Infrastructure changes
|
|
41
|
+
|
|
42
|
+
## Issue Completion Guardrails
|
|
43
|
+
|
|
44
|
+
- Never mark an issue as `done` unless at least one new commit exists for that issue's work and has been pushed.
|
|
45
|
+
- Before marking `done`, ensure the working tree is clean (`git status --short` shows no pending changes).
|
|
46
|
+
- If no repository change is required, do not silently close as `done`: add an issue comment explaining why no code change was needed and escalate to the CEO for explicit decision.
|
|
47
|
+
|
|
48
|
+
## CI
|
|
49
|
+
|
|
50
|
+
If the project has CI configured (e.g., GitHub Actions), always verify your push passes CI. If CI fails, fix it immediately — a broken main blocks everyone.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "github-repo",
|
|
3
|
+
"description": "Connects the team to a GitHub repository. Required by most engineering workflow modules.",
|
|
4
|
+
"capabilities": [],
|
|
5
|
+
"issues": [
|
|
6
|
+
{
|
|
7
|
+
"title": "Initialize GitHub repository",
|
|
8
|
+
"assignTo": "engineer",
|
|
9
|
+
"description": "Create the GitHub repository, initialize with README, push initial commit to main, and set up branch protection if using PR workflow."
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Skill: Hiring Review (Fallback)
|
|
2
|
+
|
|
3
|
+
The Product Owner primarily manages team composition analysis. You are the fallback — step in only if the PO is absent or hasn't addressed critical team gaps.
|
|
4
|
+
|
|
5
|
+
## Hiring Review (Fallback)
|
|
6
|
+
|
|
7
|
+
1. Query current agents: `GET /api/companies/{companyId}/agents`
|
|
8
|
+
2. If a critical capability gap is blocking progress and the PO hasn't acted:
|
|
9
|
+
- Create a board approval request for the most urgent hire
|
|
10
|
+
- Keep it to one proposal at a time
|
|
11
|
+
- Tag the PO to take over broader team planning
|
|
12
|
+
|
|
13
|
+
## Rules
|
|
14
|
+
|
|
15
|
+
- This is a safety net, not your primary job. Let the PO own it.
|
|
16
|
+
- Only propose hires when progress is visibly blocked by missing expertise.
|
|
17
|
+
- One hire at a time. Don't over-expand.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hiring-review",
|
|
3
|
+
"description": "Adds a review step before new agents are hired. Gives the board visibility into team composition changes.",
|
|
4
|
+
"capabilities": [
|
|
5
|
+
{
|
|
6
|
+
"skill": "hiring-review",
|
|
7
|
+
"owners": [
|
|
8
|
+
"product-owner",
|
|
9
|
+
"ceo"
|
|
10
|
+
],
|
|
11
|
+
"fallbackSkill": "hiring-review.fallback"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"issues": [
|
|
15
|
+
{
|
|
16
|
+
"title": "Evaluate team composition and propose new hires",
|
|
17
|
+
"assignTo": "capability:hiring-review",
|
|
18
|
+
"description": "Review the current team against the company goal and project requirements. Identify missing expertise or capacity gaps. For each proposed hire, create a board approval request with the role, justification, and suggested adapter configuration."
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Skill: Hiring Review
|
|
2
|
+
|
|
3
|
+
You own team composition analysis. Evaluate whether the current team can deliver on the company goal, and propose hires when gaps exist.
|
|
4
|
+
|
|
5
|
+
## Hiring Review Process
|
|
6
|
+
|
|
7
|
+
1. Query current agents: `GET /api/companies/{companyId}/agents`
|
|
8
|
+
2. Review the company goal and project scope
|
|
9
|
+
3. For each identified gap:
|
|
10
|
+
- Define the role (use Paperclip role enum: engineer, pm, qa, designer, researcher, devops, general)
|
|
11
|
+
- Write a justification: what capability is missing and why it matters
|
|
12
|
+
- Suggest adapter configuration (model, effort level)
|
|
13
|
+
- Create a board approval request via `POST /api/companies/{companyId}/approvals` with:
|
|
14
|
+
- `type: "hire"`
|
|
15
|
+
- `title`: role name and purpose
|
|
16
|
+
- `description`: justification and config suggestion
|
|
17
|
+
4. Document the team assessment in your daily notes
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- Don't propose hires for capabilities already covered by existing roles.
|
|
22
|
+
- Consider whether an existing agent could take on additional responsibilities before hiring.
|
|
23
|
+
- Prioritize roles that unblock the most work.
|
|
24
|
+
- Each hire proposal must go through board approval — never create agents directly.
|