#81 by GitHub stars
wheresryan22/anatomy
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet of drawers, a plotter, a lock), with many small precise solid parts, four-tone shading, correct painter's order, a framed card with title, hi
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 1482e8469b0a
No earlier version was observed for comparison.
Heat
8.4- Star growth, last 7 daysAhead of 98% of tracked repositories
- Star growth, last 24 hoursAhead of 98% of tracked repositories
- Rank movement, last 7 daysAhead of 88% of tracked repositories
- Commits, last 30 daysAhead of 96% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- anatomy
/
How it works
anatomy
When your agent uses it
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet of drawers, a plotter, a lock), with many small precise solid parts, four-tone shading, correct painter's order, a framed card with title, hint and live readout, and calm eased motion. Use this whenever someone wants an isometric illustration, an explanatory diagram or figure for docs, a blog post, a landing page or an article, a "Linear-style" or "premium" technical drawing, an interactive explainer, or an SVG that shows how a system, algorithm or component works, even if they never say "isometric". Works framework-free (TypeScript/JS that writes SVG and HTML) and in React/Next.js, and can add realistic WebGL shaders (fire, exhaust, water, caustics, lamp light) that live inside the drawing in the same isometric perspective. Also prints a figure as an A4 PDF (poster, drawing or handout) and publishes it to the Anatomy community gallery when asked.
What it loads into context
Frontmatter
288 tokensAlways available to the agent
SKILL.md
8,372 tokensWhen the skill is activated
Reference documents
98,592 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The one idea that matters
- Workflow
- Setup
- Craft rules (short form)
- WebGL inside the drawing
- 3D: figures that turn (beta)
- Printable sheets (A4)
- References
Scripts executed separately
examples/arcade-cabinet/build.mjsexamples/arcade-cabinet/live.jsexamples/arcade-cabinet/parts.mjsexamples/arcade-cabinet/screen.mjsexamples/arcade-cabinet/sheet.mjsexamples/desk-computer/build.mjsexamples/dial-indicator/build.mjsexamples/push-button/build.mjsexamples/push-button/sheet.mjsexamples/raptor-engine/build.mjsexamples/raptor-engine/live.jsexamples/raptor-engine/sheet.mjsexamples/ripple-tank/build.mjsexamples/ripple-tank/live.jsexamples/ripple-tank/model.mjsexamples/spot-plate/art.tsxexamples/spot-plate/drops.tsexamples/spot-plate/fan.tsexamples/spot-plate/figure.tsxexamples/spot-plate/geometry.tsexamples/spot-plate/live.tsxexamples/spot-plate/rig.tsexamples/test-rig/art.tsxexamples/test-rig/figure.tsxexamples/test-rig/geometry.tsexamples/test-rig/live.tsxexamples/test-rig/pose.tsexamples/test-rig/rig.tsexamples/test-rig/view.tsexamples/turning-dial/build.mjsexamples/turning-dial/live.jsexamples/turning-dial/stress.mjskit/audit.mjskit/canvas-painter.mjskit/gl-shared.mjskit/gl.mjskit/iso-kit.mjskit/iso-kit.tskit/lathe.mjskit/pdf-button.mjskit/react/draw.tsxkit/react/live.tsxkit/tube.mjskit/turn-audit.mjskit/turn-build.mjskit/turn-fixed.mjskit/turn.mjsscripts/audit-affine-bounds.test.mjsscripts/audit-cache.test.mjsscripts/audit-clearance-envelope.test.mjsscripts/audit-empty-clipping.test.mjsscripts/audit-order-convergence.test.mjsscripts/audit-path-origin.test.mjsscripts/audit-profile.test.mjsscripts/audit-projection.test.mjsscripts/audit-slide-clearance.test.mjsscripts/audit-svg-attributes.test.mjsscripts/audit-taper.test.mjsscripts/audit-tube-support.test.mjsscripts/capture-current-geometry.test.mjsscripts/capture-selector.test.mjsscripts/capture.mjsscripts/capture.test.mjsscripts/chrome-port.mjsscripts/chrome-startup.test.mjsscripts/curve-density.test.mjsscripts/drive-actions.test.mjsscripts/drive-async-until.test.mjsscripts/drive-page-load.test.mjsscripts/drive-turn-controller.test.mjsscripts/drive.mjsscripts/drive.test.mjsscripts/enter-key.test.mjsscripts/fidelity-cut.test.mjsscripts/fidelity-tube-coverage.test.mjsscripts/fingerprint.mjsscripts/inline-kit.mjsscripts/line-ends.mjsscripts/lines-arcs.test.mjsscripts/lines-bezier.test.mjsscripts/lines-round.test.mjsscripts/lines-rounded-rect.test.mjsscripts/lines.mjsscripts/lines.test.mjsscripts/navigation.test.mjsscripts/orbit-sampling.test.mjsscripts/print-sheet.mjsscripts/print-sheet.test.mjsscripts/print.mjsscripts/publish.mjsscripts/publish.test.mjsscripts/react-dots-opacity.test.mjsscripts/react-readout-first-write.test.mjsscripts/react-readout-target.test.mjsscripts/react-solid-seamless.test.mjsscripts/react-visibility-target.test.mjsscripts/session.mjsscripts/session.test.mjsscripts/turn-audit-samples.test.mjsscripts/turn-bench.mjsscripts/turn-check.mjsscripts/turn-convex-check.test.mjsscripts/turn-fidelity.mjsscripts/turn-group-reference.test.mjsscripts/turn-rounded-polygon.test.mjsscripts/turn-split-owner.test.mjs
Files
.gitattributesasset89 bytes.github/ISSUE_TEMPLATE/bug_report.ymlasset2,808 bytes.github/ISSUE_TEMPLATE/config.ymlasset213 bytes.github/ISSUE_TEMPLATE/figure_request.ymlasset1,917 bytes.github/PULL_REQUEST_TEMPLATE.mddoc1,005 bytes.github/assets/dial-indicator.webpasset17,360 bytes.github/assets/raptor-engine-apart.webpasset35,144 bytes.github/assets/raptor-engine-firing.webpasset37,752 bytes.github/assets/ripple-tank.webpasset34,680 bytes.github/assets/turning-dial.webpasset29,958 bytes.github/workflows/ci.ymlasset2,070 bytes.gitignoreasset216 bytesCHANGELOG.mddoc14,983 bytesCODE_OF_CONDUCT.mddoc5,673 bytesCONTRIBUTING.mddoc8,949 bytesLICENSEasset1,061 bytesREADME.mddoc26,199 bytesSECURITY.mddoc1,240 bytesSKILL.mdcore33,589 bytesSKILL.mdcore33,589 bytesSKILL.mdcore33,589 bytesSKILL.mdcore33,589 bytesSKILL.mdcore33,589 bytesSKILL.mdcore33,589 bytesagents/openai.yamlasset120 bytesevals/evals.jsonasset8,226 bytesexamples/arcade-cabinet/arcade-cabinet-detailed-a4.pdfasset2,355,870 bytesexamples/arcade-cabinet/arcade-cabinet-drawing-a4.pdfasset1,849,170 bytesexamples/arcade-cabinet/arcade-cabinet-light.htmlasset1,008,995 bytesexamples/arcade-cabinet/arcade-cabinet-poster-a4.pdfasset726,591 bytesexamples/arcade-cabinet/arcade-cabinet.cssasset3,221 bytesexamples/arcade-cabinet/arcade-cabinet.htmlasset1,008,994 bytesexamples/arcade-cabinet/build.mjsruns51,665 bytesexamples/arcade-cabinet/live.jsruns21,286 bytesexamples/arcade-cabinet/parts.mjsruns4,296 bytesexamples/arcade-cabinet/screen.mjsruns6,701 bytesexamples/arcade-cabinet/sheet.mjsruns5,525 bytesexamples/desk-computer/build.mjsruns23,023 bytesexamples/desk-computer/desk-computer-light.htmlasset237,394 bytesexamples/desk-computer/desk-computer.htmlasset237,393 bytesexamples/dial-indicator/build.mjsruns14,973 bytesexamples/dial-indicator/dial-indicator-light.htmlasset136,489 bytesexamples/dial-indicator/dial-indicator.htmlasset136,488 bytesexamples/push-button/build.mjsruns16,283 bytesexamples/push-button/push-button-detailed-a4.pdfasset956,064 bytesexamples/push-button/push-button-drawing-a4.pdfasset696,985 bytesexamples/push-button/push-button-light.htmlasset127,449 bytesexamples/push-button/push-button-poster-a4.pdfasset463,972 bytesexamples/push-button/push-button.htmlasset127,448 bytesexamples/push-button/sheet.mjsruns4,050 bytesexamples/raptor-engine/build.mjsruns70,875 bytesexamples/raptor-engine/live.jsruns30,752 bytesexamples/raptor-engine/raptor-engine-detailed-a4.pdfasset4,350,759 bytesexamples/raptor-engine/raptor-engine-drawing-a4.pdfasset2,965,335 bytesexamples/raptor-engine/raptor-engine-light.htmlasset1,611,624 bytesexamples/raptor-engine/raptor-engine-poster-a4.pdfasset613,368 bytesexamples/raptor-engine/raptor-engine.htmlasset1,611,623 bytesexamples/raptor-engine/raptor.cssasset6,792 bytesexamples/raptor-engine/sheet.mjsruns6,324 bytesexamples/ripple-tank/build.mjsruns32,062 bytesexamples/ripple-tank/live.jsruns21,741 bytesexamples/ripple-tank/model.mjsruns5,004 bytesexamples/ripple-tank/ripple-tank-light.htmlasset505,499 bytesexamples/ripple-tank/ripple-tank.htmlasset505,498 bytesexamples/ripple-tank/ripple.cssasset1,675 bytesexamples/spot-plate/art.tsxruns4,491 bytesexamples/spot-plate/drops.tsruns19,131 bytesexamples/spot-plate/fan.tsruns2,715 bytesexamples/spot-plate/figure.tsxruns1,078 bytesexamples/spot-plate/geometry.tsruns10,962 bytesexamples/spot-plate/live.tsxruns11,718 bytesexamples/spot-plate/rig.tsruns8,160 bytesexamples/spot-plate/spot-plate.cssasset1,518 bytesexamples/test-rig/art.tsxruns7,372 bytesexamples/test-rig/figure.tsxruns850 bytesexamples/test-rig/geometry.tsruns13,085 bytesexamples/test-rig/live.tsxruns17,463 bytesexamples/test-rig/pose.tsruns3,894 bytesexamples/test-rig/rig.tsruns5,604 bytesexamples/test-rig/stretch.cssasset1,210 bytesexamples/test-rig/view.tsruns3,116 bytesexamples/turning-dial/build.mjsruns32,098 bytesexamples/turning-dial/dial.cssasset509 bytesexamples/turning-dial/live.jsruns12,523 bytesexamples/turning-dial/stress.mjsruns19,414 bytesexamples/turning-dial/turning-dial-light.htmlasset673,894 bytesexamples/turning-dial/turning-dial-verify-light.htmlasset701,752 bytesexamples/turning-dial/turning-dial.htmlasset673,893 bytesexamples/turning-dial/turning-stress-light.htmlasset1,228,774 byteskit/audit.mjsruns92,618 byteskit/canvas-painter.mjsruns27,535 byteskit/gl-shared.mjsruns8,863 byteskit/gl.mjsruns8,763 byteskit/iso-kit.mjsruns35,175 byteskit/iso-kit.tsruns38,631 byteskit/iso.cssasset7,698 byteskit/lathe.mjsruns48,028 byteskit/pdf-button.mjsruns1,314 byteskit/react/draw.tsxruns6,602 byteskit/react/live.tsxruns4,359 byteskit/tube.mjsruns14,230 byteskit/turn-audit.mjsruns57,356 byteskit/turn-build.mjsruns65,975 byteskit/turn-fixed.mjsruns147,055 byteskit/turn.mjsruns139,815 bytesreferences/3d.mddoc44,644 bytesreferences/craft.mddoc50,299 bytesreferences/kit.mddoc67,873 bytesreferences/motion.mddoc22,611 bytesreferences/print.mddoc7,043 bytesreferences/publish.mddoc4,113 bytesreferences/react.mddoc3,614 bytesreferences/verify.mddoc43,574 bytesreferences/walkthrough.mddoc5,276 bytesreferences/webgl.mddoc61,104 bytesscripts/audit-affine-bounds.test.mjsruns4,175 bytesscripts/audit-cache.test.mjsruns1,603 bytesscripts/audit-clearance-envelope.test.mjsruns2,407 bytesscripts/audit-empty-clipping.test.mjsruns3,936 bytesscripts/audit-order-convergence.test.mjsruns2,875 bytesscripts/audit-path-origin.test.mjsruns1,594 bytesscripts/audit-profile.test.mjsruns2,171 bytesscripts/audit-projection.test.mjsruns1,934 bytesscripts/audit-slide-clearance.test.mjsruns2,875 bytesscripts/audit-svg-attributes.test.mjsruns3,484 bytesscripts/audit-taper.test.mjsruns1,267 bytesscripts/audit-tube-support.test.mjsruns2,636 bytesscripts/capture-current-geometry.test.mjsruns5,109 bytesscripts/capture-selector.test.mjsruns7,665 bytesscripts/capture.mjsruns15,024 bytesscripts/capture.test.mjsruns3,224 bytesscripts/chrome-port.mjsruns1,083 bytesscripts/chrome-startup.test.mjsruns1,838 bytesscripts/curve-density.test.mjsruns4,196 bytesscripts/drive-actions.test.mjsruns3,061 bytesscripts/drive-async-until.test.mjsruns2,743 bytesscripts/drive-page-load.test.mjsruns1,318 bytesscripts/drive-turn-controller.test.mjsruns2,702 bytesscripts/drive.mjsruns23,905 bytesscripts/drive.test.mjsruns3,690 bytesscripts/enter-key.test.mjsruns2,560 bytesscripts/fidelity-cut.test.mjsruns4,852 bytesscripts/fidelity-tube-coverage.test.mjsruns3,223 bytesscripts/fingerprint.mjsruns1,241 bytesscripts/inline-kit.mjsruns648 bytesscripts/line-ends.mjsruns16,206 bytesscripts/lines-arcs.test.mjsruns2,059 bytesscripts/lines-bezier.test.mjsruns1,769 bytesscripts/lines-round.test.mjsruns2,458 bytesscripts/lines-rounded-rect.test.mjsruns2,527 bytesscripts/lines.mjsruns1,700 bytesscripts/lines.test.mjsruns1,537 bytesscripts/navigation.test.mjsruns2,255 bytesscripts/orbit-sampling.test.mjsruns2,810 bytesscripts/print-sheet.mjsruns29,023 bytesscripts/print-sheet.test.mjsruns6,734 bytesscripts/print.mjsruns14,801 bytesscripts/publish.mjsruns20,276 bytesscripts/publish.test.mjsruns7,780 bytesscripts/react-dots-opacity.test.mjsruns2,817 bytesscripts/react-readout-first-write.test.mjsruns3,846 bytesscripts/react-readout-target.test.mjsruns4,657 bytesscripts/react-solid-seamless.test.mjsruns2,752 bytesscripts/react-visibility-target.test.mjsruns3,844 bytesscripts/session.mjsruns4,834 bytesscripts/session.test.mjsruns2,663 bytesscripts/turn-audit-samples.test.mjsruns1,370 bytesscripts/turn-bench.mjsruns3,863 bytesscripts/turn-check.mjsruns38,355 bytesscripts/turn-convex-check.test.mjsruns1,875 bytesscripts/turn-fidelity.mjsruns20,340 bytesscripts/turn-group-reference.test.mjsruns2,174 bytesscripts/turn-rounded-polygon.test.mjsruns1,533 bytesscripts/turn-split-owner.test.mjsruns3,411 bytestests/fixtures/react-dots-dark.pngasset4,032 bytestests/fixtures/react-dots-light.pngasset3,848 bytestests/fixtures/react-solid-dark.pngasset9,416 bytestests/fixtures/react-solid-light.pngasset9,847 bytes
Read SKILL.md
# Anatomy
This skill makes figures like a small instrument on a bench: a heavy base on feet, rails with tick rulers, a carriage on bushings, knurled knobs, coil springs, a dial gauge whose needle moves, screws as tiny dots. The reader understands the idea because they recognise the machine. Every number the figure shows comes from the same model that moves its parts.
Eight complete examples ship with the skill. Open the closest one before you start. Each framework-free example is built with `node examples/<name>/build.mjs`, which writes a standalone HTML page next to the script; add `--light` for the light theme.
- `examples/dial-indicator/` is the smallest: a dial gauge on a stand, about 300 lines in all.
- `examples/desk-computer/` is framework-free SVG: a desk computer with a keyboard you can type on. The typed line appears on a CRT screen drawn in the plane of the case front, and the picture collapses to a line and a dot when you switch it off. It has about 85 solids and 850 paths.
- `examples/arcade-cabinet/` is an upright arcade cabinet with its side panel off, a Hero of about 240 solids and 15 cables. A quarter flies into the slot, rolls down the coin chute at the speed a rolling disc reaches on a 30° slope, trips the coin-switch wire and drops into the cash box; the switch's pulse runs chunk by chunk along its cable to the board, and the CRT warms up, self-tests and runs an attract mode drawn in the plane of the tilted monitor. The stick tilts and closes a microswitch under the panel. It shows how to place a camera so a cutaway's mechanism stays in view, a concave board drawn as a prism along any axis, moving parts rebuilt in the page from the same module the build uses, and live coins and a wire drawn in reserved slots of the settled order. `node build.mjs --audit` proves the geometry.
- `examples/raptor-engine/` is a rocket engine hanging in a test stand. Its round parts come from `kit/lathe.mjs` and its pipes and harness from `kit/tube.mjs`. It comes apart into 11 assemblies with staggered springs and per-frame depth re-sorting. Every part records its true shape, and `node build.mjs --audit` (`kit/audit.mjs`) proves, at rest, apart and in every replayed frame of the explode, that nothing passes through anything, that every end sits on a real mount, that no bend pinches, folds or lands on another line, that no curved profile's slope wobbles, and that every overlap is drawn in depth order. A WebGL plume, shock, splash and steam render between the back and front SVG. It is the reference for dense pipework, smooth shading and fades.
- `examples/ripple-tank/` is a school ripple tank on tall legs over a paper screen, seen from 44° up. Two WebGL layers (lamp light, shadows and caustics on the paper, and the water's reflections and glass) are registered to the isometric planes and driven by a pure dispersion and optics model (`model.mjs`); a frequency change travels out from the dippers through a history texture.
- `examples/test-rig/` is a production figure from a real site (React/Next): a glass button on a spring-mounted carriage, a finger probe on a rail that presses and pulls, and a dial gauge reading the lean. It has 53 solids and about 470 paths.
- `examples/spot-plate/` is a second production figure from the same site: six pairs of glass drops on a spot plate, each pair drawn from one distance field, so a pair closer than `merge` runs together into one piece of glass. A fan of feeler blades sets `merge`, one blade per gap. It is the reference for shapes that morph into each other and for one control driving many parts.
- `examples/turning-dial/` is the optional 3D mode: a combination dial that turns in true 3D with a small robot hand on it. It has about 90 live parts in metal materials, a second turn group, a hinge, a three-hinge finger that lifts and a pod that breaks off as a free body. A WebGL LED, its light pool and sparks follow the moving parts. `stress.mjs` beside it is a dense hand of about 380 parts in a cluttered workshop, used to measure performance.View the complete source on GitHubSkills included
- anatomy
Repository facts
- License
- MIT
- Created
- Oct 8, 2026
- Last pushed
- Oct 18, 2026
- Forks
- 2,113
- Open issues
- 16
- Project activity
- Active
Rank over the last 12 weeks
Now #81 · best #81 · up 840 in 30 days
- #85 on Oct 30
- #84 on Oct 31
- #83 on Nov 1
- #82 on Nov 2
- #83 on Nov 3
- #81 since Nov 4
19 earlier periods
- #921 on Oct 4
- #918 on Oct 10
- #272 on Oct 11
- #198 on Oct 12
- #157 on Oct 13
- #129 on Oct 14
- #113 on Oct 15
- #110 on Oct 16
- #106 on Oct 17
- #105 on Oct 18
- #101 on Oct 19
- #100 on Oct 20
- #95 on Oct 21
- #93 on Oct 22
- #90 on Oct 23
- #88 on Oct 24
- #89 on Oct 25
- #85 on Oct 28
- #84 on Oct 29
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 2, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 68 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedexamples/arcade-cabinet/arcade-cabinet-light.html:161Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet-light.html:159Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet-light.html:160Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet-light.html:2225Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet.html:161Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet.html:159Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet.html:160Analysis incomplete: physical or joined line exceeds character limitexamples/arcade-cabinet/arcade-cabinet.html:2225Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer-light.html:137Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer-light.html:135Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer-light.html:136Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer.html:137Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer.html:135Analysis incomplete: physical or joined line exceeds character limitexamples/desk-computer/desk-computer.html:136Analysis incomplete: physical or joined line exceeds character limitexamples/dial-indicator/dial-indicator-light.html:114Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 8 dangerous shell commandsin 3 files: kit/audit.mjs:230 kit/turn-audit.mjs:763 .github/workflows/ci.yml:31
- 213 network referencesin 41 files: README.md:5 CODE_OF_CONDUCT.md:61 scripts/turn-check.mjs:62 and 38 more
- 2 obfuscation signalsin 2 files: kit/turn-fixed.mjs:463 kit/turn.mjs:428
- No instruction overrides
- 106 executable scriptsin 106 files: examples/arcade-cabinet/build.mjs:1 examples/arcade-cabinet/live.js:1 examples/arcade-cabinet/parts.mjs:1 and 103 more
- 1 reference to secretsin 1 file: .gitignore:5
- No requests to vote in Hot
Show all 330 signals by file
.github/ISSUE_TEMPLATE/config.yml
- Network accessline 2
contact_links: - name: Security problem url: https://github.com/wheresryan22/anatomy/security/advisories/new - Network accessline 3
- name: Security problem url: https://github.com/wheresryan22/anatomy/security/advisories/new about: Report security problems privately, not in a public issue. - Network accessline 4
url: https://github.com/wheresryan22/anatomy/security/advisories/new
.github/workflows/ci.yml
- Dangerous shell operationline 31
trap 'rm -rf "$test_deps"' EXIT
.gitignore
- Access to secretsline 5
[Credential-related source omitted]
CHANGELOG.md
- Network accessline 3
All notable changes to Anatomy are recorded here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html); entries from before the first release - Network accessline 15
- A Figure no longer quotes a time to the user. The 30–90 minute estimate was often far longer than the build itself ([#41](https://github.com/wheresryan22/anatomy/issues/41)).
CODE_OF_CONDUCT.md
- Network accessline 61
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement by direct message to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does - Network accessline 62
reported to the community leaders responsible for enforcement by direct message to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does not need to be private, through an issue on the - Network accessline 63
to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does - Network accessline 64
not need to be private, through an issue on the [GitHub repository](https://github.com/wheresryan22/anatomy/issues). All complaints will be reviewed and investigated promptly and fairly. - Network accessline 65
[GitHub repository](https://github.com/wheresryan22/anatomy/issues). - Network accessline 119
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - Network accessline 121
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - Network accessline 126
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at - Network accessline 127
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at - Network accessline 128
[https://www.contributor-covenant.org/translations][translations]. - Network accessline 130
[homepage]: https://www.contributor-covenant.org - Network accessline 131
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html - Network accessline 132
[Mozilla CoC]: https://github.com/mozilla/diversity - Network accessline 133
[FAQ]: https://www.contributor-covenant.org/faq - Network accessline 134
[translations]: https://www.contributor-covenant.org/translations
CONTRIBUTING.md
- Network accessline 16
git clone https://github.com/wheresryan22/anatomy.git - Network accessline 167
Use the [issue forms](https://github.com/wheresryan22/anatomy/issues/new/choose). For a figure that came out wrong, include the prompt, the theme, where the figure lives (HTML, SVG or React), and a screenshot or close-up of the fault.
README.md
- Network accessline 5
<p align="center"> <a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-1b1b19?style=flat-square&logo=claude&logoColor=white" alt="Claude Code skill"></a> - Network accessline 6
<a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-1b1b19?style=flat-square&logo=claude&logoColor=white" alt="Claude Code skill"></a> - Network accessline 7
<a href="https://agentskills.io"><img src="https://img.shields.io/badge/Agent_Skills-compatible-1b1b19?style=flat-square" alt="Agent Skills compatible"></a> - Network accessline 8
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-1b1b19?style=flat-square" alt="MIT license"></a> - Network accessline 9
<a href="#requirements"><img src="https://img.shields.io/badge/node-%E2%89%A5%2020.10-1b1b19?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node 20.10 or later"></a> - Network accessline 10
<a href="#requirements"><img src="https://img.shields.io/badge/dependencies-0-1b1b19?style=flat-square" alt="No dependencies"></a> - Network accessline 11
<a href="https://github.com/wheresryan22/anatomy/actions/workflows/ci.yml"><img src="https://github.com/wheresryan22/anatomy/actions/workflows/ci.yml/badge.svg" alt="CI"></a> - Network accessline 14
<p align="center"> <a href="https://skills.wheresryan.sh/anatomy"><img src="https://img.shields.io/badge/Website-skills.wheresryan.sh%2Fanatomy-1b1b19?style=for-the-badge" alt="Website: skills.wheresryan.sh/anatomy"></a> - Network accessline 15
<a href="https://skills.wheresryan.sh/anatomy"><img src="https://img.shields.io/badge/Website-skills.wheresryan.sh%2Fanatomy-1b1b19?style=for-the-badge" alt="Website: skills.wheresryan.sh/anatomy"></a> <a href="https://github.com - Network accessline 16
<a href="https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip"><img src="https://img.shields.io/badge/Download-ZIP-1b1b19?style=for-the-badge&logo=github&logoColor=white" alt="Download ZIP"></a> - Network accessline 17
<a href="https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip"><img src="https://img.shields.io/badge/Download-ZIP-1b1b19?style=for-the-badge&logo=github&logoColor=white" alt="Download ZIP"></a> - Network accessline 18
<a href="#install"><img src="https://img.shields.io/badge/Install-npx_skills_add-d7d7d0?style=for-the-badge&labelColor=1b1b19&logo=npm&logoColor=white" alt="Install with npx"></a> </p> - Network accessline 19
<a href="#install"><img src="https://img.shields.io/badge/Install-npx_skills_add-d7d7d0?style=for-the-badge&labelColor=1b1b19&logo=npm&logoColor=white" alt="Install with npx"></a> - Network accessline 100
Anatomy is a standard [Agent Skill](https://agentskills.io): a folder with a `SKILL.md` at its root. This repository is that folder. Pick one way in: - Network accessline 108
| **skills CLI**, for you (MiniMax Code) | `npx skills add wheresryan22/anatomy -g -a minimax-code` | `~/.minimax/skills/anatomy` | | **skills CLI**, for one project | `npx skills add wheresryan22/anatomy` | `.claude/skills/anatomy` for Cla - Network accessline 109
| **skills CLI**, for one project | `npx skills add wheresryan22/anatomy` | `.claude/skills/anatomy` for Claude Code, `.agents/skills/anatomy` for Antigravity, OpenCode and Codex, `.minimax/skills/anatomy` for MiniMax Code | | **git**, for - Network accessline 110
| **git**, for you (Claude Code) | `git clone https://github.com/wheresryan22/anatomy.git ~/.claude/skills/anatomy` | `~/.claude/skills/anatomy` | - Network accessline 111
| **git**, for you (Antigravity) | `git clone https://github.com/wheresryan22/anatomy.git ~/.gemini/antigravity/skills/anatomy` | `~/.gemini/antigravity/skills/anatomy` | - Network accessline 112
| **git**, for you (OpenCode) | `git clone https://github.com/wheresryan22/anatomy.git ~/.config/opencode/skills/anatomy` | `~/.config/opencode/skills/anatomy` | - Network accessline 113
| **git**, for you (Codex) | `git clone https://github.com/wheresryan22/anatomy.git ~/.agents/skills/anatomy` | `~/.agents/skills/anatomy` | - Network accessline 114
| **git**, for you (MiniMax Code) | `git clone https://github.com/wheresryan22/anatomy.git ~/.minimax/skills/anatomy` | `~/.minimax/skills/anatomy` | | **git**, for one project | `git clone https://github.com/wheresryan22/anatomy.git .claud - Network accessline 115
| **git**, for one project | `git clone https://github.com/wheresryan22/anatomy.git .claude/skills/anatomy` | `.claude/skills/anatomy` (Claude Code and OpenCode) or `.agents/skills/anatomy` (Antigravity, OpenCode, Codex and MiniMax Code) | - Network accessline 123
The [`skills`](https://github.com/vercel-labs/skills) CLI finds the `SKILL.md` at the root of this repository and installs it as `anatomy`. By default it installs into the current project and asks which agents to set up. `-g` installs it fo - Network accessline 143
[Download the ZIP](https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip), unpack it, rename the folder from `anatomy-main` to `anatomy`, and move it into `~/.claude/skills/` (Claude Code), `~/.gemini/antigravity/skills/` (Ant - Network accessline 148
mkdir -p ~/.claude/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.claude/skills/anatomy - Network accessline 154
mkdir -p ~/.gemini/antigravity/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.gemini/antigravity/skills/anatomy - Network accessline 158
mkdir -p ~/.config/opencode/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.config/opencode/skills/anatomy - Network accessline 299
| | Needed for | Notes | |---|---|---| | **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/sk - Network accessline 300
|---|---|---| | **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/skills) or [MiniMax Code](h - Network accessline 301
| **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/skills) or [MiniMax Code](https://github. - Network accessline 318
Made something good? Ask your agent to *"publish this figure to the Anatomy community gallery"*. It asks for a title and your GitHub name, shows what it will send, and after your yes opens a pull request on [anatomy-community](https://githu - Network accessline 324
- [Report a bug](https://github.com/wheresryan22/anatomy/issues/new?template=bug_report.yml) - Network accessline 325
- [Request a figure](https://github.com/wheresryan22/anatomy/issues/new?template=figure_request.yml) - Network accessline 330
[MIT](LICENSE) © 2026 Ryan · [@wheresryan22](https://x.com/wheresryan22)
SECURITY.md
- Network accessline 15
Please don't open a public issue for a security problem. Report it privately through GitHub's [private vulnerability reporting](https://github.com/wheresryan22/anatomy/security/advisories/new) for this repository. If that link does not work
examples/arcade-cabinet/arcade-cabinet-light.html
- Network accessline 159
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 160
.iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round} .iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plat - Network accessline 161
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="arcade-cabinet-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12 - Network accessline 692
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 693
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 694
xmlns: "http://www.w3.org/2000/svg",
examples/arcade-cabinet/arcade-cabinet.html
- Network accessline 159
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 160
.iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round} .iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plat - Network accessline 161
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="arcade-cabinet-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12 - Network accessline 692
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 693
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 694
xmlns: "http://www.w3.org/2000/svg",
examples/arcade-cabinet/build.mjs
- Executable scriptline 1
Executable file
examples/arcade-cabinet/live.js
- Executable scriptline 1
Executable file
examples/arcade-cabinet/parts.mjs
- Executable scriptline 1
Executable file
examples/arcade-cabinet/screen.mjs
- Executable scriptline 1
Executable file
examples/arcade-cabinet/sheet.mjs
- Executable scriptline 1
Executable file
examples/desk-computer/build.mjs
- Executable scriptline 1
Executable file
examples/desk-computer/desk-computer-light.html
- Network accessline 135
.iso-stage:focus{outline:none} .iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso- - Network accessline 136
.iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig" - Network accessline 137
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 2</span><span class="iso-plate-corner" data-corner="title">Desk computer</span> - Network accessline 668
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 669
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 670
xmlns: "http://www.w3.org/2000/svg",
examples/desk-computer/desk-computer.html
- Network accessline 135
.iso-stage:focus{outline:none} .iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso- - Network accessline 136
.iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig" - Network accessline 137
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 2</span><span class="iso-plate-corner" data-corner="title">Desk computer</span> - Network accessline 668
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 669
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 670
xmlns: "http://www.w3.org/2000/svg",
examples/dial-indicator/build.mjs
- Executable scriptline 1
Executable file
examples/dial-indicator/dial-indicator-light.html
- Network accessline 112
body{margin:0;background:var(--anatomy-page);color:var(--anatomy-text);font:14px/1.6 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased} .iso-page{width:min(650px,100% - 32px);margin:64px auto 96p - Network accessline 113
.iso-page{width:min(650px,100% - 32px);margin:64px auto 96px} </style></head><body class="iso" data-theme="light"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><sp - Network accessline 114
</style></head><body class="iso" data-theme="light"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><spa - Network accessline 645
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 646
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 647
xmlns: "http://www.w3.org/2000/svg",
examples/dial-indicator/dial-indicator.html
- Network accessline 112
body{margin:0;background:var(--anatomy-page);color:var(--anatomy-text);font:14px/1.6 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased} .iso-page{width:min(650px,100% - 32px);margin:64px auto 96p - Network accessline 113
.iso-page{width:min(650px,100% - 32px);margin:64px auto 96px} </style></head><body class="iso" data-theme="dark"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><spa - Network accessline 114
</style></head><body class="iso" data-theme="dark"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span - Network accessline 645
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 646
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 647
xmlns: "http://www.w3.org/2000/svg",
examples/push-button/build.mjs
- Executable scriptline 1
Executable file
examples/push-button/push-button-light.html
- Network accessline 126
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 127
.iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round} .iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plat - Network accessline 128
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="push-button-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12" a - Network accessline 659
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 660
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 661
xmlns: "http://www.w3.org/2000/svg",
examples/push-button/push-button.html
- Network accessline 126
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 127
.iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round} .iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plat - Network accessline 128
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="push-button-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12" a - Network accessline 659
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 660
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 661
xmlns: "http://www.w3.org/2000/svg",
examples/push-button/sheet.mjs
- Executable scriptline 1
Executable file
examples/raptor-engine/build.mjs
- Executable scriptline 1
Executable file - Network accessline 890
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL_TEXT, body: back, className: "rp-back" }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-front" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g clas - Network accessline 891
const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-front" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g class="rp-engine">${groups.join("")}</g></svg>`; - Network accessline 924
const corners = `<div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">Raptor 2 · test stand</span><span class="iso-plate-corner" da - Network accessline 925
const controls = `<div class="rp-controls"><button type="button" class="rp-fire" data-fire><span class="rp-lamp" aria-hidden="true"></span><span data-fire-label>Ignite</span></button><span class="rp-hint">Hover the engine to take it apart</ - Network accessline 926
const glowSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-glow" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g class="rp-glow-g"><path class="rp-rim rp-rim-soft" d="${LIP}"/><path class="rp-rim" d="${LIP}"/></g></svg>`;
examples/raptor-engine/live.js
- Executable scriptline 1
Executable file
examples/raptor-engine/raptor-engine-light.html
- Network accessline 474
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 476
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="raptor-engine-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12"
examples/raptor-engine/raptor-engine.html
- Network accessline 474
.iso-plate-pdf:hover,.iso-plate-pdf:focus-visible{color:var(--anatomy-strong);background:color-mix(in srgb,var(--anatomy-text) 14%,transparent);outline:none} .iso-plate-pdf svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-wid - Network accessline 476
.iso-plate:has(.iso-plate-pdf) .iso-plate-corner[data-corner="title"]{right:52px}</style><a class="iso-plate-pdf" href="raptor-engine-poster-a4.pdf" target="_blank" rel="noopener" aria-label="Open the printable PDF"><svg viewBox="0 0 12 12"
examples/raptor-engine/sheet.mjs
- Executable scriptline 1
Executable file
examples/ripple-tank/build.mjs
- Executable scriptline 1
Executable file - Network accessline 529
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL_TEXT, body: back, className: "rt-back" }); const layerSvg = (name, body) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rt-layer ${name}" viewBox="0 0 ${W} ${H}" ar - Network accessline 530
const layerSvg = (name, body) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rt-layer ${name}" viewBox="0 0 ${W} ${H}" aria-hidden="true">${body.join("")}</svg>`;
examples/ripple-tank/live.js
- Executable scriptline 1
Executable file
examples/ripple-tank/model.mjs
- Executable scriptline 1
Executable file
examples/ripple-tank/ripple-tank-light.html
- Network accessline 215
} } </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title"> - Network accessline 216
} </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ri - Network accessline 217
</style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ripp - Network accessline 748
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 749
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 750
xmlns: "http://www.w3.org/2000/svg",
examples/ripple-tank/ripple-tank.html
- Network accessline 215
} } </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title"> - Network accessline 216
} </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ri - Network accessline 217
</style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ripp - Network accessline 748
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 749
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 750
xmlns: "http://www.w3.org/2000/svg",
examples/spot-plate/art.tsx
- Executable scriptline 1
Executable file
examples/spot-plate/drops.ts
- Executable scriptline 1
Executable file
examples/spot-plate/fan.ts
- Executable scriptline 1
Executable file
examples/spot-plate/figure.tsx
- Executable scriptline 1
Executable file
examples/spot-plate/geometry.ts
- Executable scriptline 1
Executable file
examples/spot-plate/live.tsx
- Executable scriptline 1
Executable file
examples/spot-plate/rig.ts
- Executable scriptline 1
Executable file
examples/test-rig/art.tsx
- Executable scriptline 1
Executable file
examples/test-rig/figure.tsx
- Executable scriptline 1
Executable file
examples/test-rig/geometry.ts
- Executable scriptline 1
Executable file
examples/test-rig/live.tsx
- Executable scriptline 1
Executable file
examples/test-rig/pose.ts
- Executable scriptline 1
Executable file
examples/test-rig/rig.ts
- Executable scriptline 1
Executable file
examples/test-rig/view.ts
- Executable scriptline 1
Executable file
examples/turning-dial/build.mjs
- Executable scriptline 1
Executable file - Network accessline 449
const LABEL = "A combination dial on a raised door plate. A small robot hand lies on the dial's hub and turns with it: a palm with a cover plate, a connector block, a piston on two saddles with a ball joint, three jointed fingers whose tips - Network accessline 450
const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: LABEL, body: BACK }); const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${li - Network accessline 451
const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${list.join("")}</svg>`;
examples/turning-dial/live.js
- Executable scriptline 1
Executable file
examples/turning-dial/stress.mjs
- Executable scriptline 1
Executable file - Network accessline 191
for (let f = 0; f < 5; f++) { const tag = f < 4 ? `f${f}` : "thumb"; const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; - Network accessline 192
const tag = f < 4 ? `f${f}` : "thumb"; const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; out[`${tag}.j0`] = -5 + 10 * curl; - Network accessline 193
const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; - Network accessline 223
const BACK = [`<path class="iso-halo" d="${k.haloOf(BENCH, BENCH_TOP - 6, 6, P)}"/>`, ...layerOf("back")]; const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: "A dense robot hand on a turntable in a workshop: a stress scene f - Network accessline 224
const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: "A dense robot hand on a turntable in a workshop: a stress scene for the 3D mode.", body: BACK }); const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class - Network accessline 225
const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${list.join("")}</svg>`;
examples/turning-dial/turning-dial-light.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
examples/turning-dial/turning-dial-verify-light.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
examples/turning-dial/turning-dial.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
examples/turning-dial/turning-stress-light.html
- Network accessline 157
.iso-turn{position:relative} .iso-turn>.iso-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none} .ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robo - Network accessline 158
.iso-turn>.iso-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none} .ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robot hand turning on a turntable - Network accessline 159
.ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robot hand turning on a turntable"><svg xmlns="http://www.w3.org/2000/svg" class="iso-svg" viewBox="0 0 760 560" role="img"
kit/audit.mjs
- Executable scriptline 1
Executable file - Dangerous shell operationline 230
const rm = Math.max(...poly.map(([, r]) => r)); - Dangerous shell operationline 233
const spread = [0, 1, 2].map((i) => rm * Math.sqrt(Math.max(0, 1 - F.a[i] * F.a[i]))); - Dangerous shell operationline 340
const { aV, uV, vV, s0, s1, rm } = shape._f; - Dangerous shell operationline 356
const qc = xc * xc + yc * yc - rm * rm; - Dangerous shell operationline 362
} else if (xc * xc + yc * yc > rm * rm) return null;
kit/canvas-painter.mjs
- Network accessline 1
const CP_Q = 64; const CP_SVG = "http://www.w3.org/2000/svg"; - Executable scriptline 1
Executable file - Network accessline 2
const CP_SVG = "http://www.w3.org/2000/svg"; - Network accessline 689
const theme = holder ? holder.getAttribute("data-theme") : "dark"; const card = getComputedStyle(stage.closest(".iso-plate") || stage).getPropertyValue("--anatomy-card").trim() || "#fff"; return `<svg xmlns="http://www.w3.org/20 - Network accessline 690
const card = getComputedStyle(stage.closest(".iso-plate") || stage).getPropertyValue("--anatomy-card").trim() || "#fff"; return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}"><style>${css.r - Network accessline 691
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}"><style>${css.replace(/<\/style/gi, "")}</style><g class="iso" data-theme="${theme}"><g class="iso-plate" style="padding:0;box-shadow:none">${
kit/gl-shared.mjs
- Executable scriptline 1
Executable file
kit/gl.mjs
- Executable scriptline 1
Executable file
kit/iso-kit.mjs
- Executable scriptline 1
Executable file - Network accessline 532
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 533
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 534
xmlns: "http://www.w3.org/2000/svg",
kit/iso-kit.ts
- Executable scriptline 1
Executable file - Network accessline 669
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 670
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 671
xmlns: "http://www.w3.org/2000/svg",
kit/lathe.mjs
- Executable scriptline 1
Executable file
kit/pdf-button.mjs
- Executable scriptline 1
Executable file
kit/react/draw.tsx
- Executable scriptline 1
Executable file
kit/react/live.tsx
- Executable scriptline 1
Executable file
kit/tube.mjs
- Executable scriptline 1
Executable file
kit/turn-audit.mjs
kit/turn-build.mjs
- Executable scriptline 1
Executable file - Network accessline 1275
}; const out = { svg: markup, data: packed, css: TURN_CSS, report, scene, frames, planesByName }; out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-l - Network accessline 1276
const out = { svg: markup, data: packed, css: TURN_CSS, report, scene, frames, planesByName }; out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-live=" - Network accessline 1277
out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-live="${esc(name)}" viewBox="0 0 ${width} ${height}" aria-hidden="true"${label ? ` aria-label="${esc(la
kit/turn-fixed.mjs
kit/turn.mjs
references/verify.md
- Network accessline 14
node scripts/capture.mjs page.html --out shots/joint.png --zoom 200,80,220,170 # close-up at 4x, in card px node scripts/capture.mjs page.html --out shots/still.png --reduced # reduced motion node scripts/capture.mjs http://lo - Network accessline 16
node scripts/capture.mjs http://localhost:3000/docs --select "figure:nth-of-type(3) .iso-plate" # one figure on a dev-server page
references/webgl.md
- Network accessline 166
const DATA = { W, H, camera: glCamera(P), plateR: 40, deck: [DECK.w / 2, DECK.r] }; const backSvg = k.figureSvg({ width: W, height: H, label: LABEL, body: back }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx- - Network accessline 167
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL, body: back }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx-layer" viewBox="0 0 ${W} ${H}" aria-hidden="true">${front.join("")}</svg>`; const st - Network accessline 168
const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx-layer" viewBox="0 0 ${W} ${H}" aria-hidden="true">${front.join("")}</svg>`;
scripts/audit-affine-bounds.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-cache.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-clearance-envelope.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-empty-clipping.test.mjs
- Executable scriptline 1
Executable file - Network accessline 21
try{ const page=join(directory,"figure.html");await writeFile(page,'<!doctype html><div class="iso-plate"></div>'); const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fi - Network accessline 22
const page=join(directory,"figure.html");await writeFile(page,'<!doctype html><div class="iso-plate"></div>'); const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fixtures) - Network accessline 23
const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fixtures){const svg='<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">'+m+'</svg>';const
scripts/audit-order-convergence.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-path-origin.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-profile.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-projection.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-slide-clearance.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-svg-attributes.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-taper.test.mjs
- Executable scriptline 1
Executable file
scripts/audit-tube-support.test.mjs
- Executable scriptline 1
Executable file
scripts/capture-current-geometry.test.mjs
- Executable scriptline 1
Executable file
scripts/capture-selector.test.mjs
- Executable scriptline 1
Executable file - Network accessline 15
const out = join(directory, "capture.png"); const content = svgOnly ? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>' - Network accessline 16
const content = svgOnly ? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>' : `<div class="iso-plate" tabindex="0" id="first" style="width:100px;height:80px;backgr - Network accessline 17
? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>'
scripts/capture.mjs
- Executable scriptline 1
Executable file - Network accessline 145
}; try { const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 146
try { const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(target.webSocketDebuggerUrl); - Network accessline 147
const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json();
scripts/capture.test.mjs
- Executable scriptline 1
Executable file
scripts/chrome-port.mjs
- Executable scriptline 1
Executable file
scripts/chrome-startup.test.mjs
- Executable scriptline 1
Executable file
scripts/curve-density.test.mjs
- Executable scriptline 1
Executable file
scripts/drive-actions.test.mjs
- Executable scriptline 1
Executable file
scripts/drive-async-until.test.mjs
- Executable scriptline 1
Executable file
scripts/drive-page-load.test.mjs
- Executable scriptline 1
Executable file - Network accessline 25
const { port } = server.address(); const actions = JSON.stringify([["eval", "document.readyState + ' ' + Boolean(window.slowScriptRan)"]]); const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions] - Network accessline 26
const actions = JSON.stringify([["eval", "document.readyState + ' ' + Boolean(window.slowScriptRan)"]]); const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions], { timeout: 30000 }); assert.match - Network accessline 27
const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions], { timeout: 30000 });
scripts/drive-turn-controller.test.mjs
- Executable scriptline 1
Executable file
scripts/drive.mjs
- Executable scriptline 1
Executable file - Network accessline 143
}; try { const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 144
try { const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(page.webSocketDebuggerUrl); - Network accessline 145
const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json();
scripts/drive.test.mjs
- Executable scriptline 1
Executable file
scripts/enter-key.test.mjs
- Executable scriptline 1
Executable file
scripts/fidelity-cut.test.mjs
- Executable scriptline 1
Executable file
scripts/fidelity-tube-coverage.test.mjs
- Executable scriptline 1
Executable file
scripts/fingerprint.mjs
- Executable scriptline 1
Executable file
scripts/inline-kit.mjs
- Executable scriptline 1
Executable file
scripts/line-ends.mjs
- Executable scriptline 1
Executable file - Network accessline 116
} else if (C === "A") { const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); - Network accessline 117
else if (C === "A") { const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); arc.setAttribute("d", `M${x} ${y}${command}${args}`); - Network accessline 118
const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); - Network accessline 306
problems.sort((a, b) => b.gap - a.gap); if (show) { const ns = "http://www.w3.org/2000/svg"; - Network accessline 307
if (show) { const ns = "http://www.w3.org/2000/svg"; const overlay = document.createElementNS(ns, "svg"); - Network accessline 308
const ns = "http://www.w3.org/2000/svg";
scripts/lines-arcs.test.mjs
- Executable scriptline 1
Executable file
scripts/lines-bezier.test.mjs
- Executable scriptline 1
Executable file
scripts/lines-round.test.mjs
- Executable scriptline 1
Executable file
scripts/lines-rounded-rect.test.mjs
- Executable scriptline 1
Executable file
scripts/lines.mjs
- Executable scriptline 1
Executable file
scripts/lines.test.mjs
- Executable scriptline 1
Executable file
scripts/navigation.test.mjs
- Executable scriptline 1
Executable file - Network accessline 19
const server = createServer(); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); target = `http://127.0.0.1:${server.address().port}/`; - Network accessline 20
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); target = `http://127.0.0.1:${server.address().port}/`; await new Promise((resolve) => server.close(resolve)); - Network accessline 21
target = `http://127.0.0.1:${server.address().port}/`;
scripts/orbit-sampling.test.mjs
- Executable scriptline 1
Executable file
scripts/print-sheet.mjs
- Executable scriptline 1
Executable file
scripts/print-sheet.test.mjs
- Executable scriptline 1
Executable file
scripts/print.mjs
- Executable scriptline 1
Executable file
scripts/publish.mjs
- Executable scriptline 1
Executable file - Network accessline 251
...(canPush ? [] : [{ say: `make (or reuse) your fork, ${target}`, gh: ["repo", "fork", upstream, "--clone=false"] }]), { say: "let git use your GitHub CLI login", gh: ["auth", "setup-git"] }, { say: `start ${branch} from the galler - Network accessline 252
{ say: "let git use your GitHub CLI login", gh: ["auth", "setup-git"] }, { say: `start ${branch} from the gallery's latest main`, git: ["fetch", "--quiet", `https://github.com/${upstream}.git`, "main"] }, { git: ["switch", "--quiet" - Network accessline 253
{ say: `start ${branch} from the gallery's latest main`, git: ["fetch", "--quiet", `https://github.com/${upstream}.git`, "main"] }, - Network accessline 256
{ git: ["add", "--", folder] }, { git: ["commit", "--quiet", "-m", `Add ${title}`, "--", folder] }, { say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] - Network accessline 257
{ git: ["commit", "--quiet", "-m", `Add ${title}`, "--", folder] }, { say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] }, { say: `open the pull request - Network accessline 258
{ say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] }, - Network accessline 275
const repo = resolve(options.into); const who = gh(["api", "user", "--jq", ".login"]); if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth - Network accessline 276
const who = gh(["api", "user", "--jq", ".login"]); if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth login"); const login = who.stdout.tr - Network accessline 277
if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth login");
scripts/publish.test.mjs
- Executable scriptline 1
Executable file
scripts/react-dots-opacity.test.mjs
- Executable scriptline 1
Executable file
scripts/react-readout-first-write.test.mjs
- Executable scriptline 1
Executable file
scripts/react-readout-target.test.mjs
- Executable scriptline 1
Executable file
scripts/react-solid-seamless.test.mjs
- Executable scriptline 1
Executable file
scripts/react-visibility-target.test.mjs
- Executable scriptline 1
Executable file
scripts/session.mjs
- Executable scriptline 1
Executable file
scripts/session.test.mjs
- Executable scriptline 1
Executable file
scripts/turn-audit-samples.test.mjs
- Executable scriptline 1
Executable file
scripts/turn-bench.mjs
- Executable scriptline 1
Executable file
scripts/turn-check.mjs
- Executable scriptline 1
Executable file - Network accessline 62
const chrome = spawn(binary, ["--headless=new", ...(process.platform === "linux" ? ["--no-sandbox"] : []), ...(process.platform === "win32" ? ["--do-not-de-elevate"] : []), "--remote-debugging-port=0", `--user-data-dir=${profile}`, "--no-fi - Network accessline 63
const port = await chromePort(chrome, profile); const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(page.webSocketDebuggerUrl); - Network accessline 64
const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 297
} } return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; - Network accessline 298
} return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; }; - Network accessline 299
return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; - Network accessline 369
const h = H * SCALE; let hidden = null; const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anat - Network accessline 370
let hidden = null; const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anatomy-paper:var(--anatomy - Network accessline 371
const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anatomy-paper:var(--anatomy-card)"><style>' + cs - Network accessline 613
if (argv.includes("--lines")) { const angles = Array.from({ length: 24 }, (_, i) => i * 15); const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); - Network accessline 614
const angles = Array.from({ length: 24 }, (_, i) => i * 15); const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); const el = document.createElementNS("h - Network accessline 615
const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); const el = document.createElementNS("http://www.w3.org/2000/svg", "path"); el.setAttribute("class", "iso-
scripts/turn-convex-check.test.mjs
- Executable scriptline 1
Executable file
scripts/turn-fidelity.mjs
- Executable scriptline 1
Executable file
scripts/turn-group-reference.test.mjs
- Executable scriptline 1
Executable file
scripts/turn-rounded-polygon.test.mjs
- Executable scriptline 1
Executable file
scripts/turn-split-owner.test.mjs
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 10 facts
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionexamples/raptor-engine/build.mjs:891High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionexamples/ripple-tank/build.mjs:530High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionexamples/turning-dial/build.mjs:451High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionexamples/turning-dial/stress.mjs:225High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionkit/canvas-painter.mjs:2High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionkit/iso-kit.mjs:534High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionkit/iso-kit.ts:671High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionkit/turn-build.mjs:1277High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionscripts/line-ends.mjs:118High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionscripts/turn-check.mjs:299High confidence
Signal confidence: 249 facts
- Network access in prose of documentationCHANGELOG.md:3Low confidence
- Network access in prose of documentationCHANGELOG.md:15Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:61Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:62Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:63Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:64Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:65Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:119Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:121Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:126Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:127Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:128Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:130Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:131Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:132Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:133Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:134Low confidence
- Network access in code of documentationCONTRIBUTING.md:16Low confidence
- Network access in prose of documentationCONTRIBUTING.md:167Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in prose of documentationREADME.md:6Low confidence
- Network access in prose of documentationREADME.md:7Low confidence
- Network access in prose of documentationREADME.md:8Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Network access in prose of documentationREADME.md:10Low confidence
- Network access in prose of documentationREADME.md:11Low confidence
- Network access in prose of documentationREADME.md:14Low confidence
- Network access in prose of documentationREADME.md:15Low confidence
- Network access in prose of documentationREADME.md:16Low confidence
- Network access in prose of documentationREADME.md:17Low confidence
- Network access in prose of documentationREADME.md:18Low confidence
- Network access in prose of documentationREADME.md:19Low confidence
- Network access in prose of documentationREADME.md:100Low confidence
- Network access in prose of documentationREADME.md:108Low confidence
- Network access in prose of documentationREADME.md:109Low confidence
- Network access in prose of documentationREADME.md:110Low confidence
- Network access in prose of documentationREADME.md:111Low confidence
- Network access in prose of documentationREADME.md:112Low confidence
- Network access in prose of documentationREADME.md:113Low confidence
- Network access in prose of documentationREADME.md:114Low confidence
- Network access in prose of documentationREADME.md:115Low confidence
- Network access in prose of documentationREADME.md:123Low confidence
- Network access in prose of documentationREADME.md:143Low confidence
- Network access in code of documentationREADME.md:148Low confidence
- Network access in code of documentationREADME.md:154Low confidence
- Network access in code of documentationREADME.md:158Low confidence
- Network access in prose of documentationREADME.md:299Low confidence
- Network access in prose of documentationREADME.md:300Low confidence
- Network access in prose of documentationREADME.md:301Low confidence
- Network access in prose of documentationREADME.md:318Low confidence
and 199 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/wheresryan22-anatomy/)