Update to Cutaway
Snapshot Nov 3, 2026 · 00:13 UTC · version 0.3.1
Collection source: downloaded plugin package.
Instructions updated for cutaway
Skill instructions — Now says: Keep the template's **Download video** control. It exports a full cycle as a silent MP4 when the browser supports H.264 recording. It renders the same SVG...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Oct 31, 2026 · 01:19 UTC
No removed lines (ordering may have changed)
Nov 3, 2026 · 00:13 UTC
Keep the template's **Download video** control. It exports a full cycle as a silent MP4 when the browser supports H.264 recording. It renders the same SVG from the model's frame function; don't add a separate animation or screen recorder...
Supporting files
Oct 31, 2026 · 01:19 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":260},{"relative_path":"custom/build.mjs","size_in_bytes":1658},{"relative_path":"custom/contract.mjs","size_in_bytes":5109},{"relative_path":"custom/controls.mjs","size_in_bytes":611...
Nov 3, 2026 · 00:13 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":260},{"relative_path":"custom/build.mjs","size_in_bytes":1658},{"relative_path":"custom/contract.mjs","size_in_bytes":5109},{"relative_path":"custom/controls.mjs","size_in_bytes":865...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -47,6 +47,8 @@ Replace the template's illustrative plunger with the requested mechanism. Keep its page and controls; edit the research record, model, drawing, and render function. Use its material renderer to retain the kit's side shading and creases. The shared controls handle selection, playback, scrubbing, reduced motion, and HTML/SVG downloads of the selected view. The build also produces `cutaway.fragment.html` from the same artwork and runtime for inline previews. This template needs Bun for bundling; its validator also runs with Node.js and requires no installed dependencies. +Keep the template's **Download video** control. It exports a full cycle as a silent MP4 when the browser supports H.264 recording. It renders the same SVG from the model's frame function; don't add a separate animation or screen recorder. If export is unavailable in the preview, direct the user to the downloaded HTML. Check playback before claiming the video works; the static validator cannot verify encoding. See the [video export notes](custom/guide.md#video-export). + The validator checks script syntax, inline-preview hazards, resource references, and required structure. It doesn't execute the controls, verify sources, or establish that ChatGPT can render the file. Exercise the generated model and downloads with the host's browser tools when available; report those checks separately. For a smaller kit example that can also build with Node.js, use:
Full technical diff · 2 changed fields
changed /included_files
[
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 260
},
{
"relative_path": "custom/build.mjs",
"size_in_bytes": 1658
},
{
"relative_path": "custom/contract.mjs",
"size_in_bytes": 5109
},
{
"relative_path": "custom/controls.mjs",
"size_in_bytes": 6112
},
{
"relative_path": "custom/drawing.mjs",
"size_in_bytes": 948
},
{
"relative_path": "custom/guide.md",
"size_in_bytes": 7230
},
{
"relative_path": "custom/materials.mjs",
"size_in_bytes": 1229
},
{
"relative_path": "custom/model.mjs",
"size_in_bytes": 1019
},
{
"relative_path": "custom/page.mjs",
"size_in_bytes": 3606
},
{
"relative_path": "custom/research.json",
"size_in_bytes": 322
},
{
"relative_path": "custom/runtime.mjs",
"size_in_bytes": 254
},
{
"relative_path": "custom/style.css",
"size_in_bytes": 4704
},
{
"relative_path": "custom/validate.mjs",
"size_in_bytes": 5935
},
{
"relative_path": "examples/LICENSE",
"size_in_bytes": 1068
},
{
"relative_path": "examples/build.mjs",
"size_in_bytes": 11076
},
{
"relative_path": "examples/catalog.mjs",
"size_in_bytes": 4730
},
{
"relative_path": "examples/drawings.mjs",
"size_in_bytes": 8312
},
{
"relative_path": "examples/live.mjs",
"size_in_bytes": 4495
},
{
"relative_path": "examples/models.mjs",
"size_in_bytes": 6852
},
{
"relative_path": "examples/style.css",
"size_in_bytes": 6296
},
{
"relative_path": "examples/view.mjs",
"size_in_bytes": 3256
},
{
"relative_path": "glow/LICENSE",
"size_in_bytes": 1194
},
{
"relative_path": "glow/controls.mjs",
"size_in_bytes": 657
},
{
"relative_path": "glow/guide.md",
"size_in_bytes": 4446
},
{
"relative_path": "glow/palettes.mjs",
"size_in_bytes": 3472
},
{
"relative_path": "glow/svg.mjs",
"size_in_bytes": 2603
},
{
"relative_path": "scripts/create-project.mjs",
"size_in_bytes": 3316
},
{
"relative_path": "upstream/LICENSE",
"size_in_bytes": 1059
},
{
"relative_path": "upstream/examples/desk-computer/build.mjs",
"size_in_bytes": 23003
},
{
"relative_path": "upstream/examples/dial-indicator/build.mjs",
"size_in_bytes": 14959
},
{
"relative_path": "upstream/kit/audit.mjs",
"size_in_bytes": 90642
},
{
"relative_path": "upstream/kit/gl.mjs",
"size_in_bytes": 8757
},
{
"relative_path": "upstream/kit/iso-kit.mjs",
"size_in_bytes": 35175
},
{
"relative_path": "upstream/kit/iso-kit.ts",
"size_in_bytes": 38572
},
{
"relative_path": "upstream/kit/iso.css",
"size_in_bytes": 7698
},
{
"relative_path": "upstream/kit/lathe.mjs",
"size_in_bytes": 47981
},
{
"relative_path": "upstream/kit/react/draw.tsx",
"size_in_bytes": 6414
},
{
"relative_path": "upstream/kit/react/live.tsx",
"size_in_bytes": 4058
},
{
"relative_path": "upstream/kit/tube.mjs",
"size_in_bytes": 14220
},
{
"relative_path": "upstream/kit/turn-audit.mjs",
"size_in_bytes": 57132
},
{
"relative_path": "upstream/kit/turn-build.mjs",
"size_in_bytes": 64900
},
{
"relative_path": "upstream/kit/turn.mjs",
"size_in_bytes": 139725
},
{
"relative_path": "upstream/references/3d.md",
"size_in_bytes": 44585
},
{
"relative_path": "upstream/references/craft.md",
"size_in_bytes": 50260
},
{
"relative_path": "upstream/references/kit.md",
"size_in_bytes": 67738
},
{
"relative_path": "upstream/references/motion.md",
"size_in_bytes": 22594
},
{
"relative_path": "upstream/references/react.md",
"size_in_bytes": 3606
},
{
"relative_path": "upstream/references/verify.md",
"size_in_bytes": 43536
},
{
"relative_path": "upstream/references/webgl.md",
"size_in_bytes": 61041
},
{
"relative_path": "upstream/scripts/inline-kit.mjs",
"size_in_bytes": 819
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 260
},
{
"relative_path": "custom/build.mjs",
"size_in_bytes": 1658
},
{
"relative_path": "custom/contract.mjs",
"size_in_bytes": 5109
},
{
"relative_path": "custom/controls.mjs",
"size_in_bytes": 8659
},
{
"relative_path": "custom/drawing.mjs",
"size_in_bytes": 948
},
{
"relative_path": "custom/guide.md",
"size_in_bytes": 8695
},
{
"relative_path": "custom/materials.mjs",
"size_in_bytes": 1229
},
{
"relative_path": "custom/model.mjs",
"size_in_bytes": 1019
},
{
"relative_path": "custom/page.mjs",
"size_in_bytes": 3792
},
{
"relative_path": "custom/research.json",
"size_in_bytes": 322
},
{
"relative_path": "custom/runtime.mjs",
"size_in_bytes": 254
},
{
"relative_path": "custom/style.css",
"size_in_bytes": 4852
},
{
"relative_path": "custom/validate.mjs",
"size_in_bytes": 5987
},
{
"relative_path": "custom/video.mjs",
"size_in_bytes": 7457
},
{
"relative_path": "examples/LICENSE",
"size_in_bytes": 1068
},
{
"relative_path": "examples/build.mjs",
"size_in_bytes": 11076
},
{
"relative_path": "examples/catalog.mjs",
"size_in_bytes": 4730
},
{
"relative_path": "examples/drawings.mjs",
"size_in_bytes": 8312
},
{
"relative_path": "examples/live.mjs",
"size_in_bytes": 4495
},
{
"relative_path": "examples/models.mjs",
"size_in_bytes": 6852
},
{
"relative_path": "examples/style.css",
"size_in_bytes": 6296
},
{
"relative_path": "examples/view.mjs",
"size_in_bytes": 3256
},
{
"relative_path": "glow/LICENSE",
"size_in_bytes": 1194
},
{
"relative_path": "glow/controls.mjs",
"size_in_bytes": 657
},
{
"relative_path": "glow/guide.md",
"size_in_bytes": 4446
},
{
"relative_path": "glow/palettes.mjs",
"size_in_bytes": 3472
},
{
"relative_path": "glow/svg.mjs",
"size_in_bytes": 2603
},
{
"relative_path": "scripts/create-project.mjs",
"size_in_bytes": 3316
},
{
"relative_path": "upstream/LICENSE",
"size_in_bytes": 1059
},
{
"relative_path": "upstream/examples/desk-computer/build.mjs",
"size_in_bytes": 23003
},
{
"relative_path": "upstream/examples/dial-indicator/build.mjs",
"size_in_bytes": 14959
},
{
"relative_path": "upstream/kit/audit.mjs",
"size_in_bytes": 90642
},
{
"relative_path": "upstream/kit/gl.mjs",
"size_in_bytes": 8757
},
{
"relative_path": "upstream/kit/iso-kit.mjs",
"size_in_bytes": 35175
},
{
"relative_path": "upstream/kit/iso-kit.ts",
"size_in_bytes": 38572
},
{
"relative_path": "upstream/kit/iso.css",
"size_in_bytes": 7698
},
{
"relative_path": "upstream/kit/lathe.mjs",
"size_in_bytes": 47981
},
{
"relative_path": "upstream/kit/react/draw.tsx",
"size_in_bytes": 6414
},
{
"relative_path": "upstream/kit/react/live.tsx",
"size_in_bytes": 4058
},
{
"relative_path": "upstream/kit/tube.mjs",
"size_in_bytes": 14220
},
{
"relative_path": "upstream/kit/turn-audit.mjs",
"size_in_bytes": 57132
},
{
"relative_path": "upstream/kit/turn-build.mjs",
"size_in_bytes": 64900
},
{
"relative_path": "upstream/kit/turn.mjs",
"size_in_bytes": 139725
},
{
"relative_path": "upstream/references/3d.md",
"size_in_bytes": 44585
},
{
"relative_path": "upstream/references/craft.md",
"size_in_bytes": 50260
},
{
"relative_path": "upstream/references/kit.md",
"size_in_bytes": 67738
},
{
"relative_path": "upstream/references/motion.md",
"size_in_bytes": 22594
},
{
"relative_path": "upstream/references/react.md",
"size_in_bytes": 3606
},
{
"relative_path": "upstream/references/verify.md",
"size_in_bytes": 43536
},
{
"relative_path": "upstream/references/webgl.md",
"size_in_bytes": 61041
},
{
"relative_path": "upstream/scripts/inline-kit.mjs",
"size_in_bytes": 819
}
]changed /skill_md_contents
"---\nname: cutaway\ndescription: Explain how machines and hardware work by creating educational cutaways as interactive HTML, isometric SVG, or editable React figures. Use for requests such as \"explain how this machine works\" with a photo or model number, and for engines, wings, pumps, appliances, and other physical mechanisms. Identify the machine and research its internals before drawing it. Also supports requested software analogies. Doesn't cover medical anatomy or ordinary flowcharts.\n---\n\n# Cutaway\n\nBuild a cutaway that explains how the requested machine works. For a jet engine, separate core and bypass flow; for an espresso machine, follow water through the pump, boiler, and group head; for a piston engine, connect crank position to piston and valve motion.\n\nWhen the user invokes Cutaway with a machine photo and asks how it works, deliver a visual explanation by default: identify it, research the mechanism, then create and attach the interactive cutaway. Identification and a written explanation are intermediate work. Honor requests for identification only, text only, or a different output.\n\nDraw the actual mechanism when the user asks about a physical object, and use an analogy when requested. Every visible number and moving part must agree with the same model.\n\nName the hardware layout and explain its simplifications, such as illustrative dimensions in an engine or uncalculated airflow over a wing. When arrangement or timing affects the explanation, check an authoritative diagram or technical reference and cite it. Name each part, describe its job, and show what changes when the user operates a control.\n\nCutaway adapts Ryan's MIT-licensed Anatomy toolkit for ChatGPT. Its optional 2D glow layer adapts April Zhu's iso-glow, based on Tolga Cohce's iso-figure, with their MIT notices preserved.\n\nUser instructions take precedence over these defaults. Resolve the paths below relative to this skill directory.\n\n## From a photo or model number\n\nUse this workflow when the user asks how their particular machine works. A photo can establish its appearance and help identify it; hidden parts need other evidence. Use the host's image, search, and file tools. Keep the photo in the conversation and deliver the drawing there; this workflow doesn't upload it to Cutaway's hosted service.\n\n1. Identify the brand and model from visible markings, controls, and the user's information. Separate a likely match from a confirmed identification. Ask for a model label only when the missing detail changes the operating principle being explained, or the user requires an exact internal layout. An unknown SKU or revision doesn't block a drawing of a documented shared mechanism. A supplied model number or manual can be enough; don't require a photo. Search by model, without serial numbers or unrelated personal details from the image.\n2. Open references for that model and relevant revision. Prefer manufacturer manuals, service documents, and exploded parts diagrams; use a documented teardown when needed. Check that each source actually supports the claim. A search snippet, marketing specification, or similar-looking model doesn't establish internal placement or connections.\n3. Establish the parts and connections needed to explain the requested operation. For an espresso machine, check the pump, heating system, brew path, valves, and any steam circuit being shown. Resolve conflicting references or state the uncertainty. Gather only specifications that affect the explanation; an unknown dimension can stay illustrative.\n4. Choose the drawing's scope from the evidence. When references document the operating principle but not the exact internal layout, build a simplified mechanism cutaway in the same turn. Match recognizable exterior features from the photo, label internal placement and routing as illustrative, and keep unverified specifications out. A source describing the principle can support this teaching model without proving the product's construction. If the mechanism itself is unresolved, ask the specific question needed to choose it. If the user explicitly requires an exact service layout, explain the missing evidence before substituting a simplified view.\n5. Build and deliver the artifact using the workflow below. Keep the identification, sources, supported claims, assumptions, and unknowns in the template's research record; the page and exports carry that context. Include labels, part selection, and controls that explain the operation. Finish with the generated HTML or supported inline preview, plus a short explanation of its scope. Don't stop at a research summary or an offer to draw when the available evidence supports the teaching model.\n\nIf browsing is unavailable, use supplied documents and state that limitation. Ask for the relevant manual when needed to establish the mechanism; don't claim to have researched sources you couldn't open. Keep source images and manuals as references, rather than embedding them in the output without permission.\n\n## Deliver in ChatGPT\n\nFor an existing GE9X, wing, espresso, or boxer model, use the connected `open_ge9x`, `open_wing`, `open_espresso`, or `open_boxer` tool when it fits the request. The espresso, wing, and boxer views illustrate generic mechanisms. A request about a particular machine needs the identification and research above; don't present a generic hosted view as that exact model. Supply the requested component or control settings. These tools return the interactive view, source links, limitations, and downloads; don't rebuild the same model merely to display it. `list_cutaways` describes the available controls.\n\nUse the drawing workflow below for other machines, changes to a model's geometry or styling, or when the hosted tools aren't available. Keep the hosted models' illustrative dimensions and omitted systems clear when explaining them.\n\nDefault to a light-theme, self-contained interactive HTML file with inline SVG, CSS, and JavaScript. Honor a request for static SVG, React, a different theme, or a simpler figure. Use the host's available file and execution tools. Once the necessary references are available, drawing the figure requires no MCP server, external model API, or network request.\n\nFor a custom interactive cutaway, read the [template guide](custom/guide.md). Create a writable project outside the installed plugin:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory> --example custom\nbun <output-directory>/build.mjs\nbun <output-directory>/custom/validate.mjs <output-directory>/cutaway.html <output-directory>/cutaway.svg\n```\n\nReplace the template's illustrative plunger with the requested mechanism. Keep its page and controls; edit the research record, model, drawing, and render function. Use its material renderer to retain the kit's side shading and creases. The shared controls handle selection, playback, scrubbing, reduced motion, and HTML/SVG downloads of the selected view. The build also produces `cutaway.fragment.html` from the same artwork and runtime for inline previews. This template needs Bun for bundling; its validator also runs with Node.js and requires no installed dependencies.\n\nThe validator checks script syntax, inline-preview hazards, resource references, and required structure. It doesn't execute the controls, verify sources, or establish that ChatGPT can render the file. Exercise the generated model and downloads with the host's browser tools when available; report those checks separately.\n\nFor a smaller kit example that can also build with Node.js, use:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory>\nbun <output-directory>/examples/dial-indicator/build.mjs --light\n```\n\nThe initializer copies the kit, its MIT license, and a working example while preserving relative imports.\n\nStart from that example, replace its model and geometry with the requested mechanism, and return the generated file and editable source. Don't deliver the sample unchanged for an unrelated request.\n\nFor software behavior, the initializer also accepts `--example token-bucket`, `lru-cache`, `connection-pool`, or `circuit-breaker`. These examples use Bun and emit interactive HTML and a styled static SVG snapshot:\n\n```sh\nbun <output-directory>/build.mjs --light\n```\n\nTheir [models](examples/models.mjs), [drawing code](examples/drawings.mjs), and [experiment prompts](examples/catalog.mjs) are starting points for related requests.\n\nIf the host has an interactive HTML preview or Canvas tool, present the generated artifact there as well as providing the file. Use the tool's actual documented interface; don't assume arbitrary HTML in a chat message executes or invent a preview URL.\n\nIf previews are unavailable, provide the downloadable HTML. If execution is unavailable, write a self-contained artifact with the available file tools and state that it hasn’t been run. If file tools are also unavailable, provide complete source and state the limitation.\n\nDon't install tools on the user's computer, publish a website, or create external records merely to deliver a figure. Those are separate user requests. Keep generated standalone files free of network dependencies.\n\nPreserve Cutaway's [MIT notice](examples/LICENSE) and the applicable upstream notices when distributing source.\n\nKeep build-time page helpers out of the inline runtime. Use `kitScript()` or a bundle containing only the runtime imports; don't paste all of `iso-kit.mjs` into a script. An unused `pageHtml()` helper embeds full-document markup inside its JavaScript and has caused inline fragment validation to fail.\n\nWhen a host requests an HTML fragment, submit the generated `cutaway.fragment.html` through its documented interface. Preserve its geometry, material colors, and controls instead of drawing a separate preview. Retain the complete document as the download and include any adapted preview source in the editable project. Check the final serialized preview payload as well as the standalone file; a successful build doesn't prove the preview ran.\n\n## Design and build\n\n1. Identify the mechanism, quantities, states, controls, and desired output. Use supplied values and label illustrative assumptions; ask only when a missing fact changes what the figure teaches. Explain the mechanism choice in 1 sentence and proceed.\n2. Read [craft](upstream/references/craft.md) for the drawing language and [kit API](upstream/references/kit.md) for the primitives you need. Inspect 1 bundled example: [dial indicator](upstream/examples/dial-indicator/build.mjs) for a moving mechanism or [desk computer](upstream/examples/desk-computer/build.mjs) for keyboard input. The latter includes upstream Anthropic artwork; replace that motif when creating a new figure unless the user requests it.\n3. Define the state model before the geometry: clamp values at real boundaries, preserve quantities, and compute readouts and motion from the same state. Keep simulated time separate from rendering. For hardware, distinguish the teaching model from measured or validated performance.\n4. Choose a recognizable object and plan its supports, structure, mechanism, controls, fasteners, and surface details. Use details that explain the construction: bushings support shafts, clamps hold pipes, feet support bases. Scale complexity to the request; don't impose a part quota or invent a time estimate.\n5. Lay out the object in world coordinates, with z up, using the shared camera and `fitProjection` to include every extreme point. Build static geometry once and let the kit shade solids. Draw nearer parts over farther ones, splitting wrapping parts into front and back portions when necessary.\n6. Compose a framed figure with a concise title, interaction hint, live readout, and an explanatory caption outside the drawing. Keep text readable at phone width. Include an accessible description and keyboard equivalents for pointer controls.\n7. Read [motion](upstream/references/motion.md) when adding interaction; use time-based easing or springs and stop animation offscreen. Under reduced motion, disable the idle tour and transition directly to user-selected states. Don't put render-loop state through a React rerender every frame.\n8. Open the artifact with the available tools, exercise its controls and boundary states, and check console errors. Inspect desktop and narrow layouts, both themes when delivered, and close-ups of joints and overlaps. Report which checks ran and which were unavailable.\n\n## Drawing constraints\n\n- Draw filled solids with thickness, correct occlusion, a common camera, and consistent lighting. Avoid floating labeled boxes when a physical mechanism can carry the explanation.\n- Use subdued colors for the base and structure so the moving parts stand out. Use 1 primary accent unless color itself teaches the concept.\n- Terminate lines at surfaces, edges, connections, or printed marks. Place detail on actual geometry. Texture must meet an edge or fade.\n- Give pipes real endpoints and clearance. Place fittings against their mounts. For dense pipework, use the recorder and geometry audit in `upstream/kit/audit.mjs`; resolve interlocks in geometry rather than hiding them with arbitrary draw-order offsets.\n- Keep moving geometry, displayed values, captions, and control labels consistent. Never hardcode a readout that disagrees with the simulation.\n- Escape user-provided text in HTML, SVG, and JavaScript contexts. Don't interpolate untrusted strings directly into markup or inline scripts.\n\n## Optional modes\n\nRead only the references needed by the requested output:\n\n- **Static SVG:** use `figureSvg({ standalone: \"light\" })` or `\"dark\"` to embed its styles. Provide meaningful accessible text. A static export must not depend on JavaScript for its resting state.\n- **2D glow and palettes:** read [glow](glow/guide.md) when the user requests illuminated active parts or the iso-glow look. Use the bundled filters and palettes with the existing model and geometry; the examples include native style, theme, and palette selectors. Keep light mode flat, retain technical mode, and include the full [iso-glow MIT notice](glow/LICENSE) with adapted output source.\n- **WebGL:** read [WebGL](upstream/references/webgl.md). Use shaders for light, water, fire, or another effect that SVG can't express well; register the canvas to the SVG camera and keep transitions smooth and effects bounded. Keep a readable SVG fallback when WebGL is unavailable, and test the light theme separately.\n- **3D:** read [3D](upstream/references/3d.md). The bundled `turn.mjs`, `turn-build.mjs`, and `turn-audit.mjs` support moving groups. Keep this optional, explain that it's upstream's beta mode, and verify performance in the target host before promising smooth animation.\n- **React/Next.js:** read [React integration](upstream/references/react.md). Copy the TypeScript kit and React adapters into the target project, compute static art outside the live component, and preserve the server/client split. React is supplied by the destination project.\n- **Detailed visual review:** read [verification](upstream/references/verify.md) for visual failure modes. Only the dial-indicator and desk-computer examples are bundled; use the host's browser and screenshot tools for the other checks. Report which checks you couldn't run, and never claim an audit or screenshot passed without running and inspecting it.\n\nThe inlining helper provides `kitScript()`, `glScript()`, and `turnScript()`. `kitScript()` includes geometry and SVG-part helpers through `groupSvg()`. Import `figureSvg()`, `plateHtml()`, `pageHtml()`, and page styles in the build script when composing the document; they're excluded from the inline runtime.\n\nAdvanced upstream fixed-canvas and shared-context helpers aren't included. Don't call absent APIs or fetch missing code during ordinary use.\n\nFinish with the artifact, a short explanation of the controls, the model's assumptions, and any material verification limits. Keep build details out of the figure's controls and explanations.\n""---\nname: cutaway\ndescription: Explain how machines and hardware work by creating educational cutaways as interactive HTML, isometric SVG, or editable React figures. Use for requests such as \"explain how this machine works\" with a photo or model number, and for engines, wings, pumps, appliances, and other physical mechanisms. Identify the machine and research its internals before drawing it. Also supports requested software analogies. Doesn't cover medical anatomy or ordinary flowcharts.\n---\n\n# Cutaway\n\nBuild a cutaway that explains how the requested machine works. For a jet engine, separate core and bypass flow; for an espresso machine, follow water through the pump, boiler, and group head; for a piston engine, connect crank position to piston and valve motion.\n\nWhen the user invokes Cutaway with a machine photo and asks how it works, deliver a visual explanation by default: identify it, research the mechanism, then create and attach the interactive cutaway. Identification and a written explanation are intermediate work. Honor requests for identification only, text only, or a different output.\n\nDraw the actual mechanism when the user asks about a physical object, and use an analogy when requested. Every visible number and moving part must agree with the same model.\n\nName the hardware layout and explain its simplifications, such as illustrative dimensions in an engine or uncalculated airflow over a wing. When arrangement or timing affects the explanation, check an authoritative diagram or technical reference and cite it. Name each part, describe its job, and show what changes when the user operates a control.\n\nCutaway adapts Ryan's MIT-licensed Anatomy toolkit for ChatGPT. Its optional 2D glow layer adapts April Zhu's iso-glow, based on Tolga Cohce's iso-figure, with their MIT notices preserved.\n\nUser instructions take precedence over these defaults. Resolve the paths below relative to this skill directory.\n\n## From a photo or model number\n\nUse this workflow when the user asks how their particular machine works. A photo can establish its appearance and help identify it; hidden parts need other evidence. Use the host's image, search, and file tools. Keep the photo in the conversation and deliver the drawing there; this workflow doesn't upload it to Cutaway's hosted service.\n\n1. Identify the brand and model from visible markings, controls, and the user's information. Separate a likely match from a confirmed identification. Ask for a model label only when the missing detail changes the operating principle being explained, or the user requires an exact internal layout. An unknown SKU or revision doesn't block a drawing of a documented shared mechanism. A supplied model number or manual can be enough; don't require a photo. Search by model, without serial numbers or unrelated personal details from the image.\n2. Open references for that model and relevant revision. Prefer manufacturer manuals, service documents, and exploded parts diagrams; use a documented teardown when needed. Check that each source actually supports the claim. A search snippet, marketing specification, or similar-looking model doesn't establish internal placement or connections.\n3. Establish the parts and connections needed to explain the requested operation. For an espresso machine, check the pump, heating system, brew path, valves, and any steam circuit being shown. Resolve conflicting references or state the uncertainty. Gather only specifications that affect the explanation; an unknown dimension can stay illustrative.\n4. Choose the drawing's scope from the evidence. When references document the operating principle but not the exact internal layout, build a simplified mechanism cutaway in the same turn. Match recognizable exterior features from the photo, label internal placement and routing as illustrative, and keep unverified specifications out. A source describing the principle can support this teaching model without proving the product's construction. If the mechanism itself is unresolved, ask the specific question needed to choose it. If the user explicitly requires an exact service layout, explain the missing evidence before substituting a simplified view.\n5. Build and deliver the artifact using the workflow below. Keep the identification, sources, supported claims, assumptions, and unknowns in the template's research record; the page and exports carry that context. Include labels, part selection, and controls that explain the operation. Finish with the generated HTML or supported inline preview, plus a short explanation of its scope. Don't stop at a research summary or an offer to draw when the available evidence supports the teaching model.\n\nIf browsing is unavailable, use supplied documents and state that limitation. Ask for the relevant manual when needed to establish the mechanism; don't claim to have researched sources you couldn't open. Keep source images and manuals as references, rather than embedding them in the output without permission.\n\n## Deliver in ChatGPT\n\nFor an existing GE9X, wing, espresso, or boxer model, use the connected `open_ge9x`, `open_wing`, `open_espresso`, or `open_boxer` tool when it fits the request. The espresso, wing, and boxer views illustrate generic mechanisms. A request about a particular machine needs the identification and research above; don't present a generic hosted view as that exact model. Supply the requested component or control settings. These tools return the interactive view, source links, limitations, and downloads; don't rebuild the same model merely to display it. `list_cutaways` describes the available controls.\n\nUse the drawing workflow below for other machines, changes to a model's geometry or styling, or when the hosted tools aren't available. Keep the hosted models' illustrative dimensions and omitted systems clear when explaining them.\n\nDefault to a light-theme, self-contained interactive HTML file with inline SVG, CSS, and JavaScript. Honor a request for static SVG, React, a different theme, or a simpler figure. Use the host's available file and execution tools. Once the necessary references are available, drawing the figure requires no MCP server, external model API, or network request.\n\nFor a custom interactive cutaway, read the [template guide](custom/guide.md). Create a writable project outside the installed plugin:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory> --example custom\nbun <output-directory>/build.mjs\nbun <output-directory>/custom/validate.mjs <output-directory>/cutaway.html <output-directory>/cutaway.svg\n```\n\nReplace the template's illustrative plunger with the requested mechanism. Keep its page and controls; edit the research record, model, drawing, and render function. Use its material renderer to retain the kit's side shading and creases. The shared controls handle selection, playback, scrubbing, reduced motion, and HTML/SVG downloads of the selected view. The build also produces `cutaway.fragment.html` from the same artwork and runtime for inline previews. This template needs Bun for bundling; its validator also runs with Node.js and requires no installed dependencies.\n\nKeep the template's **Download video** control. It exports a full cycle as a silent MP4 when the browser supports H.264 recording. It renders the same SVG from the model's frame function; don't add a separate animation or screen recorder. If export is unavailable in the preview, direct the user to the downloaded HTML. Check playback before claiming the video works; the static validator cannot verify encoding. See the [video export notes](custom/guide.md#video-export).\n\nThe validator checks script syntax, inline-preview hazards, resource references, and required structure. It doesn't execute the controls, verify sources, or establish that ChatGPT can render the file. Exercise the generated model and downloads with the host's browser tools when available; report those checks separately.\n\nFor a smaller kit example that can also build with Node.js, use:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory>\nbun <output-directory>/examples/dial-indicator/build.mjs --light\n```\n\nThe initializer copies the kit, its MIT license, and a working example while preserving relative imports.\n\nStart from that example, replace its model and geometry with the requested mechanism, and return the generated file and editable source. Don't deliver the sample unchanged for an unrelated request.\n\nFor software behavior, the initializer also accepts `--example token-bucket`, `lru-cache`, `connection-pool`, or `circuit-breaker`. These examples use Bun and emit interactive HTML and a styled static SVG snapshot:\n\n```sh\nbun <output-directory>/build.mjs --light\n```\n\nTheir [models](examples/models.mjs), [drawing code](examples/drawings.mjs), and [experiment prompts](examples/catalog.mjs) are starting points for related requests.\n\nIf the host has an interactive HTML preview or Canvas tool, present the generated artifact there as well as providing the file. Use the tool's actual documented interface; don't assume arbitrary HTML in a chat message executes or invent a preview URL.\n\nIf previews are unavailable, provide the downloadable HTML. If execution is unavailable, write a self-contained artifact with the available file tools and state that it hasn’t been run. If file tools are also unavailable, provide complete source and state the limitation.\n\nDon't install tools on the user's computer, publish a website, or create external records merely to deliver a figure. Those are separate user requests. Keep generated standalone files free of network dependencies.\n\nPreserve Cutaway's [MIT notice](examples/LICENSE) and the applicable upstream notices when distributing source.\n\nKeep build-time page helpers out of the inline runtime. Use `kitScript()` or a bundle containing only the runtime imports; don't paste all of `iso-kit.mjs` into a script. An unused `pageHtml()` helper embeds full-document markup inside its JavaScript and has caused inline fragment validation to fail.\n\nWhen a host requests an HTML fragment, submit the generated `cutaway.fragment.html` through its documented interface. Preserve its geometry, material colors, and controls instead of drawing a separate preview. Retain the complete document as the download and include any adapted preview source in the editable project. Check the final serialized preview payload as well as the standalone file; a successful build doesn't prove the preview ran.\n\n## Design and build\n\n1. Identify the mechanism, quantities, states, controls, and desired output. Use supplied values and label illustrative assumptions; ask only when a missing fact changes what the figure teaches. Explain the mechanism choice in 1 sentence and proceed.\n2. Read [craft](upstream/references/craft.md) for the drawing language and [kit API](upstream/references/kit.md) for the primitives you need. Inspect 1 bundled example: [dial indicator](upstream/examples/dial-indicator/build.mjs) for a moving mechanism or [desk computer](upstream/examples/desk-computer/build.mjs) for keyboard input. The latter includes upstream Anthropic artwork; replace that motif when creating a new figure unless the user requests it.\n3. Define the state model before the geometry: clamp values at real boundaries, preserve quantities, and compute readouts and motion from the same state. Keep simulated time separate from rendering. For hardware, distinguish the teaching model from measured or validated performance.\n4. Choose a recognizable object and plan its supports, structure, mechanism, controls, fasteners, and surface details. Use details that explain the construction: bushings support shafts, clamps hold pipes, feet support bases. Scale complexity to the request; don't impose a part quota or invent a time estimate.\n5. Lay out the object in world coordinates, with z up, using the shared camera and `fitProjection` to include every extreme point. Build static geometry once and let the kit shade solids. Draw nearer parts over farther ones, splitting wrapping parts into front and back portions when necessary.\n6. Compose a framed figure with a concise title, interaction hint, live readout, and an explanatory caption outside the drawing. Keep text readable at phone width. Include an accessible description and keyboard equivalents for pointer controls.\n7. Read [motion](upstream/references/motion.md) when adding interaction; use time-based easing or springs and stop animation offscreen. Under reduced motion, disable the idle tour and transition directly to user-selected states. Don't put render-loop state through a React rerender every frame.\n8. Open the artifact with the available tools, exercise its controls and boundary states, and check console errors. Inspect desktop and narrow layouts, both themes when delivered, and close-ups of joints and overlaps. Report which checks ran and which were unavailable.\n\n## Drawing constraints\n\n- Draw filled solids with thickness, correct occlusion, a common camera, and consistent lighting. Avoid floating labeled boxes when a physical mechanism can carry the explanation.\n- Use subdued colors for the base and structure so the moving parts stand out. Use 1 primary accent unless color itself teaches the concept.\n- Terminate lines at surfaces, edges, connections, or printed marks. Place detail on actual geometry. Texture must meet an edge or fade.\n- Give pipes real endpoints and clearance. Place fittings against their mounts. For dense pipework, use the recorder and geometry audit in `upstream/kit/audit.mjs`; resolve interlocks in geometry rather than hiding them with arbitrary draw-order offsets.\n- Keep moving geometry, displayed values, captions, and control labels consistent. Never hardcode a readout that disagrees with the simulation.\n- Escape user-provided text in HTML, SVG, and JavaScript contexts. Don't interpolate untrusted strings directly into markup or inline scripts.\n\n## Optional modes\n\nRead only the references needed by the requested output:\n\n- **Static SVG:** use `figureSvg({ standalone: \"light\" })` or `\"dark\"` to embed its styles. Provide meaningful accessible text. A static export must not depend on JavaScript for its resting state.\n- **2D glow and palettes:** read [glow](glow/guide.md) when the user requests illuminated active parts or the iso-glow look. Use the bundled filters and palettes with the existing model and geometry; the examples include native style, theme, and palette selectors. Keep light mode flat, retain technical mode, and include the full [iso-glow MIT notice](glow/LICENSE) with adapted output source.\n- **WebGL:** read [WebGL](upstream/references/webgl.md). Use shaders for light, water, fire, or another effect that SVG can't express well; register the canvas to the SVG camera and keep transitions smooth and effects bounded. Keep a readable SVG fallback when WebGL is unavailable, and test the light theme separately.\n- **3D:** read [3D](upstream/references/3d.md). The bundled `turn.mjs`, `turn-build.mjs`, and `turn-audit.mjs` support moving groups. Keep this optional, explain that it's upstream's beta mode, and verify performance in the target host before promising smooth animation.\n- **React/Next.js:** read [React integration](upstream/references/react.md). Copy the TypeScript kit and React adapters into the target project, compute static art outside the live component, and preserve the server/client split. React is supplied by the destination project.\n- **Detailed visual review:** read [verification](upstream/references/verify.md) for visual failure modes. Only the dial-indicator and desk-computer examples are bundled; use the host's browser and screenshot tools for the other checks. Report which checks you couldn't run, and never claim an audit or screenshot passed without running and inspecting it.\n\nThe inlining helper provides `kitScript()`, `glScript()`, and `turnScript()`. `kitScript()` includes geometry and SVG-part helpers through `groupSvg()`. Import `figureSvg()`, `plateHtml()`, `pageHtml()`, and page styles in the build script when composing the document; they're excluded from the inline runtime.\n\nAdvanced upstream fixed-canvas and shared-context helpers aren't included. Don't call absent APIs or fetch missing code during ordinary use.\n\nFinish with the artifact, a short explanation of the controls, the model's assumptions, and any material verification limits. Keep build details out of the figure's controls and explanations.\n"Full snapshot data
{
"description": "Explain how machines and hardware work by creating educational cutaways as interactive HTML, isometric SVG, or editable React figures. Use for requests such as \"explain how this machine works\" with a photo or model number, and for engines, wings, pumps, appliances, and other physical mechanisms. Identify the machine and research its internals before drawing it. Also supports requested software analogies. Doesn't cover medical anatomy or ordinary flowcharts.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 260
},
{
"relative_path": "custom/build.mjs",
"size_in_bytes": 1658
},
{
"relative_path": "custom/contract.mjs",
"size_in_bytes": 5109
},
{
"relative_path": "custom/controls.mjs",
"size_in_bytes": 8659
},
{
"relative_path": "custom/drawing.mjs",
"size_in_bytes": 948
},
{
"relative_path": "custom/guide.md",
"size_in_bytes": 8695
},
{
"relative_path": "custom/materials.mjs",
"size_in_bytes": 1229
},
{
"relative_path": "custom/model.mjs",
"size_in_bytes": 1019
},
{
"relative_path": "custom/page.mjs",
"size_in_bytes": 3792
},
{
"relative_path": "custom/research.json",
"size_in_bytes": 322
},
{
"relative_path": "custom/runtime.mjs",
"size_in_bytes": 254
},
{
"relative_path": "custom/style.css",
"size_in_bytes": 4852
},
{
"relative_path": "custom/validate.mjs",
"size_in_bytes": 5987
},
{
"relative_path": "custom/video.mjs",
"size_in_bytes": 7457
},
{
"relative_path": "examples/LICENSE",
"size_in_bytes": 1068
},
{
"relative_path": "examples/build.mjs",
"size_in_bytes": 11076
},
{
"relative_path": "examples/catalog.mjs",
"size_in_bytes": 4730
},
{
"relative_path": "examples/drawings.mjs",
"size_in_bytes": 8312
},
{
"relative_path": "examples/live.mjs",
"size_in_bytes": 4495
},
{
"relative_path": "examples/models.mjs",
"size_in_bytes": 6852
},
{
"relative_path": "examples/style.css",
"size_in_bytes": 6296
},
{
"relative_path": "examples/view.mjs",
"size_in_bytes": 3256
},
{
"relative_path": "glow/LICENSE",
"size_in_bytes": 1194
},
{
"relative_path": "glow/controls.mjs",
"size_in_bytes": 657
},
{
"relative_path": "glow/guide.md",
"size_in_bytes": 4446
},
{
"relative_path": "glow/palettes.mjs",
"size_in_bytes": 3472
},
{
"relative_path": "glow/svg.mjs",
"size_in_bytes": 2603
},
{
"relative_path": "scripts/create-project.mjs",
"size_in_bytes": 3316
},
{
"relative_path": "upstream/LICENSE",
"size_in_bytes": 1059
},
{
"relative_path": "upstream/examples/desk-computer/build.mjs",
"size_in_bytes": 23003
},
{
"relative_path": "upstream/examples/dial-indicator/build.mjs",
"size_in_bytes": 14959
},
{
"relative_path": "upstream/kit/audit.mjs",
"size_in_bytes": 90642
},
{
"relative_path": "upstream/kit/gl.mjs",
"size_in_bytes": 8757
},
{
"relative_path": "upstream/kit/iso-kit.mjs",
"size_in_bytes": 35175
},
{
"relative_path": "upstream/kit/iso-kit.ts",
"size_in_bytes": 38572
},
{
"relative_path": "upstream/kit/iso.css",
"size_in_bytes": 7698
},
{
"relative_path": "upstream/kit/lathe.mjs",
"size_in_bytes": 47981
},
{
"relative_path": "upstream/kit/react/draw.tsx",
"size_in_bytes": 6414
},
{
"relative_path": "upstream/kit/react/live.tsx",
"size_in_bytes": 4058
},
{
"relative_path": "upstream/kit/tube.mjs",
"size_in_bytes": 14220
},
{
"relative_path": "upstream/kit/turn-audit.mjs",
"size_in_bytes": 57132
},
{
"relative_path": "upstream/kit/turn-build.mjs",
"size_in_bytes": 64900
},
{
"relative_path": "upstream/kit/turn.mjs",
"size_in_bytes": 139725
},
{
"relative_path": "upstream/references/3d.md",
"size_in_bytes": 44585
},
{
"relative_path": "upstream/references/craft.md",
"size_in_bytes": 50260
},
{
"relative_path": "upstream/references/kit.md",
"size_in_bytes": 67738
},
{
"relative_path": "upstream/references/motion.md",
"size_in_bytes": 22594
},
{
"relative_path": "upstream/references/react.md",
"size_in_bytes": 3606
},
{
"relative_path": "upstream/references/verify.md",
"size_in_bytes": 43536
},
{
"relative_path": "upstream/references/webgl.md",
"size_in_bytes": 61041
},
{
"relative_path": "upstream/scripts/inline-kit.mjs",
"size_in_bytes": 819
}
],
"name": "cutaway",
"skill_md_contents": "---\nname: cutaway\ndescription: Explain how machines and hardware work by creating educational cutaways as interactive HTML, isometric SVG, or editable React figures. Use for requests such as \"explain how this machine works\" with a photo or model number, and for engines, wings, pumps, appliances, and other physical mechanisms. Identify the machine and research its internals before drawing it. Also supports requested software analogies. Doesn't cover medical anatomy or ordinary flowcharts.\n---\n\n# Cutaway\n\nBuild a cutaway that explains how the requested machine works. For a jet engine, separate core and bypass flow; for an espresso machine, follow water through the pump, boiler, and group head; for a piston engine, connect crank position to piston and valve motion.\n\nWhen the user invokes Cutaway with a machine photo and asks how it works, deliver a visual explanation by default: identify it, research the mechanism, then create and attach the interactive cutaway. Identification and a written explanation are intermediate work. Honor requests for identification only, text only, or a different output.\n\nDraw the actual mechanism when the user asks about a physical object, and use an analogy when requested. Every visible number and moving part must agree with the same model.\n\nName the hardware layout and explain its simplifications, such as illustrative dimensions in an engine or uncalculated airflow over a wing. When arrangement or timing affects the explanation, check an authoritative diagram or technical reference and cite it. Name each part, describe its job, and show what changes when the user operates a control.\n\nCutaway adapts Ryan's MIT-licensed Anatomy toolkit for ChatGPT. Its optional 2D glow layer adapts April Zhu's iso-glow, based on Tolga Cohce's iso-figure, with their MIT notices preserved.\n\nUser instructions take precedence over these defaults. Resolve the paths below relative to this skill directory.\n\n## From a photo or model number\n\nUse this workflow when the user asks how their particular machine works. A photo can establish its appearance and help identify it; hidden parts need other evidence. Use the host's image, search, and file tools. Keep the photo in the conversation and deliver the drawing there; this workflow doesn't upload it to Cutaway's hosted service.\n\n1. Identify the brand and model from visible markings, controls, and the user's information. Separate a likely match from a confirmed identification. Ask for a model label only when the missing detail changes the operating principle being explained, or the user requires an exact internal layout. An unknown SKU or revision doesn't block a drawing of a documented shared mechanism. A supplied model number or manual can be enough; don't require a photo. Search by model, without serial numbers or unrelated personal details from the image.\n2. Open references for that model and relevant revision. Prefer manufacturer manuals, service documents, and exploded parts diagrams; use a documented teardown when needed. Check that each source actually supports the claim. A search snippet, marketing specification, or similar-looking model doesn't establish internal placement or connections.\n3. Establish the parts and connections needed to explain the requested operation. For an espresso machine, check the pump, heating system, brew path, valves, and any steam circuit being shown. Resolve conflicting references or state the uncertainty. Gather only specifications that affect the explanation; an unknown dimension can stay illustrative.\n4. Choose the drawing's scope from the evidence. When references document the operating principle but not the exact internal layout, build a simplified mechanism cutaway in the same turn. Match recognizable exterior features from the photo, label internal placement and routing as illustrative, and keep unverified specifications out. A source describing the principle can support this teaching model without proving the product's construction. If the mechanism itself is unresolved, ask the specific question needed to choose it. If the user explicitly requires an exact service layout, explain the missing evidence before substituting a simplified view.\n5. Build and deliver the artifact using the workflow below. Keep the identification, sources, supported claims, assumptions, and unknowns in the template's research record; the page and exports carry that context. Include labels, part selection, and controls that explain the operation. Finish with the generated HTML or supported inline preview, plus a short explanation of its scope. Don't stop at a research summary or an offer to draw when the available evidence supports the teaching model.\n\nIf browsing is unavailable, use supplied documents and state that limitation. Ask for the relevant manual when needed to establish the mechanism; don't claim to have researched sources you couldn't open. Keep source images and manuals as references, rather than embedding them in the output without permission.\n\n## Deliver in ChatGPT\n\nFor an existing GE9X, wing, espresso, or boxer model, use the connected `open_ge9x`, `open_wing`, `open_espresso`, or `open_boxer` tool when it fits the request. The espresso, wing, and boxer views illustrate generic mechanisms. A request about a particular machine needs the identification and research above; don't present a generic hosted view as that exact model. Supply the requested component or control settings. These tools return the interactive view, source links, limitations, and downloads; don't rebuild the same model merely to display it. `list_cutaways` describes the available controls.\n\nUse the drawing workflow below for other machines, changes to a model's geometry or styling, or when the hosted tools aren't available. Keep the hosted models' illustrative dimensions and omitted systems clear when explaining them.\n\nDefault to a light-theme, self-contained interactive HTML file with inline SVG, CSS, and JavaScript. Honor a request for static SVG, React, a different theme, or a simpler figure. Use the host's available file and execution tools. Once the necessary references are available, drawing the figure requires no MCP server, external model API, or network request.\n\nFor a custom interactive cutaway, read the [template guide](custom/guide.md). Create a writable project outside the installed plugin:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory> --example custom\nbun <output-directory>/build.mjs\nbun <output-directory>/custom/validate.mjs <output-directory>/cutaway.html <output-directory>/cutaway.svg\n```\n\nReplace the template's illustrative plunger with the requested mechanism. Keep its page and controls; edit the research record, model, drawing, and render function. Use its material renderer to retain the kit's side shading and creases. The shared controls handle selection, playback, scrubbing, reduced motion, and HTML/SVG downloads of the selected view. The build also produces `cutaway.fragment.html` from the same artwork and runtime for inline previews. This template needs Bun for bundling; its validator also runs with Node.js and requires no installed dependencies.\n\nKeep the template's **Download video** control. It exports a full cycle as a silent MP4 when the browser supports H.264 recording. It renders the same SVG from the model's frame function; don't add a separate animation or screen recorder. If export is unavailable in the preview, direct the user to the downloaded HTML. Check playback before claiming the video works; the static validator cannot verify encoding. See the [video export notes](custom/guide.md#video-export).\n\nThe validator checks script syntax, inline-preview hazards, resource references, and required structure. It doesn't execute the controls, verify sources, or establish that ChatGPT can render the file. Exercise the generated model and downloads with the host's browser tools when available; report those checks separately.\n\nFor a smaller kit example that can also build with Node.js, use:\n\n```sh\nbun <skill-dir>/scripts/create-project.mjs <output-directory>\nbun <output-directory>/examples/dial-indicator/build.mjs --light\n```\n\nThe initializer copies the kit, its MIT license, and a working example while preserving relative imports.\n\nStart from that example, replace its model and geometry with the requested mechanism, and return the generated file and editable source. Don't deliver the sample unchanged for an unrelated request.\n\nFor software behavior, the initializer also accepts `--example token-bucket`, `lru-cache`, `connection-pool`, or `circuit-breaker`. These examples use Bun and emit interactive HTML and a styled static SVG snapshot:\n\n```sh\nbun <output-directory>/build.mjs --light\n```\n\nTheir [models](examples/models.mjs), [drawing code](examples/drawings.mjs), and [experiment prompts](examples/catalog.mjs) are starting points for related requests.\n\nIf the host has an interactive HTML preview or Canvas tool, present the generated artifact there as well as providing the file. Use the tool's actual documented interface; don't assume arbitrary HTML in a chat message executes or invent a preview URL.\n\nIf previews are unavailable, provide the downloadable HTML. If execution is unavailable, write a self-contained artifact with the available file tools and state that it hasn’t been run. If file tools are also unavailable, provide complete source and state the limitation.\n\nDon't install tools on the user's computer, publish a website, or create external records merely to deliver a figure. Those are separate user requests. Keep generated standalone files free of network dependencies.\n\nPreserve Cutaway's [MIT notice](examples/LICENSE) and the applicable upstream notices when distributing source.\n\nKeep build-time page helpers out of the inline runtime. Use `kitScript()` or a bundle containing only the runtime imports; don't paste all of `iso-kit.mjs` into a script. An unused `pageHtml()` helper embeds full-document markup inside its JavaScript and has caused inline fragment validation to fail.\n\nWhen a host requests an HTML fragment, submit the generated `cutaway.fragment.html` through its documented interface. Preserve its geometry, material colors, and controls instead of drawing a separate preview. Retain the complete document as the download and include any adapted preview source in the editable project. Check the final serialized preview payload as well as the standalone file; a successful build doesn't prove the preview ran.\n\n## Design and build\n\n1. Identify the mechanism, quantities, states, controls, and desired output. Use supplied values and label illustrative assumptions; ask only when a missing fact changes what the figure teaches. Explain the mechanism choice in 1 sentence and proceed.\n2. Read [craft](upstream/references/craft.md) for the drawing language and [kit API](upstream/references/kit.md) for the primitives you need. Inspect 1 bundled example: [dial indicator](upstream/examples/dial-indicator/build.mjs) for a moving mechanism or [desk computer](upstream/examples/desk-computer/build.mjs) for keyboard input. The latter includes upstream Anthropic artwork; replace that motif when creating a new figure unless the user requests it.\n3. Define the state model before the geometry: clamp values at real boundaries, preserve quantities, and compute readouts and motion from the same state. Keep simulated time separate from rendering. For hardware, distinguish the teaching model from measured or validated performance.\n4. Choose a recognizable object and plan its supports, structure, mechanism, controls, fasteners, and surface details. Use details that explain the construction: bushings support shafts, clamps hold pipes, feet support bases. Scale complexity to the request; don't impose a part quota or invent a time estimate.\n5. Lay out the object in world coordinates, with z up, using the shared camera and `fitProjection` to include every extreme point. Build static geometry once and let the kit shade solids. Draw nearer parts over farther ones, splitting wrapping parts into front and back portions when necessary.\n6. Compose a framed figure with a concise title, interaction hint, live readout, and an explanatory caption outside the drawing. Keep text readable at phone width. Include an accessible description and keyboard equivalents for pointer controls.\n7. Read [motion](upstream/references/motion.md) when adding interaction; use time-based easing or springs and stop animation offscreen. Under reduced motion, disable the idle tour and transition directly to user-selected states. Don't put render-loop state through a React rerender every frame.\n8. Open the artifact with the available tools, exercise its controls and boundary states, and check console errors. Inspect desktop and narrow layouts, both themes when delivered, and close-ups of joints and overlaps. Report which checks ran and which were unavailable.\n\n## Drawing constraints\n\n- Draw filled solids with thickness, correct occlusion, a common camera, and consistent lighting. Avoid floating labeled boxes when a physical mechanism can carry the explanation.\n- Use subdued colors for the base and structure so the moving parts stand out. Use 1 primary accent unless color itself teaches the concept.\n- Terminate lines at surfaces, edges, connections, or printed marks. Place detail on actual geometry. Texture must meet an edge or fade.\n- Give pipes real endpoints and clearance. Place fittings against their mounts. For dense pipework, use the recorder and geometry audit in `upstream/kit/audit.mjs`; resolve interlocks in geometry rather than hiding them with arbitrary draw-order offsets.\n- Keep moving geometry, displayed values, captions, and control labels consistent. Never hardcode a readout that disagrees with the simulation.\n- Escape user-provided text in HTML, SVG, and JavaScript contexts. Don't interpolate untrusted strings directly into markup or inline scripts.\n\n## Optional modes\n\nRead only the references needed by the requested output:\n\n- **Static SVG:** use `figureSvg({ standalone: \"light\" })` or `\"dark\"` to embed its styles. Provide meaningful accessible text. A static export must not depend on JavaScript for its resting state.\n- **2D glow and palettes:** read [glow](glow/guide.md) when the user requests illuminated active parts or the iso-glow look. Use the bundled filters and palettes with the existing model and geometry; the examples include native style, theme, and palette selectors. Keep light mode flat, retain technical mode, and include the full [iso-glow MIT notice](glow/LICENSE) with adapted output source.\n- **WebGL:** read [WebGL](upstream/references/webgl.md). Use shaders for light, water, fire, or another effect that SVG can't express well; register the canvas to the SVG camera and keep transitions smooth and effects bounded. Keep a readable SVG fallback when WebGL is unavailable, and test the light theme separately.\n- **3D:** read [3D](upstream/references/3d.md). The bundled `turn.mjs`, `turn-build.mjs`, and `turn-audit.mjs` support moving groups. Keep this optional, explain that it's upstream's beta mode, and verify performance in the target host before promising smooth animation.\n- **React/Next.js:** read [React integration](upstream/references/react.md). Copy the TypeScript kit and React adapters into the target project, compute static art outside the live component, and preserve the server/client split. React is supplied by the destination project.\n- **Detailed visual review:** read [verification](upstream/references/verify.md) for visual failure modes. Only the dial-indicator and desk-computer examples are bundled; use the host's browser and screenshot tools for the other checks. Report which checks you couldn't run, and never claim an audit or screenshot passed without running and inspecting it.\n\nThe inlining helper provides `kitScript()`, `glScript()`, and `turnScript()`. `kitScript()` includes geometry and SVG-part helpers through `groupSvg()`. Import `figureSvg()`, `plateHtml()`, `pageHtml()`, and page styles in the build script when composing the document; they're excluded from the inline runtime.\n\nAdvanced upstream fixed-canvas and shared-context helpers aren't included. Don't call absent APIs or fetch missing code during ordinary use.\n\nFinish with the artifact, a short explanation of the controls, the model's assumptions, and any material verification limits. Keep build details out of the figure's controls and explanations.\n"
}SHA-256 of public snapshot: 12d6ae72ca5f8e23d565ae289878be933801f119ef75f941290b1684e9ddbdff