@jarrodmedrano/claude-skills 1.0.2 → 1.0.4

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 (54) hide show
  1. package/.claude/skills/bevy/SKILL.md +406 -0
  2. package/.claude/skills/bevy/references/bevy_specific_tips.md +385 -0
  3. package/.claude/skills/bevy/references/common_pitfalls.md +217 -0
  4. package/.claude/skills/bevy/references/ecs_patterns.md +277 -0
  5. package/.claude/skills/bevy/references/project_structure.md +116 -0
  6. package/.claude/skills/bevy/references/ui_development.md +147 -0
  7. package/.claude/skills/domain-driven-design/SKILL.md +459 -0
  8. package/.claude/skills/domain-driven-design/references/ddd_foundations_and_patterns.md +664 -0
  9. package/.claude/skills/domain-driven-design/references/rich_hickey_principles.md +406 -0
  10. package/.claude/skills/domain-driven-design/references/visualization_examples.md +790 -0
  11. package/.claude/skills/domain-driven-design/references/wlaschin_patterns.md +639 -0
  12. package/.claude/skills/game-design-theory/SKILL.md +102 -0
  13. package/.claude/skills/game-design-theory/design-principles.md +308 -0
  14. package/.claude/skills/game-design-theory/gameplay-elements.md +213 -0
  15. package/.claude/skills/game-design-theory/player-psychology.md +175 -0
  16. package/.claude/skills/game-design-theory/playtesting.md +321 -0
  17. package/.claude/skills/game-design-theory/storytelling.md +219 -0
  18. package/.claude/skills/game-feel/SKILL.md +305 -0
  19. package/.claude/skills/game-feel/references/adsr-tuning.md +271 -0
  20. package/.claude/skills/game-feel/references/classic-profiles.md +279 -0
  21. package/.claude/skills/game-feel/references/perception-thresholds.md +160 -0
  22. package/.claude/skills/game-feel/references/polish-effects.md +246 -0
  23. package/.claude/skills/game-feel/references/simulation-recipes.md +306 -0
  24. package/.claude/skills/game-feel/references/six-metrics.md +239 -0
  25. package/.claude/skills/godot/SKILL.md +728 -0
  26. package/.claude/skills/godot/assets/templates/attribute_template.gd +109 -0
  27. package/.claude/skills/godot/assets/templates/component_template.gd +76 -0
  28. package/.claude/skills/godot/assets/templates/interaction_template.gd +108 -0
  29. package/.claude/skills/godot/assets/templates/item_resource.tres +11 -0
  30. package/.claude/skills/godot/assets/templates/spell_resource.tres +20 -0
  31. package/.claude/skills/godot/references/architecture-patterns.md +608 -0
  32. package/.claude/skills/godot/references/common-pitfalls.md +518 -0
  33. package/.claude/skills/godot/references/file-formats.md +491 -0
  34. package/.claude/skills/godot/references/godot4-physics-api.md +302 -0
  35. package/.claude/skills/godot/scripts/validate_tres.py +145 -0
  36. package/.claude/skills/godot/scripts/validate_tscn.py +170 -0
  37. package/.claude/skills/level-design/SKILL.md +249 -0
  38. package/.claude/skills/level-design/anticipatory-play.md +223 -0
  39. package/.claude/skills/level-design/hiding-linearity.md +181 -0
  40. package/.claude/skills/level-design/indie-practices.md +286 -0
  41. package/.claude/skills/level-design/open-world-planning.md +294 -0
  42. package/.claude/skills/level-design/play-personas.md +240 -0
  43. package/.claude/skills/level-design/procedural-handmade.md +271 -0
  44. package/.claude/skills/level-design/themed-environments.md +264 -0
  45. package/.claude/skills/react-three-fiber/SKILL.md +2055 -0
  46. package/.claude/skills/react-three-fiber/scripts/build-scene.ts +171 -0
  47. package/package.json +3 -1
  48. package/scripts/install.js +16 -1
  49. package/templates/github-actions/README.md +36 -0
  50. /package/.claude/{commands/design-review → agents}/design-review-agent.md +0 -0
  51. /package/.claude/{commands/code-review → agents}/pragmatic-code-review-subagent.md +0 -0
  52. /package/{.claude/commands/code-review → templates/github-actions}/claude-code-review-custom.yml +0 -0
  53. /package/{.claude/commands/code-review → templates/github-actions}/claude-code-review.yml +0 -0
  54. /package/{.claude/commands/security-review → templates/github-actions}/security.yml +0 -0
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * Three.js Scene Builder Helper
5
+ * Quickly scaffold Three.js scenes with common configurations
6
+ */
7
+
8
+ import { writeFile, mkdir } from 'fs/promises';
9
+ import { join } from 'path';
10
+
11
+ async function main() {
12
+ const args = process.argv.slice(2);
13
+
14
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
15
+ console.log(`
16
+ Three.js Scene Builder
17
+
18
+ Usage:
19
+ bun run build-scene.ts <scene-name> [options]
20
+
21
+ Options:
22
+ --basic Create basic scene (default)
23
+ --vr Create VR-ready scene
24
+ --physics Include physics setup
25
+ --lighting Advanced lighting setup
26
+ --output <dir> Output directory (default: ./src/scenes)
27
+ --help, -h Show this help message
28
+
29
+ Examples:
30
+ bun run build-scene.ts MyScene
31
+ bun run build-scene.ts GameScene --vr --physics
32
+ `);
33
+ process.exit(args.length === 0 ? 1 : 0);
34
+ }
35
+
36
+ const sceneName = args[0];
37
+ const outputDir = args[args.indexOf('--output') + 1] || './src/scenes';
38
+ const isVR = args.includes('--vr');
39
+ const hasPhysics = args.includes('--physics');
40
+ const advancedLighting = args.includes('--lighting');
41
+
42
+ try {
43
+ await mkdir(outputDir, { recursive: true });
44
+
45
+ const sceneTemplate = `import * as THREE from 'three';
46
+ ${isVR ? "import { VRButton } from 'three/examples/jsm/webxr/VRButton.js';" : ''}
47
+ ${hasPhysics ? "import * as CANNON from 'cannon-es';" : ''}
48
+
49
+ export class ${sceneName} {
50
+ scene: THREE.Scene;
51
+ camera: THREE.PerspectiveCamera;
52
+ renderer: THREE.WebGLRenderer;
53
+ ${hasPhysics ? 'world: CANNON.World;' : ''}
54
+
55
+ constructor() {
56
+ this.scene = new THREE.Scene();
57
+ this.camera = new THREE.PerspectiveCamera(
58
+ 75,
59
+ window.innerWidth / window.innerHeight,
60
+ 0.1,
61
+ 1000
62
+ );
63
+ this.renderer = new THREE.WebGLRenderer({ antialias: true });
64
+
65
+ this.init();
66
+ }
67
+
68
+ init() {
69
+ // Renderer setup
70
+ this.renderer.setSize(window.innerWidth, window.innerHeight);
71
+ this.renderer.shadowMap.enabled = true;
72
+ ${isVR ? 'this.renderer.xr.enabled = true;' : ''}
73
+ document.body.appendChild(this.renderer.domElement);
74
+
75
+ ${isVR ? "document.body.appendChild(VRButton.createButton(this.renderer));" : ''}
76
+
77
+ ${hasPhysics ? this.getPhysicsSetup() : ''}
78
+
79
+ // Lighting
80
+ ${advancedLighting ? this.getAdvancedLighting() : this.getBasicLighting()}
81
+
82
+ // Camera position
83
+ this.camera.position.set(0, 2, 5);
84
+ this.camera.lookAt(0, 0, 0);
85
+
86
+ // Window resize handler
87
+ window.addEventListener('resize', () => this.onWindowResize());
88
+ }
89
+
90
+ ${hasPhysics ? `
91
+ initPhysics() {
92
+ this.world = new CANNON.World();
93
+ this.world.gravity.set(0, -9.82, 0);
94
+ }
95
+ ` : ''}
96
+
97
+ onWindowResize() {
98
+ this.camera.aspect = window.innerWidth / window.innerHeight;
99
+ this.camera.updateProjectionMatrix();
100
+ this.renderer.setSize(window.innerWidth, window.innerHeight);
101
+ }
102
+
103
+ animate() {
104
+ ${isVR ? 'this.renderer.setAnimationLoop(() => {' : 'requestAnimationFrame(() => this.animate());'}
105
+ ${hasPhysics ? 'this.world.step(1 / 60);' : ''}
106
+ this.renderer.render(this.scene, this.camera);
107
+ ${isVR ? '});' : ''}
108
+ }
109
+
110
+ start() {
111
+ this.animate();
112
+ }
113
+ }
114
+ `;
115
+
116
+ const filepath = join(outputDir, `${sceneName}.ts`);
117
+ await writeFile(filepath, sceneTemplate);
118
+
119
+ console.log(`✓ Created scene: ${filepath}`);
120
+ console.log(`
121
+ Next steps:
122
+ 1. Import and instantiate: import { ${sceneName} } from './scenes/${sceneName}';
123
+ 2. Create instance: const scene = new ${sceneName}();
124
+ 3. Start rendering: scene.start();
125
+ `);
126
+ } catch (error) {
127
+ console.error('Failed to create scene:', error);
128
+ process.exit(1);
129
+ }
130
+
131
+ function getBasicLighting(): string {
132
+ return `const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
133
+ this.scene.add(ambientLight);
134
+
135
+ const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
136
+ directionalLight.position.set(5, 10, 5);
137
+ directionalLight.castShadow = true;
138
+ this.scene.add(directionalLight);`;
139
+ }
140
+
141
+ function getAdvancedLighting(): string {
142
+ return `// Ambient light
143
+ const ambientLight = new THREE.AmbientLight(0x404040, 0.3);
144
+ this.scene.add(ambientLight);
145
+
146
+ // Main directional light (sun)
147
+ const sunLight = new THREE.DirectionalLight(0xffffff, 1.0);
148
+ sunLight.position.set(10, 20, 10);
149
+ sunLight.castShadow = true;
150
+ sunLight.shadow.mapSize.width = 2048;
151
+ sunLight.shadow.mapSize.height = 2048;
152
+ sunLight.shadow.camera.near = 0.5;
153
+ sunLight.shadow.camera.far = 50;
154
+ this.scene.add(sunLight);
155
+
156
+ // Fill light
157
+ const fillLight = new THREE.DirectionalLight(0x8888ff, 0.3);
158
+ fillLight.position.set(-5, 5, -5);
159
+ this.scene.add(fillLight);
160
+
161
+ // Hemisphere light for sky/ground gradient
162
+ const hemisphereLight = new THREE.HemisphereLight(0x8888ff, 0x888888, 0.5);
163
+ this.scene.add(hemisphereLight);`;
164
+ }
165
+
166
+ function getPhysicsSetup(): string {
167
+ return `this.initPhysics();`;
168
+ }
169
+ }
170
+
171
+ main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jarrodmedrano/claude-skills",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Reusable Claude Code skills for web development projects",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -23,6 +23,8 @@
23
23
  "files": [
24
24
  ".claude/skills/**/*",
25
25
  ".claude/commands/**/*",
26
+ ".claude/agents/**/*",
27
+ "templates/**/*",
26
28
  "scripts/**/*",
27
29
  "bin/**/*",
28
30
  "README.md"
@@ -38,8 +38,10 @@ function copySkills() {
38
38
 
39
39
  const skillsTargetDir = path.join(projectRoot, '.claude', 'skills');
40
40
  const commandsTargetDir = path.join(projectRoot, '.claude', 'commands');
41
+ const agentsTargetDir = path.join(projectRoot, '.claude', 'agents');
41
42
  const skillsSourceDir = path.join(packageRoot, '.claude', 'skills');
42
43
  const commandsSourceDir = path.join(packageRoot, '.claude', 'commands');
44
+ const agentsSourceDir = path.join(packageRoot, '.claude', 'agents');
43
45
 
44
46
  // Create .claude directories if they don't exist
45
47
  if (!fs.existsSync(skillsTargetDir)) {
@@ -52,7 +54,12 @@ function copySkills() {
52
54
  console.log('✓ Created .claude/commands directory');
53
55
  }
54
56
 
55
- // Copy skills and commands
57
+ if (!fs.existsSync(agentsTargetDir)) {
58
+ fs.mkdirSync(agentsTargetDir, { recursive: true });
59
+ console.log('✓ Created .claude/agents directory');
60
+ }
61
+
62
+ // Copy skills, commands, and agents
56
63
  try {
57
64
  if (fs.existsSync(skillsSourceDir)) {
58
65
  copyRecursive(skillsSourceDir, skillsTargetDir);
@@ -64,6 +71,11 @@ function copySkills() {
64
71
  console.log(`✓ Commands copied to ${commandsTargetDir}`);
65
72
  }
66
73
 
74
+ if (fs.existsSync(agentsSourceDir)) {
75
+ copyRecursive(agentsSourceDir, agentsTargetDir);
76
+ console.log(`✓ Agents copied to ${agentsTargetDir}`);
77
+ }
78
+
67
79
  console.log('\n✓ Claude Code skills installed successfully!');
68
80
  console.log('\nAvailable skills:');
69
81
  console.log(' /new-website - Create frontend projects');
@@ -74,6 +86,9 @@ function copySkills() {
74
86
  console.log(' /code-review - Code review workflows');
75
87
  console.log(' /design-review - Design review workflows');
76
88
  console.log(' /security-review - Security review workflows');
89
+ console.log('\nAvailable agents:');
90
+ console.log(' design-review - Design review subagent');
91
+ console.log(' pragmatic-code-review - Code review subagent');
77
92
  console.log('\nTo update later, run: npm run update-skills');
78
93
  } catch (error) {
79
94
  console.error('Error copying skills:', error.message);
@@ -0,0 +1,36 @@
1
+ # GitHub Actions Templates
2
+
3
+ This directory contains GitHub Actions workflow templates for automating Claude Code reviews in your CI/CD pipeline.
4
+
5
+ ## Available Templates
6
+
7
+ ### Code Review Workflows
8
+
9
+ - **`claude-code-review.yml`** - Basic Claude Code review workflow
10
+ - **`claude-code-review-custom.yml`** - Customizable Claude Code review workflow with advanced options
11
+
12
+ ### Security Review Workflow
13
+
14
+ - **`security.yml`** - Automated security review workflow
15
+
16
+ ## Usage
17
+
18
+ To use these templates in your project:
19
+
20
+ 1. Copy the desired `.yml` file to your repository's `.github/workflows/` directory:
21
+ ```bash
22
+ cp templates/github-actions/claude-code-review.yml .github/workflows/
23
+ ```
24
+
25
+ 2. Set up required secrets in your GitHub repository settings:
26
+ - `CLAUDE_CODE_OAUTH_TOKEN` or `CLAUDE_API_KEY`
27
+
28
+ 3. Customize the workflow as needed for your project
29
+
30
+ 4. The workflow will automatically run on pull requests
31
+
32
+ ## Documentation
33
+
34
+ For more information about setting up Claude Code in GitHub Actions, see:
35
+ - [Code Review Documentation](../../.claude/commands/code-review/README.md)
36
+ - [Security Review Documentation](../../.claude/commands/security-review/README.md)