{"slug":"scenario-zbrush-sculpting","title":"scenario-zbrush-sculpting","summary":"Use when an agent sculpts organic forms in ZBrush 2026 (sculpt a head, bust or creature in ZBrush from a sphere, ZSpheres or primitives); when blocking primary and secondary forms, choosing DynaMesh, Sculptris Pro or subdivision levels, or setting ClayBuildup, Dam_Standard, Move ","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-17T09:10:59.399058Z","repo":{"url":"https://github.com/scenario-labs/skills","stars":1035,"forks":129,"license":"MIT","updatedAt":"2026-10-17T05:01:44Z"},"bodyHtml":"<hr>\n<h2>name: scenario-zbrush-sculpting\ndescription: \"Use when an agent sculpts organic forms in ZBrush 2026 (sculpt a head, bust or creature in ZBrush from a sphere, ZSpheres or primitives); when blocking primary and secondary forms, choosing DynaMesh, Sculptris Pro or subdivision levels, or setting ClayBuildup, Dam_Standard, Move or TrimDynamic; when using masks, polygroups, Morph Targets or layers; or when scripted strokes miss, do nothing, come out too strong or leave marks, or a re-DynaMesh does nothing or loses polygroups.\"\nlicense: MIT</h2>\n<h1>ZBrush sculpting (core forms, scripted strokes)</h1>\n<p>Expert sculpting goes big to small with gates: light meshes raised in resolution only when the forms ask, clay built across the form in thin low-intensity layers, sharpness last and never on weak shapes. An agent has no pen: it uses exact operations first (primitives, ZSpheres, DynaMesh, masks plus Deformation sliders), then strokes planned from model-space forms, aimed through the view, measured in volume and reviewed after every pass (<a href=\"scripts/zb_sculpt.py\"><code>scripts/zb_sculpt.py</code></a>). If a sibling skill named here is missing from your available skills, ask the user to install it (<code>npx skills add scenario-labs/skills --skill &lt;name&gt;</code>); unattended, proceed from tool schemas and flag the gap.</p>\n<p><strong>REQUIRED BACKGROUND:</strong> scenario-zbrush-expert (bridge, stroke engine, review loop, 2026 traps).</p>\n<h2>Stance (the expert delta)</h2>\n<ul>\n<li><strong>Pressure is the hidden setting.</strong> Henning Sanden blocks at ClayBuildup Z 20 with \"maybe 30%\" of his pen pressure (0PaYUUvgwYM 00:04:58); a scripted stroke has constant pressure. Start clay at Z 6, refine at 2 to 1, calibrate once per session (<code>zs.run_calibration</code>), and dial a whole pass after review: a partial Morph value softens it, a negative one exaggerates it (Drust, B_wKwXwjcZs 00:05:20); layer intensity does the same on levels.</li>\n<li><strong>Clay across the form, lines along it.</strong> Henning: across puts a peak in the center that fades to the edges; along is \"drawing the shape\" (0PaYUUvgwYM 00:02:13, 00:30:39). Pablo Munoz Gomez builds long masses along first, then smaller strokes across, never a muscle in one stroke (tbQqC6tyDBQ 00:06:32). Each form is a center line plus a width.</li>\n<li><strong>Standard sets edges, clay builds, ClayBuildup erases.</strong> Standard pushes what is there, so it gives specificity (Henning 0PaYUUvgwYM 00:27:26); ClayBuildup replaces what is under it, never after detail (TpS0QdlfHWU 00:07:44). Pablo sets a hard edge with Standard at raised Z, then blends it with clay (tbQqC6tyDBQ 00:10:27).</li>\n<li><strong>Refine instead of smoothing, except on low-res blockouts.</strong> Henning removes marks with passes of falling intensity and smooths once at \"good enough\" (TpS0QdlfHWU 00:22:26, 00:22:58); Pablo smooths freely during blockout (tbQqC6tyDBQ 00:02:29). Low-res S1: a Polish slider; skin from S2 on: the descent.</li>\n<li><strong>DynaMesh while the forms move, levels once they settle.</strong> A high DynaMesh early is a \"lumpy mess\" (Pablo tbQqC6tyDBQ 00:04:38) and resolution is relative to object size (FrqUnna1jns 00:13:40). Never Divide a DynaMesh: its triangles and star poles become lumps no smoothing fixes (rArw79xEpvE 00:09:44). ZRemesher a copy, Divide, project.</li>\n<li><strong>Level discipline.</strong> Big moves at SDiv 1 (at the top a push \"looks very wonky\"); secondary forms blocked at SDiv 2 or 3, then refined upward level by level; never all the work at the top (Pablo rArw79xEpvE 00:12:28, 00:14:16; tbQqC6tyDBQ 00:12:26). Details never change the silhouette (tbQqC6tyDBQ 00:13:27).</li>\n<li><strong>Strokeless first.</strong> Pablo builds a whole blockout \"without even actually using any of the brushes\" (gitoJ7B8FmY 00:05:26). For an agent these are exact: primitives placed by number, ZSpheres by code, masks plus Deformation sliders, Mirror then Mirror And Weld.</li>\n<li><strong>Mid frequency is where a sculpt is won.</strong> FlippedNormals call it the backbone of detailing; pores added early put you \"two levels behind\" (G2o6fdoACIQ 00:05:46, 00:08:17). Details \"won't fix a weak sculpt\" (Pablo tbQqC6tyDBQ 00:12:50).</li>\n</ul>\n<h2>Establish first</h2>\n<table>\n<thead>\n<tr>\n<th>Input</th>\n<th>What it changes</th>\n<th>Default when the brief is silent</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Subject</td>\n<td>base route and point ladder (<code>STAGES[...][\"points\"]</code>): head, creature</td>\n<td>head bust from a sphere</td>\n</tr>\n<tr>\n<td>Purpose</td>\n<td>concept: stop at S3 or S4, even quads suffice (tbQqC6tyDBQ 00:11:43); film or game: retopology before micro detail (Zp07GW3rND0 00:08:22); print: scenario-zbrush-pose-print</td>\n<td>concept</td>\n</tr>\n<tr>\n<td>Style</td>\n<td>realistic: scenario-zbrush-character-creature; stylized: scenario-zbrush-stylized</td>\n<td>neutral forms</td>\n</tr>\n<tr>\n<td>Forms list</td>\n<td><code>zs.Form</code> center lines plus widths, from the brief and the domain skill's proportions</td>\n<td>none: ask the domain skill</td>\n</tr>\n<tr>\n<td>Head width in model units (<code>ref_width</code>)</td>\n<td>every brush size</td>\n<td>model width in the front view</td>\n</tr>\n<tr>\n<td>Views</td>\n<td>front is measured [obj]; others need the live_04 convention</td>\n<td>front</td>\n</tr>\n</tbody>\n</table>\n<h2>Workflow</h2>\n<p>Every pass: <code>Scene.capture</code>, plan (<code>clay_pass</code>, <code>move_pass</code>, <code>crease_pass</code>), <code>preview_plan</code> (look at it), <code>run_plan</code>, <code>pass_report</code>, <code>zb_review.review</code>, then name the ONE weakest item and fix it. Save a versioned ZTL at every gate.</p>\n<ol start=\"0\">\n<li><p><strong>Session.</strong> <code>zb_launch.start()</code>, neutral state (P1), calibration (P2). Every pass turns perspective (<code>Draw:Perspective</code>) and LazyMouse off: its radius swallows the start of a synthesized path (Pavlovich AdkZe1yKFTU 00:03:31). GATE: document zoom 1, calibration present or the v02 prior noted.</p>\n</li>\n<li><p><strong>S0 base.</strong> One of: a sphere DynaMesh at 128 (about 43k points); a ZSphere armature (<code>zsphere_code</code>) with an Adaptive Skin at Density 1 or 2 and DynaMesh Resolution 0 (Pablo), then DynaMesh 64; primitives appended and placed with Geometry Position and Size (P3). GATE: the silhouette reads front and side; points within S0.</p>\n</li>\n<li><p><strong>S1 primary blockout.</strong></p>\n<ul>\n<li>Move then re-DynaMesh (<code>move_pass</code>, <code>remesh_due</code>, then <code>remesh_code</code>, P16: Draw mode, mask cleared, polypaint off so polygroups survive, proof that it remeshed).</li>\n<li>Clay across the forms (<code>clay_pass</code>, preset <code>clay_block</code>); sockets as carve forms (<code>sign=-1</code>); TrimDynamic planes (<code>preset=\"trim\"</code>). Symmetry on: plans cover the +X half.</li>\n</ul>\n<p>GATE: <code>stage_gate(\"S1\")</code> passes; the sheet shows right proportions, every element present (G2o6fdoACIQ 00:02:50), big simple masses.</p>\n</li>\n<li><p><strong>S2 primary refinement.</strong></p>\n<ul>\n<li>Resolution up: head by the square law (<code>next_dynamesh_resolution</code>) toward 400k to 800k points; creature: MergeDown the pieces (in place; MergeVisible makes a new Tool; its confirmation may block the bridge [verify], so ZTL first), DynaMesh 256.</li>\n<li>Descent passes Z 6, 3, 2, 1, zooming in on each region (<code>descent</code>, P7); TrimDynamic on junk bumps.</li>\n<li>Eyes (P17): eyeball spheres placed by number, each turned 3 to 7 degrees outward (Costa j5XLtLMN0P8 00:29:10); lids cut with Dam_Standard, then moved out so they wrap the ball (Henning TpS0QdlfHWU 00:18:33). Henning shapes them with perspective on (00:17:28): strokes stay orthographic, the read is <code>persp_snapshot_code</code>.</li>\n<li>Checkpoint risky passes and dial them (P8) before any re-DynaMesh, ZRemesher or Divide: a point-count change destroys the Morph Target, and <code>dial_code(..., expect_points=)</code> refuses.</li>\n</ul>\n<p>GATE: clean shapes under Red Wax, no stretched faces, stroke marks falling.</p>\n</li>\n<li><p><strong>Leave DynaMesh</strong> when the forms are settled and S3 needs levels, retopology is coming, or later big changes must survive detail. Henning's DynaMesh-only ladder to 648 suits a concept still: state which route and why. Levels (P11): versioned ZTL, Duplicate, ZRemesher the copy, Divide until <code>projection_ready</code>, then the toolkit's <code>zb_ops.project_all(checkpoint=...)</code>, which carries the safe order (versioned save, StoreMT and a New Layer at the top level, PA Blur lowered, a gate, <code>morph_repair</code>); never re-implement it.</p>\n<p>GATE: target points at least the sketch's, volume within 1 % [added], the sheet unchanged, eyes and mouth checked level by level (repair: scenario-zbrush-retopology-export).</p>\n</li>\n<li><p><strong>S3 secondary.</strong></p>\n<ul>\n<li>On levels (P15): <code>level_for(\"secondary\")</code> (SDiv 2 or 3), then <code>\"refine\"</code> one level up at a time; big fixes return to <code>level_for(\"big\")</code> = SDiv 1; the top level only for tertiary and layers.</li>\n<li>Symmetry off for the asymmetry pass; <code>pattern=\"two_direction\"</code> on long masses; preset <code>clay_secondary</code>.</li>\n</ul>\n<p>GATE: <code>mirror_asymmetry</code> above zero, the mid band above S2, the sculpt reads at thumbnail size without detail.</p>\n</li>\n<li><p><strong>S4 contrast.</strong> Dam_Standard along the creases (<code>crease_pass</code>), deeper than feels right (0PaYUUvgwYM 00:19:49); Standard at raised Z on lids, lips and brow edges (<code>preset=\"standard\"</code>), blended with clay; <code>fill_between</code> two cuts. GATE: shape IoU against S3 of at least 0.98 [added]; crease depth varies along the line.</p>\n</li>\n<li><p><strong>Hand off</strong> S5 and S6 to the domain skill with the P14 package.</p>\n</li>\n</ol>\n<h2>Numbers</h2>\n<table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Number</th>\n<th>Relative to</th>\n<th>Source</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Scripted Z, clay</td>\n<td>block 6, refine 2, finish 2; descent 6, 3, 2, 1</td>\n<td>expert Z times 0.3 pressure</td>\n<td>Henning 00:04:58; digest derivation</td>\n</tr>\n<tr>\n<td>Brush diameter</td>\n<td>clay block 15 to 35 %, secondary 10 to 15 %, refine 3 to 8 %, Dam 3 to 7 %, Standard 1 to 2 %, Move design 60 to 90 %, Move local 10 to 15 %</td>\n<td>head width in view (Draw Size is canvas pixels: <code>zb_sculpt</code> converts through ppu); clay kept within 0.5 to 1.0 of the form width</td>\n<td>FlippedNormals frames; digest T1</td>\n</tr>\n<tr>\n<td>ClayBuildup</td>\n<td>FreeHand, Focal -56, Alpha 06 or Off; Imbed 20, Roll Dist about 6</td>\n<td></td>\n<td>Henning; Morten; Pablo frame 00:05:55</td>\n</tr>\n<tr>\n<td>Dam_Standard</td>\n<td>Dots, Focal -14, Zsub, Z 15 (33 for big cuts)</td>\n<td>\"ten below where it starts\"</td>\n<td>0PaYUUvgwYM 00:18:42; TpS0QdlfHWU</td>\n</tr>\n<tr>\n<td>Move / TrimDynamic</td>\n<td>Focal 0, Z 51 / Focal -56, Z 43 lowered, Zsub</td>\n<td></td>\n<td>TpS0QdlfHWU frames</td>\n</tr>\n<tr>\n<td>Head point ladder</td>\n<td>43k sphere, 96k to 99k S1, 400k to 826k S2, 1.6M to 2.46M S3 and S4</td>\n<td>points</td>\n<td>FlippedNormals frames</td>\n</tr>\n<tr>\n<td>Creature ladder</td>\n<td>skin 6k, pieces 28k to 43k (DynaMesh 64 to 128), merged 256 = 367k, SDiv 5 = 3.8M</td>\n<td>points</td>\n<td>Pablo tbQqC6tyDBQ frames</td>\n</tr>\n<tr>\n<td>DynaMesh</td>\n<td>points grow with resolution squared; limits: details safe in a 1024 cube, cap 2048 (about 24M polys)</td>\n<td>bbox longest side; per SubTool</td>\n<td>TpS0QdlfHWU ladder; DynaMesh doc</td>\n</tr>\n<tr>\n<td>Divide, ZRemesher</td>\n<td>x4 per level; target in thousands, 5 gave 4,963</td>\n<td></td>\n<td>Pablo rArw79xEpvE 00:03:16</td>\n</tr>\n<tr>\n<td>SDiv per operation</td>\n<td>big moves 1; secondary 2 or 3; tertiary and layers top</td>\n<td>levels of the stack</td>\n<td>Pablo rArw79xEpvE 00:12:28, 00:14:16</td>\n</tr>\n<tr>\n<td>Projection</td>\n<td>target points at or above the sketch's (745k vs 400k); FlippedNormals about 3M</td>\n<td></td>\n<td>VRisbJQAaZw 00:17:24; Zp07GW3rND0 00:01:02</td>\n</tr>\n<tr>\n<td>Eye angle</td>\n<td>3 to 7 degrees outward each, about 5</td>\n<td>straight ahead</td>\n<td>Costa j5XLtLMN0P8 00:29:10</td>\n</tr>\n<tr>\n<td>Pass gates</td>\n<td>dead strokes up to 10 %; re-DynaMesh at 1.5 x edge cv; Polish drift 2 %</td>\n<td></td>\n<td>[added]</td>\n</tr>\n</tbody>\n</table>\n<h2>Quality gates</h2>\n<ul>\n<li><strong>Measured:</strong> <code>pass_report</code> after every pass (dead strokes, volume sign, view drift, pivot shift, settings not found); <code>remesh_code(...)[\"ok\"]</code>; points against <code>STAGES</code> and the SDiv for the operation; <code>stage_gate</code> (budget, big Move above SDiv 1, shape IoU, asymmetry, bands); <code>zb_audit.verdict(..., \"sculpt\")</code>; <code>remesh_due</code>, Polish drift, <code>projection_ready</code>.</li>\n<li><strong>Seen:</strong> the review sheet in MatCap Gray (front, right, back, three-quarter, top); Flat Color silhouettes and the sheet at thumbnail size; a grazing view, Red Wax for marks, a Standard material under a moving light (MatCaps bake their light) or BPR for form reading; the perspective look render for eyes; the stage checklist in <a href=\"references/critique.md\"><code>references/critique.md</code></a>. Never call a stage done without looking at its sheet.</li>\n</ul>\n<h2>Common mistakes</h2>\n<table>\n<thead>\n<tr>\n<th>Mistake</th>\n<th>What it looks like</th>\n<th>Fix</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Expert Z as a script Z (ClayBuildup 20)</td>\n<td>harsh ridges, one-stroke muscles</td>\n<td>Z 6, calibrate, dial the pass</td>\n</tr>\n<tr>\n<td>Clay dragged along the form</td>\n<td>drawn grooves, no volume</td>\n<td><code>clay_pass</code> hatches across</td>\n</tr>\n<tr>\n<td>Stroke starting off the model</td>\n<td>strokes change nothing, the view may turn</td>\n<td>plans clip to the canvas mask; re-capture</td>\n</tr>\n<tr>\n<td>LazyMouse left on</td>\n<td>stroke starts missing, short strokes dead</td>\n<td><code>pass_spec</code> default <code>lazymouse=False</code></td>\n</tr>\n<tr>\n<td>Smoothing marks away on skin</td>\n<td>\"semi smooth with details\", volume loss</td>\n<td>descent passes; Polish only low-res or at a lower SDiv</td>\n</tr>\n<tr>\n<td>ClayBuildup over finished detail</td>\n<td>lines and pores erased</td>\n<td>Standard for edges; clay before detail</td>\n</tr>\n<tr>\n<td>Dividing a DynaMesh</td>\n<td>lumps, star poles</td>\n<td>ZRemesher, Divide, <code>project_all</code></td>\n</tr>\n<tr>\n<td>Big Move at the top level</td>\n<td>wonky lumps</td>\n<td><code>level_for(\"big\")</code>, then back up</td>\n</tr>\n<tr>\n<td>Re-DynaMesh with a mask on or in Move mode</td>\n<td>nothing remeshes (the gesture only clears the mask)</td>\n<td><code>remesh_code</code></td>\n</tr>\n<tr>\n<td>DynaMesh with polypaint on</td>\n<td>polygroups gone after the remesh</td>\n<td><code>keep=\"groups\"</code> (Colorize off), or <code>\"polypaint\"</code>: never both</td>\n</tr>\n<tr>\n<td>Morph dial after a remesh or Divide</td>\n<td>the target is gone</td>\n<td>dial first; <code>expect_points</code></td>\n</tr>\n<tr>\n<td>Symmetry assumed after a SubTool change</td>\n<td>the stroke lands on one side</td>\n<td>it is per SubTool (Pablo RABWfzWNw0c 00:27:02): every pass sets it</td>\n</tr>\n<tr>\n<td><code>Brush:Smooth</code> picked as the brush</td>\n<td>nothing smooths (it only becomes the Shift brush)</td>\n<td>Deformation Polish, lower SDiv</td>\n</tr>\n<tr>\n<td>Mirror And Weld with LSym on, or the bad side as source</td>\n<td>mirrors locally or copies the bad side</td>\n<td>LSym off; Deformation Mirror first (9a9S1OcYHx4 00:09:35)</td>\n</tr>\n</tbody>\n</table>\n<h2>Handoffs</h2>\n<ul>\n<li><strong>Receives:</strong> from scenario-zbrush-expert a session, brief and versioned ZTL; from scenario-zbrush-retopology-export a cleaned AI or scan mesh (scenario-3d meshes arrive this way); from domain skills proportions and the forms list.</li>\n<li><strong>Delivers</strong> the P14 package (versioned ZTL, <code>stats()</code>, last sheet, forms as JSON, calibration, gate): realistic S3 or S4 forms on levels to scenario-zbrush-character-creature; shape-language work and hair to scenario-zbrush-stylized; organic bases to scenario-zbrush-hard-surface; a finished sculpt to scenario-zbrush-retopology-export.</li>\n</ul>\n<h2>ZBrush 2026 notes</h2>\n<ul>\n<li>Perspective is <code>Draw:Perspective</code> (installed commands.xml); <code>Transform:Persp</code> does not exist (<code>zs.PERSP_PATHS</code>). PolyFrame is <code>Transform: Pf</code>.</li>\n<li><code>Brush:Dam_Standard</code> does not resolve [v03]; <code>zb_ops.select_brush(\"Dam_Standard\")</code> finds DamStandard.</li>\n<li>Smooth brushes only bind to Shift and <code>press_key</code> does not work: Zsub replaces Alt, Deformation Polish replaces Shift, Masking buttons and Mask Changed Points [verify] replace Ctrl gestures.</li>\n<li>No undo control (<code>merge_undo</code> is a stub): Morph Target or layer per pass, versioned ZTLs per stage.</li>\n<li>Gizmo deformers and Transpose drags are GUI-only; the Gizmo deforms softly unless Focal Shift is -100. Local Symmetry follows the Gizmo: off before Mirror And Weld.</li>\n<li>Sculptris Pro: no levels; Dots, FreeHand and Spray only. Chisel's default stroke changed in 2025.1: every pass sets its stroke type.</li>\n</ul>\n<h2>References</h2>\n<ul>\n<li><a href=\"references/procedures.md\"><code>references/procedures.md</code></a>: bridge code per step (P0 to P17) with its live test. Load before writing bridge code.</li>\n<li><a href=\"references/expert-notes.md\"><code>references/expert-notes.md</code></a>: the experts in depth and the disagreement table. Load when choosing between approaches.</li>\n<li><code>references/critique.md</code>: per-stage rubric, AI-mesh judgment, stroke-plan review. Load at every gate.</li>\n<li><a href=\"references/gui-paths.md\"><code>references/gui-paths.md</code></a>: hotkeys, palette paths and brush settings (computer-use agent).</li>\n<li><a href=\"references/sources.md\"><code>references/sources.md</code></a>: sources, credentials, URLs, timestamps.</li>\n<li><code>scripts/zb_sculpt.py</code>: stages, presets, Scene, generators, calibration, pass execution, remesh, levels, review metrics. Tests: <code>tests/code/zbrush-sculpting/</code> (offline passed; live not yet run in ZBrush).</li>\n</ul>\n","files":[{"path":"references/critique.md","sizeBytes":8929,"isText":true},{"path":"references/expert-notes.md","sizeBytes":23988,"isText":true},{"path":"references/gui-paths.md","sizeBytes":23451,"isText":true},{"path":"references/procedures.md","sizeBytes":24330,"isText":true},{"path":"references/sources.md","sizeBytes":10716,"isText":true},{"path":"scripts/zb_sculpt.py","sizeBytes":98344,"isText":true},{"path":"SKILL.md","sizeBytes":21158,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-17T09:13:00.248328Z","sha256":"F240AC7E7DDE8BD484B102A653A3A9C4E9EC39F196E505E1A17DBD6BC1B5E2CE","sizeBytes":73505},"review":null,"source":{"repositoryUrl":"https://github.com/scenario-labs/skills","path":"skills/dcc/zbrush/scenario-zbrush-sculpting","license":"MIT","commit":"dc592af7139ffacfe8fdae7dc7efa80f4dd09be3","subtreeSha":"C7817DA2C80272C7EE11110F4835A2F09F669AB795790872BBED94111FE226BD","lastSyncedAt":"2026-10-17T09:10:46.286688Z"},"reviewedAt":"2026-10-17T09:16:23.478459Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/scenario-labs/skills/tree/main/skills/dcc/zbrush/scenario-zbrush-sculpting"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install scenario-labs-skills@llmmart"},{"target":"git","command":"git clone https://github.com/scenario-labs/skills.git"}]}