Forge brief
Forge suite — define the 3D asset brief and write FORGE.md (the project-memory file every other Forge skill reads). Produces: a completed FORGE.md at the project root with target engine, coordinate system, poly/texel budgets, render settings, PBR workflow, the determinism contract (seed + sample counts for idempotent rebuilds), output paths, and (when ATELIER.md is present) the extracted world/aesthetic/signature-moment/OKLCH-hue that drives look-dev. Use this FIRST whenever starting any Forge 3D pipeline — including "define the asset", "set up a 3D project", "what are the budgets for this mesh", "create FORGE.md", "brief a 3D asset", "extract the aesthetic from ATELIER.md for Blender", "what engine is the target", "set poly budget", "set texel density", "configure render engine". (The bare "init Forge" / "forge init" phrase is owned by the `forge` router's `init` mode, which scaffolds FORGE.md inline and then calls this skill — this skill does not claim that trigger.) HEADLESS-ONLY: driven from code, output verified by reading a PNG. Part of the Forge suite.From its SKILL.md
npx -y skills add luminary19/atelier --skill forge-briefAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.6 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
Forge — Asset Brief & Project Memory
The foundation skill. Before any geometry, material, or render work starts, the pipeline needs a
single shared truth: what is being built, for what target, at what budget, in what style.
forge-brief writes that truth into FORGE.md. Every downstream Forge skill reads it first.
Project memory: if
FORGE.mdalready exists at the project root, read it first — honor its decisions and update only the fields the user explicitly changes. IfATELIER.mdexists, also read it — it carries the web aesthetic that the 3D look-dev must harmonize with. See §3 below andreferences/atelier-extraction.mdfor the extraction logic.
Forge suite — skill map
Role Skill When Brief (you are here) forge-briefDefine asset + write FORGE.md Standards forge-standards3D design tokens: units/naming/pivots/budgets Router forgeProbe + dispatch to all Forge skills Model forge-modelbpy/bmesh polygonal modeling Parametric forge-parametricOpenSCAD / CadQuery / FreeCAD Procedural forge-proceduralGeometry Nodes / SDF / L-systems Topology forge-topologyRetopo / LOD / decimation / booleans UV forge-uvUnwrap / seams / packing / texel density Material forge-materialPBR shading / glTF material model Texture forge-textureBaking / procedural textures Light forge-lightLighting rigs / HDRI / color management Render forge-renderHeadless Cycles render / turntable QA Rig forge-rigArmatures / IK-FK / skinning Animate forge-animateKeyframes / F-curves / skeletal export Sim forge-simCloth / rigid / fluid / hair Export forge-exportFormat matrix: GLB / FBX / USD / engine import Optimize forge-optimizegltf-transform / KTX2 / LOD / web budgets Intake forge-intakePhotogrammetry / AI-to-3D / cleanup Validate forge-validateManifold / normals / scale / UV / glTF-Validator Data forge-dataBM25 reference library (tool cheatsheets / budgets) Atelier seam:
atelier-webgl↔forge-export/forge-optimize(GLB + poster handoff). Also connects toatelier-direction(Direction Doc → aesthetic brief) andatelier-perf-a11y(post-handoff CWV / a11y gate).
Decide first: tool and target engine
Before writing FORGE.md, lock two decisions that gate everything downstream:
1. Target engine / delivery format
| Intent | Target | Notes |
|---|---|---|
| Web hero (three.js / R3F) | three.js/R3F | GLB + DRACO + Meshopt; < 5 MB; Y-up |
| iOS / Android AR | AR/USDZ | GLB for Android; USDZ for ARKit |
| Unreal Engine 5 | Unreal | FBX + UE5 naming; Z-up; 1 unit = 1 cm |
| Unity / Godot 4 | Unity / Godot | FBX or GLB; 1 unit = 1 m; Y-up |
| 3D print | print | STL / 3MF; manifold; real-world mm |
| Archive / interchange | USD | USDA/USDC; Y-up; meters |
| Blender/film render | render-only | Stays in Blender; no engine export needed |
2. Modeling tool
Run python "$env:CLAUDE_CONFIG_DIR\skills\forge\scripts\probe.py" --json
(the forge router's preflight probe — calls it via Skill if available) to confirm tool
availability before committing. Deep invocation reference: references/tool-availability.md.
| Use | Tool | Headless invocation |
|---|---|---|
| Polygonal / organic / subdivision | Blender bpy | blender -b scene.blend -P s.py -- <args> |
| Parametric / precision / CAD | OpenSCAD | openscad.com -o out.stl model.scad |
| Parametric (Python) | CadQuery / build123d | python script.py |
| STEP / IGES exchange | FreeCAD | freecadcmd script.py |
WINDOWS HEADLESS TRUTHS — apply everywhere:
- Cycles only (not EEVEE Next) for headless renders on Windows.
blender -b scene -P s.py -- <args>— the--separator is mandatory.openscad.comnotopenscad.exe(the.comwrapper handles DPI/HiDPI correctly).pythonnotpython3.- Absolute forward-slash paths in Blender
filepath— never//relative. --python-exit-code 1so Python errors fail the Blender process.
The flow
1. Read existing state
- If
FORGE.mdexists → read it; note what is already decided. - If
ATELIER.mdexists → read it; extract fields using the regex patterns inreferences/atelier-extraction.md. Particularly:Interactivity,World,Aesthetic,Concept/signature moment, and the OKLCH primary hue from## Tokens.
2. Gather missing decisions (AskUserQuestion if needed)
The minimum set for FORGE.md:
- Asset description — what is the object/scene (one sentence)
- Target engine/delivery — pick from the table above
- Asset class — hero prop / character / environment / web hero / CAD / print
- Poly budget — derive from class table in
references/budgets-and-standards.mdor ask if unusual - Texel density — derive from target tier; see
references/budgets-and-standards.md §texel
Use AskUserQuestion only when the target cannot be inferred. Note: the picker caps at 4
options — for engine choices, list all options in the message body and use the picker only
for the binary "confirm / let me pick differently".
3. Determine coordinate system and scale unit
Full table in references/coordinate-systems.md. Quick lookup:
| Target | Up axis | Scale unit | Forward axis |
|---|---|---|---|
| glTF / three.js / R3F | Y-up | meters | -Z |
| Unreal Engine 5 | Z-up | cm (1 unit = 1 cm) | X |
| Unity | Y-up | meters | Z |
| Godot 4 | Y-up | meters | -Z |
| OpenSCAD default | Z-up | mm | Y |
| Blender default | Z-up | meters | -Y |
| USD / Omniverse | Y-up | meters (configurable) | -Z |
4. Write FORGE.md
Use the schema from FORGE_PLAN.md §G. Full annotated template in
references/forge-md-template.md. Minimum viable content:
## Target <engine> + <delivery format>
## Coordinate system <up-axis>, <handedness>, <scale unit>, <forward axis>
## Budgets <poly-class>: <lod0-tris> tri LOD0; texel density <px/m> px/m; tex max <res>
## Render Cycles (headless Windows default); <qa-samples> QA / <final-samples> final; color view AgX
## Determinism Seed: 0 (all procedural/sim/Cycles ops); Cycles use_animated_seed: off;
## rebuild contract: same FORGE.md + same source => byte-identical GLB, comparable PNG
## PBR workflow metallic-roughness (glTF default); ORM channel-pack (AO→R, Rough→G, Metal→B)
## Output paths .forge-build/out/ working; public/forge/<slug>-* for web handoff
## Atelier link (omit if no ATELIER.md) world: <world>; aesthetic: <aesthetic>;
## signature: <moment>; primary OKLCH hue: <H>
Write with Write tool to <project-root>/FORGE.md. If FORGE.md already exists, use Edit
to update only changed fields.
5. Confirm and summarize
- Read back the written FORGE.md to confirm correctness.
- Print a brief summary: target engine, coordinate system, poly budget, render engine, and whether ATELIER.md was found and its aesthetic extracted.
- Name the next Forge skill the user should invoke: typically
forge-standards(for the full 3D design-token ruleset) or directly toforge-model/forge-parametricfor a simple asset.
Run = call the Skill tool with the exact skill name. Writing "next: run forge-model"
in prose runs nothing — invoke Skill("forge-model") or Skill("forge-standards").
§3 — ATELIER.md extraction
When ATELIER.md is present at the project root, forge-brief is also the aesthetic bridge:
it reads the Atelier Direction Doc and writes the extracted context into FORGE.md's
## Atelier link section so every downstream Forge skill (forge-material, forge-light,
forge-render) can harmonize look-dev with the web design system without re-reading ATELIER.md.
Full extraction logic (regex patterns + Python pseudocode):
references/atelier-extraction.md — read it before attempting extraction.
Fields to extract:
| ATELIER.md field | Where it lives | Maps to FORGE.md |
|---|---|---|
Interactivity | ## Interactivity section | Sanity check: must be Award-grade to justify authored 3D |
World | **World:** bold inline | ## Atelier link → world |
Aesthetic | **Aesthetic:** bold inline | ## Atelier link → aesthetic |
| Signature moment | **Concept.*signature moment.*:** | ## Atelier link → signature |
| Primary OKLCH hue | First oklch(... ... <H>) in ## Tokens | ## Atelier link → primary OKLCH hue |
If ATELIER.md is absent, omit the ## Atelier link section from FORGE.md entirely.
If Interactivity is not Award-grade and the user has requested authored 3D, pause and
suggest running Skill(atelier-direction) first to sanction the 3D moment — do NOT
proceed to build geometry that will violate the project's budget.
References
Deep material lives here — read the relevant file before each step:
references/forge-md-template.md— fully-annotated FORGE.md template with per-field guidance, examples for each target engine, and the complete schema.references/budgets-and-standards.md— polycount tables (mobile / console / web / print), texel density tiers, LOD ratios, UV utilization targets, draw-call ceiling, Git LFS rules.references/coordinate-systems.md— up-axis, handedness, scale, forward-axis per target; Blender → UE5 unit correction; glTF standard; USD conventions.references/atelier-extraction.md— Python regex patterns to extract world/aesthetic/ OKLCH hue from ATELIER.md; AskUserQuestion option-cap note (max 4 picker items); aesthetic → look-dev direction table; sanction-check logic.references/tool-availability.md— preflight probe patterns (PowerShell + Python), Blender path lookup on Windows, OpenSCAD.comgotcha, CadQuery install check.
Operating principles
- Write FORGE.md first, always. No Forge skill should execute without a project-memory file. forge-brief is the mandatory step 0. If it already exists, update it; never silently skip it.
- Honor ATELIER.md when present. An ATELIER.md aesthetic is not a suggestion — it is the design contract. Poly budgets, texel density, and render engine are your decisions; aesthetic and OKLCH harmony are the project's decisions.
- Derive, don't ask. Poly budgets, texel density, coordinate system, and output paths can all be derived from the target engine and asset class. Only ask when something is genuinely ambiguous (e.g. a custom constraint the dossier does not cover).
- Sanction 3D before building it. If ATELIER.md exists and Interactivity is not Award-grade,
do not build geometry. Run
Skill(atelier-direction)first. An unsanctioned 3D moment is a performance and accessibility liability the project did not budget for. - Fail loudly at the gate. A target engine the probe cannot verify, a missing tool, or a contradictory constraint (e.g. Z-up asset for a Y-up web target) must surface here as a clear error — before any geometry is written. Downstream skills depend on FORGE.md being correct.
What ships with it: 5 files
55.7 KB alongside SKILL.md
references/
- atelier-extraction.md12.0 KB
- budgets-and-standards.md11.8 KB
- coordinate-systems.md9.8 KB
- forge-md-template.md10.9 KB
- tool-availability.md11.2 KB