[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-site-build":3,"mdc-9fqihs-key":32,"related-repo-automattic-site-build":2290,"related-org-automattic-site-build":2298},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":30,"mdContent":31},"site-build","orchestrate WordPress site builds","Orchestrate generated WordPress site builds step by step through the current coding-agent subscription. Use when an agent needs to create or resume a site, show build progress between tool calls, run a bounded range of steps, or confirm the subscription-backed LLM transport before spending.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":17,"slug":18,"type":15},"WordPress","wordpress",{"name":20,"slug":21,"type":15},"Deployment","deployment",2,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fminimalistic-site-builder","2026-09-04T08:00:47.278739",null,1,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":25},[],"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fminimalistic-site-builder\u002Ftree\u002FHEAD\u002Fskills\u002Fsite-build","---\nname: site-build\ndescription: Orchestrate generated WordPress site builds step by step through the current coding-agent subscription. Use when an agent needs to create or resume a site, show build progress between tool calls, run a bounded range of steps, or confirm the subscription-backed LLM transport before spending.\n---\n\n# Build a site through the current harness\n\nResolve the site-builder repository before running any command. Copy and run this snippet from the directory where you want to work:\n\n```bash\nif [ -n \"${SITE_BUILD_HOME:-}\" ] && [ -r \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" ]; then\n    :\nelif [ -n \"${CLAUDE_PLUGIN_ROOT:-}\" ] && [ -r \"$CLAUDE_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$CLAUDE_PLUGIN_ROOT\nelif [ -n \"${GROK_PLUGIN_ROOT:-}\" ] && [ -r \"$GROK_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$GROK_PLUGIN_ROOT\nelif [ -n \"${CODEX_PLUGIN_ROOT:-}\" ] && [ -r \"$CODEX_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$CODEX_PLUGIN_ROOT\nelse\n    SITE_BUILD_HOME=\n    site_build_dir=$PWD\n    while :; do\n        if [ -r \"$site_build_dir\u002Fbin\u002Fbuild.php\" ]; then\n            SITE_BUILD_HOME=$site_build_dir\n            break\n        fi\n        [ \"$site_build_dir\" = \"\u002F\" ] && break\n        site_build_dir=$(dirname \"$site_build_dir\")\n    done\n    unset site_build_dir\nfi\n\nif [ -z \"${SITE_BUILD_HOME:-}\" ] || [ ! -r \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" ]; then\n    echo \"Could not find site-builder. Set SITE_BUILD_HOME to its repository root.\" >&2\n    return 1 2>\u002Fdev\u002Fnull || exit 1\nfi\nexport SITE_BUILD_HOME\n```\n\n`SITE_BUILD_HOME` is this Skill's explicit override. Anthropic documents `CLAUDE_PLUGIN_ROOT`. xAI documents `GROK_PLUGIN_ROOT` for plugin hooks, but does not explicitly promise it to skills. `CODEX_PLUGIN_ROOT` is a speculative compatibility probe because Codex's plugin documentation does not publish a root variable. Every candidate is accepted only when it contains `bin\u002Fbuild.php`, so unset or incorrect values safely fall through.\n\nThe build CLI also requires this repository's `config\u002F` directory and Composer-installed `vendor\u002F` directory. If `vendor\u002Fautoload.php` is missing from the resolved plugin checkout, run `composer install --working-dir=\"$SITE_BUILD_HOME\"` before building. A plugin installation without those runtime files cannot build a site.\n\nAlways declare the transport that matches the launcher. Never rely on environment or process detection.\n\n| Launcher | Required declaration |\n| --- | --- |\n| Claude Code | `SITE_BUILD_LLM=claude-cli` |\n| Codex | `SITE_BUILD_LLM=codex-cli` |\n| Grok | `SITE_BUILD_LLM=grok-cli` |\n\n## Confirm the transport before spending\n\nRun the matching command before every build:\n\n```bash\n# Claude Code\nSITE_BUILD_LLM=claude-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n\n# Codex\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n\n# Grok\nSITE_BUILD_LLM=grok-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n```\n\nUse only the command for the current launcher. Confirm that it exits successfully and that its audit line names the intended `*-cli` transport as a subscription. If it exits non-zero or reports a different transport or billing mode, stop before spending and report the mismatch.\n\n## Image behavior in harness builds\n\nHarness and plugin transports do not provide WPCOM proxy credentials. Absent an independently provisioned `GOOGLE_VERTEX_API_TOKEN`, harness builds ship image placeholders, and this Skill never passes `--with-images`. The Skill cannot assume that a checkout has been provisioned with that token.\n\nNeither the Codex nor the Grok CLI exposes image generation, so there is no subscription-billed alternative today. This is a current limitation, not a defect.\n\n## Orchestrate a build step by step\n\nKeep the same matching `SITE_BUILD_LLM` declaration on every command. The examples below use Codex; replace only that declaration with the exact Claude Code or Grok mapping above when that is the current launcher.\n\nHarness batches run up to 10 CLI processes concurrently by default. Set `SITE_BUILD_HARNESS_CONCURRENCY` to a positive integer to override the cap; lower values trade speed for fewer simultaneous processes.\n\nChoose the project slug and graph before enumeration. Use `--blocks-first` unless the request explicitly calls for the HTML-first graph. Keep the same graph flag on the enumeration and create commands.\n\n### 1. Enumerate the selected graph\n\nRun enumeration as its own tool call. It requires no prompt, makes no model call, and returns JSON on stdout:\n\n```bash\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --list-steps --slug=PROJECT_SLUG --blocks-first\n```\n\nParse the JSON object. Its `graph` field identifies the selected graph. Its ordered `steps` array contains objects with `id`, `label`, and `members` fields. Let `M` be the number of entries.\n\nA concurrent group is one top-level step. Its composite `id` is the value to run. Its `members` array is informational only; never turn those members into separate calls. Calling `--step` once per member runs the whole group once per member, repeats the complete batched model spend, and overwrites the first run's artifacts.\n\n### 2. Create the project through the first step\n\nTake the first object in `steps`. Run the create command as one tool call, using its `id` as the inclusive stop:\n\n```bash\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" \"\u003Csite prompt>\" --slug=PROJECT_SLUG --blocks-first --multi-page --no-serve --until=FIRST_STEP_ID\n```\n\n`--multi-page` is a creation setting. The create call records it in `meta.json`, and every later `--step` call opens that project and inherits the recorded value. Do not repeat `--multi-page` on per-step calls, and do not add `--pages`; page selection remains the caller's choice.\n\n`--from` and `--until` are inclusive. Matching values therefore run exactly one ordinary step or one complete concurrent group.\n\nAfter the command exits successfully, report:\n\n```text\nstep 1 of M: \u003Cfirst step label> — succeeded\n```\n\n### 3. Run every remaining top-level step\n\nFor each remaining object in the ordered `steps` array, run one new tool call. Do not put these commands inside one shell loop; separate calls are what make progress visible.\n\n```bash\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --step=STEP_ID\n```\n\nAfter each successful call, report its position and label:\n\n```text\nstep N of M: \u003Cstep label> — succeeded\n```\n\nThe transport audit line appears once per CLI invocation. That repetition is intentional: every step call states its transport and billing mode before it spends. After the step completes, its result row reports timing, token use, and the configured model.\n\n### 4. Stop on the first failure\n\nIf any create or step command exits non-zero, do not run later steps. Report `step N of M: \u003Clabel> — failed`, include the failed command's output, and preserve the project for resumption.\n\nThe project can resume from the failed top-level ID because `--from` is inclusive:\n\n```bash\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=FAILED_STEP_ID\n```\n\nFor a progress-visible resume, enumerate the recorded project again, find `FAILED_STEP_ID`, and restart the separate `--step` calls at that entry. Never silently continue after a failure or switch transports.\n\n## Spin the finished site up in Studio\n\nEvery build command in this Skill passes `--no-serve`. Preview is one explicit call after the last step, so a half-built project is never booted and no build command blocks waiting to be interrupted.\n\nStudio is the site runner whenever it is installed and answering. Run this as its own tool call once the last step succeeds:\n\n```bash\nphp \"$SITE_BUILD_HOME\u002Fbin\u002Fserve.php\" PROJECT_SLUG --runner=studio\n```\n\nThis creates the site inside the Studio workspace — `$SITE_BUILD_STUDIO_ROOT` when that is set, otherwise `~\u002FStudio` — as `\u003Cworkspace>\u002FPROJECT_SLUG`, installs the generated theme into it, and registers it with Studio so it appears in the Studio app beside hand-made sites. A directory already there is deleted and rebuilt only when site-builder created it under that same slug. Anything else — a hand-made Studio site, a symlink, an unmarked or mismatched directory — is refused, and the command exits telling you to pick a different slug or clear that directory yourself.\n\n`--runner=studio` is required. Without it an absent Studio silently falls back to Playground, whose server holds the foreground until it is interrupted, and the tool call never returns. With it, an absent Studio exits 1 reporting `Studio is not available` and nothing starts.\n\nOn success the command prints the site URL, the admin URL, and the stop command, then exits. A Studio site is persistent: it keeps running after the command returns. Report the site URL.\n\nStop it later with:\n\n```bash\nphp \"$SITE_BUILD_HOME\u002Fbin\u002Fserve.php\" PROJECT_SLUG --stop\n```\n\nIf the command exits 1 because Studio is not available, report that and stop. The generated theme is complete on disk at `$SITE_BUILD_HOME\u002Fprojects\u002FPROJECT_SLUG\u002Ftheme`, and the same command previews it once Studio is installed. Never substitute Playground from this Skill.\n\n## Run the whole build in one call\n\nUse the single-shot form only when the caller does not need progress between steps:\n\n```bash\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" \"\u003Csite prompt>\" --slug=PROJECT_SLUG --blocks-first --multi-page --no-serve\n```\n\nThe ordinary resume and bounded-range forms remain available for non-interactive use:\n\n```bash\n# Resume an existing project from a selected step through the end.\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=STEP_ID\n\n# Resume only an inclusive bounded range.\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=START_STEP_ID --until=STOP_STEP_ID\n```\n\nReplace every uppercase placeholder with the chosen slug or an exact ID from `--list-steps`. Combine these forms with other documented `bin\u002Fbuild.php` flags as needed. Keep invoking the CLI through `\"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\"`.\n\n## Respect harness capabilities\n\nThe harness model matrix is authoritative for default and per-step model IDs. Each harness resolves its own provider's model matrix; do not substitute the interactive session model or allow an unpinned harness default.\n\nEvery harness transport treats `temperature` and `max_tokens` as unsupported. Their use is disclosed and recorded as a degradation.\n\nClaude honors the `system` option. Codex and Grok cannot honor it, so they disclose and record that degradation.\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,52,862,901,938,943,1022,1029,1034,1203,1216,1222,1243,1248,1254,1266,1279,1292,1299,1304,1361,1414,1441,1447,1466,1545,1586,1605,1610,1620,1626,1638,1693,1698,1707,1712,1718,1731,1743,1798,1818,1824,1837,1842,1884,1913,1932,1937,1942,1981,1994,2000,2005,2076,2081,2212,2240,2246,2251,2271,2284],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"build-a-site-through-the-current-harness",[43],{"type":44,"value":45},"text","Build a site through the current harness",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50],{"type":44,"value":51},"Resolve the site-builder repository before running any command. Copy and run this snippet from the directory where you want to work:",{"type":38,"tag":53,"props":54,"children":59},"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","if [ -n \"${SITE_BUILD_HOME:-}\" ] && [ -r \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" ]; then\n    :\nelif [ -n \"${CLAUDE_PLUGIN_ROOT:-}\" ] && [ -r \"$CLAUDE_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$CLAUDE_PLUGIN_ROOT\nelif [ -n \"${GROK_PLUGIN_ROOT:-}\" ] && [ -r \"$GROK_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$GROK_PLUGIN_ROOT\nelif [ -n \"${CODEX_PLUGIN_ROOT:-}\" ] && [ -r \"$CODEX_PLUGIN_ROOT\u002Fbin\u002Fbuild.php\" ]; then\n    SITE_BUILD_HOME=$CODEX_PLUGIN_ROOT\nelse\n    SITE_BUILD_HOME=\n    site_build_dir=$PWD\n    while :; do\n        if [ -r \"$site_build_dir\u002Fbin\u002Fbuild.php\" ]; then\n            SITE_BUILD_HOME=$site_build_dir\n            break\n        fi\n        [ \"$site_build_dir\" = \"\u002F\" ] && break\n        site_build_dir=$(dirname \"$site_build_dir\")\n    done\n    unset site_build_dir\nfi\n\nif [ -z \"${SITE_BUILD_HOME:-}\" ] || [ ! -r \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" ]; then\n    echo \"Could not find site-builder. Set SITE_BUILD_HOME to its repository root.\" >&2\n    return 1 2>\u002Fdev\u002Fnull || exit 1\nfi\nexport SITE_BUILD_HOME\n","bash","",[60],{"type":38,"tag":61,"props":62,"children":63},"code",{"__ignoreMap":58},[64,152,161,232,251,321,338,408,425,434,447,465,489,531,549,558,567,619,656,665,679,688,698,773,800,839,847],{"type":38,"tag":65,"props":66,"children":68},"span",{"class":67,"line":26},"line",[69,75,81,86,91,97,102,107,112,116,121,126,131,137,142,147],{"type":38,"tag":65,"props":70,"children":72},{"style":71},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[73],{"type":44,"value":74},"if",{"type":38,"tag":65,"props":76,"children":78},{"style":77},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[79],{"type":44,"value":80}," [",{"type":38,"tag":65,"props":82,"children":83},{"style":77},[84],{"type":44,"value":85}," -n",{"type":38,"tag":65,"props":87,"children":88},{"style":77},[89],{"type":44,"value":90}," \"${",{"type":38,"tag":65,"props":92,"children":94},{"style":93},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[95],{"type":44,"value":96},"SITE_BUILD_HOME",{"type":38,"tag":65,"props":98,"children":99},{"style":77},[100],{"type":44,"value":101},":-}\"",{"type":38,"tag":65,"props":103,"children":104},{"style":77},[105],{"type":44,"value":106}," ]",{"type":38,"tag":65,"props":108,"children":109},{"style":77},[110],{"type":44,"value":111}," &&",{"type":38,"tag":65,"props":113,"children":114},{"style":77},[115],{"type":44,"value":80},{"type":38,"tag":65,"props":117,"children":118},{"style":77},[119],{"type":44,"value":120}," -r",{"type":38,"tag":65,"props":122,"children":123},{"style":77},[124],{"type":44,"value":125}," \"",{"type":38,"tag":65,"props":127,"children":128},{"style":93},[129],{"type":44,"value":130},"$SITE_BUILD_HOME",{"type":38,"tag":65,"props":132,"children":134},{"style":133},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[135],{"type":44,"value":136},"\u002Fbin\u002Fbuild.php",{"type":38,"tag":65,"props":138,"children":139},{"style":77},[140],{"type":44,"value":141},"\"",{"type":38,"tag":65,"props":143,"children":144},{"style":77},[145],{"type":44,"value":146}," ];",{"type":38,"tag":65,"props":148,"children":149},{"style":71},[150],{"type":44,"value":151}," then\n",{"type":38,"tag":65,"props":153,"children":154},{"class":67,"line":22},[155],{"type":38,"tag":65,"props":156,"children":158},{"style":157},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[159],{"type":44,"value":160},"    :\n",{"type":38,"tag":65,"props":162,"children":164},{"class":67,"line":163},3,[165,170,174,178,182,187,191,195,199,203,207,211,216,220,224,228],{"type":38,"tag":65,"props":166,"children":167},{"style":71},[168],{"type":44,"value":169},"elif",{"type":38,"tag":65,"props":171,"children":172},{"style":77},[173],{"type":44,"value":80},{"type":38,"tag":65,"props":175,"children":176},{"style":77},[177],{"type":44,"value":85},{"type":38,"tag":65,"props":179,"children":180},{"style":77},[181],{"type":44,"value":90},{"type":38,"tag":65,"props":183,"children":184},{"style":93},[185],{"type":44,"value":186},"CLAUDE_PLUGIN_ROOT",{"type":38,"tag":65,"props":188,"children":189},{"style":77},[190],{"type":44,"value":101},{"type":38,"tag":65,"props":192,"children":193},{"style":77},[194],{"type":44,"value":106},{"type":38,"tag":65,"props":196,"children":197},{"style":77},[198],{"type":44,"value":111},{"type":38,"tag":65,"props":200,"children":201},{"style":77},[202],{"type":44,"value":80},{"type":38,"tag":65,"props":204,"children":205},{"style":77},[206],{"type":44,"value":120},{"type":38,"tag":65,"props":208,"children":209},{"style":77},[210],{"type":44,"value":125},{"type":38,"tag":65,"props":212,"children":213},{"style":93},[214],{"type":44,"value":215},"$CLAUDE_PLUGIN_ROOT",{"type":38,"tag":65,"props":217,"children":218},{"style":133},[219],{"type":44,"value":136},{"type":38,"tag":65,"props":221,"children":222},{"style":77},[223],{"type":44,"value":141},{"type":38,"tag":65,"props":225,"children":226},{"style":77},[227],{"type":44,"value":146},{"type":38,"tag":65,"props":229,"children":230},{"style":71},[231],{"type":44,"value":151},{"type":38,"tag":65,"props":233,"children":235},{"class":67,"line":234},4,[236,241,246],{"type":38,"tag":65,"props":237,"children":238},{"style":93},[239],{"type":44,"value":240},"    SITE_BUILD_HOME",{"type":38,"tag":65,"props":242,"children":243},{"style":77},[244],{"type":44,"value":245},"=",{"type":38,"tag":65,"props":247,"children":248},{"style":93},[249],{"type":44,"value":250},"$CLAUDE_PLUGIN_ROOT\n",{"type":38,"tag":65,"props":252,"children":254},{"class":67,"line":253},5,[255,259,263,267,271,276,280,284,288,292,296,300,305,309,313,317],{"type":38,"tag":65,"props":256,"children":257},{"style":71},[258],{"type":44,"value":169},{"type":38,"tag":65,"props":260,"children":261},{"style":77},[262],{"type":44,"value":80},{"type":38,"tag":65,"props":264,"children":265},{"style":77},[266],{"type":44,"value":85},{"type":38,"tag":65,"props":268,"children":269},{"style":77},[270],{"type":44,"value":90},{"type":38,"tag":65,"props":272,"children":273},{"style":93},[274],{"type":44,"value":275},"GROK_PLUGIN_ROOT",{"type":38,"tag":65,"props":277,"children":278},{"style":77},[279],{"type":44,"value":101},{"type":38,"tag":65,"props":281,"children":282},{"style":77},[283],{"type":44,"value":106},{"type":38,"tag":65,"props":285,"children":286},{"style":77},[287],{"type":44,"value":111},{"type":38,"tag":65,"props":289,"children":290},{"style":77},[291],{"type":44,"value":80},{"type":38,"tag":65,"props":293,"children":294},{"style":77},[295],{"type":44,"value":120},{"type":38,"tag":65,"props":297,"children":298},{"style":77},[299],{"type":44,"value":125},{"type":38,"tag":65,"props":301,"children":302},{"style":93},[303],{"type":44,"value":304},"$GROK_PLUGIN_ROOT",{"type":38,"tag":65,"props":306,"children":307},{"style":133},[308],{"type":44,"value":136},{"type":38,"tag":65,"props":310,"children":311},{"style":77},[312],{"type":44,"value":141},{"type":38,"tag":65,"props":314,"children":315},{"style":77},[316],{"type":44,"value":146},{"type":38,"tag":65,"props":318,"children":319},{"style":71},[320],{"type":44,"value":151},{"type":38,"tag":65,"props":322,"children":324},{"class":67,"line":323},6,[325,329,333],{"type":38,"tag":65,"props":326,"children":327},{"style":93},[328],{"type":44,"value":240},{"type":38,"tag":65,"props":330,"children":331},{"style":77},[332],{"type":44,"value":245},{"type":38,"tag":65,"props":334,"children":335},{"style":93},[336],{"type":44,"value":337},"$GROK_PLUGIN_ROOT\n",{"type":38,"tag":65,"props":339,"children":341},{"class":67,"line":340},7,[342,346,350,354,358,363,367,371,375,379,383,387,392,396,400,404],{"type":38,"tag":65,"props":343,"children":344},{"style":71},[345],{"type":44,"value":169},{"type":38,"tag":65,"props":347,"children":348},{"style":77},[349],{"type":44,"value":80},{"type":38,"tag":65,"props":351,"children":352},{"style":77},[353],{"type":44,"value":85},{"type":38,"tag":65,"props":355,"children":356},{"style":77},[357],{"type":44,"value":90},{"type":38,"tag":65,"props":359,"children":360},{"style":93},[361],{"type":44,"value":362},"CODEX_PLUGIN_ROOT",{"type":38,"tag":65,"props":364,"children":365},{"style":77},[366],{"type":44,"value":101},{"type":38,"tag":65,"props":368,"children":369},{"style":77},[370],{"type":44,"value":106},{"type":38,"tag":65,"props":372,"children":373},{"style":77},[374],{"type":44,"value":111},{"type":38,"tag":65,"props":376,"children":377},{"style":77},[378],{"type":44,"value":80},{"type":38,"tag":65,"props":380,"children":381},{"style":77},[382],{"type":44,"value":120},{"type":38,"tag":65,"props":384,"children":385},{"style":77},[386],{"type":44,"value":125},{"type":38,"tag":65,"props":388,"children":389},{"style":93},[390],{"type":44,"value":391},"$CODEX_PLUGIN_ROOT",{"type":38,"tag":65,"props":393,"children":394},{"style":133},[395],{"type":44,"value":136},{"type":38,"tag":65,"props":397,"children":398},{"style":77},[399],{"type":44,"value":141},{"type":38,"tag":65,"props":401,"children":402},{"style":77},[403],{"type":44,"value":146},{"type":38,"tag":65,"props":405,"children":406},{"style":71},[407],{"type":44,"value":151},{"type":38,"tag":65,"props":409,"children":411},{"class":67,"line":410},8,[412,416,420],{"type":38,"tag":65,"props":413,"children":414},{"style":93},[415],{"type":44,"value":240},{"type":38,"tag":65,"props":417,"children":418},{"style":77},[419],{"type":44,"value":245},{"type":38,"tag":65,"props":421,"children":422},{"style":93},[423],{"type":44,"value":424},"$CODEX_PLUGIN_ROOT\n",{"type":38,"tag":65,"props":426,"children":428},{"class":67,"line":427},9,[429],{"type":38,"tag":65,"props":430,"children":431},{"style":71},[432],{"type":44,"value":433},"else\n",{"type":38,"tag":65,"props":435,"children":437},{"class":67,"line":436},10,[438,442],{"type":38,"tag":65,"props":439,"children":440},{"style":93},[441],{"type":44,"value":240},{"type":38,"tag":65,"props":443,"children":444},{"style":77},[445],{"type":44,"value":446},"=\n",{"type":38,"tag":65,"props":448,"children":450},{"class":67,"line":449},11,[451,456,460],{"type":38,"tag":65,"props":452,"children":453},{"style":93},[454],{"type":44,"value":455},"    site_build_dir",{"type":38,"tag":65,"props":457,"children":458},{"style":77},[459],{"type":44,"value":245},{"type":38,"tag":65,"props":461,"children":462},{"style":93},[463],{"type":44,"value":464},"$PWD\n",{"type":38,"tag":65,"props":466,"children":468},{"class":67,"line":467},12,[469,474,479,484],{"type":38,"tag":65,"props":470,"children":471},{"style":71},[472],{"type":44,"value":473},"    while",{"type":38,"tag":65,"props":475,"children":476},{"style":157},[477],{"type":44,"value":478}," :",{"type":38,"tag":65,"props":480,"children":481},{"style":77},[482],{"type":44,"value":483},";",{"type":38,"tag":65,"props":485,"children":486},{"style":71},[487],{"type":44,"value":488}," do\n",{"type":38,"tag":65,"props":490,"children":492},{"class":67,"line":491},13,[493,498,502,506,510,515,519,523,527],{"type":38,"tag":65,"props":494,"children":495},{"style":71},[496],{"type":44,"value":497},"        if",{"type":38,"tag":65,"props":499,"children":500},{"style":77},[501],{"type":44,"value":80},{"type":38,"tag":65,"props":503,"children":504},{"style":77},[505],{"type":44,"value":120},{"type":38,"tag":65,"props":507,"children":508},{"style":77},[509],{"type":44,"value":125},{"type":38,"tag":65,"props":511,"children":512},{"style":93},[513],{"type":44,"value":514},"$site_build_dir",{"type":38,"tag":65,"props":516,"children":517},{"style":133},[518],{"type":44,"value":136},{"type":38,"tag":65,"props":520,"children":521},{"style":77},[522],{"type":44,"value":141},{"type":38,"tag":65,"props":524,"children":525},{"style":77},[526],{"type":44,"value":146},{"type":38,"tag":65,"props":528,"children":529},{"style":71},[530],{"type":44,"value":151},{"type":38,"tag":65,"props":532,"children":534},{"class":67,"line":533},14,[535,540,544],{"type":38,"tag":65,"props":536,"children":537},{"style":93},[538],{"type":44,"value":539},"            SITE_BUILD_HOME",{"type":38,"tag":65,"props":541,"children":542},{"style":77},[543],{"type":44,"value":245},{"type":38,"tag":65,"props":545,"children":546},{"style":93},[547],{"type":44,"value":548},"$site_build_dir\n",{"type":38,"tag":65,"props":550,"children":552},{"class":67,"line":551},15,[553],{"type":38,"tag":65,"props":554,"children":555},{"style":71},[556],{"type":44,"value":557},"            break\n",{"type":38,"tag":65,"props":559,"children":561},{"class":67,"line":560},16,[562],{"type":38,"tag":65,"props":563,"children":564},{"style":71},[565],{"type":44,"value":566},"        fi\n",{"type":38,"tag":65,"props":568,"children":570},{"class":67,"line":569},17,[571,576,580,584,588,593,597,602,606,610,614],{"type":38,"tag":65,"props":572,"children":573},{"style":77},[574],{"type":44,"value":575},"        [",{"type":38,"tag":65,"props":577,"children":578},{"style":77},[579],{"type":44,"value":125},{"type":38,"tag":65,"props":581,"children":582},{"style":93},[583],{"type":44,"value":514},{"type":38,"tag":65,"props":585,"children":586},{"style":77},[587],{"type":44,"value":141},{"type":38,"tag":65,"props":589,"children":590},{"style":77},[591],{"type":44,"value":592}," =",{"type":38,"tag":65,"props":594,"children":595},{"style":77},[596],{"type":44,"value":125},{"type":38,"tag":65,"props":598,"children":599},{"style":133},[600],{"type":44,"value":601},"\u002F",{"type":38,"tag":65,"props":603,"children":604},{"style":77},[605],{"type":44,"value":141},{"type":38,"tag":65,"props":607,"children":608},{"style":77},[609],{"type":44,"value":106},{"type":38,"tag":65,"props":611,"children":612},{"style":77},[613],{"type":44,"value":111},{"type":38,"tag":65,"props":615,"children":616},{"style":71},[617],{"type":44,"value":618}," break\n",{"type":38,"tag":65,"props":620,"children":622},{"class":67,"line":621},18,[623,628,633,639,643,647,651],{"type":38,"tag":65,"props":624,"children":625},{"style":93},[626],{"type":44,"value":627},"        site_build_dir",{"type":38,"tag":65,"props":629,"children":630},{"style":77},[631],{"type":44,"value":632},"=$(",{"type":38,"tag":65,"props":634,"children":636},{"style":635},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[637],{"type":44,"value":638},"dirname",{"type":38,"tag":65,"props":640,"children":641},{"style":77},[642],{"type":44,"value":125},{"type":38,"tag":65,"props":644,"children":645},{"style":93},[646],{"type":44,"value":514},{"type":38,"tag":65,"props":648,"children":649},{"style":77},[650],{"type":44,"value":141},{"type":38,"tag":65,"props":652,"children":653},{"style":77},[654],{"type":44,"value":655},")\n",{"type":38,"tag":65,"props":657,"children":659},{"class":67,"line":658},19,[660],{"type":38,"tag":65,"props":661,"children":662},{"style":71},[663],{"type":44,"value":664},"    done\n",{"type":38,"tag":65,"props":666,"children":668},{"class":67,"line":667},20,[669,674],{"type":38,"tag":65,"props":670,"children":671},{"style":157},[672],{"type":44,"value":673},"    unset",{"type":38,"tag":65,"props":675,"children":676},{"style":133},[677],{"type":44,"value":678}," site_build_dir\n",{"type":38,"tag":65,"props":680,"children":682},{"class":67,"line":681},21,[683],{"type":38,"tag":65,"props":684,"children":685},{"style":71},[686],{"type":44,"value":687},"fi\n",{"type":38,"tag":65,"props":689,"children":691},{"class":67,"line":690},22,[692],{"type":38,"tag":65,"props":693,"children":695},{"emptyLinePlaceholder":694},true,[696],{"type":44,"value":697},"\n",{"type":38,"tag":65,"props":699,"children":701},{"class":67,"line":700},23,[702,706,710,715,719,723,727,731,736,740,745,749,753,757,761,765,769],{"type":38,"tag":65,"props":703,"children":704},{"style":71},[705],{"type":44,"value":74},{"type":38,"tag":65,"props":707,"children":708},{"style":77},[709],{"type":44,"value":80},{"type":38,"tag":65,"props":711,"children":712},{"style":77},[713],{"type":44,"value":714}," -z",{"type":38,"tag":65,"props":716,"children":717},{"style":77},[718],{"type":44,"value":90},{"type":38,"tag":65,"props":720,"children":721},{"style":93},[722],{"type":44,"value":96},{"type":38,"tag":65,"props":724,"children":725},{"style":77},[726],{"type":44,"value":101},{"type":38,"tag":65,"props":728,"children":729},{"style":77},[730],{"type":44,"value":106},{"type":38,"tag":65,"props":732,"children":733},{"style":77},[734],{"type":44,"value":735}," ||",{"type":38,"tag":65,"props":737,"children":738},{"style":77},[739],{"type":44,"value":80},{"type":38,"tag":65,"props":741,"children":742},{"style":77},[743],{"type":44,"value":744}," !",{"type":38,"tag":65,"props":746,"children":747},{"style":77},[748],{"type":44,"value":120},{"type":38,"tag":65,"props":750,"children":751},{"style":77},[752],{"type":44,"value":125},{"type":38,"tag":65,"props":754,"children":755},{"style":93},[756],{"type":44,"value":130},{"type":38,"tag":65,"props":758,"children":759},{"style":133},[760],{"type":44,"value":136},{"type":38,"tag":65,"props":762,"children":763},{"style":77},[764],{"type":44,"value":141},{"type":38,"tag":65,"props":766,"children":767},{"style":77},[768],{"type":44,"value":146},{"type":38,"tag":65,"props":770,"children":771},{"style":71},[772],{"type":44,"value":151},{"type":38,"tag":65,"props":774,"children":776},{"class":67,"line":775},24,[777,782,786,791,795],{"type":38,"tag":65,"props":778,"children":779},{"style":157},[780],{"type":44,"value":781},"    echo",{"type":38,"tag":65,"props":783,"children":784},{"style":77},[785],{"type":44,"value":125},{"type":38,"tag":65,"props":787,"children":788},{"style":133},[789],{"type":44,"value":790},"Could not find site-builder. Set SITE_BUILD_HOME to its repository root.",{"type":38,"tag":65,"props":792,"children":793},{"style":77},[794],{"type":44,"value":141},{"type":38,"tag":65,"props":796,"children":797},{"style":77},[798],{"type":44,"value":799}," >&2\n",{"type":38,"tag":65,"props":801,"children":803},{"class":67,"line":802},25,[804,809,815,820,825,829,834],{"type":38,"tag":65,"props":805,"children":806},{"style":71},[807],{"type":44,"value":808},"    return",{"type":38,"tag":65,"props":810,"children":812},{"style":811},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[813],{"type":44,"value":814}," 1",{"type":38,"tag":65,"props":816,"children":817},{"style":77},[818],{"type":44,"value":819}," 2>",{"type":38,"tag":65,"props":821,"children":822},{"style":133},[823],{"type":44,"value":824},"\u002Fdev\u002Fnull",{"type":38,"tag":65,"props":826,"children":827},{"style":77},[828],{"type":44,"value":735},{"type":38,"tag":65,"props":830,"children":831},{"style":157},[832],{"type":44,"value":833}," exit",{"type":38,"tag":65,"props":835,"children":836},{"style":811},[837],{"type":44,"value":838}," 1\n",{"type":38,"tag":65,"props":840,"children":842},{"class":67,"line":841},26,[843],{"type":38,"tag":65,"props":844,"children":845},{"style":71},[846],{"type":44,"value":687},{"type":38,"tag":65,"props":848,"children":850},{"class":67,"line":849},27,[851,857],{"type":38,"tag":65,"props":852,"children":854},{"style":853},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[855],{"type":44,"value":856},"export",{"type":38,"tag":65,"props":858,"children":859},{"style":93},[860],{"type":44,"value":861}," SITE_BUILD_HOME\n",{"type":38,"tag":47,"props":863,"children":864},{},[865,870,872,877,879,884,886,891,893,899],{"type":38,"tag":61,"props":866,"children":868},{"className":867},[],[869],{"type":44,"value":96},{"type":44,"value":871}," is this Skill's explicit override. Anthropic documents ",{"type":38,"tag":61,"props":873,"children":875},{"className":874},[],[876],{"type":44,"value":186},{"type":44,"value":878},". xAI documents ",{"type":38,"tag":61,"props":880,"children":882},{"className":881},[],[883],{"type":44,"value":275},{"type":44,"value":885}," for plugin hooks, but does not explicitly promise it to skills. ",{"type":38,"tag":61,"props":887,"children":889},{"className":888},[],[890],{"type":44,"value":362},{"type":44,"value":892}," is a speculative compatibility probe because Codex's plugin documentation does not publish a root variable. Every candidate is accepted only when it contains ",{"type":38,"tag":61,"props":894,"children":896},{"className":895},[],[897],{"type":44,"value":898},"bin\u002Fbuild.php",{"type":44,"value":900},", so unset or incorrect values safely fall through.",{"type":38,"tag":47,"props":902,"children":903},{},[904,906,912,914,920,922,928,930,936],{"type":44,"value":905},"The build CLI also requires this repository's ",{"type":38,"tag":61,"props":907,"children":909},{"className":908},[],[910],{"type":44,"value":911},"config\u002F",{"type":44,"value":913}," directory and Composer-installed ",{"type":38,"tag":61,"props":915,"children":917},{"className":916},[],[918],{"type":44,"value":919},"vendor\u002F",{"type":44,"value":921}," directory. If ",{"type":38,"tag":61,"props":923,"children":925},{"className":924},[],[926],{"type":44,"value":927},"vendor\u002Fautoload.php",{"type":44,"value":929}," is missing from the resolved plugin checkout, run ",{"type":38,"tag":61,"props":931,"children":933},{"className":932},[],[934],{"type":44,"value":935},"composer install --working-dir=\"$SITE_BUILD_HOME\"",{"type":44,"value":937}," before building. A plugin installation without those runtime files cannot build a site.",{"type":38,"tag":47,"props":939,"children":940},{},[941],{"type":44,"value":942},"Always declare the transport that matches the launcher. Never rely on environment or process detection.",{"type":38,"tag":944,"props":945,"children":946},"table",{},[947,966],{"type":38,"tag":948,"props":949,"children":950},"thead",{},[951],{"type":38,"tag":952,"props":953,"children":954},"tr",{},[955,961],{"type":38,"tag":956,"props":957,"children":958},"th",{},[959],{"type":44,"value":960},"Launcher",{"type":38,"tag":956,"props":962,"children":963},{},[964],{"type":44,"value":965},"Required declaration",{"type":38,"tag":967,"props":968,"children":969},"tbody",{},[970,988,1005],{"type":38,"tag":952,"props":971,"children":972},{},[973,979],{"type":38,"tag":974,"props":975,"children":976},"td",{},[977],{"type":44,"value":978},"Claude Code",{"type":38,"tag":974,"props":980,"children":981},{},[982],{"type":38,"tag":61,"props":983,"children":985},{"className":984},[],[986],{"type":44,"value":987},"SITE_BUILD_LLM=claude-cli",{"type":38,"tag":952,"props":989,"children":990},{},[991,996],{"type":38,"tag":974,"props":992,"children":993},{},[994],{"type":44,"value":995},"Codex",{"type":38,"tag":974,"props":997,"children":998},{},[999],{"type":38,"tag":61,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":44,"value":1004},"SITE_BUILD_LLM=codex-cli",{"type":38,"tag":952,"props":1006,"children":1007},{},[1008,1013],{"type":38,"tag":974,"props":1009,"children":1010},{},[1011],{"type":44,"value":1012},"Grok",{"type":38,"tag":974,"props":1014,"children":1015},{},[1016],{"type":38,"tag":61,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":44,"value":1021},"SITE_BUILD_LLM=grok-cli",{"type":38,"tag":1023,"props":1024,"children":1026},"h2",{"id":1025},"confirm-the-transport-before-spending",[1027],{"type":44,"value":1028},"Confirm the transport before spending",{"type":38,"tag":47,"props":1030,"children":1031},{},[1032],{"type":44,"value":1033},"Run the matching command before every build:",{"type":38,"tag":53,"props":1035,"children":1037},{"className":55,"code":1036,"language":57,"meta":58,"style":58},"# Claude Code\nSITE_BUILD_LLM=claude-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n\n# Codex\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n\n# Grok\nSITE_BUILD_LLM=grok-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --transport\n",[1038],{"type":38,"tag":61,"props":1039,"children":1040},{"__ignoreMap":58},[1041,1050,1093,1100,1108,1148,1155,1163],{"type":38,"tag":65,"props":1042,"children":1043},{"class":67,"line":26},[1044],{"type":38,"tag":65,"props":1045,"children":1047},{"style":1046},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1048],{"type":44,"value":1049},"# Claude Code\n",{"type":38,"tag":65,"props":1051,"children":1052},{"class":67,"line":22},[1053,1058,1062,1067,1072,1076,1080,1084,1088],{"type":38,"tag":65,"props":1054,"children":1055},{"style":93},[1056],{"type":44,"value":1057},"SITE_BUILD_LLM",{"type":38,"tag":65,"props":1059,"children":1060},{"style":77},[1061],{"type":44,"value":245},{"type":38,"tag":65,"props":1063,"children":1064},{"style":133},[1065],{"type":44,"value":1066},"claude-cli",{"type":38,"tag":65,"props":1068,"children":1069},{"style":635},[1070],{"type":44,"value":1071}," php",{"type":38,"tag":65,"props":1073,"children":1074},{"style":77},[1075],{"type":44,"value":125},{"type":38,"tag":65,"props":1077,"children":1078},{"style":93},[1079],{"type":44,"value":130},{"type":38,"tag":65,"props":1081,"children":1082},{"style":133},[1083],{"type":44,"value":136},{"type":38,"tag":65,"props":1085,"children":1086},{"style":77},[1087],{"type":44,"value":141},{"type":38,"tag":65,"props":1089,"children":1090},{"style":133},[1091],{"type":44,"value":1092}," --transport\n",{"type":38,"tag":65,"props":1094,"children":1095},{"class":67,"line":163},[1096],{"type":38,"tag":65,"props":1097,"children":1098},{"emptyLinePlaceholder":694},[1099],{"type":44,"value":697},{"type":38,"tag":65,"props":1101,"children":1102},{"class":67,"line":234},[1103],{"type":38,"tag":65,"props":1104,"children":1105},{"style":1046},[1106],{"type":44,"value":1107},"# Codex\n",{"type":38,"tag":65,"props":1109,"children":1110},{"class":67,"line":253},[1111,1115,1119,1124,1128,1132,1136,1140,1144],{"type":38,"tag":65,"props":1112,"children":1113},{"style":93},[1114],{"type":44,"value":1057},{"type":38,"tag":65,"props":1116,"children":1117},{"style":77},[1118],{"type":44,"value":245},{"type":38,"tag":65,"props":1120,"children":1121},{"style":133},[1122],{"type":44,"value":1123},"codex-cli",{"type":38,"tag":65,"props":1125,"children":1126},{"style":635},[1127],{"type":44,"value":1071},{"type":38,"tag":65,"props":1129,"children":1130},{"style":77},[1131],{"type":44,"value":125},{"type":38,"tag":65,"props":1133,"children":1134},{"style":93},[1135],{"type":44,"value":130},{"type":38,"tag":65,"props":1137,"children":1138},{"style":133},[1139],{"type":44,"value":136},{"type":38,"tag":65,"props":1141,"children":1142},{"style":77},[1143],{"type":44,"value":141},{"type":38,"tag":65,"props":1145,"children":1146},{"style":133},[1147],{"type":44,"value":1092},{"type":38,"tag":65,"props":1149,"children":1150},{"class":67,"line":323},[1151],{"type":38,"tag":65,"props":1152,"children":1153},{"emptyLinePlaceholder":694},[1154],{"type":44,"value":697},{"type":38,"tag":65,"props":1156,"children":1157},{"class":67,"line":340},[1158],{"type":38,"tag":65,"props":1159,"children":1160},{"style":1046},[1161],{"type":44,"value":1162},"# Grok\n",{"type":38,"tag":65,"props":1164,"children":1165},{"class":67,"line":410},[1166,1170,1174,1179,1183,1187,1191,1195,1199],{"type":38,"tag":65,"props":1167,"children":1168},{"style":93},[1169],{"type":44,"value":1057},{"type":38,"tag":65,"props":1171,"children":1172},{"style":77},[1173],{"type":44,"value":245},{"type":38,"tag":65,"props":1175,"children":1176},{"style":133},[1177],{"type":44,"value":1178},"grok-cli",{"type":38,"tag":65,"props":1180,"children":1181},{"style":635},[1182],{"type":44,"value":1071},{"type":38,"tag":65,"props":1184,"children":1185},{"style":77},[1186],{"type":44,"value":125},{"type":38,"tag":65,"props":1188,"children":1189},{"style":93},[1190],{"type":44,"value":130},{"type":38,"tag":65,"props":1192,"children":1193},{"style":133},[1194],{"type":44,"value":136},{"type":38,"tag":65,"props":1196,"children":1197},{"style":77},[1198],{"type":44,"value":141},{"type":38,"tag":65,"props":1200,"children":1201},{"style":133},[1202],{"type":44,"value":1092},{"type":38,"tag":47,"props":1204,"children":1205},{},[1206,1208,1214],{"type":44,"value":1207},"Use only the command for the current launcher. Confirm that it exits successfully and that its audit line names the intended ",{"type":38,"tag":61,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":44,"value":1213},"*-cli",{"type":44,"value":1215}," transport as a subscription. If it exits non-zero or reports a different transport or billing mode, stop before spending and report the mismatch.",{"type":38,"tag":1023,"props":1217,"children":1219},{"id":1218},"image-behavior-in-harness-builds",[1220],{"type":44,"value":1221},"Image behavior in harness builds",{"type":38,"tag":47,"props":1223,"children":1224},{},[1225,1227,1233,1235,1241],{"type":44,"value":1226},"Harness and plugin transports do not provide WPCOM proxy credentials. Absent an independently provisioned ",{"type":38,"tag":61,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":44,"value":1232},"GOOGLE_VERTEX_API_TOKEN",{"type":44,"value":1234},", harness builds ship image placeholders, and this Skill never passes ",{"type":38,"tag":61,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":44,"value":1240},"--with-images",{"type":44,"value":1242},". The Skill cannot assume that a checkout has been provisioned with that token.",{"type":38,"tag":47,"props":1244,"children":1245},{},[1246],{"type":44,"value":1247},"Neither the Codex nor the Grok CLI exposes image generation, so there is no subscription-billed alternative today. This is a current limitation, not a defect.",{"type":38,"tag":1023,"props":1249,"children":1251},{"id":1250},"orchestrate-a-build-step-by-step",[1252],{"type":44,"value":1253},"Orchestrate a build step by step",{"type":38,"tag":47,"props":1255,"children":1256},{},[1257,1259,1264],{"type":44,"value":1258},"Keep the same matching ",{"type":38,"tag":61,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":44,"value":1057},{"type":44,"value":1265}," declaration on every command. The examples below use Codex; replace only that declaration with the exact Claude Code or Grok mapping above when that is the current launcher.",{"type":38,"tag":47,"props":1267,"children":1268},{},[1269,1271,1277],{"type":44,"value":1270},"Harness batches run up to 10 CLI processes concurrently by default. Set ",{"type":38,"tag":61,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":44,"value":1276},"SITE_BUILD_HARNESS_CONCURRENCY",{"type":44,"value":1278}," to a positive integer to override the cap; lower values trade speed for fewer simultaneous processes.",{"type":38,"tag":47,"props":1280,"children":1281},{},[1282,1284,1290],{"type":44,"value":1283},"Choose the project slug and graph before enumeration. Use ",{"type":38,"tag":61,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":44,"value":1289},"--blocks-first",{"type":44,"value":1291}," unless the request explicitly calls for the HTML-first graph. Keep the same graph flag on the enumeration and create commands.",{"type":38,"tag":1293,"props":1294,"children":1296},"h3",{"id":1295},"_1-enumerate-the-selected-graph",[1297],{"type":44,"value":1298},"1. Enumerate the selected graph",{"type":38,"tag":47,"props":1300,"children":1301},{},[1302],{"type":44,"value":1303},"Run enumeration as its own tool call. It requires no prompt, makes no model call, and returns JSON on stdout:",{"type":38,"tag":53,"props":1305,"children":1307},{"className":55,"code":1306,"language":57,"meta":58,"style":58},"SITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --list-steps --slug=PROJECT_SLUG --blocks-first\n",[1308],{"type":38,"tag":61,"props":1309,"children":1310},{"__ignoreMap":58},[1311],{"type":38,"tag":65,"props":1312,"children":1313},{"class":67,"line":26},[1314,1318,1322,1326,1330,1334,1338,1342,1346,1351,1356],{"type":38,"tag":65,"props":1315,"children":1316},{"style":93},[1317],{"type":44,"value":1057},{"type":38,"tag":65,"props":1319,"children":1320},{"style":77},[1321],{"type":44,"value":245},{"type":38,"tag":65,"props":1323,"children":1324},{"style":133},[1325],{"type":44,"value":1123},{"type":38,"tag":65,"props":1327,"children":1328},{"style":635},[1329],{"type":44,"value":1071},{"type":38,"tag":65,"props":1331,"children":1332},{"style":77},[1333],{"type":44,"value":125},{"type":38,"tag":65,"props":1335,"children":1336},{"style":93},[1337],{"type":44,"value":130},{"type":38,"tag":65,"props":1339,"children":1340},{"style":133},[1341],{"type":44,"value":136},{"type":38,"tag":65,"props":1343,"children":1344},{"style":77},[1345],{"type":44,"value":141},{"type":38,"tag":65,"props":1347,"children":1348},{"style":133},[1349],{"type":44,"value":1350}," --list-steps",{"type":38,"tag":65,"props":1352,"children":1353},{"style":133},[1354],{"type":44,"value":1355}," --slug=PROJECT_SLUG",{"type":38,"tag":65,"props":1357,"children":1358},{"style":133},[1359],{"type":44,"value":1360}," --blocks-first\n",{"type":38,"tag":47,"props":1362,"children":1363},{},[1364,1366,1372,1374,1380,1382,1388,1390,1396,1398,1404,1406,1412],{"type":44,"value":1365},"Parse the JSON object. Its ",{"type":38,"tag":61,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":44,"value":1371},"graph",{"type":44,"value":1373}," field identifies the selected graph. Its ordered ",{"type":38,"tag":61,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":44,"value":1379},"steps",{"type":44,"value":1381}," array contains objects with ",{"type":38,"tag":61,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":44,"value":1387},"id",{"type":44,"value":1389},", ",{"type":38,"tag":61,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":44,"value":1395},"label",{"type":44,"value":1397},", and ",{"type":38,"tag":61,"props":1399,"children":1401},{"className":1400},[],[1402],{"type":44,"value":1403},"members",{"type":44,"value":1405}," fields. Let ",{"type":38,"tag":61,"props":1407,"children":1409},{"className":1408},[],[1410],{"type":44,"value":1411},"M",{"type":44,"value":1413}," be the number of entries.",{"type":38,"tag":47,"props":1415,"children":1416},{},[1417,1419,1424,1426,1431,1433,1439],{"type":44,"value":1418},"A concurrent group is one top-level step. Its composite ",{"type":38,"tag":61,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":44,"value":1387},{"type":44,"value":1425}," is the value to run. Its ",{"type":38,"tag":61,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":44,"value":1403},{"type":44,"value":1432}," array is informational only; never turn those members into separate calls. Calling ",{"type":38,"tag":61,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":44,"value":1438},"--step",{"type":44,"value":1440}," once per member runs the whole group once per member, repeats the complete batched model spend, and overwrites the first run's artifacts.",{"type":38,"tag":1293,"props":1442,"children":1444},{"id":1443},"_2-create-the-project-through-the-first-step",[1445],{"type":44,"value":1446},"2. Create the project through the first step",{"type":38,"tag":47,"props":1448,"children":1449},{},[1450,1452,1457,1459,1464],{"type":44,"value":1451},"Take the first object in ",{"type":38,"tag":61,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":44,"value":1379},{"type":44,"value":1458},". Run the create command as one tool call, using its ",{"type":38,"tag":61,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":44,"value":1387},{"type":44,"value":1465}," as the inclusive stop:",{"type":38,"tag":53,"props":1467,"children":1469},{"className":55,"code":1468,"language":57,"meta":58,"style":58},"SITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" \"\u003Csite prompt>\" --slug=PROJECT_SLUG --blocks-first --multi-page --no-serve --until=FIRST_STEP_ID\n",[1470],{"type":38,"tag":61,"props":1471,"children":1472},{"__ignoreMap":58},[1473],{"type":38,"tag":65,"props":1474,"children":1475},{"class":67,"line":26},[1476,1480,1484,1488,1492,1496,1500,1504,1508,1512,1517,1521,1525,1530,1535,1540],{"type":38,"tag":65,"props":1477,"children":1478},{"style":93},[1479],{"type":44,"value":1057},{"type":38,"tag":65,"props":1481,"children":1482},{"style":77},[1483],{"type":44,"value":245},{"type":38,"tag":65,"props":1485,"children":1486},{"style":133},[1487],{"type":44,"value":1123},{"type":38,"tag":65,"props":1489,"children":1490},{"style":635},[1491],{"type":44,"value":1071},{"type":38,"tag":65,"props":1493,"children":1494},{"style":77},[1495],{"type":44,"value":125},{"type":38,"tag":65,"props":1497,"children":1498},{"style":93},[1499],{"type":44,"value":130},{"type":38,"tag":65,"props":1501,"children":1502},{"style":133},[1503],{"type":44,"value":136},{"type":38,"tag":65,"props":1505,"children":1506},{"style":77},[1507],{"type":44,"value":141},{"type":38,"tag":65,"props":1509,"children":1510},{"style":77},[1511],{"type":44,"value":125},{"type":38,"tag":65,"props":1513,"children":1514},{"style":133},[1515],{"type":44,"value":1516},"\u003Csite prompt>",{"type":38,"tag":65,"props":1518,"children":1519},{"style":77},[1520],{"type":44,"value":141},{"type":38,"tag":65,"props":1522,"children":1523},{"style":133},[1524],{"type":44,"value":1355},{"type":38,"tag":65,"props":1526,"children":1527},{"style":133},[1528],{"type":44,"value":1529}," --blocks-first",{"type":38,"tag":65,"props":1531,"children":1532},{"style":133},[1533],{"type":44,"value":1534}," --multi-page",{"type":38,"tag":65,"props":1536,"children":1537},{"style":133},[1538],{"type":44,"value":1539}," --no-serve",{"type":38,"tag":65,"props":1541,"children":1542},{"style":133},[1543],{"type":44,"value":1544}," --until=FIRST_STEP_ID\n",{"type":38,"tag":47,"props":1546,"children":1547},{},[1548,1554,1556,1562,1564,1569,1571,1576,1578,1584],{"type":38,"tag":61,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":44,"value":1553},"--multi-page",{"type":44,"value":1555}," is a creation setting. The create call records it in ",{"type":38,"tag":61,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":44,"value":1561},"meta.json",{"type":44,"value":1563},", and every later ",{"type":38,"tag":61,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":44,"value":1438},{"type":44,"value":1570}," call opens that project and inherits the recorded value. Do not repeat ",{"type":38,"tag":61,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":44,"value":1553},{"type":44,"value":1577}," on per-step calls, and do not add ",{"type":38,"tag":61,"props":1579,"children":1581},{"className":1580},[],[1582],{"type":44,"value":1583},"--pages",{"type":44,"value":1585},"; page selection remains the caller's choice.",{"type":38,"tag":47,"props":1587,"children":1588},{},[1589,1595,1597,1603],{"type":38,"tag":61,"props":1590,"children":1592},{"className":1591},[],[1593],{"type":44,"value":1594},"--from",{"type":44,"value":1596}," and ",{"type":38,"tag":61,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":44,"value":1602},"--until",{"type":44,"value":1604}," are inclusive. Matching values therefore run exactly one ordinary step or one complete concurrent group.",{"type":38,"tag":47,"props":1606,"children":1607},{},[1608],{"type":44,"value":1609},"After the command exits successfully, report:",{"type":38,"tag":53,"props":1611,"children":1615},{"className":1612,"code":1614,"language":44,"meta":58},[1613],"language-text","step 1 of M: \u003Cfirst step label> — succeeded\n",[1616],{"type":38,"tag":61,"props":1617,"children":1618},{"__ignoreMap":58},[1619],{"type":44,"value":1614},{"type":38,"tag":1293,"props":1621,"children":1623},{"id":1622},"_3-run-every-remaining-top-level-step",[1624],{"type":44,"value":1625},"3. Run every remaining top-level step",{"type":38,"tag":47,"props":1627,"children":1628},{},[1629,1631,1636],{"type":44,"value":1630},"For each remaining object in the ordered ",{"type":38,"tag":61,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":44,"value":1379},{"type":44,"value":1637}," array, run one new tool call. Do not put these commands inside one shell loop; separate calls are what make progress visible.",{"type":38,"tag":53,"props":1639,"children":1641},{"className":55,"code":1640,"language":57,"meta":58,"style":58},"SITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --step=STEP_ID\n",[1642],{"type":38,"tag":61,"props":1643,"children":1644},{"__ignoreMap":58},[1645],{"type":38,"tag":65,"props":1646,"children":1647},{"class":67,"line":26},[1648,1652,1656,1660,1664,1668,1672,1676,1680,1684,1688],{"type":38,"tag":65,"props":1649,"children":1650},{"style":93},[1651],{"type":44,"value":1057},{"type":38,"tag":65,"props":1653,"children":1654},{"style":77},[1655],{"type":44,"value":245},{"type":38,"tag":65,"props":1657,"children":1658},{"style":133},[1659],{"type":44,"value":1123},{"type":38,"tag":65,"props":1661,"children":1662},{"style":635},[1663],{"type":44,"value":1071},{"type":38,"tag":65,"props":1665,"children":1666},{"style":77},[1667],{"type":44,"value":125},{"type":38,"tag":65,"props":1669,"children":1670},{"style":93},[1671],{"type":44,"value":130},{"type":38,"tag":65,"props":1673,"children":1674},{"style":133},[1675],{"type":44,"value":136},{"type":38,"tag":65,"props":1677,"children":1678},{"style":77},[1679],{"type":44,"value":141},{"type":38,"tag":65,"props":1681,"children":1682},{"style":133},[1683],{"type":44,"value":1355},{"type":38,"tag":65,"props":1685,"children":1686},{"style":133},[1687],{"type":44,"value":1539},{"type":38,"tag":65,"props":1689,"children":1690},{"style":133},[1691],{"type":44,"value":1692}," --step=STEP_ID\n",{"type":38,"tag":47,"props":1694,"children":1695},{},[1696],{"type":44,"value":1697},"After each successful call, report its position and label:",{"type":38,"tag":53,"props":1699,"children":1702},{"className":1700,"code":1701,"language":44,"meta":58},[1613],"step N of M: \u003Cstep label> — succeeded\n",[1703],{"type":38,"tag":61,"props":1704,"children":1705},{"__ignoreMap":58},[1706],{"type":44,"value":1701},{"type":38,"tag":47,"props":1708,"children":1709},{},[1710],{"type":44,"value":1711},"The transport audit line appears once per CLI invocation. That repetition is intentional: every step call states its transport and billing mode before it spends. After the step completes, its result row reports timing, token use, and the configured model.",{"type":38,"tag":1293,"props":1713,"children":1715},{"id":1714},"_4-stop-on-the-first-failure",[1716],{"type":44,"value":1717},"4. Stop on the first failure",{"type":38,"tag":47,"props":1719,"children":1720},{},[1721,1723,1729],{"type":44,"value":1722},"If any create or step command exits non-zero, do not run later steps. Report ",{"type":38,"tag":61,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":44,"value":1728},"step N of M: \u003Clabel> — failed",{"type":44,"value":1730},", include the failed command's output, and preserve the project for resumption.",{"type":38,"tag":47,"props":1732,"children":1733},{},[1734,1736,1741],{"type":44,"value":1735},"The project can resume from the failed top-level ID because ",{"type":38,"tag":61,"props":1737,"children":1739},{"className":1738},[],[1740],{"type":44,"value":1594},{"type":44,"value":1742}," is inclusive:",{"type":38,"tag":53,"props":1744,"children":1746},{"className":55,"code":1745,"language":57,"meta":58,"style":58},"SITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=FAILED_STEP_ID\n",[1747],{"type":38,"tag":61,"props":1748,"children":1749},{"__ignoreMap":58},[1750],{"type":38,"tag":65,"props":1751,"children":1752},{"class":67,"line":26},[1753,1757,1761,1765,1769,1773,1777,1781,1785,1789,1793],{"type":38,"tag":65,"props":1754,"children":1755},{"style":93},[1756],{"type":44,"value":1057},{"type":38,"tag":65,"props":1758,"children":1759},{"style":77},[1760],{"type":44,"value":245},{"type":38,"tag":65,"props":1762,"children":1763},{"style":133},[1764],{"type":44,"value":1123},{"type":38,"tag":65,"props":1766,"children":1767},{"style":635},[1768],{"type":44,"value":1071},{"type":38,"tag":65,"props":1770,"children":1771},{"style":77},[1772],{"type":44,"value":125},{"type":38,"tag":65,"props":1774,"children":1775},{"style":93},[1776],{"type":44,"value":130},{"type":38,"tag":65,"props":1778,"children":1779},{"style":133},[1780],{"type":44,"value":136},{"type":38,"tag":65,"props":1782,"children":1783},{"style":77},[1784],{"type":44,"value":141},{"type":38,"tag":65,"props":1786,"children":1787},{"style":133},[1788],{"type":44,"value":1355},{"type":38,"tag":65,"props":1790,"children":1791},{"style":133},[1792],{"type":44,"value":1539},{"type":38,"tag":65,"props":1794,"children":1795},{"style":133},[1796],{"type":44,"value":1797}," --from=FAILED_STEP_ID\n",{"type":38,"tag":47,"props":1799,"children":1800},{},[1801,1803,1809,1811,1816],{"type":44,"value":1802},"For a progress-visible resume, enumerate the recorded project again, find ",{"type":38,"tag":61,"props":1804,"children":1806},{"className":1805},[],[1807],{"type":44,"value":1808},"FAILED_STEP_ID",{"type":44,"value":1810},", and restart the separate ",{"type":38,"tag":61,"props":1812,"children":1814},{"className":1813},[],[1815],{"type":44,"value":1438},{"type":44,"value":1817}," calls at that entry. Never silently continue after a failure or switch transports.",{"type":38,"tag":1023,"props":1819,"children":1821},{"id":1820},"spin-the-finished-site-up-in-studio",[1822],{"type":44,"value":1823},"Spin the finished site up in Studio",{"type":38,"tag":47,"props":1825,"children":1826},{},[1827,1829,1835],{"type":44,"value":1828},"Every build command in this Skill passes ",{"type":38,"tag":61,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":44,"value":1834},"--no-serve",{"type":44,"value":1836},". Preview is one explicit call after the last step, so a half-built project is never booted and no build command blocks waiting to be interrupted.",{"type":38,"tag":47,"props":1838,"children":1839},{},[1840],{"type":44,"value":1841},"Studio is the site runner whenever it is installed and answering. Run this as its own tool call once the last step succeeds:",{"type":38,"tag":53,"props":1843,"children":1845},{"className":55,"code":1844,"language":57,"meta":58,"style":58},"php \"$SITE_BUILD_HOME\u002Fbin\u002Fserve.php\" PROJECT_SLUG --runner=studio\n",[1846],{"type":38,"tag":61,"props":1847,"children":1848},{"__ignoreMap":58},[1849],{"type":38,"tag":65,"props":1850,"children":1851},{"class":67,"line":26},[1852,1857,1861,1865,1870,1874,1879],{"type":38,"tag":65,"props":1853,"children":1854},{"style":635},[1855],{"type":44,"value":1856},"php",{"type":38,"tag":65,"props":1858,"children":1859},{"style":77},[1860],{"type":44,"value":125},{"type":38,"tag":65,"props":1862,"children":1863},{"style":93},[1864],{"type":44,"value":130},{"type":38,"tag":65,"props":1866,"children":1867},{"style":133},[1868],{"type":44,"value":1869},"\u002Fbin\u002Fserve.php",{"type":38,"tag":65,"props":1871,"children":1872},{"style":77},[1873],{"type":44,"value":141},{"type":38,"tag":65,"props":1875,"children":1876},{"style":133},[1877],{"type":44,"value":1878}," PROJECT_SLUG",{"type":38,"tag":65,"props":1880,"children":1881},{"style":133},[1882],{"type":44,"value":1883}," --runner=studio\n",{"type":38,"tag":47,"props":1885,"children":1886},{},[1887,1889,1895,1897,1903,1905,1911],{"type":44,"value":1888},"This creates the site inside the Studio workspace — ",{"type":38,"tag":61,"props":1890,"children":1892},{"className":1891},[],[1893],{"type":44,"value":1894},"$SITE_BUILD_STUDIO_ROOT",{"type":44,"value":1896}," when that is set, otherwise ",{"type":38,"tag":61,"props":1898,"children":1900},{"className":1899},[],[1901],{"type":44,"value":1902},"~\u002FStudio",{"type":44,"value":1904}," — as ",{"type":38,"tag":61,"props":1906,"children":1908},{"className":1907},[],[1909],{"type":44,"value":1910},"\u003Cworkspace>\u002FPROJECT_SLUG",{"type":44,"value":1912},", installs the generated theme into it, and registers it with Studio so it appears in the Studio app beside hand-made sites. A directory already there is deleted and rebuilt only when site-builder created it under that same slug. Anything else — a hand-made Studio site, a symlink, an unmarked or mismatched directory — is refused, and the command exits telling you to pick a different slug or clear that directory yourself.",{"type":38,"tag":47,"props":1914,"children":1915},{},[1916,1922,1924,1930],{"type":38,"tag":61,"props":1917,"children":1919},{"className":1918},[],[1920],{"type":44,"value":1921},"--runner=studio",{"type":44,"value":1923}," is required. Without it an absent Studio silently falls back to Playground, whose server holds the foreground until it is interrupted, and the tool call never returns. With it, an absent Studio exits 1 reporting ",{"type":38,"tag":61,"props":1925,"children":1927},{"className":1926},[],[1928],{"type":44,"value":1929},"Studio is not available",{"type":44,"value":1931}," and nothing starts.",{"type":38,"tag":47,"props":1933,"children":1934},{},[1935],{"type":44,"value":1936},"On success the command prints the site URL, the admin URL, and the stop command, then exits. A Studio site is persistent: it keeps running after the command returns. Report the site URL.",{"type":38,"tag":47,"props":1938,"children":1939},{},[1940],{"type":44,"value":1941},"Stop it later with:",{"type":38,"tag":53,"props":1943,"children":1945},{"className":55,"code":1944,"language":57,"meta":58,"style":58},"php \"$SITE_BUILD_HOME\u002Fbin\u002Fserve.php\" PROJECT_SLUG --stop\n",[1946],{"type":38,"tag":61,"props":1947,"children":1948},{"__ignoreMap":58},[1949],{"type":38,"tag":65,"props":1950,"children":1951},{"class":67,"line":26},[1952,1956,1960,1964,1968,1972,1976],{"type":38,"tag":65,"props":1953,"children":1954},{"style":635},[1955],{"type":44,"value":1856},{"type":38,"tag":65,"props":1957,"children":1958},{"style":77},[1959],{"type":44,"value":125},{"type":38,"tag":65,"props":1961,"children":1962},{"style":93},[1963],{"type":44,"value":130},{"type":38,"tag":65,"props":1965,"children":1966},{"style":133},[1967],{"type":44,"value":1869},{"type":38,"tag":65,"props":1969,"children":1970},{"style":77},[1971],{"type":44,"value":141},{"type":38,"tag":65,"props":1973,"children":1974},{"style":133},[1975],{"type":44,"value":1878},{"type":38,"tag":65,"props":1977,"children":1978},{"style":133},[1979],{"type":44,"value":1980}," --stop\n",{"type":38,"tag":47,"props":1982,"children":1983},{},[1984,1986,1992],{"type":44,"value":1985},"If the command exits 1 because Studio is not available, report that and stop. The generated theme is complete on disk at ",{"type":38,"tag":61,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":44,"value":1991},"$SITE_BUILD_HOME\u002Fprojects\u002FPROJECT_SLUG\u002Ftheme",{"type":44,"value":1993},", and the same command previews it once Studio is installed. Never substitute Playground from this Skill.",{"type":38,"tag":1023,"props":1995,"children":1997},{"id":1996},"run-the-whole-build-in-one-call",[1998],{"type":44,"value":1999},"Run the whole build in one call",{"type":38,"tag":47,"props":2001,"children":2002},{},[2003],{"type":44,"value":2004},"Use the single-shot form only when the caller does not need progress between steps:",{"type":38,"tag":53,"props":2006,"children":2008},{"className":55,"code":2007,"language":57,"meta":58,"style":58},"SITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" \"\u003Csite prompt>\" --slug=PROJECT_SLUG --blocks-first --multi-page --no-serve\n",[2009],{"type":38,"tag":61,"props":2010,"children":2011},{"__ignoreMap":58},[2012],{"type":38,"tag":65,"props":2013,"children":2014},{"class":67,"line":26},[2015,2019,2023,2027,2031,2035,2039,2043,2047,2051,2055,2059,2063,2067,2071],{"type":38,"tag":65,"props":2016,"children":2017},{"style":93},[2018],{"type":44,"value":1057},{"type":38,"tag":65,"props":2020,"children":2021},{"style":77},[2022],{"type":44,"value":245},{"type":38,"tag":65,"props":2024,"children":2025},{"style":133},[2026],{"type":44,"value":1123},{"type":38,"tag":65,"props":2028,"children":2029},{"style":635},[2030],{"type":44,"value":1071},{"type":38,"tag":65,"props":2032,"children":2033},{"style":77},[2034],{"type":44,"value":125},{"type":38,"tag":65,"props":2036,"children":2037},{"style":93},[2038],{"type":44,"value":130},{"type":38,"tag":65,"props":2040,"children":2041},{"style":133},[2042],{"type":44,"value":136},{"type":38,"tag":65,"props":2044,"children":2045},{"style":77},[2046],{"type":44,"value":141},{"type":38,"tag":65,"props":2048,"children":2049},{"style":77},[2050],{"type":44,"value":125},{"type":38,"tag":65,"props":2052,"children":2053},{"style":133},[2054],{"type":44,"value":1516},{"type":38,"tag":65,"props":2056,"children":2057},{"style":77},[2058],{"type":44,"value":141},{"type":38,"tag":65,"props":2060,"children":2061},{"style":133},[2062],{"type":44,"value":1355},{"type":38,"tag":65,"props":2064,"children":2065},{"style":133},[2066],{"type":44,"value":1529},{"type":38,"tag":65,"props":2068,"children":2069},{"style":133},[2070],{"type":44,"value":1534},{"type":38,"tag":65,"props":2072,"children":2073},{"style":133},[2074],{"type":44,"value":2075}," --no-serve\n",{"type":38,"tag":47,"props":2077,"children":2078},{},[2079],{"type":44,"value":2080},"The ordinary resume and bounded-range forms remain available for non-interactive use:",{"type":38,"tag":53,"props":2082,"children":2084},{"className":55,"code":2083,"language":57,"meta":58,"style":58},"# Resume an existing project from a selected step through the end.\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=STEP_ID\n\n# Resume only an inclusive bounded range.\nSITE_BUILD_LLM=codex-cli php \"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\" --slug=PROJECT_SLUG --no-serve --from=START_STEP_ID --until=STOP_STEP_ID\n",[2085],{"type":38,"tag":61,"props":2086,"children":2087},{"__ignoreMap":58},[2088,2096,2144,2151,2159],{"type":38,"tag":65,"props":2089,"children":2090},{"class":67,"line":26},[2091],{"type":38,"tag":65,"props":2092,"children":2093},{"style":1046},[2094],{"type":44,"value":2095},"# Resume an existing project from a selected step through the end.\n",{"type":38,"tag":65,"props":2097,"children":2098},{"class":67,"line":22},[2099,2103,2107,2111,2115,2119,2123,2127,2131,2135,2139],{"type":38,"tag":65,"props":2100,"children":2101},{"style":93},[2102],{"type":44,"value":1057},{"type":38,"tag":65,"props":2104,"children":2105},{"style":77},[2106],{"type":44,"value":245},{"type":38,"tag":65,"props":2108,"children":2109},{"style":133},[2110],{"type":44,"value":1123},{"type":38,"tag":65,"props":2112,"children":2113},{"style":635},[2114],{"type":44,"value":1071},{"type":38,"tag":65,"props":2116,"children":2117},{"style":77},[2118],{"type":44,"value":125},{"type":38,"tag":65,"props":2120,"children":2121},{"style":93},[2122],{"type":44,"value":130},{"type":38,"tag":65,"props":2124,"children":2125},{"style":133},[2126],{"type":44,"value":136},{"type":38,"tag":65,"props":2128,"children":2129},{"style":77},[2130],{"type":44,"value":141},{"type":38,"tag":65,"props":2132,"children":2133},{"style":133},[2134],{"type":44,"value":1355},{"type":38,"tag":65,"props":2136,"children":2137},{"style":133},[2138],{"type":44,"value":1539},{"type":38,"tag":65,"props":2140,"children":2141},{"style":133},[2142],{"type":44,"value":2143}," --from=STEP_ID\n",{"type":38,"tag":65,"props":2145,"children":2146},{"class":67,"line":163},[2147],{"type":38,"tag":65,"props":2148,"children":2149},{"emptyLinePlaceholder":694},[2150],{"type":44,"value":697},{"type":38,"tag":65,"props":2152,"children":2153},{"class":67,"line":234},[2154],{"type":38,"tag":65,"props":2155,"children":2156},{"style":1046},[2157],{"type":44,"value":2158},"# Resume only an inclusive bounded range.\n",{"type":38,"tag":65,"props":2160,"children":2161},{"class":67,"line":253},[2162,2166,2170,2174,2178,2182,2186,2190,2194,2198,2202,2207],{"type":38,"tag":65,"props":2163,"children":2164},{"style":93},[2165],{"type":44,"value":1057},{"type":38,"tag":65,"props":2167,"children":2168},{"style":77},[2169],{"type":44,"value":245},{"type":38,"tag":65,"props":2171,"children":2172},{"style":133},[2173],{"type":44,"value":1123},{"type":38,"tag":65,"props":2175,"children":2176},{"style":635},[2177],{"type":44,"value":1071},{"type":38,"tag":65,"props":2179,"children":2180},{"style":77},[2181],{"type":44,"value":125},{"type":38,"tag":65,"props":2183,"children":2184},{"style":93},[2185],{"type":44,"value":130},{"type":38,"tag":65,"props":2187,"children":2188},{"style":133},[2189],{"type":44,"value":136},{"type":38,"tag":65,"props":2191,"children":2192},{"style":77},[2193],{"type":44,"value":141},{"type":38,"tag":65,"props":2195,"children":2196},{"style":133},[2197],{"type":44,"value":1355},{"type":38,"tag":65,"props":2199,"children":2200},{"style":133},[2201],{"type":44,"value":1539},{"type":38,"tag":65,"props":2203,"children":2204},{"style":133},[2205],{"type":44,"value":2206}," --from=START_STEP_ID",{"type":38,"tag":65,"props":2208,"children":2209},{"style":133},[2210],{"type":44,"value":2211}," --until=STOP_STEP_ID\n",{"type":38,"tag":47,"props":2213,"children":2214},{},[2215,2217,2223,2225,2230,2232,2238],{"type":44,"value":2216},"Replace every uppercase placeholder with the chosen slug or an exact ID from ",{"type":38,"tag":61,"props":2218,"children":2220},{"className":2219},[],[2221],{"type":44,"value":2222},"--list-steps",{"type":44,"value":2224},". Combine these forms with other documented ",{"type":38,"tag":61,"props":2226,"children":2228},{"className":2227},[],[2229],{"type":44,"value":898},{"type":44,"value":2231}," flags as needed. Keep invoking the CLI through ",{"type":38,"tag":61,"props":2233,"children":2235},{"className":2234},[],[2236],{"type":44,"value":2237},"\"$SITE_BUILD_HOME\u002Fbin\u002Fbuild.php\"",{"type":44,"value":2239},".",{"type":38,"tag":1023,"props":2241,"children":2243},{"id":2242},"respect-harness-capabilities",[2244],{"type":44,"value":2245},"Respect harness capabilities",{"type":38,"tag":47,"props":2247,"children":2248},{},[2249],{"type":44,"value":2250},"The harness model matrix is authoritative for default and per-step model IDs. Each harness resolves its own provider's model matrix; do not substitute the interactive session model or allow an unpinned harness default.",{"type":38,"tag":47,"props":2252,"children":2253},{},[2254,2256,2262,2263,2269],{"type":44,"value":2255},"Every harness transport treats ",{"type":38,"tag":61,"props":2257,"children":2259},{"className":2258},[],[2260],{"type":44,"value":2261},"temperature",{"type":44,"value":1596},{"type":38,"tag":61,"props":2264,"children":2266},{"className":2265},[],[2267],{"type":44,"value":2268},"max_tokens",{"type":44,"value":2270}," as unsupported. Their use is disclosed and recorded as a degradation.",{"type":38,"tag":47,"props":2272,"children":2273},{},[2274,2276,2282],{"type":44,"value":2275},"Claude honors the ",{"type":38,"tag":61,"props":2277,"children":2279},{"className":2278},[],[2280],{"type":44,"value":2281},"system",{"type":44,"value":2283}," option. Codex and Grok cannot honor it, so they disclose and record that degradation.",{"type":38,"tag":2285,"props":2286,"children":2287},"style",{},[2288],{"type":44,"value":2289},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2291,"total":26},[2292],{"slug":4,"name":4,"fn":5,"description":6,"org":2293,"tags":2294,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2295,2296,2297],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"items":2299,"total":2485},[2300,2321,2338,2352,2365,2382,2397,2411,2426,2443,2454,2469],{"slug":2301,"name":2301,"fn":2302,"description":2303,"org":2304,"tags":2305,"stars":2318,"repoUrl":2319,"updatedAt":2320},"annotate","collect visual feedback with browser annotation tools","Open a browser with visual annotation tools. The user clicks elements on their site and leaves feedback — the agent reads annotations and makes changes. Use this when the user wants to point at specific elements to fix, tweak, or redesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2306,2309,2312,2315],{"name":2307,"slug":2308,"type":15},"Frontend","frontend",{"name":2310,"slug":2311,"type":15},"Productivity","productivity",{"name":2313,"slug":2314,"type":15},"UX Copy","ux-copy",{"name":2316,"slug":2317,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":2322,"name":2322,"fn":2323,"description":2324,"org":2325,"tags":2326,"stars":2318,"repoUrl":2319,"updatedAt":2337},"block-content","write editable WordPress block markup","Write editable WordPress block markup for local Studio sites, including core\u002Fhtml limits, block-theme layout rules, full-width sections, validation, and skeleton-first page\u002FCSS recipes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2327,2330,2333,2336],{"name":2328,"slug":2329,"type":15},"Block Editor","block-editor",{"name":2331,"slug":2332,"type":15},"CSS","css",{"name":2334,"slug":2335,"type":15},"HTML","html",{"name":17,"slug":18,"type":15},"2026-08-29T09:23:44.042569",{"slug":2339,"name":2339,"fn":2340,"description":2341,"org":2342,"tags":2343,"stars":2318,"repoUrl":2319,"updatedAt":2351},"hosting-plans-helper","provide WordPress.com hosting plan information","Answer WordPress.com plan, pricing, upgrade, and feature-tier questions (plan names, what each tier unlocks — plugins, themes, custom code, SSH, hosting — and current prices) from authoritative live data. Load before answering ANY plan, pricing, or feature-gating question; never answer these from memory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2344,2347,2350],{"name":2345,"slug":2346,"type":15},"Pricing","pricing",{"name":2348,"slug":2349,"type":15},"Reference","reference",{"name":17,"slug":18,"type":15},"2026-07-02T07:42:33.654791",{"slug":2353,"name":2353,"fn":2354,"description":2355,"org":2356,"tags":2357,"stars":2318,"repoUrl":2319,"updatedAt":2364},"imagery","generate AI images for websites","Generate AI images for a site with generate_images — how to write image specs, pick aspect ratios, place files (theme assets vs media library), and handle failures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2358,2361],{"name":2359,"slug":2360,"type":15},"Creative","creative",{"name":2362,"slug":2363,"type":15},"Image Generation","image-generation","2026-09-01T08:30:34.994105",{"slug":2366,"name":2366,"fn":2367,"description":2368,"org":2369,"tags":2370,"stars":2318,"repoUrl":2319,"updatedAt":2381},"liberate","migrate websites to WordPress","Import and rebuild a website from a closed platform (Wix, Squarespace, Webflow, Shopify, GoDaddy, Hostinger, HubSpot, Weebly) into a Studio WordPress site. Extracts pages\u002Fposts\u002Fproducts + media, then reconstructs the design as editable blocks + WooCommerce OR as a high-fidelity replica theme. Invoke when the user wants to migrate, import, liberate, or rebuild a site from one of these platforms.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2371,2374,2377,2380],{"name":2372,"slug":2373,"type":15},"CMS","cms",{"name":2375,"slug":2376,"type":15},"Migration","migration",{"name":2378,"slug":2379,"type":15},"Web Development","web-development",{"name":17,"slug":18,"type":15},"2026-07-09T06:47:33.454311",{"slug":2383,"name":2383,"fn":2384,"description":2385,"org":2386,"tags":2387,"stars":2318,"repoUrl":2319,"updatedAt":2396},"need-for-speed","run frontend performance audits for WordPress sites","Run a frontend performance audit on a WordPress site and get actionable optimization recommendations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2388,2391,2392,2395],{"name":2389,"slug":2390,"type":15},"Audit","audit",{"name":2307,"slug":2308,"type":15},{"name":2393,"slug":2394,"type":15},"Performance","performance",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:06.433267",{"slug":2398,"name":2398,"fn":2399,"description":2400,"org":2401,"tags":2402,"stars":2318,"repoUrl":2319,"updatedAt":2410},"plugin-recommendations","recommend WordPress plugins for site features","Choose recommended plugins and plugin-provided blocks for features core WordPress blocks do not cover - ecommerce (WooCommerce), forms and newsletters (Jetpack), online courses and quizzes (Sensei LMS), polls, surveys and ratings (Crowdsignal), spam protection (Akismet) - while keeping generated content editable and avoiding raw HTML fallbacks. Any request to sell products or build a shop, store, or storefront requires WooCommerce with products.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2403,2406,2409],{"name":2404,"slug":2405,"type":15},"Content Creation","content-creation",{"name":2407,"slug":2408,"type":15},"Plugin Development","plugin-development",{"name":17,"slug":18,"type":15},"2026-08-22T03:27:47.937007",{"slug":2412,"name":2412,"fn":2413,"description":2414,"org":2415,"tags":2416,"stars":2318,"repoUrl":2319,"updatedAt":2425},"rank-me-up","run on-page SEO audits for WordPress sites","Run an on-page SEO audit on a WordPress site and get actionable recommendations to improve search visibility.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2417,2418,2421,2424],{"name":2389,"slug":2390,"type":15},{"name":2419,"slug":2420,"type":15},"Marketing","marketing",{"name":2422,"slug":2423,"type":15},"SEO","seo",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:05.196367",{"slug":2427,"name":2427,"fn":2428,"description":2429,"org":2430,"tags":2431,"stars":2318,"repoUrl":2319,"updatedAt":2442},"site-spec","gather specifications for new WordPress sites","Gather the site name and layout preference before building a WordPress site. Run this before creating any new site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2432,2435,2438,2441],{"name":2433,"slug":2434,"type":15},"Design","design",{"name":2436,"slug":2437,"type":15},"Product Management","product-management",{"name":2439,"slug":2440,"type":15},"Specs","specs",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:02.739409",{"slug":2444,"name":2444,"fn":2445,"description":2446,"org":2447,"tags":2448,"stars":2318,"repoUrl":2319,"updatedAt":2453},"studio-cli","manage local WordPress sites with Studio CLI","Use the Studio CLI to manage local WordPress sites, authentication, and preview sites. Invoke this skill when you need to run Studio CLI commands, manage sites, or troubleshoot site issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2449,2452],{"name":2450,"slug":2451,"type":15},"CLI","cli",{"name":17,"slug":18,"type":15},"2026-09-04T07:24:24.148676",{"slug":2455,"name":2455,"fn":2456,"description":2457,"org":2458,"tags":2459,"stars":2318,"repoUrl":2319,"updatedAt":2468},"taxonomist","optimize WordPress category taxonomy","Analyze and optimize a WordPress site's category taxonomy. Exports all posts, uses AI to suggest an improved category structure — merging duplicates, retiring dead categories, creating missing ones, writing descriptions, and re-categorizing posts. Run this when the user wants to clean up or improve their categories.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2460,2463,2466,2467],{"name":2461,"slug":2462,"type":15},"Content Strategy","content-strategy",{"name":2464,"slug":2465,"type":15},"Data Cleaning","data-cleaning",{"name":2422,"slug":2423,"type":15},{"name":17,"slug":18,"type":15},"2026-05-06T05:40:03.966799",{"slug":2470,"name":2470,"fn":2471,"description":2472,"org":2473,"tags":2474,"stars":2318,"repoUrl":2319,"updatedAt":2484},"visual-design","plan and execute visual design direction","Plan and execute high-quality visual direction for site creation, redesign, layout, typography, color, motion, and visual polish.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2475,2478,2479,2482],{"name":2476,"slug":2477,"type":15},"Animation","animation",{"name":2433,"slug":2434,"type":15},{"name":2480,"slug":2481,"type":15},"Typography","typography",{"name":2483,"slug":2470,"type":15},"Visual Design","2026-07-24T05:40:57.887452",90]