Release notes · v4.2 → v9.3.10

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.
820 Releases shipped
15 With a landing page
9.3.10 Latest stable
362 days Since v1.0
Product
Filtered Avada · 5 releases See Avada MCP → Clear
November 3, 2026
WordPress plugin v9.3.4 Patch November 3, 2026 Corrected MCP builder ID aliases and omitted batch actions, made compact element summaries explicit about truncated content, and returned suggested identifiers in the accepted write format
  • Corrected MCP builder ID aliases and omitted batch actions, made compact element summaries explicit about truncated content, and returned suggested identifiers in the accepted write format.

  • Added the missing nested WordPress REST schema type that triggered core validation warnings in Studio.

  • Clarified that SEO analysis measures stored builder content, and separated empty image alt attributes from missing alt attributes.

  • Preserved Avada Layout conditions and slots when the stored JSON is double-encoded.

November 1, 2026
WordPress plugin v9.3.1 Patch November 1, 2026 Say where a site template applies, without opening wp-admin Security Every ability run meets the site's rules, on every route (and 2 more)
  • Captain Picard. Part of the October release, in memoriam Sir Patrick Stewart, 1940 to 2026. The pledge in 9.3.0 stands. The month's work is told at https://www.respira.press/make-it-so.

  • Say where a site template applies, without opening wp-admin. Two new tools, get_template_conditions and set_template_conditions, read and set where a header, footer, single, archive or popup template shows: the whole site, the front page, post types, archives, terms, single pages, search, 404 and excludes, as far as each builder has them. Conditions come back in the same plain words on every builder, with the builder's own value beside them, and the builder itself decides which template wins when two match. A write changes the live site at once, so it needs the person's yes first (confirm_live_edit). It takes a snapshot, reads the result back and requests real pages to confirm, and restore_snapshot undoes it in one call. Anything a builder cannot express is refused by name and nothing is written; a native rule with no shared word stays as it is. Checked with real page requests on Bricks 2.3.4 and 2.4.3, Divi 4.27.8 and Divi 5.13, Breakdance 2.8.3 (free), Oxygen 6.1.1, Oxygen classic 4.9.6 and 4.9.7, Beaver Themer 1.5.3 with Beaver Builder 2.11.1, Avada 7.16.2, YOOtheme Pro 5.0.50, free Brizy 2.8.16, and block theme templates on Twenty Twenty-Five.

  • On Divi, a template can be switched off, and its header, body and footer set. set_template_conditions takes template_settings for that. Two templates can share one layout when you ask for it with share_layout, and the answer names every template that holds it, because an edit then reaches all of them. A list that leaves out an existing exclusion is refused, so pages you kept out of a template stay out unless you agree.

  • A safe homepage switch. switch_front_page makes a published page the homepage and get_front_page shows which page it is now. On a Yoast SEO site the switch also fixes what Yoast stored for both pages, so the new homepage no longer prints the old address as its canonical, sets noindex on the old homepage and clears a stale one on the new. It clears page caches, then requests both pages and reads what they print. A step that fails is put back at once; a check that fails answers with the undo. Checked on Yoast SEO 28.7.

  • More of Yoast SEO's settings. get_yoast_settings and update_yoast_settings cover crawl cleanup, llms.txt, site representation, social profiles, the default social image, archives, an author's noindex, and cornerstone and schema type on many posts at once. With regenerate_llms_txt it rewrites llms.txt at once instead of waiting for Yoast's weekly run.

  • See what Code Snippets runs, read only. list_code_snippets gives each snippet's name, scope, type, state and whether it has an error, without the code. Respira does not write snippets: saving one runs its PHP on the site.

  • Sort Divi posts before a template change. classify_divi_posts tells real designs from plain text in Divi 4 and Divi 5 posts, with the reasons, so a designed post is not moved onto a template by mistake. It changes nothing.

  • The real memory limit. get_site_context and the diagnostics now show the memory PHP really has beside WP_MEMORY_LIMIT, and say plainly when the host holds it lower.

  • Every ability run meets the site's rules, on every route. Switched-off tools, approvals, Observe and Publish only now hold when a Respira key runs an ability through WordPress's own abilities route, the MCP Adapter or WebMCP, and Activity names the key that made the call. Before, a full-access key could run switched-off tools there.

  • A Respira key can no longer create or change application passwords. Revoking one still works.

  • Snapshots and meta reads no longer show what they should not. get_snapshot and meta reads no longer return custom PHP from Breakdance and Oxygen template settings, a Bricks template password, or the raw rows of a delete snapshot. Reading a Bricks template through the page, post or conditions tools no longer shows its password to a read-only connection. Restores still use the real bytes.

  • Respira's own update through run_updates really runs. It answered success, then failed quietly on cron with "You do not have permission to update plugins". It now runs with the permission checked when you asked, for Respira only. The first answer says scheduled, not updated, list_updates shows how it ended and why, and Activity records it.

  • Bricks pages can no longer be taken down by one bad setting. Every page write refuses four Bricks settings in a shape that would give every visitor a critical error, says what shape to send, and writes nothing. A value already on the page does not block an edit elsewhere; it comes back as a warning.

  • A write that saved before an error says so. update_element, inject_builder_content, build_page and apply_builder_patch answer write_landed: true when the change was saved before the request failed, and tell the agent not to send it again.

  • Site rules stop bulk runs and the add_ shortcuts too.* An item a rule protects comes back refused and unchanged, and a bulk run no longer writes an item whose snapshot could not be saved.

  • Setting Bricks conditions no longer erases the template's other settings.

  • An Avada condition for posts in a category now matches. It was stored with a type Avada does not read. list_avada_layouts also shows Layouts in Avada's own order.

  • Restoring a whole Oxygen 6 template brings its conditions back, as it does on Breakdance. Divi snapshots now hold Divi's real template keys.

  • run_security_audit no longer reports a false core checksum mismatch after a site's language changes. It still flags a changed file.

  • Over the hourly rate limit, the answer says when calls work again and which batch tools to use, and the plugin's own endpoint no longer asks the client to sign in again.

  • update_option on WPLANG installs the language when it is missing, as Settings, General does.

  • read_debug_log works for an administrator on a site with DISALLOW_FILE_EDIT and reads a host's linked debug.log.

  • update_page and update_post take a page template, reads say when a blank template hides the site header, and a template or custom CSS sent alone can be rolled back.

  • update_theme_builder_template takes custom_css on Divi 4.

  • Page custom CSS keeps its escapes, such as content:"\201C".

  • save_design_direction accepts a page address in sources.

  • The option tools on the plugin's own MCP endpoint take the option name as name, option_name or key.

  • Exhale on Divi 4 writes native modules. Images become Image modules, an image with a title and text becomes a Blurb, and wrappers fold into Divi's rows and columns. Only forms, inline SVG and links around blocks stay in a Code module. On my Divi 4 test page the result has no Code module, where 9.3.0 used 12.

  • Oxygen classic: creating a template with a Respira key fails (404), because Oxygen only registers templates for a signed-in user. Create it in Oxygen, then set its conditions with Respira. This was true before 9.3.1 too.

  • Oxygen classic or Breakdance with a block theme active: a write needs builder "oxygen" or "breakdance" in the request.

  • Breakdance Pro archive rules have not been run on a real Pro licence yet.

  • Template conditions on Elementor Pro, Brizy Pro, GeneratePress Premium, Kadence Pro, Thrive, Blocksy Pro and SeedProd Pro answer plainly that they are not supported.

  • Exhale on Divi 4: on phones, columns with padding can overflow, as in 9.3.0.

  • invoke_ability sent again with no call id can return the earlier answer for up to 10 minutes. Give each run its own _respira_call_id.

  • Server-side PHP inside builder page content, such as a Bricks Code element, is still readable through the read tools.

  • If a PHP fatal error hits while WordPress swaps the plugin files during any update, the site can be left with a .maintenance file and an empty plugin folder. Delete .maintenance from the site root, then install the Respira zip again from wp-admin or by SFTP.

  • Every release is listed at https://www.respira.press/releases.

October 18, 2026
MCP server v8.6.6 Patch October 18, 2026 The README says what is new in 8.6
  • The README says what is new in 8.6. The npm page now lists full Yoast SEO support, publishing bound to the version a person approved, the Publish only key, Avada, inserts that leave the rest of a page alone, native block-library blocks and the busy-site retry. No code changes.

October 15, 2026
WordPress plugin v9.2.6 Patch October 15, 2026 A site runs at most six Respira calls at once, and says so when it is full
  • A site runs at most six Respira calls at once, and says so when it is full. A managed host cut a site off because AI agent calls held its PHP workers until the host's time limit. The calls themselves were quick; what held the workers was waiting: agents send tool calls in bursts (up to 40 per site in five seconds), and every call in a burst takes a PHP worker while it waits for the others. Now, when six calls are already running, the next one is answered straight away with respira_site_busy, how many calls are running, and how long to wait (retry_after, also sent as a Retry-After header). Nothing runs for a busy call, so sending it again is always safe, writes included, and the Respira MCP server does that by itself. Reads keep one of the six slots for themselves, so a burst of writes can never stop an agent from checking its work. A call that ends in a crash or an exit frees its slot at once; a process the server kills outright frees it once PHP's own time limit has passed. The limit covers AI calls only: the site's pages, wp-admin and other plugins are never counted. To raise or lower it, set the respira_mcp_max_concurrent option (0 turns it off), the RESPIRA_MCP_MAX_CONCURRENT constant in wp-config.php, or the filter of the same name. respira_diagnose_connection shows the limit and how many calls are running.

  • Avada is a supported builder. Pages built with Avada Builder are read and written as Avada's own shortcodes: containers, rows, columns and Avada elements such as titles, text blocks, buttons, images, toggles, tabs, checklists and code blocks. Your AI can find, change, move and remove a single element, add elements with the add_* tools and build whole pages, and loose elements get the container, row and column Avada needs. Everything I do not model, a third-party shortcode, a newer Avada element or a Library global, is kept exactly as it was, byte for byte, and a write that would not read back the same way is refused before anything is saved. After every write I clear that page's compiled Avada CSS so the change shows, and the page's edit link opens it in Avada Live. Tested on a real Avada 7.16.2 site with Avada Builder 3.16.2: pages render, open in Avada Live, and after a save there Respira still reads and writes them byte for byte. Pricing Table, Tabs and Testimonials were rebuilt in Avada 7.16 and are marked experimental; check those in Avada Live after a change.

  • Avada support checked against Avada 7.16.2's own code. Clearing a page's compiled CSS now runs Avada's own per-page reset, the one Avada runs when you save a page, instead of a copy of it that also deleted a cache entry Avada no longer uses. A write that holds an expanded Library global (an element marked with fusion_global, the form Avada's editor works on) is refused before anything is saved: Avada would have copied it over that Library element on every page that uses it. Avada only lists its elements inside wp-admin and its own editor, never on the requests Respira answers, so the element list can now come from a scan of a real Avada Builder (scripts/generate-avada-scan.php writes it) with every element, its child items and every setting with its type, default and allowed values, and the builder info says which source it used. Writing pages on a real Avada site also showed two slips, now fixed: a checklist sent as plain words put each word into its icon setting as well as its text, and a section sent by its generic name was written as an old-style container instead of a flex one. Tabs joins Pricing Table and Testimonials as experimental, since Avada 7.16 rebuilt all three. A Library global is now placed at the level of what it holds: a saved container goes to the top of the page as it is, instead of being wrapped in a new column, where Avada would have nested a container inside a column.

  • Your AI can work with Avada's design system, Layouts and Library. It reads the global colour palette and the five typography sets with the CSS variables elements use (var(--awb-color5), var(--awb-typography1-font-family)), and changes them through Avada's own Global Options, then clears Avada's caches so the whole site shows the change. Because that restyles every page at once, it asks you first, takes a snapshot, and a restore puts the old values back and clears the caches again. Design tokens from a design direction land in the Avada palette as new colours and never overwrite one you already have. Avada Layouts can be listed, read, created and changed: which header, page title bar, content and footer section each Layout uses and which pages it applies to, the Global Layout included, and the sections themselves can be read, built and edited. A new Layout without conditions and a new section start out showing nowhere, so you can look at them in Avada Live first; changing anything already live needs your yes. The Library can be listed and read, with the exact piece to place in a page, and a global item is placed the way Avada places it, so it keeps following edits to the original. Edits to a Layout Section clear Avada's caches for the whole site, as Avada does itself. All of it was checked on a real Avada 7.16.2 site with Avada Builder 3.16.2: a global colour change rendered on the page, a new footer went live site-wide and opened in Avada Live, and a placed Library item followed an edit to the original. Layouts and the Library need Avada Builder active.

  • Elementor 4.3's accordion, background video and list elements can be built and edited. Respira knew 20 of Elementor's v4 element types and refused any write that added or changed one of the 15 that came with 4.3: the accordion (e-accordion and its item, header, title, icon and content slots), the background video (e-background-video with its content, controls, play and pause parts) and the list (e-list, its items, markers and text). All 35 are now modelled from Elementor 4.3.5's own code, with the props each one takes and the children it allows. An accordion item can be sent as { type: "e-accordion-item", title: "Question", children: [...] } and Respira builds the header, title, icon and content slots the way Elementor's editor does; list items can be plain strings. A label that lives in a child paragraph (a tab, an accordion title, the play and pause buttons) is written there when you send content to the slot. The list only exists on a site that has Elementor's e_list feature turned on, which Elementor ships hidden and off, so on other sites a list is refused with that reason instead of being saved and rendering nothing.

  • Inserting into a Divi page no longer rewrites the rest of it. Adding content with inject_builder_content (mode append, a target_path, or the new after_element_id / before_element_id) used to read the whole page into a tree and write the whole tree back. On Divi 5 that pipeline treated every existing block as fresh input: a global module reference at the top of a page (a full width global hero) was wrapped in a new section, row and column and rendered boxed, and a third party form block lost its settings. On a page still stored as Divi 4 shortcodes, a Divi Supreme carousel tag was turned into a section. Now only the new content is serialized and spliced into the stored page at one position; every other byte, including global module references, third party blocks and modules Respira does not know, stays exactly as stored, and the plugin checks that before and after the write. The response reports the inserted node's path and ids, the bytes inserted and the bytes left untouched. A page stored as Divi 4 shortcodes gets shortcodes whatever Divi version the site runs: a Divi 5 shape and the generic shape (section, row, column, then text, heading, button and the other module names) are converted the same way a full-page write converts them, in every insert mode, and a type with no Divi 4 module is refused with nothing written.

  • Chunked builds for Divi 4 and Divi 5. A large page can be built as a sequence of small inserts: the frame first, then rows and modules by path (target_path plus position, into a section or a column). A chunk_id makes a retried call a no-op instead of a duplicate, and a session_id from begin_session keeps one recovery snapshot per page for the whole build. Elementor and Bricks accept target_path inserts through the generic tree graft; get_write_capabilities reports inserts_at_path per builder, and other builders answer respira_target_path_unsupported with the list. The site's own MCP endpoint, the one claude.ai, ChatGPT and other remote connectors use, declares these parameters (target_path, position, after_element_id, before_element_id, chunk_id, session_id) and the insert and chunked build guide on inject_builder_content, word for word as the Respira MCP server does, so an agent on any connector learns it can insert instead of rewriting the page. On a builder without target_path the refusal names the builders that have it (it listed none), and get_builder_info accepts the short slug ("beaver" now finds Beaver Builder instead of answering that the site has no such builder).

  • PageSpeed audits and rendered design checks run in the background. run_pagespeed_audit can take two minutes and check_design with rendered:true about one, holding a PHP worker and an open connection the whole time. On the site's own MCP endpoint they now answer at once with a job_id, run in the background like a backup does, and respira_get_job_status returns the result when it is ready. An agent that needs the answer in the same call can send _respira_async: false. Through the Respira MCP server nothing changes for the agent: the server waits for the job and returns the finished audit. A design check of content, without rendering, is quick and still answers directly.

  • The post editor opens again on PHP 7.4. On sites running PHP 7.4, opening a post or page in wp-admin since 8.8.28 could answer with "There has been a critical error on this website." The image fallback added in 8.8.28 (when a network refuses WebP, convert the picture to a format it allows) handed WordPress a value it can only take as a variable, and PHP 7.4 then refused to load Respira's main file on the editor screens. Front end pages and AI calls were not affected. On PHP 8 the same line failed each time it ran, so that fallback never worked on any PHP version; it does now. A new test checks every by-reference argument in the plugin and compiles every file on PHP 7.4 with WordPress's functions loaded first, the way wp-admin loads them.

  • A background job runs once. On hosts where Respira starts background jobs with a request to the site itself (Apache with mod_php, some LiteSpeed setups, PHP's built-in server), a job that finished in under about a second could run a second time a minute later: an append sent with _respira_async landed twice, and a PageSpeed audit spent its free quota twice and was then reported as rate limited although it had worked. The request that queued the job wrote an old copy of it back after the job had already run, so the job looked queued again. Every write to a job record now starts from the record as it is in the database, and only if nobody changed it in between, so a finished or running job can never be put back in the queue. Present since 9.1.0; this release makes PageSpeed audits and rendered design checks run in the background by default, which made it common.

  • A write on a draft no longer says the page passed a check it never had. The render check cannot fetch a draft (its preview needs the author's login), so it skips it, but the answer said render_validator_state "pass". Draft duplicates are how Respira edits a published page, so most writes said "pass" without anything being looked at, including a page whose new modules showed nothing. A draft now reads "unverified" with the reason not_published and a note that says to open the preview; render_validator_pass is null, never false, and nothing is reported as a partial write.

  • A heading sent with a title shows its words on Breakdance, Oxygen 6 and Beaver Builder. Most agents send a heading as type heading with its words in title. Breakdance stored them where its Heading does not read, so the heading was empty; Oxygen 6 wrote its placeholder "Heading"; Beaver kept them in a field its heading module ignores. The write reported success each time. The title now goes to the field each builder renders; text, when sent, still wins.

  • Calls that another plugin stops are reported as stopped. When another plugin's hook ended a request with wp_die(), for example a nonce check meant for wp-admin that runs on every post save, the agent got WordPress's error page instead of an answer, and Respira's own record of the call stayed open with no cause. Approving a duplicate and deleting a post were the calls this hit most, because both save or trash a post. The agent now gets a proper answer naming the message (respira_mcp_halted) and is told to read the page before trying again, and the record is closed. Every other way a call can end, including an error nobody caught, now closes its record as well.

  • Pages Respira writes on Elementor 4.3 can be saved in the Elementor editor. I ran Respira's output through Elementor's own save and it refused most of it: a button link, an image, an SVG icon and a video source were stored in a shape Elementor 4.3 no longer accepts ("Settings validation failed. link: invalid_value"), so the page showed fine but the editor could not save it. Every style Respira wrote carried an empty breakpoint, which Elementor's save quietly drops, so colours and sizes vanished the first time someone pressed Update. These are now written in the shape Elementor validates, and a page written by an earlier Respira is repaired on its next edit. Before storing a new or changed v4 element, Respira now asks the running Elementor to check its settings the way its own save does: a value it would refuse, a value outside its allowed list, or a setting it does not have is refused with the element and the setting named, so nothing is saved that Elementor would throw away.

  • Element ids look like Elementor's own. The container Respira adds around loose widgets got an id like respira_container_1791993247_8a23bce, and new v4 elements one like respira_f98c36f4, which Elementor reads as a number and cannot. Two elements built in the same call could also share an id. New ids are now seven hex characters and unique on the page; existing ids are kept, so anything that finds an element by id still finds it.

  • A text edit aimed at an Elementor v4 container is refused instead of lost. Sending content to a flexbox, an accordion or an accordion item wrote a setting none of them read and reported success. It now answers with the element type and asks for the heading, paragraph or button inside it. Settings such as loop, autoplay or state on a video were mistaken for CSS and went into the style map; they are now written as the element's settings.

  • Reads and writes count the elements. If a write would store fewer elements than it received, nothing is written and the answer gives both counts (respira_children_dropped). If a read returns fewer elements than the page holds, the extract answer says so. Pages built with classic Elementor sections, columns, containers and widgets read and write exactly as before.

  • A full Divi 5 rewrite keeps the blocks it did not change. inject with mode replace, update_module and the add_* tools re-emit the whole page. Each top level block the write handed back unchanged is now stored as Divi saved it, byte for byte, and a rewrite that would restructure one of them (for example wrap a global module in a section) is refused with respira_untouched_block_rewritten and writes nothing. A global module reference is never wrapped by the scaffolding, at any level, and blocks outside the divi namespace pass through the top level untouched.

  • Reading a Divi 5 page returns global module references as references. extract_builder_content handed the agent the library item's blocks in place of each divi/global-layout reference, because Divi's own block parser, loaded by that endpoint, expands references while reading. An agent that wrote such a tree back stored a detached copy and the global link was gone; that is how a full width global hero came back as a plain section. The adapter now reads stored blocks with WordPress's own parser, so a reference stays a reference on every read and every write keeps it. To change a global module, edit the library item.

  • Replacing a page saved by the Divi 5 Visual Builder validates again. The validator treated the placeholder root Divi wraps a page in as a parent, so every section of such a page was "not top level" and a full replace of it was refused. The placeholder is now transparent, and a global module reference directly under a section or row is accepted.

  • A slow page check no longer marks a good write as failed. After each write Respira loads the page to check it renders. On slower hosts, staging sites especially, that request often ran past its 4 second limit, and the write came back with render_validator_pass: false, partial_write: true and "cURL error 28" as the error, on pages that were fine. A check that gets no answer now reports render_validator_pass: null with render_validator_state: "unverified", a reason (preview_timeout, preview_unreachable or request_time_budget) and a plain note, and the timeout error is no longer reported as a render error. The check waits 6 seconds instead of 4, a site can change that with the respira_render_validator_timeout filter up to 10 seconds, and the check never runs into the time the host allows the whole request. A page that answers with an error status or a fatal error page still fails as before. The plugin update health check still treats no answer as a problem.

  • Converting a page for "divi5" works on Divi 5 sites. Respira Exhale refused every page sent with builder "divi5", saying "the divi5 builder is not active on this site", on sites running Divi 5. Divi was detected correctly; the name "divi5" just reached no part of Respira, and any name it could not find was reported as an inactive builder. The Divi adapter now answers to divi5 and divi4 as well. When the name asks for Divi 5 and the site runs Divi 4, the answer says so, gives the Divi version, and suggests builder "divi". When it asks for Divi 4 on a Divi 5 site, the page is written as Divi 5 with a warning saying why. A builder name Respira does not know is now reported as unknown, not as inactive.

  • Edit links open the page in its own builder. The link Respira gave for editing a page was WordPress's edit link, which opens the block editor. A Divi 5 page there shows every section as an unsupported block, and a customer reasonably took the page for broken. Every edit link Respira returns (build_page, Divi page templates, Theme Builder layouts, the duplicate offered before a live edit, Respira Exhale, translations, and the approvals and feedback screens in the plugin) now opens Divi pages, 4 and 5, in the Divi Visual Builder, Theme Builder layouts in the Theme Builder, and Elementor, Bricks, Beaver Builder, Breakdance and Oxygen 6 pages in their own editors (Breakdance and Oxygen 6 through the same link their own "Edit in Breakdance" and "Edit in Oxygen" buttons use). Other pages, classic Oxygen included, keep WordPress's edit link.

  • Divi 5.15 Components and Slots survive every write. In Divi 5.15 a Component (the new name for a global module) can carry the page's own copy of its content, including Slots that hold content for that one page. A full replace of a page holding one was refused as invalid ("row should be inside a section"), and editing anything inside a Component stamped Respira's ids and a version number onto blocks that belong to Divi. Now extract, replace, append, insert at a position and element updates keep a Component reference, its Slots and every attribute exactly as stored, and an edit inside a Slot changes only the block that was edited. Verified on a Divi 5.15.1 site: the Component and its Slot content still render after each kind of write.

  • The Divi 5 module catalogue is refreshed to Divi 5.15.1. It now lists 117 module types, including the new Slot module and the Gravity Forms and Imagely Gallery modules, which Divi only registers when those plugins are active. The catalogue generator can now merge a scan of a live site with Divi's own module files, so a site without WooCommerce or Gravity Forms no longer drops those modules from the catalogue.

October 15, 2026
MCP server v8.6.1 Patch October 15, 2026 Avada in the builder lists
  • A busy site is retried, not reported. A site on a plugin with the new per-site call limit (the release after 9.2.4) runs at most six Respira calls at once and answer the next one with HTTP 429 respira_site_busy and how long to wait, having run nothing. Claude Code and other clients send tool calls in parallel, so this is ordinary: the server now waits what the site asked, plus up to a second of jitter so a burst does not come back as one burst, and sends the same request again, up to three times, with the same Idempotency-Key. Only when the site is still full after that does the agent see the plugin's own message. The hourly rate limit (also a 429) is not retried.

  • respira_run_pagespeed_audit, respira_get_core_web_vitals and respira_check_design with rendered: true ask the plugin to run them in the background, then poll the job until it finishes and return the finished result, so the tools answer exactly as before while the site's PHP worker and connection are not held for a minute or two. An older plugin answers with the result directly and nothing changes. If a job outlives the call, the tool says it is still running and to call again shortly.

  • Avada in the builder lists. The builder tools accept avada (and fusion-builder as an alias), and the agent guidance explains Avada Builder pages: container, row, column and fusion elements, text between the tags, column widths as attributes.type, and the respira_unparsed nodes that carry third-party shortcodes byte for byte. It needs the plugin release that ships the Avada adapter. Avada support is verified on a live Avada 7.16.2 site with Avada Builder 3.16.2; the guidance asks the agent to have the three experimental elements (Pricing Table, Tabs, Testimonials) checked in Avada Live.

  • Avada design system, Layouts and Library (11 tools, listed on Avada sites). respira_get_avada_design_system reads the global colour palette and typography sets with the CSS variables to reference them by, and respira_update_avada_design_system changes them through Avada's own Global Options (site-wide, so it needs confirm_live_edit; a snapshot is taken first). respira_list_avada_layouts, respira_get_avada_layout, respira_create_avada_layout and respira_update_avada_layout read and change Avada Layouts: which header, page title bar, content and footer section each Layout uses and where it applies, the Global Layout included. respira_get_avada_layout_section, respira_create_avada_layout_section and respira_update_avada_layout_section read and write the sections themselves. respira_list_avada_library and respira_get_avada_library_item read the Library and hand back the exact node to place with the page tools. Needs the Respira plugin release that ships them; Layouts and the Library also need Avada Builder active.

  • respira_inject_builder_content publishes target_path, position, after_element_id, before_element_id, chunk_id and session_id, and sends them to the plugin. The plugin has read target_path since 7.3.5, but the schema lost it, so no agent could place content anywhere but the end of the page, and every "add a section" was a whole page rewrite. With plugin 9.2.6 an insert into a Divi page changes only the inserted bytes: global module references and third party blocks stay as stored. The tool description now carries a chunking playbook (session, frame, then rows and modules by path, each with its own chunk_id) and says which tools are safe on Divi 5 pages that hold global or third party modules. It also says that on a page stored as Divi 4 shortcodes the generic section, row, column and module shape is converted to shortcodes, not only a Divi 5 shape. The plugin's own MCP endpoint publishes the same six parameters and the same playbook, word for word, and a plugin test fails if the two drift apart.

  • Agents are told how Elementor 4 elements nest. The Elementor guidance and the build_page description now say that atomic elements (e-heading, e-paragraph and the rest) go inside atomic containers (e-flexbox, e-div-block, e-grid) and classic widgets inside sections, columns and containers, and how to send an Elementor 4.3 accordion, tabs, background video or list. Writing the accordion, background video and list families needs the plugin release that models them; older plugins refuse those writes with a 422 as before.

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