See Respira in action.
Fifty-two seconds, from connecting a site to the receipt for the edit. Press play with sound. Every chapter below follows the real product; the dashboard replica uses fictional agency data so you can click through it safely.
This is the dashboard. Click anything.
A faithful, data-safe Respira dashboard for a fictional agency with six client sites. The tour now includes AER, Murmur, Respira Exhale, the HTML to WordPress converter, and the current security workflow. The moment you click, it stops and the dashboard is yours.
Whatever your site runs on, Respira speaks it.
Below is a real conversation, replayed. You see the sentence someone typed, the tools the AI called, what happened on the WordPress site underneath, and the answer that came back. Every field name is read from the plugin and MCP server that are live right now, so none of it is a mock-up.
Pick where you want to work, then pick a job.
Read https://www.respira.press/agent-start.txt first. It is short, and it is the order to do things in. You're connected to my WordPress site through Respira. Before doing anything, call respira_get_builder_info to find out which page builder this site uses, then read the page before you change it. Edit through the builder's native elements, never by writing raw HTML into the content. Work on a duplicate rather than the live page. If you hit the same error twice, call respira_search_docs instead of guessing. To read any documentation page, append .md to its URL: same content, about a thirtieth of the bytes. Confirm what builder i'm on and what you can do.
respira_list_sites
{}{ "sites": [
{ "id": "brightbakery-com", "name": "Bright Bakery",
"url": "https://brightbakery.com", "is_default": true, "is_active": true },
{ "id": "meridian-dental-com", "name": "Meridian Dental", … },
{ "id": "fernhollow-shop", "name": "Fern Hollow", … },
… 3 more ],
"active_site": { "id": "brightbakery-com", "name": "Bright Bakery" } }
respira_get_builder_info
{}{ "name": "Elementor", "version": "3.34.2", "detected": true,
"intelligence_available": true, "intelligence_active": true,
"site_memory": { "enabled": true, "rules": [], "notes": [],
"agent_instructions": "Site memory is empty. When you learn something
durable about this site … save it with respira_remember so the
next session starts warm." } }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/context/builder-info
respira_get_site_context
{}{ "site_name": "Bright Bakery", "site_url": "https://brightbakery.com",
"language": "en-GB", "wordpress_version": "6.9.4", "php_version": "8.3.12",
"is_multisite": false,
"page_builder": { "name": "Elementor", "version": "3.34.2" },
"active_theme": { "name": "Hello Elementor", "version": "3.4.5" },
"active_plugin_count": 14,
"custom_post_types": [{ "name": "product", "label": "Products" }],
"woocommerce": { "active": true, "version": "10.3.1" },
"addons": { "woocommerce": { "active": true } },
"site_memory": { "enabled": true, "rules": [], "notes": [] } }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/context/site-infoConnected to Bright Bakery (brightbakery.com), the default of your six sites.
- WordPress 6.9.4 on PHP 8.3
- Builder: Elementor 3.34.2, Respira's Elementor intelligence active
- Theme: Hello Elementor · 14 active plugins
- WooCommerce 10.3.1, Respira add-on active
- Site memory: empty, so nothing is protected yet and nothing is known about this site's conventions
I'll edit through Elementor's own elements, on a duplicate first, never raw HTML. What would you like changed first?
what page builder is this site using, what plugins are active, and are any of them likely to affect how you write to pages (caching, page builders, form builders)?
respira_get_site_context
{ "detail": "full" }{ "page_builder": { "name": "Elementor", "version": "3.34.2" },
"active_plugins": [
{ "name": "Elementor", "version": "3.34.2", "file": "elementor/elementor.php" },
{ "name": "Elementor Pro", "version": "3.34.1", "file": "elementor-pro/elementor-pro.php" },
{ "name": "WooCommerce", "version": "10.3.1", "file": "woocommerce/woocommerce.php" },
{ "name": "WP Rocket", "version": "3.19.1", "file": "wp-rocket/wp-rocket.php" },
{ "name": "Rank Math SEO", "version": "1.0.262", "file": "seo-by-rank-math/rank-math.php" },
{ "name": "Respira for WordPress", "version": "8.8.18", "file": "respira-for-wordpress/respira-for-wordpress.php" },
… 8 more ],
"taxonomies": [ "category", "post_tag", "product_cat", "product_tag" ],
"tool_profile": "full" }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/context/site-infoElementor 3.34.2 is the builder, with Elementor Pro alongside. Two of the fourteen active plugins matter for writes:
- WP Rocket caches pages. Respira purges it after every live write, so you won't see a stale page.
- Rank Math holds your SEO titles and descriptions. I'll go through it, not around it.
WooCommerce is here with the Respira add-on, so products and orders are in reach too. Nothing on this list blocks builder-native edits.
/run health on Bright Bakery and Meridian Dental
respira_get_site_context
{}{ "site_name": "Bright Bakery", "wordpress_version": "6.9.4",
"php_version": "8.3.12",
"page_builder": { "name": "Elementor", "version": "3.34.2" },
"woocommerce": { "active": true, "version": "10.3.1" },
"site_memory": { "enabled": true, "rules": [], "notes": [] } }
respira_get_builder_info
{}{ "name": "Elementor", "version": "3.34.2", "detected": true,
"intelligence_available": true, "intelligence_active": true }
respira_get_site_context
{}{ "site_name": "Meridian Dental", "wordpress_version": "6.9.4",
"php_version": "8.2.27",
"page_builder": { "name": "Divi", "version": "5.1" },
"site_memory": { "enabled": true,
"rules": [{ "key": "never-edit-booking", "scope": "/booking" }] } }
respira_get_builder_info
{}{ "name": "Divi", "version": "5.1", "detected": true,
"intelligence_available": true, "intelligence_active": true }Both sites answer, and nothing needs fixing today.
- Bright Bakery: WordPress 6.9.4 on PHP 8.3, Elementor 3.34.2 with Respira's Elementor intelligence active, WooCommerce 10.3.1
- Meridian Dental: WordPress 6.9.4 on PHP 8.2, Divi 5.1. One rule in site memory: the booking page refuses writes.
Nothing was written on either site.
receiptbrightbakery.com: 2 reads, nothing written · meridian-dental.com: 2 reads, nothing written
Audit the implants page and score it.
respira_analyze_seo
{ "page_id": 214 }{ "success": true, "score": 95, "grade": "A",
"issues": [{ "type": "warning", "message": "Missing meta description",
"severity": "high", "fix": "Add meta description between 120-160 characters" }],
"recommendations": [
{ "priority": "medium", "action": "Add Open Graph tags", … },
{ "priority": "low", "action": "Add more internal links", … }],
"metrics": { "meta_title_length": 45, "meta_description_length": 0,
"has_og_title": false, "h1_count": 1, "h2_count": 7,
"total_images": 22, "images_without_alt": 0, "alt_text_coverage": 100,
"internal_links": 0, "external_links": 6, "word_count": 2186, "has_schema": true },
"links": { "approve_edits": "https://meridian-dental.com/wp-admin/admin.php?page=respira-changes" } }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/analyze/seo/214
respira_scan_page_accessibility
{ "page_id": 214 }{ "violations": [
{ "id": "link-name", "impact": "serious",
"help": "Links must have discernible text.", "tags": ["wcag2a", "wcag244"],
"nodes": [{ "html": "<a href=\"javascript:void(0);\" class=\"gallery-prev\">…",
"failureSummary": "Link has no accessible text, title, or aria-label." }, …] },
{ "id": "heading-order", "impact": "moderate", "nodes": [ … 4 ] }],
"prompts": [{ "ruleId": "link-name", "severity": "serious",
"wcag": "WCAG 2.4.4 Link Purpose / 4.1.2 Name, Role, Value (Level A)",
"title": "Fix Link Text (Divi)", "prompt": "# Fix Accessibility Violation via Respira MCP …" }],
"scanLevel": "AA", "scanner": "respira-local",
"coverage": { "rule_count": 6, "coverage_estimate": "approx 12% of axe-core WCAG 2.0 AA rule set",
"missing_rule_categories": ["color-contrast", "aria-*", "landmarks", "keyboard", …] },
"page_context": { "cms": "wordpress", "builder": "divi", "builderVersion": "5.11.1" },
"scan_id": "e36b32ca-274a-4b71-84b4-67e2bafc8bc0" }Two reports on the implants page.
SEO: 95, grade A. One high-severity gap: there is no meta description. Open Graph tags are missing too, and the page has no internal links.
Accessibility: 2 violations.
- Two gallery arrows are links with no accessible name (serious)
- Headings jump levels in four places (moderate)
The scanner covers six rules, roughly 12% of the WCAG AA set, so treat this as a first pass rather than a clean bill. I can write the meta description and the link names on a duplicate now. Say the word.
check woocommerce health
respira_get_site_context
{}{ "site_name": "Fern Hollow", "wordpress_version": "7.1", "php_version": "8.3.13",
"addons": { "woocommerce": { "installed": true, "licensed": true } },
"woocommerce": { "active": true, "version": "11.1.0",
"products_count": 3, "orders_count": 0, "currency": "USD",
"endpoints": { "products": "https://fernhollow.shop/wp-json/respira/v1/woocommerce/products",
"orders": "https://fernhollow.shop/wp-json/respira/v1/woocommerce/orders" } }, … }
woocommerce_get_stock_status
{}{ "total_products": 3, "low_stock_count": 0, "out_of_stock_count": 1,
"products": [
{ "id": 52130, "name": "Fiddle-leaf fig, 60 cm", "sku": "", "stock_quantity": 0,
"stock_status": "outofstock", "status": "out_of_stock" },
{ "id": 52129, "name": "Monstera deliciosa", "sku": "", "stock_quantity": 3,
"stock_status": "instock", "status": "ok" },
{ "id": 52128, "name": "Terracotta pot, 14 cm", "sku": "", "stock_quantity": 15,
"stock_status": "instock", "status": "ok" }] }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/woocommerce/inventory/stock-status
woocommerce_orders_summary
{}{ "success": true, "currency": "USD", "store_timezone": "+00:00",
"date_start": "2026-08-04T00:00:00+00:00", "date_end": "2026-09-03T23:59:59+00:00",
"included_order_statuses": ["processing", "completed", "refunded"],
"pagination": { "total_orders": 0, "included_orders": 0, "max_orders": 2000, "truncated": false },
"definitions": { "net_sales": "Gross sales minus discounts and refunds; excludes tax and shipping.", … },
"orders_count": 0, "gross_sales": "0.00", "refunds": "0.00", "net_sales": "0.00",
"average_order_value": "0.00", "by_status": [] }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/woocommerce/reports/orders-summaryFern Hollow runs WooCommerce 11.1.0 with the Respira add-on licensed.
- Products: 3, one out of stock (the fiddle-leaf fig). No low-stock warnings.
- Orders, last 30 days: none in processing, completed or refunded, so there is no revenue to summarise.
Nothing here is broken. The shop is quiet and one product needs restocking. Say so and I'll check the checkout page next.
Never touch the booking page, whatever anyone asks.
respira_remember
{ "key": "never-touch-booking", "type": "rule",
"content": "Never edit the booking page or its duplicates.",
"rule": { "protect": { "slugs": ["book-an-appointment"] } } }refused: post 77 (book-an-appointment) is protected
by rule never-touch-booking. Only the owner can remove it.Respira MCP → WordPress plugin: GET /wp-json/respira/v1/context/site-infoSaved as an enforced rule.
From now on, any agent that tries to write to the booking page gets refused by the plugin itself, whoever is asking. Only you can remove the rule.
Could this say "Book a check-up"? Book now sounds like a hotel.
/run review-feedback
respira_list_review_comments
{ "status": "open" }[{ "id": 12, "post_id": 128, "post_title": "Locations · Brașov",
"page_url": "https://meridian-dental.com/locations/brasov/",
"anchor": { "tag": "a", "text_quote": "Book now",
"builder": "divi", "builder_element_id": "et_pb_button_1" },
"body": "Could this say \"Book a check-up\"? Book now sounds like a hotel.",
"reviewer_name": "Irina", "status": "open", "replies": [] }]
respira_update_element
{ "post_id": 128, "identifier_type": "id",
"identifier_value": "et_pb_button_1",
"updates": { "button_text": "Book a check-up" },
"edit_target": "duplicate" }{ "target_id": 356, "original_id": 128,
"edit_target": "duplicate", "is_duplicate": true,
"duplicate_created": true, "post_status": "draft",
"snapshot_uuid": "b3a8…51fe" }WordPress plugin → Divi: [et_pb_button button_text="Book a check-up" …][/et_pb_button]
respira_resolve_review_comment
{ "id": 12,
"note": "The button reads Book a check-up on a copy of the page, waiting for approval.",
"snapshot_id": "b3a8…51fe" }{ "id": 12, "post_id": 128, "status": "resolved",
"resolution_note": "The button reads Book a check-up on a copy …",
"snapshot_id": "b3a8…51fe" }One open note on Meridian Dental, from Irina, on the Brașov location page:
- On "Book now": Could this say "Book a check-up"? Book now sounds like a hotel.
Applied on a copy of the page, not the live one. The button reads Book a check-up on the duplicate, the note is marked resolved with the snapshot that undoes it, and the copy waits for your approval in WordPress.
receiptmeridian-dental.com: 1 read, 2 writes on a copy · undo b3a8…51fe
amplify my seo and aeo
respira_check_seo_issues
{ "page_id": 31 }{ "success": true, "score": 85, "grade": "B",
"issues": [{ "type": "warning", "message": "Missing meta description",
"severity": "high", "fix": "Add a meta description between 120-160 characters" }],
"links": { "approve_edits": "https://thecopperkettle.co/wp-admin/admin.php?page=respira-changes" },
"budget": { "elapsed_ms": 211, "budget_ms": 8000, "exceeded": false } }
respira_check_structured_data
{ "page_id": 31 }{ "success": true, "score": 80, "grade": "B",
"issues": [{ "type": "warning", "message": "No structured data found",
"severity": "high", "fix": "Add JSON-LD schema markup for better AI understanding" }],
"recommendations": [
{ "priority": "high", "action": "Add structured data",
"details": "Implement JSON-LD schema markup (Article, Organization, or relevant type)" },
{ "priority": "medium", "action": "Add recommended schema types",
"details": "Consider adding: Article, FAQPage, HowTo" }],
"metrics": { "has_json_ld": false, "has_microdata": false, "schema_types": [],
"missing_schemas": ["Article", "FAQPage", "HowTo"],
"analysis_source": "rendered_page", "detection_confidence": "confirmed",
"rendered_page_url": "https://thecopperkettle.co/menu/" } }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/analyze/structured-data/31Two findings on the menu page.
- SEO: 85, grade B. The only high-severity issue is the missing meta description.
- Structured data: 80, grade B. The rendered page has no JSON-LD at all, so answer engines have nothing to cite. Recommended types: Article, FAQPage, HowTo.
Plan: write the meta description and a FAQPage block for the questions already on the page, on a duplicate, and leave the original untouched until you approve.
fix my catalog for ai
woocommerce_list_products
{ "per_page": 3 }{ "result": [
{ "id": 52130, "name": "Fiddle-leaf fig, 60 cm", "type": "simple", "status": "publish",
"sku": "", "price": "149.99", "regular_price": "149.99", "sale_price": "",
"stock_quantity": 0, "stock_status": "outofstock",
"categories": [{ "id": 1623, "name": "Uncategorized", "slug": "uncategorized", "count": 3 }],
"tags": [], "brands": [], "image_id": null, "image": null, "gallery_image_ids": [],
"global_unique_id": "",
"permalink": "https://fernhollow.shop/product/fiddle-leaf-fig-60-cm/" },
{ "id": 52129, "name": "Monstera deliciosa", "sku": "", "price": "69.00",
"regular_price": "89.00", "sale_price": "69.00", "brands": [], "image": null,
"global_unique_id": "", … },
{ "id": 52128, "name": "Terracotta pot, 14 cm", "sku": "", "price": "19.99",
"regular_price": "29.99", "sale_price": "19.99", "brands": [], "image": null,
"global_unique_id": "", … }] }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/woocommerce/products?per_page=3Three products, and all three are missing the same things:
- no SKU
- no image
- no brand
- no GTIN
- every one sits in Uncategorized
That is why they fail the feed checks. I can set SKUs, brands and real categories now, with a snapshot first so it is one call to undo. Images and descriptions need you: send me a photo per product, or tell me to write descriptions from the names.
Change the shop banner to say the spring menu is here.
respira_update_module
{ "builder": "elementor", "page_id": 52,
"module_identifier": { "path": "0.0.1" },
"updates": { "attributes": { "title": "The spring menu is here" } } }{ "edit_target": "duplicate", "post_status": "draft",
"snapshot_uuid": "41bd…07c2" }Respira MCP → WordPress plugin: POST /wp-json/respira/v1/builder/elementor/patch/52WordPress plugin → Elementor: { "elType": "widget", "widgetType": "heading",Done. The shop banner now reads "The spring menu is here" on a duplicate of the page.
Open the preview inside Elementor and publish when you like. The original hasn't moved.
Update the opening hours on every location page to 9 to 18, Monday to Saturday.
respira_find_element
{ "post_id": 128, "identifier_type": "content",
"identifier_value": "Opening hours" }{ "matches": [{ "id": "et_pb_text_3", "type": "et_pb_text",
"path": "sections[0].rows[1].modules[0]" }] }
respira_update_element
{ "post_id": 128, "identifier_type": "id",
"identifier_value": "et_pb_text_3",
"updates": { "content": "Mon to Sat, 9 to 18" },
"edit_target": "duplicate" }{ "target_id": 341, "original_id": 128,
"edit_target": "duplicate", "is_duplicate": true,
"duplicate_created": true, "post_status": "draft",
"snapshot_uuid": "9f2c…e41a" }Respira MCP → WordPress plugin: POST /wp-json/respira/v1/builder/divi/patch/341WordPress plugin → Divi: [et_pb_text admin_label="Opening hours"]Done. I found the opening-hours text on all six location pages and changed it on copies, not the live pages.
- Six previews are waiting in WordPress under Respira → Changes
- Approve them together, or leave them
- Undo stays available for 90 days
Put the hero image back the way it was on Monday.
respira_restore_snapshot
{ "snapshot_uuid": "77e1…3f0d" }{ "restored": true, "post_id": 9,
"snapshot_uuid": "77e1…3f0d" }Respira MCP → WordPress plugin: GET /wp-json/respira/v1/activity?post=9Restored. The hero image on Bright Bakery is back to Monday's version, from the snapshot Respira kept. Nothing else on the page changed.
(also, you have been at this for a while. if there is someone in the next room, go say hi. stretch. water. the next snapshot will still be here.)
The first two exchanges are how every session should start: the primer, then the briefing. Both prompts come from the Prompt Book, free, with the rest of the book behind them.
Works with the page builder you already have.
Elementor, Divi, Bricks, Gutenberg, WPBakery and 14 more. Respira writes in each builder's own format, so the page still opens in its editor.
-
Gutenberg
-
WooCommerce
-
Elementor
-
Bricks
-
Oxygen -
Beaver Builder -
Breakdance
-
Divi -
WPBakery -
Visual Composer -
Brizy -
Thrive Architect
-
Spectra
-
Kadence Blocks -
GenerateBlocks
-
GreenShift -
SeedProd
-
YOOtheme
-
Avada
-
Flatsome
Running a store? The WooCommerce add-on brings 104 store tools. See the WooCommerce add-on
Inside WordPress: the plugin’s own screens.
The dashboard runs across your sites. The plugin runs inside each one, and this is what it looks like there.
Recordings.
Screen recordings of real sessions. The two long screencasts have their own pages with every step written down.
Now on your own site.
Seven days free on one site, no card. Every change lands on a copy first, with undo for 90 days.
