
Description
Manage a remote WordPress.com site with wpcom_request, including API namespace selection, endpoint discovery, content/template/theme/plugin operations, response-size limits, and visual verification.
SKILL.md
WordPress.com Remote Management
Use this skill after the mandatory remote-site plan check, before selecting endpoints or making changes to a WordPress.com site through wpcom_request.
Tool Shape
wpcom_request supports both the WordPress REST API and WordPress.com REST API endpoints:
method:GET,POST,PUT, orDELETEpath: relative to/sites/{siteId}/, such as/posts,/posts/123, or/templatesquery: optional query parameters objectbody: optional request body forPOSTandPUTbodyFile: optional staged JSON file path forPOSTandPUT; the parsed JSON object becomes the entire request bodybodyFiles: optional map of top-level request body field names to staged file paths forPOSTandPUT; each file becomes that field's string valueapiNamespace: defaults to"wp/v2"; set to""for WordPress.com REST API v1.1, or"wpcom/v2"for WordPress.com v2 endpoints
Prefix path with ! only for absolute paths such as !/me.
Namespace Selection
Prefer wp/v2 for standard WordPress resources:
- Posts, pages, media, categories, tags, users, comments
- Templates, template parts, navigation, global styles, block patterns
- Block types and search
Use WordPress.com v1.1 by setting apiNamespace: "" for WordPress.com-specific resources:
- Site info:
GET / - Site settings:
POST /settings - Plugin management:
GET /plugins,POST /plugins/{slug}/install,POST /plugins/{slug}with body{ active: true }or{ active: false } - Theme switching:
GET /themes,POST /themes/minewith body{ theme: "slug" } - Media upload from URL:
POST /media/newwith body{ media_urls: [...] }
Common wp/v2 Endpoints
- Posts and pages:
GET /posts,GET /posts/{id},POST /posts,POST /posts/{id},DELETE /posts/{id} - Media:
GET /media,POST /media - Templates:
GET /templates,GET /templates/{id},POST /templates,POST /templates/{id},DELETE /templates/{id} - Template parts:
GET /template-parts,GET /template-parts/{id},POST /template-parts,POST /template-parts/{id} - Navigation:
GET /navigation,POST /navigation,POST /navigation/{id} - Global styles:
GET /global-styles/{id},POST /global-styles/{id} - Categories and tags:
GET /categories,POST /categories,GET /tags,POST /tags - Block types:
GET /block-types,GET /block-types/{name} - Search:
GET /search?search={query}
To find the global styles ID, first call GET /themes?status=active; the active theme's _links["wp:user-global-styles"][0].href contains the ID.
Use per_page and page for pagination. Use status to filter by publish status. For creating or updating content, pass block markup in the content field of the request body.
Response Size Control
Minimize response sizes to avoid exceeding tool output limits:
- Use
_fieldsforwp/v2. - Use
fieldsfor WordPress.com v1.1. - Exclude heavy fields such as
contentwhen listing resources. - Fetch lightweight listings first, then fetch individual resources by ID when full content is needed.
- When using
fieldswith v1.1, always includeID.
Examples:
GET /posts?_fields=id,slug,title,status
GET /plugins?fields=ID,name,description,URL
Large Request Bodies
For generated page content, template content, template-part content, global styles, or CSS, do not inline large generated strings in wpcom_request.body.
Stage request payload files under tmp/ai-payloads/ within Studio app data using small Write or Edit steps.
Use bodyFiles when staged files should become string fields inside the request body:
body: { "status": "publish" }
bodyFiles: { "content": "tmp/ai-payloads/home.html" }
The bodyFiles keys must be top-level REST body field names such as content, excerpt, or css, not filenames or nested paths. Do not use keys like home.html, styles.css, content.raw, or styles.color.background.
Use bodyFile when the staged file is the complete JSON request body, especially for endpoints that expect nested JSON objects such as POST /global-styles/{id}:
bodyFile: "tmp/ai-payloads/global-styles.json"
Do not combine bodyFile with body or bodyFiles.
Workflow
- Check the site plan first. This is already required by the remote system prompt and must happen before any change.
- Understand the site with lightweight reads, such as
GET /postsandGET /themes?status=active. - Make changes with POST requests to create or update content, manage templates, switch themes, or manage plugins.
- Verify visually with
take_screenshotusingviewport: "all"for desktop and mobile. - If an operation fails, inspect the error and try a lightweight GET request to discover the available shape before retrying.
Always confirm destructive operations, including deleting posts or deactivating plugins, before proceeding.
More skills from the studio repository
View all 13 skillsannotate
collect visual feedback with browser annotation tools
May 6FrontendProductivityUX CopyUX Designblock-content
write editable WordPress block markup
May 27Block EditorCSSHTMLWordPresshosting-plans-helper
provide WordPress.com hosting plan information
Jul 2PricingReferenceWordPressliberate
migrate websites to WordPress
Jul 9CMSMigrationWeb DevelopmentWordPressneed-for-speed
run frontend performance audits for WordPress sites
May 6AuditFrontendPerformanceWordPressplugin-recommendations
recommend WordPress plugins for site features
May 27Content CreationPlugin DevelopmentWordPress
More from Automattic
View publisherrank-me-up
run on-page SEO audits for WordPress sites
studio
May 6AuditMarketingSEOWordPresssite-spec
gather specifications for new WordPress sites
studio
May 6DesignProduct ManagementSpecsWordPressstudio-cli
manage local WordPress sites with Studio CLI
studio
Apr 6CLIWordPresstaxonomist
optimize WordPress category taxonomy
studio
May 6Content StrategyData CleaningSEOWordPressvisual-design
plan and execute visual design direction
studio
Jul 18AnimationDesignTypographyVisual Designvisual-polish
verify and polish website visual design
studio
Jun 6DebuggingFrontendScreenshotsVisual Design