Synthèse automatique
Charge un fichier OpenSCAD avec toutes ses dépendances en résolvant les chemins des bibliothèques et en extrayant l'API (modules, fonctions, paramètres).
Points forts
- Résout automatiquement les dépendances récursives (use/include) jusqu'à 5 niveaux de profondeur.
- Détecte les dépendances circulaires et les fichiers manquants.
- Extrait la surface API (modules, fonctions, paramètres de personnalisation) pour une meilleure compréhension du code.
Limites
- Ne gère pas les bibliothèques installées de manière non standard (hors des chemins par défaut).
- La profondeur de résolution est limitée à 5 niveaux récursifs (configurable).
- Ne compile ni n'exécute le code OpenSCAD, seulement une analyse statique.
Utilisez cette compétence avant de modifier un fichier OpenSCAD, de déboguer une erreur de module indéfini, ou de planifier un refactoring.
Ne pas utiliser si vous avez uniquement besoin de générer le rendu 3D final (préférez l'exécution réelle d'OpenSCAD).
Analyse de sécurité
SûrThe skill only reads and parses OpenSCAD files using grep and file reading, with no destructive commands, network calls, or data exfiltration.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
/scad-load workshop/workbenches/mini-workbench.scadshow dependencies for box.scadload openscad context for lib/assembly-framework.scadname: scad-load description: | Loads OpenSCAD files with full dependency context by parsing use/include statements, resolving library paths, and extracting API surface (modules, functions, parameters). Use when working with OpenSCAD files, debugging rendering issues, understanding module dependencies, or before refactoring. Triggers on "load scad", "scad-load [file]", "load openscad context", "show scad dependencies", or when investigating .scad files. Works with .scad files, BOSL2, woodworkers-lib, NopSCADlib, and project-specific libraries.
scad-load
Quick Start
Load an OpenSCAD file with all its dependencies:
# Load main file with dependency tree
/scad-load workshop/workbenches/mini-workbench.scad
# Output includes:
# - Dependency tree visualization
# - Available modules and functions
# - Customizer parameters
# - Configuration variables
# - File locations (project lib/, system libraries/)
Table of Contents
- When to Use This Skill
- What This Skill Does
- Instructions 3.1. Load OpenSCAD File 3.2. Parse Dependencies 3.3. Extract API Surface 3.4. Present Context Summary
- Supporting Files
- Expected Outcomes
- Requirements
- Red Flags to Avoid
When to Use This Skill
Explicit Triggers
- User says: "load scad [file]"
- User says: "/scad-load [file]"
- User says: "load openscad context for [file]"
- User says: "show dependencies for [file]"
Implicit Triggers
- Before modifying OpenSCAD files (understand context first)
- Debugging rendering errors (check dependency chain)
- Understanding module availability (what can be called)
- Investigating missing function errors
- Planning refactoring work
Debugging Scenarios
- "Module X is undefined" errors → check dependency tree
- "Variable Y is undef" → verify include vs use
- Circular dependency suspected → detect loops
- Library path issues → resolve library locations
What This Skill Does
This skill provides systematic OpenSCAD file context loading:
- Read target file - Load specified .scad file
- Parse dependencies - Extract use/include statements recursively
- Resolve paths - Find files in project lib/, system libraries/, relative paths
- Extract API - Identify modules, functions, customizer parameters, variables
- Detect issues - Circular dependencies, missing files, path resolution failures
- Present summary - Structured overview with dependency tree and API surface
Instructions
3.1. Load OpenSCAD File
Read the specified file:
# User provides path (absolute or relative to project root)
file_path = "workshop/workbenches/mini-workbench.scad"
# Read file
Read file_path
Extract metadata:
- File path (absolute)
- File size
- Module name (from filename)
- First-level use/include statements
3.2. Parse Dependencies
Extract include/use statements:
Use Grep to find dependency statements:
# Find all use/include statements
grep -E '^\s*(use|include)\s*<' file_path
# Example matches:
# use <BOSL2/std.scad>
# include <../../lib/assembly-framework.scad>
# use <woodworkers-lib/std.scad>
Resolve paths:
Apply OpenSCAD path resolution rules:
-
Angle brackets
<lib/file.scad>:- Check project
lib/directory first - Check
~/Documents/OpenSCAD/libraries/(macOS) - Check
~/.local/share/OpenSCAD/libraries/(Linux)
- Check project
-
Relative paths
../../lib/file.scad:- Resolve relative to current file's directory
- Convert to absolute path
-
Library references
<BOSL2/std.scad>:- Check
~/Documents/OpenSCAD/libraries/BOSL2/std.scad(macOS) - Check
~/.local/share/OpenSCAD/libraries/BOSL2/std.scad(Linux)
- Check
Recursive loading:
For each dependency found:
- Check if already visited (circular dependency detection)
- Add to visited set
- Read dependency file
- Extract its use/include statements
- Recurse (up to max depth, default 5)
Circular dependency detection:
visited = set()
stack = []
function load_dependencies(file, depth=0, max_depth=5):
if depth > max_depth:
return "Max depth reached"
if file in stack:
return "CIRCULAR DEPENDENCY: " + " -> ".join(stack + [file])
stack.append(file)
visited.add(file)
# Parse use/include statements
# Recursively load each dependency
stack.pop()
3.3. Extract API Surface
Parse module definitions:
# Find module definitions
grep -E '^\s*module\s+\w+\s*\(' file_path
# Example matches:
# module drawer_stack(width, x_start, drawer_start=0) {
# module ww_cabinet_shell() {
# module _helper_function() { # (private, prefixed with _)
Parse function definitions:
# Find function definitions
grep -E '^\s*function\s+\w+\s*\(' file_path
# Example matches:
# function asmfw_section_internal_width(section_id) = ...
# function calc_dimensions(w, h) = [w, h, w+h];
Extract customizer parameters:
# Find customizer section comments
grep -E '/\*\s*\[.*\]\s*\*/' file_path
# Example matches:
# /* [Dimensions] */
# /* [Display Options] */
# Parameters follow section comments:
# wall_thickness = 18; // Wall panel thickness
# show_drawers = true; // Show drawer boxes
Extract configuration variables:
# Find top-level variable assignments
grep -E '^\s*\w+\s*=' file_path | head -20
# Distinguish from parameters by context (before/after customizer sections)
Categorize API:
- Public modules: No underscore prefix, documented
- Private modules: Underscore prefix (
_helper()) - Public functions: No underscore prefix
- Private functions: Underscore prefix
- Customizer params: In
/* [Section] */blocks - Config variables: Top-level assignments
3.4. Present Context Summary
Format output:
========================================
OpenSCAD File Context: mini-workbench.scad
========================================
File: /Users/.../workshop/workbenches/mini-workbench.scad
Size: 15.2 KB
Lines: 450
Dependency Tree:
----------------
mini-workbench.scad
├── lib/assembly-framework.scad (project lib)
│ ├── lib/materials.scad (project lib)
│ └── woodworkers-lib/std.scad (system library)
│ ├── woodworkers-lib/planes.scad
│ └── woodworkers-lib/cutlist.scad
├── BOSL2/std.scad (system library)
│ ├── BOSL2/transforms.scad
│ ├── BOSL2/attachments.scad
│ └── BOSL2/shapes3d.scad
└── lib/labels.scad (project lib)
Dependencies Loaded: 11 files
Max Depth Reached: 3 levels
Available Modules (Public):
----------------------------
- mini_workbench() - Main assembly module
- drawer_stack(width, x_start, drawer_start=0) - Creates vertical drawer stack
- dividers() - Renders all vertical dividers
- cabinet_shell() - Outer cabinet box
Available Functions (Public):
------------------------------
- None (uses framework functions)
Customizer Parameters:
----------------------
/* [Display Options] */
show_cabinet = true; // Show cabinet shell
show_drawers = true; // Show drawer boxes
show_faceplates = true; // Show drawer faces
show_runners = true; // Show drawer runners
show_dividers = true; // Show vertical dividers
/* [Dimensions] */
total_width = 1650; // Assembly total width
assembly_height = 500; // Internal height
assembly_depth = 580; // Front-to-back depth
Configuration Variables:
------------------------
ASMFW_SECTION_IDS = ["A", "B", "C", "D", "E"]
ASMFW_SECTION_WIDTHS = [253, 562, 562, 153, 120]
ASMFW_TOTAL_WIDTH = 1650
ASMFW_ASSEMBLY_HEIGHT = 500
ASMFW_ASSEMBLY_DEPTH = 580
Framework Functions Available:
-------------------------------
(from lib/assembly-framework.scad)
- asmfw_section_internal_width(section_id)
- asmfw_section_x_start(section_id)
- asmfw_section_x_end(section_id)
- asmfw_drawer_box_width(section_id)
- asmfw_faceplate_width(section_id)
- asmfw_runner_x_positions(section_id)
Key Insights:
-------------
✓ Uses assembly framework for automatic positioning
✓ 5-section cabinet (A, B, C, D, E)
✓ Drawer stacks in sections B and C
✓ Side-access tray in section D
✓ Tall drawer in section A
✓ All dimensions driven by framework configuration
Next Steps:
-----------
- Modify customizer parameters to change display
- Adjust ASMFW_SECTION_WIDTHS to resize sections
- Add new modules using framework functions
- Update drawer stack configurations in sections
========================================
Supporting Files
scripts/
parse_scad.py- OpenSCAD parser for extracting modules/functions/variablesresolve_paths.py- Library path resolution utilitydependency_graph.py- Builds and visualizes dependency tree
references/
openscad-path-resolution.md- Detailed path resolution rulesapi-extraction-patterns.md- Regex patterns for parsing OpenSCAD syntaxlibrary-locations.md- Standard library installation paths by OS
examples/
example-output-simple.md- Output for simple single-file .scadexample-output-complex.md- Output for multi-dependency project fileexample-circular-dependency.md- Handling circular dependency detection
Expected Outcomes
Success Case
✅ Loaded: workshop/workbenches/mini-workbench.scad
✅ Dependencies: 11 files resolved
✅ Modules: 4 public, 2 private
✅ Functions: 0 public (uses framework)
✅ Customizer params: 9 parameters in 2 sections
✅ No circular dependencies detected
✅ All library paths resolved
Ready to work with this file.
Failure Case
❌ Failed to load: workshop/cabinets/broken.scad
Issues Found:
1. Missing dependency: lib/missing-framework.scad
- Referenced at line 5: include <lib/missing-framework.scad>
- File not found in project lib/ or system libraries/
2. Circular dependency detected:
- a.scad -> b.scad -> c.scad -> a.scad
3. Unresolved library: CustomLib/helper.scad
- Not found in ~/Documents/OpenSCAD/libraries/
- Not found in ~/.local/share/OpenSCAD/libraries/
Recommendations:
- Install missing library: CustomLib
- Fix circular dependency in a.scad/b.scad/c.scad
- Create missing file: lib/missing-framework.scad
Requirements
Tools:
- Read (load .scad files)
- Grep (extract use/include statements, parse syntax)
- Bash (check file existence, resolve paths)
Knowledge:
- OpenSCAD syntax (use vs include semantics)
- Library path resolution (angle brackets vs relative)
- Customizer format (
/* [Section] */comments) - Module/function definition patterns
Environment:
- Access to project directory
- Access to system library directories (~/Documents/OpenSCAD/libraries/)
Red Flags to Avoid
- [ ] Don't load files without checking existence - Verify file exists before attempting to read
- [ ] Don't assume library locations - Check both macOS and Linux paths
- [ ] Don't skip circular dependency detection - Always track visited files in stack
- [ ] Don't parse OpenSCAD with complex regex - Use simple patterns for module/function extraction
- [ ] Don't load entire library files - Stop at max depth to avoid loading massive libraries
- [ ] Don't ignore use vs include semantics - Include loads variables, use doesn't
- [ ] Don't miss relative path resolution - Resolve paths relative to current file's directory
- [ ] Don't overload context - Summarize library contents instead of loading full text
- [ ] Don't skip customizer sections - These are critical for understanding configurable parameters
- [ ] Don't assume underscore convention - Not all projects use
_private()naming
Notes
Path Resolution Priority:
-
Angle brackets
<file.scad>:- Project
lib/directory (highest priority) - System libraries (macOS:
~/Documents/OpenSCAD/libraries/) - System libraries (Linux:
~/.local/share/OpenSCAD/libraries/)
- Project
-
Relative paths
../lib/file.scad:- Relative to current file's directory
- Convert to absolute for consistency
Use vs Include:
use <file.scad>- Imports modules/functions ONLY (no variables, no top-level code)include <file.scad>- Imports everything (modules, functions, variables, executes top-level code)
Max Depth Rationale:
Default max depth of 5 prevents loading entire library trees (e.g., BOSL2 has 50+ files). Focus on direct dependencies and first-level library interfaces.
Performance:
For large projects with many dependencies:
- Cache resolved paths
- Skip re-parsing already visited files
- Summarize large libraries instead of extracting full API
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/openscad-context-loader-mm5t8c1y' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/openscad-context-loader-mm5t8c1y/download' --output '.skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md.part' && mv '.skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md.part' '.skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Extrait original : Requirements
Tools:
- Read (load .scad files)
- Grep (extract use/include statements, parse syntax)
- Bash (check file existence, resolve paths)
Knowledge:
- OpenSCAD syntax (use vs include semantics)
- Library path resolution (angle brackets vs relative)
- Customizer format (
/* [Section] */comments) - Module/function definition patterns
Environment:
- Access to project directory
- Access to system library directories (~/Documents/OpenSCAD/libraries/)
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md' && test -s '.skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/scad-load' && cp -R '.skill-downloads/openscad-context-loader-mm5t8c1y' '.claude/skills/scad-load'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/openscad-context-loader-mm5t8c1y'openskills read 'openscad-context-loader-mm5t8c1y'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/openscad-context-loader-mm5t8c1y/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.