[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-taxonomist":3,"mdc--iqjiix-key":40,"related-org-automattic-taxonomist":1636,"related-repo-automattic-taxonomist":1813},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":35,"sourceUrl":38,"mdContent":39},"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},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"SEO","seo","tag",{"name":17,"slug":18,"type":15},"Content Strategy","content-strategy",{"name":20,"slug":21,"type":15},"WordPress","wordpress",{"name":23,"slug":24,"type":15},"Data Cleaning","data-cleaning",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:03.966799",null,82,[31,32,33,34,21],"agents","cli","desktop","electron",{"repoUrl":26,"stars":25,"forks":29,"topics":36,"description":37},[31,32,33,34,21],"WordPress Studio, a free desktop app and CLI that helps developers streamline their local WordPress development workflow.","https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio\u002Ftree\u002FHEAD\u002Fapps\u002Fcli\u002Fai\u002Fskills\u002Ftaxonomist","---\nname: taxonomist\ndescription: 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.\nuser-invokable: true\n---\n\n# Taxonomist\n\nAI-powered WordPress category taxonomy optimizer. Analyzes every post on a WordPress site and suggests an improved category structure — merging duplicates, retiring dead categories, creating missing ones, and re-categorizing posts.\n\nBased on [Taxonomist](https:\u002F\u002Fgithub.com\u002Fm\u002Ftaxonomist) by Matt Mullenweg.\n\n## On Startup\n\nWhen the user invokes this skill, introduce yourself:\n\n> **Welcome to Taxonomist!** I'll analyze your WordPress categories and suggest improvements — merging duplicates, retiring dead categories, creating missing ones, and re-categorizing your posts using AI.\n>\n> Everything is safe: I'll preview all changes before doing anything, and log every modification so it can be reversed. Nothing touches your site until you approve it.\n\nThen identify the target site. If there's only one local Studio site, use it automatically. If there are multiple, ask which one to analyze.\n\n**Before anything else**, call the `install_taxonomy_scripts` tool with the target site to set up the PHP scripts.\n\n## How It Works\n\nThis skill operates through an interactive, step-by-step process on a local Studio site:\n\n1. **Connect** — Identify the target local site and verify it's running\n2. **Export** — Download all posts (full content) and categories to local JSON\n3. **Backup** — Snapshot current taxonomy state before any changes\n4. **Analyze** — Use parallel sub-agents to analyze every post's content and suggest optimal categories\n5. **Plan** — Present a comprehensive category plan with descriptions\n6. **Review** — Iterate with the user until the plan is approved\n7. **Apply descriptions** — Update category descriptions first\n8. **Apply categories** — Execute post re-categorization, logging every change\n9. **Verify** — Confirm site integrity\n\n**Steps 1-6 require NO write access to the site.** The site is only modified after explicit user approval.\n\n## Working Directory\n\nAll data files go in a `taxonomist-data\u002F` directory inside the site root:\n\n```\n{site_path}\u002Ftaxonomist-data\u002F\n├── export\u002F\n│   ├── posts.json          # Exported posts with full content\n│   └── categories.json     # Current category list\n├── batches\u002F\n│   ├── batch-000.json      # Posts split into analysis batches\n│   ├── batch-001.json\n│   └── ...\n├── results\u002F\n│   ├── batch-000-results.json\n│   └── ...\n├── backups\u002F\n│   └── pre-analysis-{timestamp}.json\n└── logs\u002F\n    └── changes-{timestamp}.tsv\n```\n\n## Step 1: Connect\n\n1. Use `site_list` to find available sites\n2. If multiple sites exist, ask the user which one to analyze\n3. Use `site_info` to verify the site is running\n4. If the site is stopped, start it with `site_start`\n5. Verify WordPress is working: `wp_cli` with `eval 'echo \"OK\";'`\n\n## Step 2: Export\n\nCreate the working directory structure, then export posts and categories.\n\n### Export categories\n\nUse `wp_cli`:\n```\nterm list category --format=json --fields=term_id,name,slug,description,count,parent\n```\n\nSave the output to `taxonomist-data\u002Fexport\u002Fcategories.json`.\n\n### Export posts\n\nUse `wp_cli`:\n```\neval-file tmp\u002Ftaxonomist\u002Fexport-posts.php\n```\n\nWith the environment variable:\n```\nTAXONOMIST_OUTPUT={site_path}\u002Ftaxonomist-data\u002Fexport\u002Fposts.json\n```\n\n### Post-export summary\n\nReport to the user:\n- Total posts exported\n- Total categories found\n- Top 20 categories by post count\n- Any categories with 0 posts (candidates for retirement)\n- The default category (cannot be deleted without changing the setting first)\n\n## Step 3: Backup\n\nCreate a full taxonomy snapshot before any analysis.\n\nUse `wp_cli`:\n```\neval-file tmp\u002Ftaxonomist\u002Fbackup.php\n```\n\nWith the environment variable:\n```\nTAXONOMIST_OUTPUT={site_path}\u002Ftaxonomist-data\u002Fbackups\u002Fpre-analysis-{timestamp}.json\n```\n\n## Step 4: Analyze\n\nSplit exported posts into batches and analyze each batch with a sub-agent.\n\n### Batch splitting\n\nRead `taxonomist-data\u002Fexport\u002Fposts.json` and split into batch files of ~20-50 posts each (adjust based on average post length — aim for batches that fit within a single agent context). Write each batch to `taxonomist-data\u002Fbatches\u002Fbatch-NNN.json`.\n\n### Parallel analysis\n\nFor each batch, spawn a sub-agent (use the Agent tool with model \"haiku\" for efficiency) with this prompt:\n\n> Analyze these blog posts and suggest optimal category assignments.\n>\n> **Existing categories:** {list from categories.json with slugs}\n>\n> **Instructions:**\n> - Read the FULL content of each post, not just the title\n> - Suggest 1-3 categories per post using category **slugs** (not display names)\n> - Prefer existing categories over creating new ones\n> - Only propose a new category if the topic is genuinely unserved AND would apply to multiple posts\n> - Avoid generic catch-alls like \"Uncategorized\" or \"General\"\n> - For each post, provide a confidence level: \"high\", \"medium\", or \"low\"\n>\n> **Output format** (JSON array):\n> ```json\n> [\n>   {\n>     \"post_id\": 123,\n>     \"cats\": [\"wordpress\", \"ai\"],\n>     \"new_cats\": [],\n>     \"confidence\": \"high\"\n>   }\n> ]\n> ```\n>\n> If proposing a new category, add it to `new_cats` with a suggested slug and name:\n> ```json\n> \"new_cats\": [{\"slug\": \"machine-learning\", \"name\": \"Machine Learning\"}]\n> ```\n>\n> **Batch data:**\n> {batch JSON content}\n\nSave each sub-agent's output to `taxonomist-data\u002Fresults\u002Fbatch-NNN-results.json`.\n\n### Aggregate results\n\nAfter all batches complete:\n1. Merge all result files, de-duplicating by post_id\n2. Collect all proposed new categories across batches\n3. Compute category frequency statistics\n4. Save aggregated results to `taxonomist-data\u002Fresults\u002Faggregated.json`\n\n## Step 5: Plan\n\nPresent a single comprehensive table showing the recommended action for every category:\n\n| Category | Posts | Action | Description |\n|----------|-------|--------|-------------|\n| WordPress | 142 | **Keep** | Articles about WordPress development, plugins, and the WordPress ecosystem |\n| Tech | 89 | **Keep** | Technology industry news, trends, and analysis |\n| Asides | 34 | **Retire** → merge into \"Notes\" | Short-form posts and quick thoughts |\n| Uncategorised | 23 | **Retire** → re-categorize | Posts to be assigned proper categories |\n| Machine Learning | — | **Create** | Posts about ML, neural networks, and AI model training |\n\nInclude:\n- **Every existing category** with its current post count and recommended action (Keep \u002F Rename \u002F Merge \u002F Retire)\n- **Every proposed new category** with expected post count\n- **Proposed descriptions** for all categories (new and existing)\n- A summary of how many posts would be re-categorized\n\nThen show the **full dry run** — a table of every post that would change, showing old categories → new categories.\n\n## Step 6: Review\n\n**CRITICAL: You MUST use the `AskUserQuestion` tool here to get explicit approval before proceeding.** Do NOT continue to Step 7 without the user's explicit \"yes\" or approval.\n\nPresent the plan, then use `AskUserQuestion` with options like:\n- \"Approve and apply changes\"\n- \"I want to adjust some categories first\"\n- \"Cancel — don't make any changes\"\n\nIf the user wants adjustments, iterate on the plan and use `AskUserQuestion` again for each revision until they approve.\n\n## Step 7: Apply Descriptions\n\nAfter approval, first create any new categories and update descriptions using `wp_cli`:\n\n```\n# Create new categories\nterm create category \"Category Name\" --slug=category-slug --description=\"Description here\"\n\n# Update existing category descriptions\nterm update category {term_id} --description=\"Updated description\"\n```\n\n## Step 8: Apply Categories\n\nPrepare the suggestions JSON file from the approved plan, then run the apply script.\n\nFirst, do a **preview** (dry run) using `wp_cli`:\n\n```\neval-file tmp\u002Ftaxonomist\u002Fapply-changes.php\n```\n\nWith environment variables:\n```\nTAXONOMIST_SUGGESTIONS={site_path}\u002Ftaxonomist-data\u002Fresults\u002Fsuggestions.json\nTAXONOMIST_LOG={site_path}\u002Ftaxonomist-data\u002Flogs\u002Fchanges-{timestamp}.tsv\nTAXONOMIST_MODE=preview\n```\n\nShow the user the preview results. **Use `AskUserQuestion` to confirm** before applying. After they confirm, run again with:\n\n```\nTAXONOMIST_SUGGESTIONS={site_path}\u002Ftaxonomist-data\u002Fresults\u002Fsuggestions.json\nTAXONOMIST_LOG={site_path}\u002Ftaxonomist-data\u002Flogs\u002Fchanges-{timestamp}.tsv\nTAXONOMIST_MODE=apply\nTAXONOMIST_REMOVE_CATS=uncategorized\n```\n\n## Step 9: Verify\n\nAfter applying changes:\n\n1. List categories with counts using `wp_cli`: `term list category --format=table --fields=term_id,name,slug,count`\n2. Check for posts with no categories: `eval 'echo count(get_posts([\"posts_per_page\" => -1, \"category__in\" => [get_option(\"default_category\")]]));'`\n3. Report the change log location to the user\n4. Remind them that a full backup exists and can be restored\n\n## Restoring from Backup\n\nIf the user wants to undo all changes, use `wp_cli`:\n\n```\neval-file tmp\u002Ftaxonomist\u002Frestore.php\n```\n\nWith environment variable:\n```\nTAXONOMIST_BACKUP={site_path}\u002Ftaxonomist-data\u002Fbackups\u002Fpre-analysis-{timestamp}.json\n```\n\n## Important Notes\n\n- **Use the Studio tools** (`site_list`, `site_info`, `site_start`, `wp_cli`, etc.) — not shell commands\n- **Category slugs are the stable identifier** — always use slugs (not names or IDs) when referencing categories across steps\n- **Never modify WordPress core files** — all changes go through WP-CLI commands\n- **The default category cannot be deleted** — change it first via `wp_cli`: `option update default_category {new_id}` if needed\n- **All data stays local** — exported posts, analysis results, and backups remain in the site's `taxonomist-data\u002F` directory\n",{"data":41,"body":43},{"name":4,"description":6,"user-invokable":42},true,{"type":44,"children":45},"root",[46,54,60,75,82,87,107,112,131,137,142,237,247,253,266,278,284,347,353,358,365,376,385,398,404,414,423,428,437,443,448,477,483,488,498,507,511,520,526,531,537,557,563,568,975,987,993,998,1027,1033,1038,1206,1211,1249,1261,1267,1285,1297,1315,1327,1333,1344,1353,1359,1364,1382,1391,1396,1405,1423,1432,1438,1443,1484,1490,1501,1510,1515,1524,1530,1630],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":53},"text","Taxonomist",{"type":47,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"AI-powered WordPress category taxonomy optimizer. Analyzes every post on a WordPress site and suggests an improved category structure — merging duplicates, retiring dead categories, creating missing ones, and re-categorizing posts.",{"type":47,"tag":55,"props":61,"children":62},{},[63,65,73],{"type":52,"value":64},"Based on ",{"type":47,"tag":66,"props":67,"children":71},"a",{"href":68,"rel":69},"https:\u002F\u002Fgithub.com\u002Fm\u002Ftaxonomist",[70],"nofollow",[72],{"type":52,"value":53},{"type":52,"value":74}," by Matt Mullenweg.",{"type":47,"tag":76,"props":77,"children":79},"h2",{"id":78},"on-startup",[80],{"type":52,"value":81},"On Startup",{"type":47,"tag":55,"props":83,"children":84},{},[85],{"type":52,"value":86},"When the user invokes this skill, introduce yourself:",{"type":47,"tag":88,"props":89,"children":90},"blockquote",{},[91,102],{"type":47,"tag":55,"props":92,"children":93},{},[94,100],{"type":47,"tag":95,"props":96,"children":97},"strong",{},[98],{"type":52,"value":99},"Welcome to Taxonomist!",{"type":52,"value":101}," I'll analyze your WordPress categories and suggest improvements — merging duplicates, retiring dead categories, creating missing ones, and re-categorizing your posts using AI.",{"type":47,"tag":55,"props":103,"children":104},{},[105],{"type":52,"value":106},"Everything is safe: I'll preview all changes before doing anything, and log every modification so it can be reversed. Nothing touches your site until you approve it.",{"type":47,"tag":55,"props":108,"children":109},{},[110],{"type":52,"value":111},"Then identify the target site. If there's only one local Studio site, use it automatically. If there are multiple, ask which one to analyze.",{"type":47,"tag":55,"props":113,"children":114},{},[115,120,122,129],{"type":47,"tag":95,"props":116,"children":117},{},[118],{"type":52,"value":119},"Before anything else",{"type":52,"value":121},", call the ",{"type":47,"tag":123,"props":124,"children":126},"code",{"className":125},[],[127],{"type":52,"value":128},"install_taxonomy_scripts",{"type":52,"value":130}," tool with the target site to set up the PHP scripts.",{"type":47,"tag":76,"props":132,"children":134},{"id":133},"how-it-works",[135],{"type":52,"value":136},"How It Works",{"type":47,"tag":55,"props":138,"children":139},{},[140],{"type":52,"value":141},"This skill operates through an interactive, step-by-step process on a local Studio site:",{"type":47,"tag":143,"props":144,"children":145},"ol",{},[146,157,167,177,187,197,207,217,227],{"type":47,"tag":147,"props":148,"children":149},"li",{},[150,155],{"type":47,"tag":95,"props":151,"children":152},{},[153],{"type":52,"value":154},"Connect",{"type":52,"value":156}," — Identify the target local site and verify it's running",{"type":47,"tag":147,"props":158,"children":159},{},[160,165],{"type":47,"tag":95,"props":161,"children":162},{},[163],{"type":52,"value":164},"Export",{"type":52,"value":166}," — Download all posts (full content) and categories to local JSON",{"type":47,"tag":147,"props":168,"children":169},{},[170,175],{"type":47,"tag":95,"props":171,"children":172},{},[173],{"type":52,"value":174},"Backup",{"type":52,"value":176}," — Snapshot current taxonomy state before any changes",{"type":47,"tag":147,"props":178,"children":179},{},[180,185],{"type":47,"tag":95,"props":181,"children":182},{},[183],{"type":52,"value":184},"Analyze",{"type":52,"value":186}," — Use parallel sub-agents to analyze every post's content and suggest optimal categories",{"type":47,"tag":147,"props":188,"children":189},{},[190,195],{"type":47,"tag":95,"props":191,"children":192},{},[193],{"type":52,"value":194},"Plan",{"type":52,"value":196}," — Present a comprehensive category plan with descriptions",{"type":47,"tag":147,"props":198,"children":199},{},[200,205],{"type":47,"tag":95,"props":201,"children":202},{},[203],{"type":52,"value":204},"Review",{"type":52,"value":206}," — Iterate with the user until the plan is approved",{"type":47,"tag":147,"props":208,"children":209},{},[210,215],{"type":47,"tag":95,"props":211,"children":212},{},[213],{"type":52,"value":214},"Apply descriptions",{"type":52,"value":216}," — Update category descriptions first",{"type":47,"tag":147,"props":218,"children":219},{},[220,225],{"type":47,"tag":95,"props":221,"children":222},{},[223],{"type":52,"value":224},"Apply categories",{"type":52,"value":226}," — Execute post re-categorization, logging every change",{"type":47,"tag":147,"props":228,"children":229},{},[230,235],{"type":47,"tag":95,"props":231,"children":232},{},[233],{"type":52,"value":234},"Verify",{"type":52,"value":236}," — Confirm site integrity",{"type":47,"tag":55,"props":238,"children":239},{},[240,245],{"type":47,"tag":95,"props":241,"children":242},{},[243],{"type":52,"value":244},"Steps 1-6 require NO write access to the site.",{"type":52,"value":246}," The site is only modified after explicit user approval.",{"type":47,"tag":76,"props":248,"children":250},{"id":249},"working-directory",[251],{"type":52,"value":252},"Working Directory",{"type":47,"tag":55,"props":254,"children":255},{},[256,258,264],{"type":52,"value":257},"All data files go in a ",{"type":47,"tag":123,"props":259,"children":261},{"className":260},[],[262],{"type":52,"value":263},"taxonomist-data\u002F",{"type":52,"value":265}," directory inside the site root:",{"type":47,"tag":267,"props":268,"children":272},"pre",{"className":269,"code":271,"language":52},[270],"language-text","{site_path}\u002Ftaxonomist-data\u002F\n├── export\u002F\n│   ├── posts.json          # Exported posts with full content\n│   └── categories.json     # Current category list\n├── batches\u002F\n│   ├── batch-000.json      # Posts split into analysis batches\n│   ├── batch-001.json\n│   └── ...\n├── results\u002F\n│   ├── batch-000-results.json\n│   └── ...\n├── backups\u002F\n│   └── pre-analysis-{timestamp}.json\n└── logs\u002F\n    └── changes-{timestamp}.tsv\n",[273],{"type":47,"tag":123,"props":274,"children":276},{"__ignoreMap":275},"",[277],{"type":52,"value":271},{"type":47,"tag":76,"props":279,"children":281},{"id":280},"step-1-connect",[282],{"type":52,"value":283},"Step 1: Connect",{"type":47,"tag":143,"props":285,"children":286},{},[287,300,305,317,328],{"type":47,"tag":147,"props":288,"children":289},{},[290,292,298],{"type":52,"value":291},"Use ",{"type":47,"tag":123,"props":293,"children":295},{"className":294},[],[296],{"type":52,"value":297},"site_list",{"type":52,"value":299}," to find available sites",{"type":47,"tag":147,"props":301,"children":302},{},[303],{"type":52,"value":304},"If multiple sites exist, ask the user which one to analyze",{"type":47,"tag":147,"props":306,"children":307},{},[308,309,315],{"type":52,"value":291},{"type":47,"tag":123,"props":310,"children":312},{"className":311},[],[313],{"type":52,"value":314},"site_info",{"type":52,"value":316}," to verify the site is running",{"type":47,"tag":147,"props":318,"children":319},{},[320,322],{"type":52,"value":321},"If the site is stopped, start it with ",{"type":47,"tag":123,"props":323,"children":325},{"className":324},[],[326],{"type":52,"value":327},"site_start",{"type":47,"tag":147,"props":329,"children":330},{},[331,333,339,341],{"type":52,"value":332},"Verify WordPress is working: ",{"type":47,"tag":123,"props":334,"children":336},{"className":335},[],[337],{"type":52,"value":338},"wp_cli",{"type":52,"value":340}," with ",{"type":47,"tag":123,"props":342,"children":344},{"className":343},[],[345],{"type":52,"value":346},"eval 'echo \"OK\";'",{"type":47,"tag":76,"props":348,"children":350},{"id":349},"step-2-export",[351],{"type":52,"value":352},"Step 2: Export",{"type":47,"tag":55,"props":354,"children":355},{},[356],{"type":52,"value":357},"Create the working directory structure, then export posts and categories.",{"type":47,"tag":359,"props":360,"children":362},"h3",{"id":361},"export-categories",[363],{"type":52,"value":364},"Export categories",{"type":47,"tag":55,"props":366,"children":367},{},[368,369,374],{"type":52,"value":291},{"type":47,"tag":123,"props":370,"children":372},{"className":371},[],[373],{"type":52,"value":338},{"type":52,"value":375},":",{"type":47,"tag":267,"props":377,"children":380},{"className":378,"code":379,"language":52},[270],"term list category --format=json --fields=term_id,name,slug,description,count,parent\n",[381],{"type":47,"tag":123,"props":382,"children":383},{"__ignoreMap":275},[384],{"type":52,"value":379},{"type":47,"tag":55,"props":386,"children":387},{},[388,390,396],{"type":52,"value":389},"Save the output to ",{"type":47,"tag":123,"props":391,"children":393},{"className":392},[],[394],{"type":52,"value":395},"taxonomist-data\u002Fexport\u002Fcategories.json",{"type":52,"value":397},".",{"type":47,"tag":359,"props":399,"children":401},{"id":400},"export-posts",[402],{"type":52,"value":403},"Export posts",{"type":47,"tag":55,"props":405,"children":406},{},[407,408,413],{"type":52,"value":291},{"type":47,"tag":123,"props":409,"children":411},{"className":410},[],[412],{"type":52,"value":338},{"type":52,"value":375},{"type":47,"tag":267,"props":415,"children":418},{"className":416,"code":417,"language":52},[270],"eval-file tmp\u002Ftaxonomist\u002Fexport-posts.php\n",[419],{"type":47,"tag":123,"props":420,"children":421},{"__ignoreMap":275},[422],{"type":52,"value":417},{"type":47,"tag":55,"props":424,"children":425},{},[426],{"type":52,"value":427},"With the environment variable:",{"type":47,"tag":267,"props":429,"children":432},{"className":430,"code":431,"language":52},[270],"TAXONOMIST_OUTPUT={site_path}\u002Ftaxonomist-data\u002Fexport\u002Fposts.json\n",[433],{"type":47,"tag":123,"props":434,"children":435},{"__ignoreMap":275},[436],{"type":52,"value":431},{"type":47,"tag":359,"props":438,"children":440},{"id":439},"post-export-summary",[441],{"type":52,"value":442},"Post-export summary",{"type":47,"tag":55,"props":444,"children":445},{},[446],{"type":52,"value":447},"Report to the user:",{"type":47,"tag":449,"props":450,"children":451},"ul",{},[452,457,462,467,472],{"type":47,"tag":147,"props":453,"children":454},{},[455],{"type":52,"value":456},"Total posts exported",{"type":47,"tag":147,"props":458,"children":459},{},[460],{"type":52,"value":461},"Total categories found",{"type":47,"tag":147,"props":463,"children":464},{},[465],{"type":52,"value":466},"Top 20 categories by post count",{"type":47,"tag":147,"props":468,"children":469},{},[470],{"type":52,"value":471},"Any categories with 0 posts (candidates for retirement)",{"type":47,"tag":147,"props":473,"children":474},{},[475],{"type":52,"value":476},"The default category (cannot be deleted without changing the setting first)",{"type":47,"tag":76,"props":478,"children":480},{"id":479},"step-3-backup",[481],{"type":52,"value":482},"Step 3: Backup",{"type":47,"tag":55,"props":484,"children":485},{},[486],{"type":52,"value":487},"Create a full taxonomy snapshot before any analysis.",{"type":47,"tag":55,"props":489,"children":490},{},[491,492,497],{"type":52,"value":291},{"type":47,"tag":123,"props":493,"children":495},{"className":494},[],[496],{"type":52,"value":338},{"type":52,"value":375},{"type":47,"tag":267,"props":499,"children":502},{"className":500,"code":501,"language":52},[270],"eval-file tmp\u002Ftaxonomist\u002Fbackup.php\n",[503],{"type":47,"tag":123,"props":504,"children":505},{"__ignoreMap":275},[506],{"type":52,"value":501},{"type":47,"tag":55,"props":508,"children":509},{},[510],{"type":52,"value":427},{"type":47,"tag":267,"props":512,"children":515},{"className":513,"code":514,"language":52},[270],"TAXONOMIST_OUTPUT={site_path}\u002Ftaxonomist-data\u002Fbackups\u002Fpre-analysis-{timestamp}.json\n",[516],{"type":47,"tag":123,"props":517,"children":518},{"__ignoreMap":275},[519],{"type":52,"value":514},{"type":47,"tag":76,"props":521,"children":523},{"id":522},"step-4-analyze",[524],{"type":52,"value":525},"Step 4: Analyze",{"type":47,"tag":55,"props":527,"children":528},{},[529],{"type":52,"value":530},"Split exported posts into batches and analyze each batch with a sub-agent.",{"type":47,"tag":359,"props":532,"children":534},{"id":533},"batch-splitting",[535],{"type":52,"value":536},"Batch splitting",{"type":47,"tag":55,"props":538,"children":539},{},[540,542,548,550,556],{"type":52,"value":541},"Read ",{"type":47,"tag":123,"props":543,"children":545},{"className":544},[],[546],{"type":52,"value":547},"taxonomist-data\u002Fexport\u002Fposts.json",{"type":52,"value":549}," and split into batch files of ~20-50 posts each (adjust based on average post length — aim for batches that fit within a single agent context). Write each batch to ",{"type":47,"tag":123,"props":551,"children":553},{"className":552},[],[554],{"type":52,"value":555},"taxonomist-data\u002Fbatches\u002Fbatch-NNN.json",{"type":52,"value":397},{"type":47,"tag":359,"props":558,"children":560},{"id":559},"parallel-analysis",[561],{"type":52,"value":562},"Parallel analysis",{"type":47,"tag":55,"props":564,"children":565},{},[566],{"type":52,"value":567},"For each batch, spawn a sub-agent (use the Agent tool with model \"haiku\" for efficiency) with this prompt:",{"type":47,"tag":88,"props":569,"children":570},{},[571,576,586,594,634,644,851,863,965],{"type":47,"tag":55,"props":572,"children":573},{},[574],{"type":52,"value":575},"Analyze these blog posts and suggest optimal category assignments.",{"type":47,"tag":55,"props":577,"children":578},{},[579,584],{"type":47,"tag":95,"props":580,"children":581},{},[582],{"type":52,"value":583},"Existing categories:",{"type":52,"value":585}," {list from categories.json with slugs}",{"type":47,"tag":55,"props":587,"children":588},{},[589],{"type":47,"tag":95,"props":590,"children":591},{},[592],{"type":52,"value":593},"Instructions:",{"type":47,"tag":449,"props":595,"children":596},{},[597,602,614,619,624,629],{"type":47,"tag":147,"props":598,"children":599},{},[600],{"type":52,"value":601},"Read the FULL content of each post, not just the title",{"type":47,"tag":147,"props":603,"children":604},{},[605,607,612],{"type":52,"value":606},"Suggest 1-3 categories per post using category ",{"type":47,"tag":95,"props":608,"children":609},{},[610],{"type":52,"value":611},"slugs",{"type":52,"value":613}," (not display names)",{"type":47,"tag":147,"props":615,"children":616},{},[617],{"type":52,"value":618},"Prefer existing categories over creating new ones",{"type":47,"tag":147,"props":620,"children":621},{},[622],{"type":52,"value":623},"Only propose a new category if the topic is genuinely unserved AND would apply to multiple posts",{"type":47,"tag":147,"props":625,"children":626},{},[627],{"type":52,"value":628},"Avoid generic catch-alls like \"Uncategorized\" or \"General\"",{"type":47,"tag":147,"props":630,"children":631},{},[632],{"type":52,"value":633},"For each post, provide a confidence level: \"high\", \"medium\", or \"low\"",{"type":47,"tag":55,"props":635,"children":636},{},[637,642],{"type":47,"tag":95,"props":638,"children":639},{},[640],{"type":52,"value":641},"Output format",{"type":52,"value":643}," (JSON array):",{"type":47,"tag":267,"props":645,"children":649},{"className":646,"code":647,"language":648,"meta":275,"style":275},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\n  {\n    \"post_id\": 123,\n    \"cats\": [\"wordpress\", \"ai\"],\n    \"new_cats\": [],\n    \"confidence\": \"high\"\n  }\n]\n","json",[650],{"type":47,"tag":123,"props":651,"children":652},{"__ignoreMap":275},[653,665,674,709,772,798,833,842],{"type":47,"tag":654,"props":655,"children":658},"span",{"class":656,"line":657},"line",1,[659],{"type":47,"tag":654,"props":660,"children":662},{"style":661},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[663],{"type":52,"value":664},"[\n",{"type":47,"tag":654,"props":666,"children":668},{"class":656,"line":667},2,[669],{"type":47,"tag":654,"props":670,"children":671},{"style":661},[672],{"type":52,"value":673},"  {\n",{"type":47,"tag":654,"props":675,"children":677},{"class":656,"line":676},3,[678,683,689,694,698,704],{"type":47,"tag":654,"props":679,"children":680},{"style":661},[681],{"type":52,"value":682},"    \"",{"type":47,"tag":654,"props":684,"children":686},{"style":685},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[687],{"type":52,"value":688},"post_id",{"type":47,"tag":654,"props":690,"children":691},{"style":661},[692],{"type":52,"value":693},"\"",{"type":47,"tag":654,"props":695,"children":696},{"style":661},[697],{"type":52,"value":375},{"type":47,"tag":654,"props":699,"children":701},{"style":700},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[702],{"type":52,"value":703}," 123",{"type":47,"tag":654,"props":705,"children":706},{"style":661},[707],{"type":52,"value":708},",\n",{"type":47,"tag":654,"props":710,"children":712},{"class":656,"line":711},4,[713,717,722,726,730,735,739,744,748,753,758,763,767],{"type":47,"tag":654,"props":714,"children":715},{"style":661},[716],{"type":52,"value":682},{"type":47,"tag":654,"props":718,"children":719},{"style":685},[720],{"type":52,"value":721},"cats",{"type":47,"tag":654,"props":723,"children":724},{"style":661},[725],{"type":52,"value":693},{"type":47,"tag":654,"props":727,"children":728},{"style":661},[729],{"type":52,"value":375},{"type":47,"tag":654,"props":731,"children":732},{"style":661},[733],{"type":52,"value":734}," [",{"type":47,"tag":654,"props":736,"children":737},{"style":661},[738],{"type":52,"value":693},{"type":47,"tag":654,"props":740,"children":742},{"style":741},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[743],{"type":52,"value":21},{"type":47,"tag":654,"props":745,"children":746},{"style":661},[747],{"type":52,"value":693},{"type":47,"tag":654,"props":749,"children":750},{"style":661},[751],{"type":52,"value":752},",",{"type":47,"tag":654,"props":754,"children":755},{"style":661},[756],{"type":52,"value":757}," \"",{"type":47,"tag":654,"props":759,"children":760},{"style":741},[761],{"type":52,"value":762},"ai",{"type":47,"tag":654,"props":764,"children":765},{"style":661},[766],{"type":52,"value":693},{"type":47,"tag":654,"props":768,"children":769},{"style":661},[770],{"type":52,"value":771},"],\n",{"type":47,"tag":654,"props":773,"children":775},{"class":656,"line":774},5,[776,780,785,789,793],{"type":47,"tag":654,"props":777,"children":778},{"style":661},[779],{"type":52,"value":682},{"type":47,"tag":654,"props":781,"children":782},{"style":685},[783],{"type":52,"value":784},"new_cats",{"type":47,"tag":654,"props":786,"children":787},{"style":661},[788],{"type":52,"value":693},{"type":47,"tag":654,"props":790,"children":791},{"style":661},[792],{"type":52,"value":375},{"type":47,"tag":654,"props":794,"children":795},{"style":661},[796],{"type":52,"value":797}," [],\n",{"type":47,"tag":654,"props":799,"children":801},{"class":656,"line":800},6,[802,806,811,815,819,823,828],{"type":47,"tag":654,"props":803,"children":804},{"style":661},[805],{"type":52,"value":682},{"type":47,"tag":654,"props":807,"children":808},{"style":685},[809],{"type":52,"value":810},"confidence",{"type":47,"tag":654,"props":812,"children":813},{"style":661},[814],{"type":52,"value":693},{"type":47,"tag":654,"props":816,"children":817},{"style":661},[818],{"type":52,"value":375},{"type":47,"tag":654,"props":820,"children":821},{"style":661},[822],{"type":52,"value":757},{"type":47,"tag":654,"props":824,"children":825},{"style":741},[826],{"type":52,"value":827},"high",{"type":47,"tag":654,"props":829,"children":830},{"style":661},[831],{"type":52,"value":832},"\"\n",{"type":47,"tag":654,"props":834,"children":836},{"class":656,"line":835},7,[837],{"type":47,"tag":654,"props":838,"children":839},{"style":661},[840],{"type":52,"value":841},"  }\n",{"type":47,"tag":654,"props":843,"children":845},{"class":656,"line":844},8,[846],{"type":47,"tag":654,"props":847,"children":848},{"style":661},[849],{"type":52,"value":850},"]\n",{"type":47,"tag":55,"props":852,"children":853},{},[854,856,861],{"type":52,"value":855},"If proposing a new category, add it to ",{"type":47,"tag":123,"props":857,"children":859},{"className":858},[],[860],{"type":52,"value":784},{"type":52,"value":862}," with a suggested slug and name:",{"type":47,"tag":267,"props":864,"children":866},{"className":646,"code":865,"language":648,"meta":275,"style":275},"\"new_cats\": [{\"slug\": \"machine-learning\", \"name\": \"Machine Learning\"}]\n",[867],{"type":47,"tag":123,"props":868,"children":869},{"__ignoreMap":275},[870],{"type":47,"tag":654,"props":871,"children":872},{"class":656,"line":657},[873,877,881,885,891,896,900,905,909,913,917,922,926,930,934,939,943,947,951,956,960],{"type":47,"tag":654,"props":874,"children":875},{"style":661},[876],{"type":52,"value":693},{"type":47,"tag":654,"props":878,"children":879},{"style":741},[880],{"type":52,"value":784},{"type":47,"tag":654,"props":882,"children":883},{"style":661},[884],{"type":52,"value":693},{"type":47,"tag":654,"props":886,"children":888},{"style":887},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[889],{"type":52,"value":890},": ",{"type":47,"tag":654,"props":892,"children":893},{"style":661},[894],{"type":52,"value":895},"[{",{"type":47,"tag":654,"props":897,"children":898},{"style":661},[899],{"type":52,"value":693},{"type":47,"tag":654,"props":901,"children":902},{"style":685},[903],{"type":52,"value":904},"slug",{"type":47,"tag":654,"props":906,"children":907},{"style":661},[908],{"type":52,"value":693},{"type":47,"tag":654,"props":910,"children":911},{"style":661},[912],{"type":52,"value":375},{"type":47,"tag":654,"props":914,"children":915},{"style":661},[916],{"type":52,"value":757},{"type":47,"tag":654,"props":918,"children":919},{"style":741},[920],{"type":52,"value":921},"machine-learning",{"type":47,"tag":654,"props":923,"children":924},{"style":661},[925],{"type":52,"value":693},{"type":47,"tag":654,"props":927,"children":928},{"style":661},[929],{"type":52,"value":752},{"type":47,"tag":654,"props":931,"children":932},{"style":661},[933],{"type":52,"value":757},{"type":47,"tag":654,"props":935,"children":936},{"style":685},[937],{"type":52,"value":938},"name",{"type":47,"tag":654,"props":940,"children":941},{"style":661},[942],{"type":52,"value":693},{"type":47,"tag":654,"props":944,"children":945},{"style":661},[946],{"type":52,"value":375},{"type":47,"tag":654,"props":948,"children":949},{"style":661},[950],{"type":52,"value":757},{"type":47,"tag":654,"props":952,"children":953},{"style":741},[954],{"type":52,"value":955},"Machine Learning",{"type":47,"tag":654,"props":957,"children":958},{"style":661},[959],{"type":52,"value":693},{"type":47,"tag":654,"props":961,"children":962},{"style":661},[963],{"type":52,"value":964},"}]\n",{"type":47,"tag":55,"props":966,"children":967},{},[968,973],{"type":47,"tag":95,"props":969,"children":970},{},[971],{"type":52,"value":972},"Batch data:",{"type":52,"value":974},"\n{batch JSON content}",{"type":47,"tag":55,"props":976,"children":977},{},[978,980,986],{"type":52,"value":979},"Save each sub-agent's output to ",{"type":47,"tag":123,"props":981,"children":983},{"className":982},[],[984],{"type":52,"value":985},"taxonomist-data\u002Fresults\u002Fbatch-NNN-results.json",{"type":52,"value":397},{"type":47,"tag":359,"props":988,"children":990},{"id":989},"aggregate-results",[991],{"type":52,"value":992},"Aggregate results",{"type":47,"tag":55,"props":994,"children":995},{},[996],{"type":52,"value":997},"After all batches complete:",{"type":47,"tag":143,"props":999,"children":1000},{},[1001,1006,1011,1016],{"type":47,"tag":147,"props":1002,"children":1003},{},[1004],{"type":52,"value":1005},"Merge all result files, de-duplicating by post_id",{"type":47,"tag":147,"props":1007,"children":1008},{},[1009],{"type":52,"value":1010},"Collect all proposed new categories across batches",{"type":47,"tag":147,"props":1012,"children":1013},{},[1014],{"type":52,"value":1015},"Compute category frequency statistics",{"type":47,"tag":147,"props":1017,"children":1018},{},[1019,1021],{"type":52,"value":1020},"Save aggregated results to ",{"type":47,"tag":123,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":52,"value":1026},"taxonomist-data\u002Fresults\u002Faggregated.json",{"type":47,"tag":76,"props":1028,"children":1030},{"id":1029},"step-5-plan",[1031],{"type":52,"value":1032},"Step 5: Plan",{"type":47,"tag":55,"props":1034,"children":1035},{},[1036],{"type":52,"value":1037},"Present a single comprehensive table showing the recommended action for every category:",{"type":47,"tag":1039,"props":1040,"children":1041},"table",{},[1042,1071],{"type":47,"tag":1043,"props":1044,"children":1045},"thead",{},[1046],{"type":47,"tag":1047,"props":1048,"children":1049},"tr",{},[1050,1056,1061,1066],{"type":47,"tag":1051,"props":1052,"children":1053},"th",{},[1054],{"type":52,"value":1055},"Category",{"type":47,"tag":1051,"props":1057,"children":1058},{},[1059],{"type":52,"value":1060},"Posts",{"type":47,"tag":1051,"props":1062,"children":1063},{},[1064],{"type":52,"value":1065},"Action",{"type":47,"tag":1051,"props":1067,"children":1068},{},[1069],{"type":52,"value":1070},"Description",{"type":47,"tag":1072,"props":1073,"children":1074},"tbody",{},[1075,1101,1126,1154,1181],{"type":47,"tag":1047,"props":1076,"children":1077},{},[1078,1083,1088,1096],{"type":47,"tag":1079,"props":1080,"children":1081},"td",{},[1082],{"type":52,"value":20},{"type":47,"tag":1079,"props":1084,"children":1085},{},[1086],{"type":52,"value":1087},"142",{"type":47,"tag":1079,"props":1089,"children":1090},{},[1091],{"type":47,"tag":95,"props":1092,"children":1093},{},[1094],{"type":52,"value":1095},"Keep",{"type":47,"tag":1079,"props":1097,"children":1098},{},[1099],{"type":52,"value":1100},"Articles about WordPress development, plugins, and the WordPress ecosystem",{"type":47,"tag":1047,"props":1102,"children":1103},{},[1104,1109,1114,1121],{"type":47,"tag":1079,"props":1105,"children":1106},{},[1107],{"type":52,"value":1108},"Tech",{"type":47,"tag":1079,"props":1110,"children":1111},{},[1112],{"type":52,"value":1113},"89",{"type":47,"tag":1079,"props":1115,"children":1116},{},[1117],{"type":47,"tag":95,"props":1118,"children":1119},{},[1120],{"type":52,"value":1095},{"type":47,"tag":1079,"props":1122,"children":1123},{},[1124],{"type":52,"value":1125},"Technology industry news, trends, and analysis",{"type":47,"tag":1047,"props":1127,"children":1128},{},[1129,1134,1139,1149],{"type":47,"tag":1079,"props":1130,"children":1131},{},[1132],{"type":52,"value":1133},"Asides",{"type":47,"tag":1079,"props":1135,"children":1136},{},[1137],{"type":52,"value":1138},"34",{"type":47,"tag":1079,"props":1140,"children":1141},{},[1142,1147],{"type":47,"tag":95,"props":1143,"children":1144},{},[1145],{"type":52,"value":1146},"Retire",{"type":52,"value":1148}," → merge into \"Notes\"",{"type":47,"tag":1079,"props":1150,"children":1151},{},[1152],{"type":52,"value":1153},"Short-form posts and quick thoughts",{"type":47,"tag":1047,"props":1155,"children":1156},{},[1157,1162,1167,1176],{"type":47,"tag":1079,"props":1158,"children":1159},{},[1160],{"type":52,"value":1161},"Uncategorised",{"type":47,"tag":1079,"props":1163,"children":1164},{},[1165],{"type":52,"value":1166},"23",{"type":47,"tag":1079,"props":1168,"children":1169},{},[1170,1174],{"type":47,"tag":95,"props":1171,"children":1172},{},[1173],{"type":52,"value":1146},{"type":52,"value":1175}," → re-categorize",{"type":47,"tag":1079,"props":1177,"children":1178},{},[1179],{"type":52,"value":1180},"Posts to be assigned proper categories",{"type":47,"tag":1047,"props":1182,"children":1183},{},[1184,1188,1193,1201],{"type":47,"tag":1079,"props":1185,"children":1186},{},[1187],{"type":52,"value":955},{"type":47,"tag":1079,"props":1189,"children":1190},{},[1191],{"type":52,"value":1192},"—",{"type":47,"tag":1079,"props":1194,"children":1195},{},[1196],{"type":47,"tag":95,"props":1197,"children":1198},{},[1199],{"type":52,"value":1200},"Create",{"type":47,"tag":1079,"props":1202,"children":1203},{},[1204],{"type":52,"value":1205},"Posts about ML, neural networks, and AI model training",{"type":47,"tag":55,"props":1207,"children":1208},{},[1209],{"type":52,"value":1210},"Include:",{"type":47,"tag":449,"props":1212,"children":1213},{},[1214,1224,1234,1244],{"type":47,"tag":147,"props":1215,"children":1216},{},[1217,1222],{"type":47,"tag":95,"props":1218,"children":1219},{},[1220],{"type":52,"value":1221},"Every existing category",{"type":52,"value":1223}," with its current post count and recommended action (Keep \u002F Rename \u002F Merge \u002F Retire)",{"type":47,"tag":147,"props":1225,"children":1226},{},[1227,1232],{"type":47,"tag":95,"props":1228,"children":1229},{},[1230],{"type":52,"value":1231},"Every proposed new category",{"type":52,"value":1233}," with expected post count",{"type":47,"tag":147,"props":1235,"children":1236},{},[1237,1242],{"type":47,"tag":95,"props":1238,"children":1239},{},[1240],{"type":52,"value":1241},"Proposed descriptions",{"type":52,"value":1243}," for all categories (new and existing)",{"type":47,"tag":147,"props":1245,"children":1246},{},[1247],{"type":52,"value":1248},"A summary of how many posts would be re-categorized",{"type":47,"tag":55,"props":1250,"children":1251},{},[1252,1254,1259],{"type":52,"value":1253},"Then show the ",{"type":47,"tag":95,"props":1255,"children":1256},{},[1257],{"type":52,"value":1258},"full dry run",{"type":52,"value":1260}," — a table of every post that would change, showing old categories → new categories.",{"type":47,"tag":76,"props":1262,"children":1264},{"id":1263},"step-6-review",[1265],{"type":52,"value":1266},"Step 6: Review",{"type":47,"tag":55,"props":1268,"children":1269},{},[1270,1283],{"type":47,"tag":95,"props":1271,"children":1272},{},[1273,1275,1281],{"type":52,"value":1274},"CRITICAL: You MUST use the ",{"type":47,"tag":123,"props":1276,"children":1278},{"className":1277},[],[1279],{"type":52,"value":1280},"AskUserQuestion",{"type":52,"value":1282}," tool here to get explicit approval before proceeding.",{"type":52,"value":1284}," Do NOT continue to Step 7 without the user's explicit \"yes\" or approval.",{"type":47,"tag":55,"props":1286,"children":1287},{},[1288,1290,1295],{"type":52,"value":1289},"Present the plan, then use ",{"type":47,"tag":123,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":52,"value":1280},{"type":52,"value":1296}," with options like:",{"type":47,"tag":449,"props":1298,"children":1299},{},[1300,1305,1310],{"type":47,"tag":147,"props":1301,"children":1302},{},[1303],{"type":52,"value":1304},"\"Approve and apply changes\"",{"type":47,"tag":147,"props":1306,"children":1307},{},[1308],{"type":52,"value":1309},"\"I want to adjust some categories first\"",{"type":47,"tag":147,"props":1311,"children":1312},{},[1313],{"type":52,"value":1314},"\"Cancel — don't make any changes\"",{"type":47,"tag":55,"props":1316,"children":1317},{},[1318,1320,1325],{"type":52,"value":1319},"If the user wants adjustments, iterate on the plan and use ",{"type":47,"tag":123,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":52,"value":1280},{"type":52,"value":1326}," again for each revision until they approve.",{"type":47,"tag":76,"props":1328,"children":1330},{"id":1329},"step-7-apply-descriptions",[1331],{"type":52,"value":1332},"Step 7: Apply Descriptions",{"type":47,"tag":55,"props":1334,"children":1335},{},[1336,1338,1343],{"type":52,"value":1337},"After approval, first create any new categories and update descriptions using ",{"type":47,"tag":123,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":52,"value":338},{"type":52,"value":375},{"type":47,"tag":267,"props":1345,"children":1348},{"className":1346,"code":1347,"language":52},[270],"# Create new categories\nterm create category \"Category Name\" --slug=category-slug --description=\"Description here\"\n\n# Update existing category descriptions\nterm update category {term_id} --description=\"Updated description\"\n",[1349],{"type":47,"tag":123,"props":1350,"children":1351},{"__ignoreMap":275},[1352],{"type":52,"value":1347},{"type":47,"tag":76,"props":1354,"children":1356},{"id":1355},"step-8-apply-categories",[1357],{"type":52,"value":1358},"Step 8: Apply Categories",{"type":47,"tag":55,"props":1360,"children":1361},{},[1362],{"type":52,"value":1363},"Prepare the suggestions JSON file from the approved plan, then run the apply script.",{"type":47,"tag":55,"props":1365,"children":1366},{},[1367,1369,1374,1376,1381],{"type":52,"value":1368},"First, do a ",{"type":47,"tag":95,"props":1370,"children":1371},{},[1372],{"type":52,"value":1373},"preview",{"type":52,"value":1375}," (dry run) using ",{"type":47,"tag":123,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":52,"value":338},{"type":52,"value":375},{"type":47,"tag":267,"props":1383,"children":1386},{"className":1384,"code":1385,"language":52},[270],"eval-file tmp\u002Ftaxonomist\u002Fapply-changes.php\n",[1387],{"type":47,"tag":123,"props":1388,"children":1389},{"__ignoreMap":275},[1390],{"type":52,"value":1385},{"type":47,"tag":55,"props":1392,"children":1393},{},[1394],{"type":52,"value":1395},"With environment variables:",{"type":47,"tag":267,"props":1397,"children":1400},{"className":1398,"code":1399,"language":52},[270],"TAXONOMIST_SUGGESTIONS={site_path}\u002Ftaxonomist-data\u002Fresults\u002Fsuggestions.json\nTAXONOMIST_LOG={site_path}\u002Ftaxonomist-data\u002Flogs\u002Fchanges-{timestamp}.tsv\nTAXONOMIST_MODE=preview\n",[1401],{"type":47,"tag":123,"props":1402,"children":1403},{"__ignoreMap":275},[1404],{"type":52,"value":1399},{"type":47,"tag":55,"props":1406,"children":1407},{},[1408,1410,1421],{"type":52,"value":1409},"Show the user the preview results. ",{"type":47,"tag":95,"props":1411,"children":1412},{},[1413,1414,1419],{"type":52,"value":291},{"type":47,"tag":123,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":52,"value":1280},{"type":52,"value":1420}," to confirm",{"type":52,"value":1422}," before applying. After they confirm, run again with:",{"type":47,"tag":267,"props":1424,"children":1427},{"className":1425,"code":1426,"language":52},[270],"TAXONOMIST_SUGGESTIONS={site_path}\u002Ftaxonomist-data\u002Fresults\u002Fsuggestions.json\nTAXONOMIST_LOG={site_path}\u002Ftaxonomist-data\u002Flogs\u002Fchanges-{timestamp}.tsv\nTAXONOMIST_MODE=apply\nTAXONOMIST_REMOVE_CATS=uncategorized\n",[1428],{"type":47,"tag":123,"props":1429,"children":1430},{"__ignoreMap":275},[1431],{"type":52,"value":1426},{"type":47,"tag":76,"props":1433,"children":1435},{"id":1434},"step-9-verify",[1436],{"type":52,"value":1437},"Step 9: Verify",{"type":47,"tag":55,"props":1439,"children":1440},{},[1441],{"type":52,"value":1442},"After applying changes:",{"type":47,"tag":143,"props":1444,"children":1445},{},[1446,1463,1474,1479],{"type":47,"tag":147,"props":1447,"children":1448},{},[1449,1451,1456,1457],{"type":52,"value":1450},"List categories with counts using ",{"type":47,"tag":123,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":52,"value":338},{"type":52,"value":890},{"type":47,"tag":123,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":52,"value":1462},"term list category --format=table --fields=term_id,name,slug,count",{"type":47,"tag":147,"props":1464,"children":1465},{},[1466,1468],{"type":52,"value":1467},"Check for posts with no categories: ",{"type":47,"tag":123,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":52,"value":1473},"eval 'echo count(get_posts([\"posts_per_page\" => -1, \"category__in\" => [get_option(\"default_category\")]]));'",{"type":47,"tag":147,"props":1475,"children":1476},{},[1477],{"type":52,"value":1478},"Report the change log location to the user",{"type":47,"tag":147,"props":1480,"children":1481},{},[1482],{"type":52,"value":1483},"Remind them that a full backup exists and can be restored",{"type":47,"tag":76,"props":1485,"children":1487},{"id":1486},"restoring-from-backup",[1488],{"type":52,"value":1489},"Restoring from Backup",{"type":47,"tag":55,"props":1491,"children":1492},{},[1493,1495,1500],{"type":52,"value":1494},"If the user wants to undo all changes, use ",{"type":47,"tag":123,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":52,"value":338},{"type":52,"value":375},{"type":47,"tag":267,"props":1502,"children":1505},{"className":1503,"code":1504,"language":52},[270],"eval-file tmp\u002Ftaxonomist\u002Frestore.php\n",[1506],{"type":47,"tag":123,"props":1507,"children":1508},{"__ignoreMap":275},[1509],{"type":52,"value":1504},{"type":47,"tag":55,"props":1511,"children":1512},{},[1513],{"type":52,"value":1514},"With environment variable:",{"type":47,"tag":267,"props":1516,"children":1519},{"className":1517,"code":1518,"language":52},[270],"TAXONOMIST_BACKUP={site_path}\u002Ftaxonomist-data\u002Fbackups\u002Fpre-analysis-{timestamp}.json\n",[1520],{"type":47,"tag":123,"props":1521,"children":1522},{"__ignoreMap":275},[1523],{"type":52,"value":1518},{"type":47,"tag":76,"props":1525,"children":1527},{"id":1526},"important-notes",[1528],{"type":52,"value":1529},"Important Notes",{"type":47,"tag":449,"props":1531,"children":1532},{},[1533,1569,1579,1589,1613],{"type":47,"tag":147,"props":1534,"children":1535},{},[1536,1541,1543,1548,1550,1555,1556,1561,1562,1567],{"type":47,"tag":95,"props":1537,"children":1538},{},[1539],{"type":52,"value":1540},"Use the Studio tools",{"type":52,"value":1542}," (",{"type":47,"tag":123,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":52,"value":297},{"type":52,"value":1549},", ",{"type":47,"tag":123,"props":1551,"children":1553},{"className":1552},[],[1554],{"type":52,"value":314},{"type":52,"value":1549},{"type":47,"tag":123,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":52,"value":327},{"type":52,"value":1549},{"type":47,"tag":123,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":52,"value":338},{"type":52,"value":1568},", etc.) — not shell commands",{"type":47,"tag":147,"props":1570,"children":1571},{},[1572,1577],{"type":47,"tag":95,"props":1573,"children":1574},{},[1575],{"type":52,"value":1576},"Category slugs are the stable identifier",{"type":52,"value":1578}," — always use slugs (not names or IDs) when referencing categories across steps",{"type":47,"tag":147,"props":1580,"children":1581},{},[1582,1587],{"type":47,"tag":95,"props":1583,"children":1584},{},[1585],{"type":52,"value":1586},"Never modify WordPress core files",{"type":52,"value":1588}," — all changes go through WP-CLI commands",{"type":47,"tag":147,"props":1590,"children":1591},{},[1592,1597,1599,1604,1605,1611],{"type":47,"tag":95,"props":1593,"children":1594},{},[1595],{"type":52,"value":1596},"The default category cannot be deleted",{"type":52,"value":1598}," — change it first via ",{"type":47,"tag":123,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":52,"value":338},{"type":52,"value":890},{"type":47,"tag":123,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":52,"value":1610},"option update default_category {new_id}",{"type":52,"value":1612}," if needed",{"type":47,"tag":147,"props":1614,"children":1615},{},[1616,1621,1623,1628],{"type":47,"tag":95,"props":1617,"children":1618},{},[1619],{"type":52,"value":1620},"All data stays local",{"type":52,"value":1622}," — exported posts, analysis results, and backups remain in the site's ",{"type":47,"tag":123,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":52,"value":263},{"type":52,"value":1629}," directory",{"type":47,"tag":1631,"props":1632,"children":1633},"style",{},[1634],{"type":52,"value":1635},"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":1637,"total":1812},[1638,1657,1674,1688,1705,1720,1734,1747,1764,1774,1781,1797],{"slug":1639,"name":1639,"fn":1640,"description":1641,"org":1642,"tags":1643,"stars":25,"repoUrl":26,"updatedAt":1656},"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},[1644,1647,1650,1653],{"name":1645,"slug":1646,"type":15},"Frontend","frontend",{"name":1648,"slug":1649,"type":15},"Productivity","productivity",{"name":1651,"slug":1652,"type":15},"UX Copy","ux-copy",{"name":1654,"slug":1655,"type":15},"UX Design","ux-design","2026-05-06T05:40:01.516544",{"slug":1658,"name":1658,"fn":1659,"description":1660,"org":1661,"tags":1662,"stars":25,"repoUrl":26,"updatedAt":1673},"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},[1663,1666,1669,1672],{"name":1664,"slug":1665,"type":15},"Block Editor","block-editor",{"name":1667,"slug":1668,"type":15},"CSS","css",{"name":1670,"slug":1671,"type":15},"HTML","html",{"name":20,"slug":21,"type":15},"2026-05-27T07:01:55.629681",{"slug":1675,"name":1675,"fn":1676,"description":1677,"org":1678,"tags":1679,"stars":25,"repoUrl":26,"updatedAt":1687},"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},[1680,1683,1686],{"name":1681,"slug":1682,"type":15},"Pricing","pricing",{"name":1684,"slug":1685,"type":15},"Reference","reference",{"name":20,"slug":21,"type":15},"2026-07-02T07:42:33.654791",{"slug":1689,"name":1689,"fn":1690,"description":1691,"org":1692,"tags":1693,"stars":25,"repoUrl":26,"updatedAt":1704},"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},[1694,1697,1700,1703],{"name":1695,"slug":1696,"type":15},"CMS","cms",{"name":1698,"slug":1699,"type":15},"Migration","migration",{"name":1701,"slug":1702,"type":15},"Web Development","web-development",{"name":20,"slug":21,"type":15},"2026-07-09T06:47:33.454311",{"slug":1706,"name":1706,"fn":1707,"description":1708,"org":1709,"tags":1710,"stars":25,"repoUrl":26,"updatedAt":1719},"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},[1711,1714,1715,1718],{"name":1712,"slug":1713,"type":15},"Audit","audit",{"name":1645,"slug":1646,"type":15},{"name":1716,"slug":1717,"type":15},"Performance","performance",{"name":20,"slug":21,"type":15},"2026-05-06T05:40:06.433267",{"slug":1721,"name":1721,"fn":1722,"description":1723,"org":1724,"tags":1725,"stars":25,"repoUrl":26,"updatedAt":1733},"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},[1726,1729,1732],{"name":1727,"slug":1728,"type":15},"Content Creation","content-creation",{"name":1730,"slug":1731,"type":15},"Plugin Development","plugin-development",{"name":20,"slug":21,"type":15},"2026-05-27T07:01:58.249105",{"slug":1735,"name":1735,"fn":1736,"description":1737,"org":1738,"tags":1739,"stars":25,"repoUrl":26,"updatedAt":1746},"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},[1740,1741,1744,1745],{"name":1712,"slug":1713,"type":15},{"name":1742,"slug":1743,"type":15},"Marketing","marketing",{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},"2026-05-06T05:40:05.196367",{"slug":1748,"name":1748,"fn":1749,"description":1750,"org":1751,"tags":1752,"stars":25,"repoUrl":26,"updatedAt":1763},"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},[1753,1756,1759,1762],{"name":1754,"slug":1755,"type":15},"Design","design",{"name":1757,"slug":1758,"type":15},"Product Management","product-management",{"name":1760,"slug":1761,"type":15},"Specs","specs",{"name":20,"slug":21,"type":15},"2026-05-06T05:40:02.739409",{"slug":1765,"name":1765,"fn":1766,"description":1767,"org":1768,"tags":1769,"stars":25,"repoUrl":26,"updatedAt":1773},"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},[1770,1772],{"name":1771,"slug":32,"type":15},"CLI",{"name":20,"slug":21,"type":15},"2026-04-06T18:02:57.150231",{"slug":4,"name":4,"fn":5,"description":6,"org":1775,"tags":1776,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1777,1778,1779,1780],{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":1782,"name":1782,"fn":1783,"description":1784,"org":1785,"tags":1786,"stars":25,"repoUrl":26,"updatedAt":1796},"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},[1787,1790,1791,1794],{"name":1788,"slug":1789,"type":15},"Animation","animation",{"name":1754,"slug":1755,"type":15},{"name":1792,"slug":1793,"type":15},"Typography","typography",{"name":1795,"slug":1782,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":1798,"name":1798,"fn":1799,"description":1800,"org":1801,"tags":1802,"stars":25,"repoUrl":26,"updatedAt":1811},"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},[1803,1806,1807,1810],{"name":1804,"slug":1805,"type":15},"Debugging","debugging",{"name":1645,"slug":1646,"type":15},{"name":1808,"slug":1809,"type":15},"Screenshots","screenshots",{"name":1795,"slug":1782,"type":15},"2026-06-06T07:09:59.809812",81,{"items":1814,"total":1862},[1815,1822,1829,1835,1842,1849,1855],{"slug":1639,"name":1639,"fn":1640,"description":1641,"org":1816,"tags":1817,"stars":25,"repoUrl":26,"updatedAt":1656},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1818,1819,1820,1821],{"name":1645,"slug":1646,"type":15},{"name":1648,"slug":1649,"type":15},{"name":1651,"slug":1652,"type":15},{"name":1654,"slug":1655,"type":15},{"slug":1658,"name":1658,"fn":1659,"description":1660,"org":1823,"tags":1824,"stars":25,"repoUrl":26,"updatedAt":1673},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1825,1826,1827,1828],{"name":1664,"slug":1665,"type":15},{"name":1667,"slug":1668,"type":15},{"name":1670,"slug":1671,"type":15},{"name":20,"slug":21,"type":15},{"slug":1675,"name":1675,"fn":1676,"description":1677,"org":1830,"tags":1831,"stars":25,"repoUrl":26,"updatedAt":1687},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1832,1833,1834],{"name":1681,"slug":1682,"type":15},{"name":1684,"slug":1685,"type":15},{"name":20,"slug":21,"type":15},{"slug":1689,"name":1689,"fn":1690,"description":1691,"org":1836,"tags":1837,"stars":25,"repoUrl":26,"updatedAt":1704},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1838,1839,1840,1841],{"name":1695,"slug":1696,"type":15},{"name":1698,"slug":1699,"type":15},{"name":1701,"slug":1702,"type":15},{"name":20,"slug":21,"type":15},{"slug":1706,"name":1706,"fn":1707,"description":1708,"org":1843,"tags":1844,"stars":25,"repoUrl":26,"updatedAt":1719},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1845,1846,1847,1848],{"name":1712,"slug":1713,"type":15},{"name":1645,"slug":1646,"type":15},{"name":1716,"slug":1717,"type":15},{"name":20,"slug":21,"type":15},{"slug":1721,"name":1721,"fn":1722,"description":1723,"org":1850,"tags":1851,"stars":25,"repoUrl":26,"updatedAt":1733},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1852,1853,1854],{"name":1727,"slug":1728,"type":15},{"name":1730,"slug":1731,"type":15},{"name":20,"slug":21,"type":15},{"slug":1735,"name":1735,"fn":1736,"description":1737,"org":1856,"tags":1857,"stars":25,"repoUrl":26,"updatedAt":1746},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1858,1859,1860,1861],{"name":1712,"slug":1713,"type":15},{"name":1742,"slug":1743,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},13]