Shilpi 1.9.4: A new Plugins screen installs the free Shilpi add-ons without leaving the dashboard. See what shipped

Getting started with Shilpi

Install the theme, understand how a page is stored, and connect an agent, in about twenty minutes.

Quick start

Shilpi is a WordPress theme, not a plugin. Install it, activate it, and the Shilpi menu appears in wp-admin with the dashboard, pages, templates, elements, Code Hub, form submissions, system information, fonts, icon libraries, project files, plugins, settings, skills and security screens.

  1. Upload and activate the theme.
  2. Open Shilpi › Templates and create a Header. Set it as the site default under Settings.
  3. Open any page and choose Edit with Shilpi.
  4. Paste body-only HTML, or start from an element in the palette.
  5. Press Save. Autosave keeps a revision every minute in the meantime.
You do not need to touch theme files Everything a classic theme would put in functions.php lives in the Code Hub, where it is scoped, validated and switchable.

The dashboard

Four status cards sit across the top, and they are the fastest read on whether a site is healthy: the state of the AI workspace, how many production assets are cacheable front-end files, how many site health checks passed with their warnings and failures, and the recent activity from the last imports.

Below them are six tabs:

  • Where things are: a jump-off to Pages, Templates, Elements, Code Hub, Form submissions, System Information, Fonts, Icon Libraries, Project Files, Plugins and Settings.
  • Connect an AI agent: the server switch, the handshake test and the credentials.
  • Production assets: which front-end files are ready to be cached.
  • Recent imports: the last runs, with the most recent retained.
  • AI instructions: see below.
  • Licence: plan, activations and renewal.
Copy the instructions before your first prompt The AI instructions tab holds a short brief written for agents, with a Copy button. Paste it at the top of your first message to any agent working on the site, then describe what you want built. It tells the agent how Shilpi expects work to be done, which is the difference between a site that uses the theme and one that fights it. The Shilpi Prompt Builder, linked from the same tab, helps turn a vague idea into a brief worth pasting.

Requirements

  • WordPress 6.4 or newer, tested up to 7.1
  • PHP 8.0 or newer, tested up to 8.3
  • An administrator account for anything that touches PHP or JavaScript uploads
  • HTTPS, if you plan to connect an AI agent over OAuth

The System Information screen runs a set of health checks on your install and reports capabilities, warnings and failures in one place, start there when something behaves unexpectedly.

Installing the theme

Upload the ZIP under Appearance › Themes › Add New and activate. The builder, the design system, templates, forms and the Code Hub are available immediately.

Add-ons & plugins

The theme deliberately stays small. Features that only some sites need ship as free companion plugins instead, and Shilpi › Plugins is a directory of them with install and activate in one click. There is no ZIP to download and no licence key to paste: each plugin then updates itself from shilpibuilder.com through WordPress’s own Update URI mechanism.

The most important one today is Shilpi WooCommerce Kit, which carries the entire storefront. See WooCommerce Kit below.

An active plugin can teach the agent A companion plugin can register its own agent skill and its own routing rule, so the skill appears in Shilpi › Skills and in the agent’s instructions while the plugin is active, and leaves no database record behind when it is deactivated. That is why the agent knows how to build a storefront the moment the Kit is installed, and does not pretend to before.

Activating a licence

Open Shilpi › Dashboard › Licence and paste the key from your purchase email. The panel then reports your plan, how many of your sites are activated, and when the licence renews.

A licence unlocks three things: the AI layer, automatic updates and support. The MCP server needs an active key to answer at all, without one, both endpoints return 404 and no agent credential will authenticate.

Everything else works without a licence, and keeps working if one lapses: the visual builder, the design system, templates and routing, native forms and sliders, the Code Hub, and every page you have already published. Your visitors never see a difference, and the server’s on/off switch is remembered, so activating a key brings the AI layer straight back.

Moving a licence between sites Deactivate the key on the old site from the same Licence tab and activate it on the new one. There is no limit on how often you do this, clients change hosts and projects get retired.

The three fields

Every Shilpi page or template is stored as three plain fields. That is the entire storage model, and it is what keeps the site portable. Here is the reasoning behind storing pages as code.

Page HTML

Body-only semantic markup. No html, head or body wrapper, Shilpi supplies those. Two rules matter: no inline style attributes, and no style blocks inside the page HTML.

Visual decisions belong in reusable classes and variables instead, which is what makes a change on one page able to reach the whole site.

page HTML
<section class="section">
  <div class="container stack">
    <h1 class="heading-xl">{post:title}</h1>
    <p class="lead">{post:excerpt}</p>
    <article data-shilpi-post-content></article>
  </div>
</section>

Page CSS

A real stylesheet scoped to this page. Use it for rules that genuinely belong to this page alone. Anything reusable belongs in a global class, where the builder and an agent can both find it.

Page JS

Focused behaviour for this page. Site-wide behaviour belongs in Code Hub › Global JS.

The cascade

Order is fixed and worth memorising, because it explains every “why is this not applying” question you will ever have:

  1. Design variables: the tokens
  2. Global classes: reusable styling
  3. Global CSS: resets and base rules for every page
  4. Page CSS: this page’s exceptions, printed last

Page CSS overrides all of them. That is by design: the page is the last word about itself.

Inline or external, same order The CSS loading method changes how the stylesheet reaches the browser, not the cascade. The builder canvas always renders inline, so what you see while editing is current either way.

Design variables

Open Variables in the builder toolbar. Each variable can carry a value per breakpoint: Wide from 1500px, Desktop as the base, Tablet to 1024px and Mobile to 767px.

Reference a variable in class CSS as var(--name). A variable may reference another, --font-heading: var(--font-body) is valid, and useful when a client changes their mind about one typeface and not the other. See how responsive design tokens work in practice.

Global classes

When you style an element on the canvas, Shilpi creates or extends a class rather than writing an inline style. This is the single habit that makes a Shilpi site maintainable: by the end of a build you have a small vocabulary of classes, not a thousand one-off declarations.

Name classes for what they are, not what they look like. .card survives a redesign; .blue-box-2 does not.


Your first page

  1. Create a WordPress page and choose Edit with Shilpi.
  2. Drop a Section, then a Container inside it.
  3. Add a Heading and a Basic Text.
  4. Select the section and set padding using a spacing variable rather than a raw pixel value.
  5. Switch to the Tablet and Mobile views and confirm the result.
  6. Save, then Preview.

If you already have static HTML, skip all of that: open Page code, paste the body markup, and start selecting elements on the canvas.

Templates & routing

Templates come in eight types, each mapping onto how WordPress already routes requests: Header and Footer (site defaults, overridable per page), Single, Archive, Search, 404, Loop and Part.

The slug is the assignment. There is no condition builder to configure afterwards, name the template the way the WordPress template hierarchy names it and Shilpi matches it to the request:

template slugs
// most specific wins
single-post-my-slug   // one post
single-product        // every product
single                // every single post

archive-category-news // one category
archive-category      // all categories
archive               // the fallback archive

home                  // the posts page
search                // search results
404                   // not found

A Loop template is rendered once per post by a loop container that names it, design the card once and let the loop repeat it. Because a Part carries a shortcode, it can appear inside a classic post, a Gutenberg block or another plugin’s output, useful when only half the site is yours to rebuild.

Dynamic tokens

Tokens resolve at render time and can be typed directly into markup or chosen from the picker.

common tokens
// site
{site:title}   {site:tagline}   {site:url}   {year}

// menus and parts
{menu:primary}   {part:cta-band}

// post
{post:title}     {post:excerpt}    {post:date}
{post:url}       {post:terms}      {post:reading_time}
{post:image}     {post:image_alt}  {post:image:large}
{post:prev_url}  {post:next_url}   {post:comments_count}

// archive, term and search templates
{archive:title}  {archive:description}  {archive:results_count}
{term:name}      {term:description}     {term:image}
{search:query}

// author and custom fields
{author:name}    {author:bio}      {post:meta:your_field}

// render slots
data-shilpi-post-content   data-shilpi-comments
data-shilpi-pagination     data-shilpi-loop
Empty images never break Set a placeholder image in Settings and any dynamic image that resolves to nothing falls back to it. Leave it empty and Shilpi uses a plain grey block instead, either way, no broken icon reaches a visitor.

Forms & mail

Write an ordinary form and add data-shilpi-form="name". Give every input a lowercase name attribute, that is the column in the database, so decide it once at the start.

Submissions appear under Shilpi › Forms. Mail settings, recipient, transport, SMTP credentials and the delivery log, sit on the Mail tab beside the submissions they belong to. Set Keep submissions for to a number of days if you would rather not store personal data forever.

SEO & metadata

Every page and post carries its own SEO record: title, meta description, canonical URL, robots directives and the social card image. Set it in the builder, or let an agent set it as part of the same run that builds the page.

If you already run Yoast or RankMath, keep them. Shilpi reads the metadata that is already there rather than competing for the same fields, nothing you have written gets overwritten by installing the theme.

Menus & taxonomies

Menus are ordinary WordPress menus. Create one, order its items, and assign it to the Primary or Footer location, then render it anywhere with {menu:slug}, no shortcode and no widget area required.

Taxonomies work the same way: register or populate categories, tags and custom taxonomies, then point a query loop at one and give it an archive-category-… template to render into.


WooCommerce Kit

As of Shilpi 1.9 the theme carries no storefront code at all. The component runtime, the builder elements and the commerce skin, about 3,200 lines, all live in Shilpi WooCommerce Kit, a free plugin you install from Shilpi › Plugins.

Updating an existing store Install the Kit before you update the theme on a site that already sells. The storefront code left the theme in 1.9.0, so a store updated without the plugin loses its commerce elements until the plugin is activated.

Once it is active, a WooCommerce group appears in the element palette with 24 elements. Six of them are complete and are the fast default:

  • Product Grid: limit, columns, category, order, sale, featured, inherit
  • Single Product: a product ID, or 35 inside a template
  • Add to Cart: a product ID and a quantity
  • Cart, Checkout and My Account: the native, session-aware flows

The other eighteen are composable pieces, for when the design matters more than the speed: Woo Breadcrumbs, Store Notices, Product Gallery, Product Title, Product Rating, Product Price, Short Description, Product Stock, Product Add to Cart, Product Meta, Product Tabs, Related Products, Upsells, Product Categories, Result Count, Product Ordering, Mini Cart and Cart Count. Arrange them in any grid, reorder them, drop the ones you do not want, and style each with ordinary Shilpi classes.

What gets stored is readable configuration, not generated WooCommerce markup:

a product grid, as stored
<div class="woocommerce-products sh-woo-element"
     data-shilpi-woo="products"
     data-woo-limit="8" data-woo-columns="4"
     data-woo-orderby="date"></div>

Shilpi translates data-shilpi-woo and the data-woo-* attributes into an allowed native shortcode at render time, which is why prices, stock, cart state, checkout validation and account data all stay live. Never paste the rendered preview markup back into the document.

Shilpi › WooCommerce also carries the storefront behaviour WooCommerce normally leaves to the theme: product labels, variation swatches, a sticky buy bar and catalog mode.

Product templates

Product routes are builder-authorable through two fixed slugs, exactly as the rest of the template hierarchy works. single-product is stored as a Single template, archive-product as an Archive template. More specific taxonomy templates still win, and product categories and tags fall back to archive-product.

Two attributes carry the whole thing. On a single-product template the host has to resolve against the current product, and on the archive the grid has to inherit WordPress’s own query, which is what preserves Shop, category filtering, ordering and pagination:

single-product and archive-product
// single-product
<div data-shilpi-woo="product" data-woo-id="35"></div>

// archive-product
<div data-shilpi-woo="products"
     data-woo-inherit="true"
     data-woo-columns="4"></div>
<nav data-shilpi-pagination></nav>

The granular elements take data-woo-id too, which is what makes a fully custom product card possible inside an ordinary Shilpi loop: the card markup is yours, and only the price and the add-to-cart form come from WooCommerce.

Leave the Shop page empty WooCommerce uses the assigned Shop page’s body as its archive description. If archive-product already supplies the hero and title, Shilpi HTML left on the Shop page is inserted inside the archive and produces duplicate headings. Put a promotional shop landing page at its own slug instead.

Design packs

Cart, Checkout, My Account, product and shop-archive pages are the least enjoyable part of any store build, so the Kit ships finished designs for them. A pack imports in one step and undoes in one more.

Run the plan step first. It reports exactly what an import would create and what it would replace, before anything is written, which is the version to show a client rather than the version you have already applied.

Cart, checkout and account keep WooCommerce’s own native logic throughout. Shilpi styles the output through a route-scoped commerce skin, variables and deliberate overrides, and never replaces the checkout flow. After any storefront change, walk Product to Add to Cart to Cart to Checkout without placing an order, then empty the cart again, and check both desktop and mobile.

What the agent can and cannot do here

The MCP surface for commerce is deliberately bounded. An agent can read store status, create and assign the Shop, Cart, Checkout and My Account pages, configure store settings, list products and save simple ones, and switch the storefront behaviour described above.

It cannot reach customers, orders, addresses, payments or arbitrary order metadata. That boundary is a privacy decision, not an oversight, and it is not configurable.


Connecting an agent

  1. Activate a licence on the Licence tab. The MCP server does not answer without one.
  2. Open Shilpi › Dashboard › Connect an AI agent.
  3. Confirm the server is on, and press Test server: it performs a real authenticated MCP handshake rather than pinging a URL.
  4. Choose OAuth (recommended). The agent signs in through the browser and no password is copied into a config file.
  5. If your client cannot do OAuth, create a WordPress Application Password instead.
  6. Copy the brief from the AI instructions tab and paste it at the top of your first message.

Once connected, the agent has a fixed set of scoped abilities: pages and templates, variables and global classes, menus, taxonomies, SEO, PHP snippets, script files, fonts, media and whole-site import, plus whatever an active companion plugin adds, such as the WooCommerce tools from the Kit. It has no filesystem access, no SSH and no way to reach wp-config.php. We wrote up why the boundary is drawn at abilities rather than access.

Turning the server off removes both MCP endpoints. Existing credentials then cannot edit the site, which makes it a genuine kill switch rather than a setting. A lapsed licence has the same effect, and the panel says so rather than leaving you to guess.

Skills & instructions

Two Markdown skills ship with the theme and can be downloaded from Shilpi › Skills: shilpi-theme for everything the theme owns, and wordpress-core for native posts, pages, media, menus, users and settings.

Active companion plugins can add their own, so installing the WooCommerce Kit gives the agent a storefront skill it did not have a moment earlier. Those plugin skills are code-backed and read-only, and they disappear cleanly when the plugin is deactivated.

You can also upload your own Markdown skill to add house conventions; uploading the same slug again updates it.

The short version of the agent instructions Read the site first and reuse what exists. Build body-only semantic HTML with reusable classes and variables, no inline styles. Complete the whole scope, then read back the saved records, resolve warnings, check navigation and forms, and verify desktop, tablet and mobile.

Temporary permissions

Risky capabilities are temporary permissions, not settings you turn on and forget. Shilpi › Security shows how many are currently open, and closes every one of them with a single Turn off temporary access button.

Under Temporary file access, enable only the file types the current job needs. WordPress capabilities and Shilpi validation still apply on top:

  • Sanitised SVG uploads: scripts, embedded HTML, event handlers and external references are stripped before storage.
  • JSON project-file uploads: only valid JSON objects or arrays, up to the Shilpi upload limit.
  • JavaScript project-file uploads: executable, so it requires an administrator-level trusted account and is validated before storage.

PHP access in the Code Hub is the fourth, and the one worth closing first when you finish a build. Closing any of these never deletes anything: existing media, project files and snippets stay exactly where they are.

WordPress hardening

The same screen carries a set of WordPress hardening switches. They are all reversible, and none of them edits wp-config.php or any server file, so nothing here can leave you locked out of your own site.

  • Block dashboard file editors: prevents editing plugin and theme source in wp-admin. Updates still work.
  • Disable XML-RPC: recommended, unless a mobile app or a legacy integration uses xmlrpc.php.
  • Use generic login errors: stops the login form revealing whether a username or an email exists.
  • Hide the WordPress generator version: removes the version from public page and feed output.
  • Hide public REST user listings: signed-in users keep normal access, public /wp/v2/users requests are blocked.
  • Disable application passwords: only when this site does not connect to any app through them.
One switch that will bite you Disabling application passwords also cuts the fallback route for connecting an AI agent. If your MCP client cannot complete an OAuth sign-in, leave this one alone.

Common questions

How do I connect Claude or ChatGPT to WordPress?
Activate a licence, switch the MCP server on under Shilpi then Dashboard then Connect an AI agent, and press Test server. Then point your client at https://your-site.com/wp-json/mcp/shilpi-oauth and sign in through the browser. An application password is available for clients that cannot do OAuth.
What are the requirements for Shilpi?
WordPress 6.4 or newer, tested up to 7.1, and PHP 8.0 or newer, tested up to 8.3. HTTPS is required if you plan to connect an agent over OAuth, and an administrator account is needed for anything touching PHP or JavaScript uploads.
How do I turn off AI access to my site?
Switch the MCP server off in the dashboard. That removes both endpoints, so existing credentials stop working rather than merely being asked not to. Separately, the Security screen lists every temporary permission that is open and closes all of them with one button.
Does Shilpi conflict with Yoast or Rank Math?
No. Shilpi reads and writes whatever SEO plugin is already active through that plugin's own API, rather than competing for the same fields. Nothing you have written gets overwritten by installing the theme.

Further reading