[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-wordpress":3,"mdc-j44dm8-key":34,"related-repo-automattic-wordpress":649,"related-org-automattic-wordpress":658},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":32,"mdContent":33},"wordpress","create and edit WordPress sites locally","Create, edit, and test WordPress sites locally. Use for any WordPress work - creating or editing sites, block themes, templates, patterns, Gutenberg block markup, theme.json, wp-cli, WordPress Playground, or local WordPress development and testing.",{"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,18,21],{"name":13,"slug":14,"type":15},"CLI","cli","tag",{"name":17,"slug":4,"type":15},"WordPress",{"name":19,"slug":20,"type":15},"Templates","templates",{"name":22,"slug":23,"type":15},"Web Development","web-development",1,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fwp-skill","2026-06-13T07:46:41.814729",null,0,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":27},[],"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fwp-skill\u002Ftree\u002FHEAD\u002Fwordpress","---\nname: wordpress\ndescription: Create, edit, and test WordPress sites locally. Use for any WordPress work - creating or editing sites, block themes, templates, patterns, Gutenberg block markup, theme.json, wp-cli, WordPress Playground, or local WordPress development and testing.\n---\n\n# WordPress (local-first)\n\nBuild and edit WordPress sites locally on WordPress Playground: site lifecycle, block\nthemes and patterns, block-markup validation, design polish, and backup discipline.\nDeploying to WordPress.com is **not yet supported** by this skill — stay local or point the\nuser to the WordPress.com UI.\n\nRequirements: Node 18+ and a POSIX shell (macOS\u002FLinux\u002FWSL — native Windows is unsupported).\nScript paths below are relative to this skill directory; resolve them to absolute paths.\nRun `scripts\u002Fplayground.sh` from the project directory (its state lives in `.\u002Fworkdir\u002F.playground\u002F`).\n\n## Routing\n\n| Task | Read |\n|---|---|\n| Run\u002Fcreate a local site, any server lifecycle or wp-cli need, Playground facts | `references\u002Flocal-sites.md` |\n| Write or edit ANY block markup (templates, parts, patterns, post content) | `references\u002Fblock-markup.md` |\n| Build a theme: structure, theme.json, fonts, patterns, navigation, query loops | `references\u002Fthemes-and-patterns.md` |\n| New site \u002F redesign (browser design previews + selection); polish rendered output | `references\u002Fdesign.md` |\n| User points at a reference website (inspiration, \"build for\", rebuild, \"unlike X\") | `references\u002Finspiration.md` |\n| Decide the site's page-frame shape + header behavior before building (site spec) | `references\u002Fsite-spec.md` |\n| Build the page-frame CSS for a non-default layoutMode (sidebar, landing, magazine, gallery) | `references\u002Flayout-modes.md` |\n| Make a theme look designed, not generated: aesthetic direction + per-page composition | `references\u002Faesthetics.md` |\n| Add tasteful scroll motion to a built theme (reveal, hero-fade, sticky header) | `references\u002Fmotion.md` |\n| Images for a site: generate (AI via the user's WordPress.com login), add, or remove | `references\u002Fimages-media.md` |\n| Anything destructive on a site the user calls production | `references\u002Fbackups-and-safety.md` |\n\n## Non-negotiable rules\n\n1. **Local WordPress = Playground via `scripts\u002Fplayground.sh`** (verbs:\n   `bootstrap | ensure | wp | front-page | status | stop`). Docker is banned. Never hand-roll a\n   MySQL\u002FPHP stack, never wp-now.\n2. **Local sites you created are disposable; production is not.** Before any destructive\n   write to a user-designated production site, create and verify a backup manifest\n   (`references\u002Fbackups-and-safety.md`). If the user says to skip it, refuse — creating one\n   takes ~30 seconds. File copies count as writes.\n3. **Block work isn't done until both gates pass.** Per file, as you write\u002Fedit markup: auto-repair\n   with `fix-blocks.cjs` (mechanical, no browser; fixes the recurring cover\u002Fborder\u002Forder INVALID\n   cases), then `validate-blocks.cjs` — both instant. Run the slow `editor-gate.mjs` (live editor)\n   **once per hand-back, at the very end**, after every file is inner-loop-clean — not per file and\n   not as a fix-discovery loop; it should pass first try. Do not hand-fix validity or open the\n   editor to fix it; run the fixer. Invalid blocks render fine on the frontend and break only in the\n   editor — screenshots can't catch them. (`references\u002Fblock-markup.md`.)\n4. **Never edit WordPress core.** `wp search-replace` always dry-runs first.\n5. **Leave the server running when you hand work back — the user needs it live to test.**\n   Do NOT run `playground.sh stop` just because development is \"done\"; stopping a site the\n   user is about to try is a defect, not cleanup. Stop ONLY when the user asks, or when you\n   must restart to change the mount set. Whenever you stop — and when you finish — give the\n   user the one-line `playground.sh ensure …` command to bring the site back. (`stop` still\n   asserts clean teardown and must print \"stopped clean\" on the occasions you do run it.)\n6. **End every rendered change by printing a clickable link the user can test.** Print the\n   live URL from the recorded port — `http:\u002F\u002F127.0.0.1:$(cat workdir\u002F.playground\u002Fserver.port)\u002F` —\n   deep-linked to the part you changed: a section anchor (`…\u002F#\u003Canchor>`), a specific page\n   (`…\u002Fsample-page\u002F`), or the editor (`…\u002Fwp-admin\u002F`) for editor-only work. Default to the\n   home page for general or site-wide changes. Always resolve the real running port; never\n   hardcode or assume one.\n7. **For new sites\u002Fredesigns, users choose from rendered HTML previews in a browser**\n   (`references\u002Fdesign.md`) — never from text directions, terminal option lists, or ASCII\n   mockups. The number of previews scales to the brief: an open brief or material redesign gets\n   the 4-direction gallery; a tightly-specified brief gets a **single** first-fold preview built\n   to that brief (still shown and approved in the browser — not silently skipped). Build what the\n   user asked for; previews confirm the execution, they don't reopen a decision the brief already\n   made.\n8. **Build the LANDING PAGE first, then ask what else to build** (`references\u002Fdesign.md` §5–§6).\n   Run the build sequence — **scaffold** (`scripts\u002Fscaffold-theme.sh` — drops theme.json rigor,\n   base CSS, motion runtime, content-loader) → site spec (`site-spec.md`) → recolor theme.json\n   (`themes-and-patterns.md`) → page-frame CSS (`layout-modes.md`) → compose the home\u002Ffront page\n   only (`aesthetics.md`) → motion hooks (`motion.md`) — then hand back the **live landing page**\n   and STOP. Do not pre-build the other pages, templates, CPTs, or forms, or generate the whole\n   image library, on the assumption the user wants them — that's the slow path. Once the user has\n   seen the landing page, ask which of the site-type-appropriate extras to build (§6). Scaffold\n   first so rigor\u002Fmotion can't be skipped; never hand-write theme.json\u002Fstyle.css boilerplate or\n   hand-roll page creation \u002F front-page wiring (`content-loader.php` does it).\n9. **Image handling needs an explicit choice — always ask, before design previews and any\n   markup. Being logged in is not consent.** Check `workdir\u002F.playground\u002Fimages.json` first (a recorded\n   answer is the only thing that skips the question), then follow `references\u002Fimages-media.md`:\n   present four options, **\"generate real AI photos\" always listed first**, then plain\n   placeholders (solid-color images + `AI_IMAGE:` markers, no login needed), provide their own\n   photos, or imageless. The answer also decides what the design previews contain. Fall back to\n   placeholders whenever the user isn't logged in or doesn't want to generate; respect a recorded\n   answer across sessions; and never let generation failures or the choice block site creation.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,62,84,91,306,312],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"wordpress-local-first",[45],{"type":46,"value":47},"text","WordPress (local-first)",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52,54,60],{"type":46,"value":53},"Build and edit WordPress sites locally on WordPress Playground: site lifecycle, block\nthemes and patterns, block-markup validation, design polish, and backup discipline.\nDeploying to WordPress.com is ",{"type":40,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":46,"value":59},"not yet supported",{"type":46,"value":61}," by this skill — stay local or point the\nuser to the WordPress.com UI.",{"type":40,"tag":49,"props":63,"children":64},{},[65,67,74,76,82],{"type":46,"value":66},"Requirements: Node 18+ and a POSIX shell (macOS\u002FLinux\u002FWSL — native Windows is unsupported).\nScript paths below are relative to this skill directory; resolve them to absolute paths.\nRun ",{"type":40,"tag":68,"props":69,"children":71},"code",{"className":70},[],[72],{"type":46,"value":73},"scripts\u002Fplayground.sh",{"type":46,"value":75}," from the project directory (its state lives in ",{"type":40,"tag":68,"props":77,"children":79},{"className":78},[],[80],{"type":46,"value":81},".\u002Fworkdir\u002F.playground\u002F",{"type":46,"value":83},").",{"type":40,"tag":85,"props":86,"children":88},"h2",{"id":87},"routing",[89],{"type":46,"value":90},"Routing",{"type":40,"tag":92,"props":93,"children":94},"table",{},[95,114],{"type":40,"tag":96,"props":97,"children":98},"thead",{},[99],{"type":40,"tag":100,"props":101,"children":102},"tr",{},[103,109],{"type":40,"tag":104,"props":105,"children":106},"th",{},[107],{"type":46,"value":108},"Task",{"type":40,"tag":104,"props":110,"children":111},{},[112],{"type":46,"value":113},"Read",{"type":40,"tag":115,"props":116,"children":117},"tbody",{},[118,136,153,170,187,204,221,238,255,272,289],{"type":40,"tag":100,"props":119,"children":120},{},[121,127],{"type":40,"tag":122,"props":123,"children":124},"td",{},[125],{"type":46,"value":126},"Run\u002Fcreate a local site, any server lifecycle or wp-cli need, Playground facts",{"type":40,"tag":122,"props":128,"children":129},{},[130],{"type":40,"tag":68,"props":131,"children":133},{"className":132},[],[134],{"type":46,"value":135},"references\u002Flocal-sites.md",{"type":40,"tag":100,"props":137,"children":138},{},[139,144],{"type":40,"tag":122,"props":140,"children":141},{},[142],{"type":46,"value":143},"Write or edit ANY block markup (templates, parts, patterns, post content)",{"type":40,"tag":122,"props":145,"children":146},{},[147],{"type":40,"tag":68,"props":148,"children":150},{"className":149},[],[151],{"type":46,"value":152},"references\u002Fblock-markup.md",{"type":40,"tag":100,"props":154,"children":155},{},[156,161],{"type":40,"tag":122,"props":157,"children":158},{},[159],{"type":46,"value":160},"Build a theme: structure, theme.json, fonts, patterns, navigation, query loops",{"type":40,"tag":122,"props":162,"children":163},{},[164],{"type":40,"tag":68,"props":165,"children":167},{"className":166},[],[168],{"type":46,"value":169},"references\u002Fthemes-and-patterns.md",{"type":40,"tag":100,"props":171,"children":172},{},[173,178],{"type":40,"tag":122,"props":174,"children":175},{},[176],{"type":46,"value":177},"New site \u002F redesign (browser design previews + selection); polish rendered output",{"type":40,"tag":122,"props":179,"children":180},{},[181],{"type":40,"tag":68,"props":182,"children":184},{"className":183},[],[185],{"type":46,"value":186},"references\u002Fdesign.md",{"type":40,"tag":100,"props":188,"children":189},{},[190,195],{"type":40,"tag":122,"props":191,"children":192},{},[193],{"type":46,"value":194},"User points at a reference website (inspiration, \"build for\", rebuild, \"unlike X\")",{"type":40,"tag":122,"props":196,"children":197},{},[198],{"type":40,"tag":68,"props":199,"children":201},{"className":200},[],[202],{"type":46,"value":203},"references\u002Finspiration.md",{"type":40,"tag":100,"props":205,"children":206},{},[207,212],{"type":40,"tag":122,"props":208,"children":209},{},[210],{"type":46,"value":211},"Decide the site's page-frame shape + header behavior before building (site spec)",{"type":40,"tag":122,"props":213,"children":214},{},[215],{"type":40,"tag":68,"props":216,"children":218},{"className":217},[],[219],{"type":46,"value":220},"references\u002Fsite-spec.md",{"type":40,"tag":100,"props":222,"children":223},{},[224,229],{"type":40,"tag":122,"props":225,"children":226},{},[227],{"type":46,"value":228},"Build the page-frame CSS for a non-default layoutMode (sidebar, landing, magazine, gallery)",{"type":40,"tag":122,"props":230,"children":231},{},[232],{"type":40,"tag":68,"props":233,"children":235},{"className":234},[],[236],{"type":46,"value":237},"references\u002Flayout-modes.md",{"type":40,"tag":100,"props":239,"children":240},{},[241,246],{"type":40,"tag":122,"props":242,"children":243},{},[244],{"type":46,"value":245},"Make a theme look designed, not generated: aesthetic direction + per-page composition",{"type":40,"tag":122,"props":247,"children":248},{},[249],{"type":40,"tag":68,"props":250,"children":252},{"className":251},[],[253],{"type":46,"value":254},"references\u002Faesthetics.md",{"type":40,"tag":100,"props":256,"children":257},{},[258,263],{"type":40,"tag":122,"props":259,"children":260},{},[261],{"type":46,"value":262},"Add tasteful scroll motion to a built theme (reveal, hero-fade, sticky header)",{"type":40,"tag":122,"props":264,"children":265},{},[266],{"type":40,"tag":68,"props":267,"children":269},{"className":268},[],[270],{"type":46,"value":271},"references\u002Fmotion.md",{"type":40,"tag":100,"props":273,"children":274},{},[275,280],{"type":40,"tag":122,"props":276,"children":277},{},[278],{"type":46,"value":279},"Images for a site: generate (AI via the user's WordPress.com login), add, or remove",{"type":40,"tag":122,"props":281,"children":282},{},[283],{"type":40,"tag":68,"props":284,"children":286},{"className":285},[],[287],{"type":46,"value":288},"references\u002Fimages-media.md",{"type":40,"tag":100,"props":290,"children":291},{},[292,297],{"type":40,"tag":122,"props":293,"children":294},{},[295],{"type":46,"value":296},"Anything destructive on a site the user calls production",{"type":40,"tag":122,"props":298,"children":299},{},[300],{"type":40,"tag":68,"props":301,"children":303},{"className":302},[],[304],{"type":46,"value":305},"references\u002Fbackups-and-safety.md",{"type":40,"tag":85,"props":307,"children":309},{"id":308},"non-negotiable-rules",[310],{"type":46,"value":311},"Non-negotiable rules",{"type":40,"tag":313,"props":314,"children":315},"ol",{},[316,340,357,405,423,457,499,523,609],{"type":40,"tag":317,"props":318,"children":319},"li",{},[320,330,332,338],{"type":40,"tag":55,"props":321,"children":322},{},[323,325],{"type":46,"value":324},"Local WordPress = Playground via ",{"type":40,"tag":68,"props":326,"children":328},{"className":327},[],[329],{"type":46,"value":73},{"type":46,"value":331}," (verbs:\n",{"type":40,"tag":68,"props":333,"children":335},{"className":334},[],[336],{"type":46,"value":337},"bootstrap | ensure | wp | front-page | status | stop",{"type":46,"value":339},"). Docker is banned. Never hand-roll a\nMySQL\u002FPHP stack, never wp-now.",{"type":40,"tag":317,"props":341,"children":342},{},[343,348,350,355],{"type":40,"tag":55,"props":344,"children":345},{},[346],{"type":46,"value":347},"Local sites you created are disposable; production is not.",{"type":46,"value":349}," Before any destructive\nwrite to a user-designated production site, create and verify a backup manifest\n(",{"type":40,"tag":68,"props":351,"children":353},{"className":352},[],[354],{"type":46,"value":305},{"type":46,"value":356},"). If the user says to skip it, refuse — creating one\ntakes ~30 seconds. File copies count as writes.",{"type":40,"tag":317,"props":358,"children":359},{},[360,365,367,373,375,381,383,389,391,396,398,403],{"type":40,"tag":55,"props":361,"children":362},{},[363],{"type":46,"value":364},"Block work isn't done until both gates pass.",{"type":46,"value":366}," Per file, as you write\u002Fedit markup: auto-repair\nwith ",{"type":40,"tag":68,"props":368,"children":370},{"className":369},[],[371],{"type":46,"value":372},"fix-blocks.cjs",{"type":46,"value":374}," (mechanical, no browser; fixes the recurring cover\u002Fborder\u002Forder INVALID\ncases), then ",{"type":40,"tag":68,"props":376,"children":378},{"className":377},[],[379],{"type":46,"value":380},"validate-blocks.cjs",{"type":46,"value":382}," — both instant. Run the slow ",{"type":40,"tag":68,"props":384,"children":386},{"className":385},[],[387],{"type":46,"value":388},"editor-gate.mjs",{"type":46,"value":390}," (live editor)\n",{"type":40,"tag":55,"props":392,"children":393},{},[394],{"type":46,"value":395},"once per hand-back, at the very end",{"type":46,"value":397},", after every file is inner-loop-clean — not per file and\nnot as a fix-discovery loop; it should pass first try. Do not hand-fix validity or open the\neditor to fix it; run the fixer. Invalid blocks render fine on the frontend and break only in the\neditor — screenshots can't catch them. (",{"type":40,"tag":68,"props":399,"children":401},{"className":400},[],[402],{"type":46,"value":152},{"type":46,"value":404},".)",{"type":40,"tag":317,"props":406,"children":407},{},[408,413,415,421],{"type":40,"tag":55,"props":409,"children":410},{},[411],{"type":46,"value":412},"Never edit WordPress core.",{"type":46,"value":414}," ",{"type":40,"tag":68,"props":416,"children":418},{"className":417},[],[419],{"type":46,"value":420},"wp search-replace",{"type":46,"value":422}," always dry-runs first.",{"type":40,"tag":317,"props":424,"children":425},{},[426,431,433,439,441,447,449,455],{"type":40,"tag":55,"props":427,"children":428},{},[429],{"type":46,"value":430},"Leave the server running when you hand work back — the user needs it live to test.",{"type":46,"value":432},"\nDo NOT run ",{"type":40,"tag":68,"props":434,"children":436},{"className":435},[],[437],{"type":46,"value":438},"playground.sh stop",{"type":46,"value":440}," just because development is \"done\"; stopping a site the\nuser is about to try is a defect, not cleanup. Stop ONLY when the user asks, or when you\nmust restart to change the mount set. Whenever you stop — and when you finish — give the\nuser the one-line ",{"type":40,"tag":68,"props":442,"children":444},{"className":443},[],[445],{"type":46,"value":446},"playground.sh ensure …",{"type":46,"value":448}," command to bring the site back. (",{"type":40,"tag":68,"props":450,"children":452},{"className":451},[],[453],{"type":46,"value":454},"stop",{"type":46,"value":456}," still\nasserts clean teardown and must print \"stopped clean\" on the occasions you do run it.)",{"type":40,"tag":317,"props":458,"children":459},{},[460,465,467,473,475,481,483,489,491,497],{"type":40,"tag":55,"props":461,"children":462},{},[463],{"type":46,"value":464},"End every rendered change by printing a clickable link the user can test.",{"type":46,"value":466}," Print the\nlive URL from the recorded port — ",{"type":40,"tag":68,"props":468,"children":470},{"className":469},[],[471],{"type":46,"value":472},"http:\u002F\u002F127.0.0.1:$(cat workdir\u002F.playground\u002Fserver.port)\u002F",{"type":46,"value":474}," —\ndeep-linked to the part you changed: a section anchor (",{"type":40,"tag":68,"props":476,"children":478},{"className":477},[],[479],{"type":46,"value":480},"…\u002F#\u003Canchor>",{"type":46,"value":482},"), a specific page\n(",{"type":40,"tag":68,"props":484,"children":486},{"className":485},[],[487],{"type":46,"value":488},"…\u002Fsample-page\u002F",{"type":46,"value":490},"), or the editor (",{"type":40,"tag":68,"props":492,"children":494},{"className":493},[],[495],{"type":46,"value":496},"…\u002Fwp-admin\u002F",{"type":46,"value":498},") for editor-only work. Default to the\nhome page for general or site-wide changes. Always resolve the real running port; never\nhardcode or assume one.",{"type":40,"tag":317,"props":500,"children":501},{},[502,507,509,514,516,521],{"type":40,"tag":55,"props":503,"children":504},{},[505],{"type":46,"value":506},"For new sites\u002Fredesigns, users choose from rendered HTML previews in a browser",{"type":46,"value":508},"\n(",{"type":40,"tag":68,"props":510,"children":512},{"className":511},[],[513],{"type":46,"value":186},{"type":46,"value":515},") — never from text directions, terminal option lists, or ASCII\nmockups. The number of previews scales to the brief: an open brief or material redesign gets\nthe 4-direction gallery; a tightly-specified brief gets a ",{"type":40,"tag":55,"props":517,"children":518},{},[519],{"type":46,"value":520},"single",{"type":46,"value":522}," first-fold preview built\nto that brief (still shown and approved in the browser — not silently skipped). Build what the\nuser asked for; previews confirm the execution, they don't reopen a decision the brief already\nmade.",{"type":40,"tag":317,"props":524,"children":525},{},[526,531,533,538,540,545,546,552,554,560,562,568,570,576,578,584,586,592,594,599,601,607],{"type":40,"tag":55,"props":527,"children":528},{},[529],{"type":46,"value":530},"Build the LANDING PAGE first, then ask what else to build",{"type":46,"value":532}," (",{"type":40,"tag":68,"props":534,"children":536},{"className":535},[],[537],{"type":46,"value":186},{"type":46,"value":539}," §5–§6).\nRun the build sequence — ",{"type":40,"tag":55,"props":541,"children":542},{},[543],{"type":46,"value":544},"scaffold",{"type":46,"value":532},{"type":40,"tag":68,"props":547,"children":549},{"className":548},[],[550],{"type":46,"value":551},"scripts\u002Fscaffold-theme.sh",{"type":46,"value":553}," — drops theme.json rigor,\nbase CSS, motion runtime, content-loader) → site spec (",{"type":40,"tag":68,"props":555,"children":557},{"className":556},[],[558],{"type":46,"value":559},"site-spec.md",{"type":46,"value":561},") → recolor theme.json\n(",{"type":40,"tag":68,"props":563,"children":565},{"className":564},[],[566],{"type":46,"value":567},"themes-and-patterns.md",{"type":46,"value":569},") → page-frame CSS (",{"type":40,"tag":68,"props":571,"children":573},{"className":572},[],[574],{"type":46,"value":575},"layout-modes.md",{"type":46,"value":577},") → compose the home\u002Ffront page\nonly (",{"type":40,"tag":68,"props":579,"children":581},{"className":580},[],[582],{"type":46,"value":583},"aesthetics.md",{"type":46,"value":585},") → motion hooks (",{"type":40,"tag":68,"props":587,"children":589},{"className":588},[],[590],{"type":46,"value":591},"motion.md",{"type":46,"value":593},") — then hand back the ",{"type":40,"tag":55,"props":595,"children":596},{},[597],{"type":46,"value":598},"live landing page",{"type":46,"value":600},"\nand STOP. Do not pre-build the other pages, templates, CPTs, or forms, or generate the whole\nimage library, on the assumption the user wants them — that's the slow path. Once the user has\nseen the landing page, ask which of the site-type-appropriate extras to build (§6). Scaffold\nfirst so rigor\u002Fmotion can't be skipped; never hand-write theme.json\u002Fstyle.css boilerplate or\nhand-roll page creation \u002F front-page wiring (",{"type":40,"tag":68,"props":602,"children":604},{"className":603},[],[605],{"type":46,"value":606},"content-loader.php",{"type":46,"value":608}," does it).",{"type":40,"tag":317,"props":610,"children":611},{},[612,617,619,625,627,632,634,639,641,647],{"type":40,"tag":55,"props":613,"children":614},{},[615],{"type":46,"value":616},"Image handling needs an explicit choice — always ask, before design previews and any\nmarkup. Being logged in is not consent.",{"type":46,"value":618}," Check ",{"type":40,"tag":68,"props":620,"children":622},{"className":621},[],[623],{"type":46,"value":624},"workdir\u002F.playground\u002Fimages.json",{"type":46,"value":626}," first (a recorded\nanswer is the only thing that skips the question), then follow ",{"type":40,"tag":68,"props":628,"children":630},{"className":629},[],[631],{"type":46,"value":288},{"type":46,"value":633},":\npresent four options, ",{"type":40,"tag":55,"props":635,"children":636},{},[637],{"type":46,"value":638},"\"generate real AI photos\" always listed first",{"type":46,"value":640},", then plain\nplaceholders (solid-color images + ",{"type":40,"tag":68,"props":642,"children":644},{"className":643},[],[645],{"type":46,"value":646},"AI_IMAGE:",{"type":46,"value":648}," markers, no login needed), provide their own\nphotos, or imageless. The answer also decides what the design previews contain. Fall back to\nplaceholders whenever the user isn't logged in or doesn't want to generate; respect a recorded\nanswer across sessions; and never let generation failures or the choice block site creation.",{"items":650,"total":24},[651],{"slug":4,"name":4,"fn":5,"description":6,"org":652,"tags":653,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[654,655,656,657],{"name":13,"slug":14,"type":15},{"name":19,"slug":20,"type":15},{"name":22,"slug":23,"type":15},{"name":17,"slug":4,"type":15},{"items":659,"total":843},[660,681,698,712,727,742,756,771,788,797,812,828],{"slug":661,"name":661,"fn":662,"description":663,"org":664,"tags":665,"stars":678,"repoUrl":679,"updatedAt":680},"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},[666,669,672,675],{"name":667,"slug":668,"type":15},"Frontend","frontend",{"name":670,"slug":671,"type":15},"Productivity","productivity",{"name":673,"slug":674,"type":15},"UX Copy","ux-copy",{"name":676,"slug":677,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":682,"name":682,"fn":683,"description":684,"org":685,"tags":686,"stars":678,"repoUrl":679,"updatedAt":697},"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},[687,690,693,696],{"name":688,"slug":689,"type":15},"Block Editor","block-editor",{"name":691,"slug":692,"type":15},"CSS","css",{"name":694,"slug":695,"type":15},"HTML","html",{"name":17,"slug":4,"type":15},"2026-05-27T07:01:55.629681",{"slug":699,"name":699,"fn":700,"description":701,"org":702,"tags":703,"stars":678,"repoUrl":679,"updatedAt":711},"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},[704,707,710],{"name":705,"slug":706,"type":15},"Pricing","pricing",{"name":708,"slug":709,"type":15},"Reference","reference",{"name":17,"slug":4,"type":15},"2026-07-02T07:42:33.654791",{"slug":713,"name":713,"fn":714,"description":715,"org":716,"tags":717,"stars":678,"repoUrl":679,"updatedAt":726},"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},[718,721,724,725],{"name":719,"slug":720,"type":15},"CMS","cms",{"name":722,"slug":723,"type":15},"Migration","migration",{"name":22,"slug":23,"type":15},{"name":17,"slug":4,"type":15},"2026-07-09T06:47:33.454311",{"slug":728,"name":728,"fn":729,"description":730,"org":731,"tags":732,"stars":678,"repoUrl":679,"updatedAt":741},"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},[733,736,737,740],{"name":734,"slug":735,"type":15},"Audit","audit",{"name":667,"slug":668,"type":15},{"name":738,"slug":739,"type":15},"Performance","performance",{"name":17,"slug":4,"type":15},"2026-05-06T05:40:06.433267",{"slug":743,"name":743,"fn":744,"description":745,"org":746,"tags":747,"stars":678,"repoUrl":679,"updatedAt":755},"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},[748,751,754],{"name":749,"slug":750,"type":15},"Content Creation","content-creation",{"name":752,"slug":753,"type":15},"Plugin Development","plugin-development",{"name":17,"slug":4,"type":15},"2026-05-27T07:01:58.249105",{"slug":757,"name":757,"fn":758,"description":759,"org":760,"tags":761,"stars":678,"repoUrl":679,"updatedAt":770},"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},[762,763,766,769],{"name":734,"slug":735,"type":15},{"name":764,"slug":765,"type":15},"Marketing","marketing",{"name":767,"slug":768,"type":15},"SEO","seo",{"name":17,"slug":4,"type":15},"2026-05-06T05:40:05.196367",{"slug":772,"name":772,"fn":773,"description":774,"org":775,"tags":776,"stars":678,"repoUrl":679,"updatedAt":787},"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},[777,780,783,786],{"name":778,"slug":779,"type":15},"Design","design",{"name":781,"slug":782,"type":15},"Product Management","product-management",{"name":784,"slug":785,"type":15},"Specs","specs",{"name":17,"slug":4,"type":15},"2026-05-06T05:40:02.739409",{"slug":789,"name":789,"fn":790,"description":791,"org":792,"tags":793,"stars":678,"repoUrl":679,"updatedAt":796},"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},[794,795],{"name":13,"slug":14,"type":15},{"name":17,"slug":4,"type":15},"2026-04-06T18:02:57.150231",{"slug":798,"name":798,"fn":799,"description":800,"org":801,"tags":802,"stars":678,"repoUrl":679,"updatedAt":811},"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},[803,806,809,810],{"name":804,"slug":805,"type":15},"Content Strategy","content-strategy",{"name":807,"slug":808,"type":15},"Data Cleaning","data-cleaning",{"name":767,"slug":768,"type":15},{"name":17,"slug":4,"type":15},"2026-05-06T05:40:03.966799",{"slug":813,"name":813,"fn":814,"description":815,"org":816,"tags":817,"stars":678,"repoUrl":679,"updatedAt":827},"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},[818,821,822,825],{"name":819,"slug":820,"type":15},"Animation","animation",{"name":778,"slug":779,"type":15},{"name":823,"slug":824,"type":15},"Typography","typography",{"name":826,"slug":813,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":829,"name":829,"fn":830,"description":831,"org":832,"tags":833,"stars":678,"repoUrl":679,"updatedAt":842},"visual-polish","verify and polish website visual design","Verify and polish a built or redesigned site by diagnosing rendered-DOM issues against intent and fixing them in a planned, batched screenshot-and-fix loop.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[834,837,838,841],{"name":835,"slug":836,"type":15},"Debugging","debugging",{"name":667,"slug":668,"type":15},{"name":839,"slug":840,"type":15},"Screenshots","screenshots",{"name":826,"slug":813,"type":15},"2026-06-06T07:09:59.809812",81]