max-model: idea → pieza verificada y lista para imprimir
La petición: lo que sea que el usuario haya escrito después de /max-model (o la cosa que describió).
FORGE = el directorio de este skill (ej. ~/.claude/skills/max-model); todas las rutas a continuación son relativas a él. Un solo CLI: $FORGE/bin/forge <cmd> (lista al final).
Entornos (ver README): Entorno virtual CAD $FORGE/.venv-cad (build123d, trimesh, manifold3d, usd-core, opencv, sdf; se puede sobrescribir con FORGE_CAD_PY), entorno virtual AI opcional $FORGE/.venv-ai (torch, diffusers, CLIP; se puede sobrescribir con FORGE_AI_PY) para text3d y looks.
Impresora: knowledge/printer.json (cama, boquilla, capa; ejemplos en knowledge/printers/). El laminado corre por cuenta del usuario: forge termina en un STL verificado más un veredicto de preflight (soportes activados/desactivados). Un hook opcional slicer_cmd permite que forge reporte el tiempo de impresión y los gramos.
Lo que mostró el benchmark del 2026-10-17 (knowledge/benchmark-2026-10-17.md): las piezas exactas de una especificación completa alcanzan un 0.96 de IoU de vóxeles con el STEP real para piezas totalmente especificadas, pero solo 0.41-0.82 cuando se adivinaron los detalles; los mecanismos print-in-place pasaron las pruebas cinemáticas en la primera construcción sin huecos fusionados (aún no validados en impresiones reales de la impresora del autor); el ASPECTO de cosas icónicas/orgánicas es el punto débil cuando se modelan a mano (un casco modelado a mano resultó ser un huevo). Los pipelines de text3d / looks / remix existen para cubrir ese punto débil con herramientas en lugar de fuerza de voluntad: pase de referencia + Puntuación de Aspecto, texto local a 3D para figuras orgánicas, flexify sobre esculturas, buscar y remezclar para accesorios icónicos.
Reglas que nunca se rompen
- Primero los números, después las imágenes. Ninguna afirmación sobre geometría a menos que provenga de la salida de una herramienta (verify/selftest/preflight/grade JSON) o de una representación que hayas leído en esta iteración. Nunca describas un STL de memoria.
- Especificación antes que modelo para piezas personalizadas:
spec.md+spec.jsoncon criterios de éxito numéricos primero. - Un cambio por iteración, conserva cada
iter_NN/, máximo 6 por fase, luego replanifica. - Todo lo que se mueve se entrega con una autoprueba que pasa (barrido libre + control de atascamiento + espacios medidos). Sin excepciones; esa es la razón por la que los mecanismos son el punto fuerte de este skill.
- Cada impresión recibe
forge preflightantes del laminado, y su veredicto decide los soportes. NO-GO = arreglar geometría/orientación primero. Las piezas print-in-place / de varios cuerpos también recibenforge export <stl>y entregas el 3MF, no el STL: los soportes automáticos del laminador llenarían los huecos y soldarían las piezas (la primera impresión de CYCLO-11 murió así), y un STL no puede llevar la instrucción "soportes desactivados". - Entorno: Blender, OpenSCAD y torch con GPU (text3d, looks) pueden fallar dentro de algunos entornos aislados del agente que ocultan la GPU (Blender sale con 139). Si un paso da un fallo de segmentación, ejecútalo fuera del entorno aislado. Python puro (build123d, manifold3d, trimesh) funciona en cualquier lugar.
- Reporta los hitos brevemente (ruta elegida, primera representación, listo para imprimir con tiempo/gramos/veredicto, bloqueo): una línea cada uno, di lo que el usuario debe decidir. Envía imágenes clave (sheet.png, poster.png) y archivos AR cuando el canal lo permita.
- Nunca inicies una impresión ni gastes dinero sin la aprobación explícita del usuario. Modelos descargados: respeta la licencia (CC BY-NC = no vender).
Inicio de sesión (30 segundos)
ls $FORGE/knowledge/; cat $FORGE/knowledge/{fit-log.md,lessons.md,printer.json}; $FORGE/bin/forge fit show
$FORGE/bin/forge doctor # línea roja -> arréglala o repórtala antes de modelar
Si forge fit show dice que pip_gap sigue siendo [R] (valor de investigación por defecto, no medido en esta impresora): menciona una vez que la Tarjeta de Ajuste (forge mech build fitcard, aproximadamente una hora, ~16 g) calibra cada pieza móvil, y ofrece imprimirla.
FASE 0 — RUTA (elige el pipeline, no el martillo)
Gana la primera coincidencia. Dile al usuario la ruta en una línea.
| Quiere | Ruta | Herramientas |
|---|---|---|
| cambiar una DESCARGA: texto/nombre, anilla para llavero, imanes, paredes más gruesas, escala para un tamaño de cabeza, fondo plano, espejo | REMIX (descargar, luego mejorar) | `forge remix text |
| una cosa práctica con las medidas del usuario: caja (tapa deslizante/presión), llavero con nombre, letrero, soporte para teléfono, soporte para un objeto, litofanía | MAKE (generadores; holguras de fit.json; las cajas se verifican cinemáticamente) | `forge make box |
| muchas copias / un proyecto completo en una impresión (vender) | PLATE (llena la cama, costo por pieza) | `forge plate <stl...> --fill |
| una cosa famosa existente (un casco de película, accesorio, juguete popular, funda para un dispositivo popular) | FIND (busca en un sitio de modelos como Printables/Thingiverse tú mismo), luego REMIX (escalar, dividir, imanes, ajustar) | búsqueda web, forge split, forge preflight --orient |
| un casco ORIGINAL ("un casco que nadie más tiene") | TEXT3D --helmet: recorte de cuello, tamaño para una cabeza que especifiques (por defecto 160x190 + acolchado), carcasa de 3 mm, placa frontal + 4 soportes para imanes, cortes en costura hacia abajo | forge text3d "<estilo> helmet" --helmet |
| algo que se mueva (fidget, bisagra, engranajes, giroscopio, balisong, pasante, clicker) | MECHKIT si hay un módulo que encaje, si no, modélalo con la API de Mecánica | forge mech list/build, lib/mechkit/core.py |
| un animal flexi | diseña un cuerpo SDF (lib/sculpt.py) o toma una escultura (un sitio de modelos/text3d) -> FLEXIFY | forge flexify, forge sculpt |
| una figura / mascota / criatura / estatua | TEXT3D (local, gratis, ~3.5 min) o buscar; ofrece ambas | forge text3d "<idea>" [--base NOMBRE] |
| una pieza funcional personalizada (soporte, soporte, adaptador, funda para el objeto del usuario) | MODEL (fases 1-6 a continuación) | carril build123d, forge run, forge parts-find |
| organizar cajones / un inserto para un objeto | GRIDFINITY (+ PHOTOFIT para un bolsillo exacto) | forge gridfinity, forge photofit |
| demasiado grande para la cama | SPLIT con pasadores + etiquetas de costura | forge split |
| "¿esto imprimirá? / ¿por qué falló?" | PREFLIGHT (+ mapa de calor) | forge preflight, forge heat |
| mostrarlo / venderlo | SHOWCASE + AR | forge showcase, forge ar |
Notas honestas de calidad para el enrutamiento (medidas por el autor, 2026-10-17): las figuras de text3d se leen claramente (ajolote, dragón, fantasma mascota, tiburón) pero los detalles finos son suaves a 60 mm y necesitan soportes; el flexi-from-text mediante relieve es tosco (las patas finas se fusionan) -> prefiere un cuerpo diseñado con SDF o una escultura humana para flexis; las formas orgánicas modeladas a mano siguen pareciendo borrones -> nunca modeles a mano un casco/personaje, usa FIND+REMIX o TEXT3D.
FASE 1 — BRIEF (piezas personalizadas): especificación con números
- Cualquier cosa que el usuario ya te haya dicho sobre el objeto exacto (modelo del dispositivo, medidas, fotos). 1b. PASE DE REFERENCIA para cualquier cosa con nombre: busca de 6 a 9 imágenes de referencia / diseños mejor valorados de la cosa real, MÍRALOS; escribe "## Forma" en spec.md (proporciones, 2-3 características distintivas, qué variante). Saltarse esto hizo que el balisong del banco fuera un palo plano y que el fidget en espiral fuera el juguete equivocado.
- Dimensiones: búscalas, nunca las recuerdes (banco: polea recordada 0.41 IoU).
forge parts-find "<pieza>" [--download]+forge step2stl; hojas de datos mediante fetch web; búsqueda web de imágenes de referencia. Cita las fuentes en spec.md. Para un objeto que el usuario posee y no se puede buscar: PHOTOFIT (forge photofit mat-> imprime la Alfombrilla de Calibración al 100% -> foto -> contorno con ~0.3 mm de precisión) supera a pedir números con calibre. - Pregunta al usuario solo lo que no se puede encontrar: UN mensaje, <= 4 preguntas, cada una con un valor por defecto.
- Escribe
out/<nombre>/spec.md+spec.json(plantillas/). Las estimaciones en interfaces de ajuste se marcanestimate. - Publica "especificación lista: <una línea> -- ¿OK para construir?"; procede en caso de silencio de bajo riesgo con los valores por defecto indicados.
FASE 2 — CARRIL + PLAN
| Carril | Uso para |
|---|---|
| b123d (por defecto) | piezas funcionales/acotadas/críticas para el ajuste, carcasas, módulos MechKit |
| scad | piezas triviales o un primitivo BOSL2 (roscas) |
sdf (lib/sculpt.py) | cuerpos orgánicos que diseñes tú mismo: uniones suaves, base plana, siempre estancos (receta del gecko) |
mesh (lib/meshkit.py, manifold3d) | editar descargas/mallas de IA, booleanos grandes, flexify, dividir (OCC se ahoga con esculturas de 100k triángulos) |
| bpy | representaciones, remallado de vóxeles, arte con mucho texto |
Planifica en comentarios al principio del archivo de la pieza: características como funciones, bloque de parámetros en mm, holguras de fit.get("pip_gap"/"slide_gap"/...) (nunca codificar 0.3), origen en el centro inferior en Z=0, orientación de impresión diseñada (la cara plana más grande hacia abajo, voladizos <= 45, puentes < 18, paredes >= 2.0), orden de construcción, lista de afirmaciones. |
FASE 3 — CONSTRUIR EN PEQUEÑOS PASOS
Por iteración: un cambio -> forge run part.py --lane <carril> --spec spec.json --name <nombre> -> leer verify.json/REPORT.md (¿cambiaron volumen/bbox en lo que debería causar el cambio? ningún cambio = booleano omitido) -> leer sheet.png una vez -> criticar -> siguiente cambio.
- Piezas móviles = la API de Mecánica (
lib/mechkit/core.py):Mech(nombre, piezas, fijas, [Motion(nombre, accionamiento, [Move...], control=[...])])->selftest()barre cada pose, ejecuta el control de atascamiento a lo largo de todo su recorrido, mide los espacios exactamente. A prueba de colisiones por construcción es mejor que comprobar: arcos/esferas centrados en el pivote mantienen el espacio constante (giroscopio, juntas flexi); mantén el volumen barrido de cada móvil en su propio lado de un plano (pivotes de balisong). Engranajes:lib/gears.py. Medido, no declarado:forge mech ratio <nombre> [--motion M --driven PIEZA --driver PIEZA]posiciona el mecanismo, libera la salida y biseca para el intervalo libre de contacto -> relación medida + juego muerto (ratio.json, salida 3 si discrepa de la relación declarada). Reductor cicloidal:forge mech build cyclo11(lib/cycloid.pyperfil exacto + verificación de socavado). Representaciones de estudio:forge showcase <dir> --style studio --still hero|cutaway|exploded,--ghost,--annotate. - Preflight en el bucle para cualquier cosa con voladizos:
forge preflight out/<nombre>/<nombre>.stl. - Objetos con nombre: Puntuación de Aspecto después del pase de mecánica:
forge looks out/<nombre>/<nombre>.stl --target "<cosa>"(CLIP sobre representaciones limpias; validado: clasificó humano > v2 > v1 balisong). < 30% = iterar FORMA (proporciones, características distintivas), no mecánica. Compara v1 con v2 con ella en lugar de adivinar. - Reglas estrictas: nunca juzgues desde una vista; superpone cortadores 0.05 mm (las caras coplanares dejan pieles de espesor cero que SUELDAN pasadores: espacio medido 0.0 en lugar de 0.3); mismo fallo dos veces -> imprime números de subpiezas y rediagnostica; límite de 6 iteraciones luego replanifica o enruta a FIND. Termina cuando verify pase cada clave de especificación, selftest pase (móviles), preflight sea GO/GO+SUPPORTS, lista de verificación visual todo sí.
FASE 4 — AJUSTE
- Calibración primero: los espacios de print-in-place provienen de
fit.json. Hasta que pip_gap sea [V], cada diseño PIP lleva una PRECAUCIÓN de preflight. La Tarjeta de Ajuste mide pip_gap (giratorios .15-.40) y pip_vgap (bisagras .25-.45) en una sola impresión: después de ella, pregunta "¿el número más pequeño que gira libremente después de un giro firme?" ->forge fit set pip_gap <n> --from "fitcard <fecha>"(y pip_vgap). Cada construcción de MechKit/flexify/gridfinity lo lee automáticamente. - Piezas de acoplamiento / piezas alrededor del objeto del usuario: verificación de pose ensamblada
bin/verify --assembly a.stl b.stl --clearance <ajuste> --move-b=x,y,z; dummy del objeto a partir de photofit/parts-find. - Cupón solo para un tipo de interfaz que la Tarjeta de Ajuste no cubra (roscas, encajes a presión, ajustes a presión) o dimensiones estimadas: <= 10 min, 3 variantes, etiquetas en relieve.
FASE 5 — PREPARACIÓN DE IMPRESIÓN + ENTREGA
forge preflight <stl> [--slice]-> veredicto + decisión de soportes. Piezas orgánicas/inclinadas:forge preflight <stl> --orient(prueba inclinaciones; un casco quería ~20 grados).forge heat <stl>genera el mapa de calor de soportes rojo/amarillo para mostrárselo.- Soportes = decisión de preflight: GO -> desactivados; GO+SUPPORTS -> activados/auto; NO-GO -> arreglar primero (contacto de filo de cuchillo, huecos fusionados, no encaja ->
forge split). "SUPPORTS: OFF (obligatorio)" = trampa de soporte automático (una parte inferior plana a < 30 grados de la horizontal está a < 2 mm sobre un cuerpo DIFERENTE;support_angle/support_trap_gapen el perfil de la impresora): los soportes deben permanecer DESACTIVADOS o soldarán el hueco. 2b. Siempre, antes de entregar un archivo print-in-place / de varios cuerpos a un usuario:forge preflight <stl>luegoforge export <stl>(sigue automáticamente el veredicto; el nombre termina en_SUPPORTS-OFF.3mf/_SUPPORTS-ON.3mf). Entrégales el 3MF y di: abre este archivo, comprueba que la casilla de Soporte coincide con el nombre del archivo, no cambies nada más. Si preflight es NO-GO porque necesita soportes Y los soportes soldarían, arregla la geometría (chaflana las superficies inferiores planas a 45 grados, reorienta) antes de exportar. - Lamina el 3MF exportado (o el STL para piezas simples de un solo cuerpo) en TU laminador de elección con la decisión de soportes del paso 2 y tu perfil normal; forge solo establece la casilla de soportes, a través del 3MF. (Opcional: configura
slicer_cmdenknowledge/printer.jsonpara quepreflight --slice/plate --slicereporten tiempo y gramos). - Muestra al usuario: lámina o póster de showcase + tiempo/gramos (si el hook está configurado) + veredicto + receta de una línea. Ofrece
forge ar <stl>(USDZ: se abre como vista previa a tamaño real en iPhone/Vision Pro; GLB para Quest) cuando el tamaño/ajuste sea la cuestión. - Nunca inicies una impresión sin la aprobación del usuario: "¿Cama despejada? Comenzando , ~, g."
- Reporta " listo para imprimir: , g, ." ¿Vender?
forge showcase <dir>escribe mp4/gif + listing.md (coste, precio sugerido, recordatorio de licencia).
FASE 6 — RETROALIMENTACIÓN + APRENDIZAJE
- Una línea después de que se imprima: "¿Qué falló? (ajuste / aspecto / resistencia / calidad de impresión / nada)". Lee cualquier foto.
- Espacios ->
forge fit set ...(+ una fila en fit-log.md). Otros números -> fit-log.md / print-tolerances.md [V]. - 1-3 líneas en
knowledge/lessons.md(fecha · proyecto · lección · fase). Nueva técnica ->knowledge/<tema>.md(<= 40 líneas, fragmento ejecutable). - Deja
part.py+ especificación re-ejecutable. Ofrece una idea adyacente (mente de taller) sin iniciarla. - Cualquier cambio en el skill/herramienta ->
tests/run_suite.sh(comprobaciones de respuesta conocida) y, para afirmaciones de capacidad, el banco (forge grade,forge looks) -- demuestra que mejoró.
La caja de herramientas (forge <cmd>)
Lidera con...