Release notes · v4.2 → v9.2.13

Every release,
every story.

A single timeline. Every version Respira has shipped, with the stories behind the ones that mattered. Click into any release tagged story for the full write-up.

Connect your WordPress site
Looking for the plugin? The download and your license key are in your dashboard, one free sign-up away. No card.
783 Releases shipped
15 With a landing page
9.2.13 Latest stable
340 days Since v1.0
Product
Filtered GreenShift · 5 releases See GreenShift MCP → Clear
October 15, 2026
WordPress plugin v9.2.7 Patch October 15, 2026 Kadence Blocks, Spectra, GenerateBlocks and GreenShift pages get their own blocks
  • Kadence Blocks, Spectra, GenerateBlocks and GreenShift pages get their own blocks. Until now, a new element on a block library site was a WordPress core block: ask for a Kadence row with two columns and you got a core group and core columns, with none of Kadence's controls. Now build_page, inject_builder_content and the add_* tools write the library's own blocks when you pass builder "kadence", "spectra", "generateblocks" or "greenshift", or when the page already has that library's blocks. Sections, rows and columns, headings and text, buttons, images, icons, spacers and dividers, lists, accordions and tabs each become the library's block, with the markup the library's own editor saves, its ids and the attributes it styles from (GenerateBlocks also gets the compiled CSS its front end prints, GreenShift the CSSRender flag it needs). Spectra Legacy pages get uagb/* blocks and Spectra Blocks pages spectra/* blocks; on GreenShift everything is its Advanced HTML Element, with sections laid out the way GreenShift's own guidance recommends. Anything a library has no block for is written as a WordPress core block and named in a library_core_fallback warning, and build_page says which elements are the library's in library_blocks. Without a builder on a new page you still get core blocks, plus a hint that names the builder value to pass, so a site that merely has a library installed is not switched over. Tested on a real WordPress 7.1 site with Kadence Blocks 3.8.0, Spectra Legacy 2.20.5, Spectra Blocks 1.0.11, GenerateBlocks 2.5.0 and GreenShift 13.2.1, one at a time: every block opens in the block editor without an "unexpected or invalid content" warning, the pages render with the library's styling, and existing content stays byte for byte when you add to a page.

  • WordPress 7.1 accordions, tabs and icons in the block editor. A generic accordion, tabs, icon, video, spacer, divider or list sent to build_page on a block editor page used to be saved as an empty block. They are now the core blocks WordPress itself saves: the core accordion and tabs blocks with their items and panels (details blocks on WordPress versions without them), the core icon block, a video embed, and spacer, separator and list blocks with their markup.

  • The browser door is on the screen a freshly linked site lands on. Of the people who linked a site from wp-admin in the 60 days to 15 October, 97 (29% of everyone who connected a site) never connected any agent, and most of them never opened the dashboard again. The only screen they saw after the link was Home in this plugin, and every door on it either opened respira.press in a new tab or asked for a desktop app; claude.ai and ChatGPT, which connect by address with no download and no key, were one sentence in the lede. Home's "Connect your AI assistant" card and Setup step 2 now show the site's own MCP address with a copy button and the three steps for claude.ai or ChatGPT, first. The one-click desktop installs, the copy-to-agent prompt, Respira AER and the offline key path are unchanged and follow below it. Pinned by tests/standalone/activation-browser-door.php.

  • SEO titles and descriptions reach All in One SEO again. On a site with All in One SEO 4 or later, the seo fields of update_page and update_post were saved where All in One SEO 3 kept them, years ago. The current All in One SEO keeps each post's SEO in its own table and never reads the old place, so the write said success while the page title, the meta description and All in One SEO's own editor stayed as they were. Title, description, canonical URL, robots, Open Graph and Twitter fields now go through All in One SEO's own save, only the fields you send change (a focus keyphrase or schema set in the editor stays), and reading a page's SEO back shows what All in One SEO shows. A draft duplicate starts with the live page's All in One SEO settings, and approving it carries the new ones to the live page. All in One SEO 3 sites keep the old behaviour. Tested on a real site with All in One SEO 5.0.3: the new title, description, noindex, canonical URL and Open Graph title appear in the page's head and in All in One SEO's editor.

  • A generic section on a Beaver Builder page shows its content. The shape agents send to every builder, a section holding a heading and text, was saved on Beaver with "section" and "text" as module names. Beaver has neither, so the page showed nothing but its title while the write said success. A generic section or container is now a Beaver row with the column group and column Beaver needs, columns sent without a width share the row, and generic types become Beaver's own modules (text and paragraph the Text Editor, image the Photo module, toggle the Accordion, divider the Separator), each named in a generic_type_mapped warning. A type the site has no module for, such as an accordion on Beaver Builder Lite or a spacer anywhere, now stops the write with respira_beaver_unknown_module_type and the list of modules the site has, and the page is left as it was.

  • Custom JavaScript on an Elementor page waits for approval. elementor_add_custom_js wrote its script straight to the live page, with no draft duplicate and no snapshot, so new JavaScript went live with no way back. It now works like every other page write: on a published page the script goes on a draft duplicate for a person to approve, a snapshot is taken first, and the answer says which post it wrote to and which snapshot to restore.

  • Editing the text of a library block keeps the block. Changing the text of a Kadence Advanced Heading, a Spectra button or another block library block with update_element saved the bare text in place of the block's markup, so the editor flagged it as invalid and the page lost its styling. The new text now goes inside the block's own markup, and an attribute that held the same text (Spectra's button label) changes with it.

  • The block catalogue lists what each library really ships. Spectra Legacy registers most of its blocks only in the editor, so the catalogue your AI reads was missing its container, heading and button blocks; they are listed now, as are Kadence's accordion panes and tabs. Kadence no longer lists an image overlay block that does not exist and spells its table of contents block correctly, GenerateBlocks lists its current Element, Media and Query blocks, and GreenShift lists its 31 free blocks instead of seven that exist nowhere. Pages built with Spectra Legacy are also no longer reported as full of unsupported blocks after a write.

  • GreenShift elements without styles open cleanly in the editor. An element written with a localId but no styles carried that id as a class, which GreenShift's editor does not save, so it flagged the block as invalid. The class is now written only on styled elements, as GreenShift does.

  • Two block editor slips that showed as invalid content. A heading sent with a tag setting (h1) saved an h1 while the block said level 2, and a section with an anchor saved its wrapper without the id. Both now save the way the block editor does. build_page also stopped reporting text with an ampersand as not saved, when it was on the page as "&".

  • Exhale on Flatsome writes Flatsome's own shortcodes. Converting HTML to Flatsome wrote the page as [container], [text], [heading], [image] and [leaf], none of which Flatsome registers, so the page showed them as text with curly quotes inside. The restyle path now writes [section], [row], [col], [row_inner], [col_inner], [ux_text], [ux_image], [button] and [divider], and keeps anything Flatsome has no element for (forms, tables, icons, an image that is not in the media library) as written in [ux_html]. Before anything is written, every tag is checked against the shortcodes Flatsome registers, and a page that would carry one it does not is refused instead of saved. Reported by M.T.

  • Fidelity mode runs on Flatsome. A designed page now converts in fidelity mode on Flatsome, as it does on Divi, Elementor, Bricks and the others: one root section carries the page, the source sections, rows and boxes become Flatsome rows and columns with their own classes and ids, each element keeps its markup and its classes in an HTML element, forms stay real forms, and the page's stylesheet travels with it, scoped to the page. Until now a fidelity request on Flatsome quietly fell back to the restyle path. Reported by M.T.

  • Approving a change says when a cache in front of the site may still show the old page. Approval clears the page caches it can reach, but a server or CDN cache (LiteSpeed, nginx, Varnish, Cloudflare) sits outside WordPress. When the request shows one, the approval now names it in Respira, Changes, on the approve bar of the preview, and in the approve response an agent reads, instead of reporting a bare success while the public page still serves the old copy. Reported by P.L.

  • The browser connection block on Home is readable. On the Respira Home screen a freshly linked site lands on, the claude.ai and ChatGPT address block showed without its styling: the "copy the address" button was dark text on the dark card, so it could not be seen, and the steps were centred. The block now carries its own styling, so it looks the same on Home as on Setup.

  • The approve bar finishes after an approval that names a cache. When an approval on the preview page said a cache in front of the site may still serve the old page, the bar kept saying the change was pending, the approve button read "Working..." and both buttons stayed disabled, although the change was already live. The bar now says the change was approved and published, keeps the cache note, and offers to open the live page.

  • Page and post SEO is in the tool list, and SEO plugin keys sent as meta no longer pass in silence. update_page and update_post took an seo object, but no tool list showed it, so an agent wrote All in One SEO's _aioseo_title and _aioseo_description through meta. Those are a copy All in One SEO keeps for other plugins and never reads, so the write said success and the page title did not change. The seo object is now in both tool lists, with title, description, focus keyphrase, canonical URL, robots, noindex, nofollow and the Open Graph and X card fields. All in One SEO 4 keys sent through meta are written through All in One SEO's own save and the response says so in meta_warnings. Keys of an SEO plugin the site does not run are stored as sent, with a warning that they change nothing and which seo field to use. Common spellings such as canonical and meta_description are understood, and an seo field Respira does not know is named instead of dropped.

  • An image built on a Beaver Builder page shows the image. A generic image sent to build_page or inject_builder_content on Beaver became a Photo module without saying where its picture comes from, so Beaver showed its 1x1 placeholder with no alt text, an image sent as url became the photo's link, and the response still said the image renders. An image URL (src, url, image_url) is now a URL photo, a media library id (image_id) a library photo with the address Beaver renders from, and the alt text lands where Beaver reads it, as update_element already did. A photo with nothing to show now comes back with a beaver_photo_not_set warning that says how to set the image, instead of a claim that it renders.

  • A Spectra Legacy image without a media library id opens cleanly. An image sent with only an address was saved with an empty uag-image class, which Spectra's own save leaves out, so the block editor logged a validation failure and quietly migrated the block. The class is now written only when there is an id.

  • inject_builder_content follows a page's block library. Agents often name builder "gutenberg" for any block page. On a page that already had Kadence Blocks, Spectra, GenerateBlocks or GreenShift blocks, inject_builder_content then wrote new elements as WordPress core blocks and said nothing, while build_page and the add_* tools wrote the library's blocks. It now follows the page's library too, says so in library_blocks_hint, and lists the library's elements in library_blocks as build_page does. Core block names (core/heading) still write core blocks.

October 15, 2026
MCP server v8.6.2 Patch October 15, 2026 respira_elementor_add_custom_js says where the script goes
  • respira_elementor_add_custom_js says where the script goes. The tool description now says that, like other page writes, a published page gets the script on a draft duplicate to approve and a snapshot is taken first, with target_id and snapshot_uuid in the answer. Needs the plugin release that routes the call that way; older plugins write to the live page.

  • Agents are told that Spectra, Kadence Blocks, GenerateBlocks and GreenShift write their own blocks. The block library guidance, the native_generation note in respira_get_builder_info and build_page's builder parameter now say that passing builder "kadence", "spectra", "generateblocks" or "greenshift", or writing to a page that already has the library's blocks, writes the library's blocks, and that anything a library has no block for comes back as a core block in a library_core_fallback warning. Needs the plugin release that ships the block library emitters; on older plugins new elements stay core blocks.

  • respira_update_page and respira_update_post list seo. Page and post SEO worked only as an argument the schema never mentioned, so an agent that followed the schema wrote SEO plugin keys such as _aioseo_title through meta, got success, and the page did not change. Both tools now declare seo with title, description, focus_keyword, canonical_url, robots, noindex, nofollow and the Open Graph and X card fields, written to whichever SEO plugin the site runs, and the meta description says to use seo for SEO. respira_analyze_rankmath now points at the same seo object.

  • The block library guidance matches inject_builder_content. It now says that builder "gutenberg" on a page that already has a library's blocks writes that library's blocks (with library_blocks_hint saying so), that inject reports library_blocks like build_page, and that core block names write core blocks on a library page. Needs the plugin release that ships the change; older plugins write core blocks in that case.

October 13, 2026
WordPress plugin v9.1.33 Patch October 13, 2026 Builders are detected however early detection runs
  • Builders are detected however early detection runs. Each builder used to be detected only once it had booted in the current request, so a check that ran before the theme loaded saw no Bricks, no Divi on a renamed or child theme, and no GreenShift, then cached "block editor only" for an hour. Detection now also reads what WordPress has stored: the active plugins and the active theme with its parent. Covers Elementor, Divi (Divi 4 and 5, Extra, the Divi Builder plugin), Bricks, Beaver Builder, Brizy, WPBakery, Thrive Architect, Flatsome, Kadence Blocks, Spectra, GenerateBlocks, GreenShift, SeedProd and Visual Composer. An add-on alone (divi-pixel, bricksable) does not count as the builder. A detection run before the theme has loaded is no longer cached.

  • The weekly license check reports what the site runs. The builders and active plugin slugs used to reach respira.press only on activation and on a tracked tool call, so a site licensed earlier showed no builder on the dashboard. The license heartbeat now carries both lists.

  • A theme switch reaches the dashboard within minutes. A site that connected on a block theme and then switched to Divi kept showing "Gutenberg" on respira.press for a day, and a support reply drafted from that told the owner Respira only saw the block editor. Detection on the site was right; nothing sent it. I now send a fresh report a minute after a theme switch, a plugin activation or deactivation, an update, and once after Respira itself updates, from a request of its own so the new theme is loaded. The same lists are never sent twice, and the report never touches the licence state. Every tool call now carries the builder list too, read tools included, where before only a few write paths did. Turning usage reporting off in Settings stops the extra report.

  • Importing design tokens no longer lets a brand token take over a core color role. Before this, a brand token whose name ended in a role word, such as color.brand.dark-bg or button-primary-bg, overwrote the matching role (bg, ink, accent or border) while readiness still said ready. Now a token maps to a role only when its whole name is a role, like color.bg or color.roles.bg, and every other token keeps its own key under brand. When two tokens in one import claim the same role, I keep the first, store the other under brand and list both under conflicts. Any role an import changes is listed with its old and new value, and readiness flags it for review. Reported by D.W.

October 3, 2026
WordPress plugin v9.1.20 Patch October 3, 2026 JetEngine listings take element writes again
  • JetEngine listings take element writes again. update_element and batch_update on a JetEngine listing died with "array_map(): Argument #2 must be of type array, string given" before anything was written, and left an unapproved duplicate behind. JetEngine answers get_post_meta for its listing posts with a plain string where WordPress returns a list. The meta read now accepts both, and the write receipt can no longer be the reason a write fails. Reported by G. on two sites.

  • Elementor append works with Elementor's own format. mode append merged the page's existing (already simplified) elements with the new native ones, then decided how to read the whole list from the first node, which is always an existing one. The new section was never converted and the untyped-widget tripwire refused it. Each node is now read on its own; the tripwire still refuses a genuinely untyped widget, and its message names the first offending element's path, id and type. Reported by M.R.

  • Custom CSS on block pages is stored and renders. update_page, update_post and update_custom_post silently dropped custom_css on Gutenberg, Kadence, Spectra, GenerateBlocks and GreenShift pages while reporting success. It now goes to _respira_page_css, printed after the fidelity stylesheet, re-pointed to the duplicate's id for the preview and back to the original's on approval; the snapshot and write receipt cover it. A builder with nowhere to keep page CSS refuses with respira_custom_css_unsupported before any duplicate is made. Reported by J.G.

  • Divi Theme Builder page templates keep the global areas. A page-specific header or footer made through Respira went into a new template with its other areas empty, and Divi shows the theme's own header or footer in an empty area; a second layout for the same page went into a second template that lost the tie. New templates now carry the global layouts, a second layout for the same conditions goes into the existing template, updates clear the caches Divi's own save clears and list which templates render the layout, and list_theme_builder_templates warns about a dropped global area or a shared condition. Reported by C.P.

  • Divi 5 global modules use Divi's shape. save_divi_library_item now wraps the item in divi/placeholder, and the page reference carries blockName and localAttrs, as Divi's Save to Library does. A global text module no longer blanks every other text module on the page, a global code module renders, and apply_divi_library_item places the reference inside the page's wrapper. Unparsable block attributes are refused on save as they already were on update_custom_post.

  • A date set on a page duplicate survives approval. update_page wrote the explicit-date marker on a variable it never defines.

  • An ability refused by its own plugin says why. WordPress's ability_invalid_permissions arrived as a bare 500. Respira now runs the plugin's permission check again with the same input and user and answers 403 with the ability, the WordPress user and roles, the plugin's own reason and the fix when it is known (WPForms create-form: wp-admin, WPForms, Tools, AI MCP, Enable MCP Write Access). search_abilities shows the same answer as permission_check. Reported by S.G.

WooCommerce add-on v4.0.1 Patch An agent orders summary could 500 the whole site on hosts that answer plugin bootstrap before WooCommerce finishes waking up
  • An agent orders summary could 500 the whole site on hosts that answer plugin bootstrap before WooCommerce finishes waking up. It now waits for WooCommerce's own readiness signal before touching order data, and falls back to an honest empty summary instead of a fatal if that signal never comes.

  • The Observe governance profile closed only 42 of 277 tools despite its own description promising every write closed. It computed its blocked set from an eleven-family category registry, and a tool in no family was never considered; it now derives the blocked set from each tool's own declared read/write flag instead, closing 162 tools including every WooCommerce write. Reported by D.L.

  • add_sale_badge and add_low_stock_badge were flagged read-only while actually writing, which meant a governance profile closing writes left them open and the transport withheld the retry fields that make an interrupted write safe to repeat. Both now correctly declare themselves as writes.

  • convert_html_to_builder with no builder specified threw a type error on any block-library site (GreenShift, Spectra, Kadence Blocks, GenerateBlocks) instead of converting, because auto-detection asked "is this Gutenberg" by name instead of by relationship; naming the builder explicitly masked the bug by skipping detection. Also fixed: a successful token mapping was reported as both mapped and unmapped in the same response, a comparison bug not a data bug.

  • All five WooCommerce card/checkout tools now declare edit_target and verification_marker in their schemas; the backend has always forwarded both, but no schema advertised them, so they were unreachable from any client.

Showing the most recent 148 releases. Older entries are in the release feed. Every release follows semver.org.