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.
The native connector told every client that all 300-odd tools reach outside your site
fixThe native connector told every client that all 300-odd tools reach outside your site. openWorldHint was hardcoded true, so update_page, which writes one row in your own database, was advertised exactly like a call out t
fixidempotentHint was missing from every tool. A client had no way to tell whether repeating an interrupted call would create a second thing or land on the same state, which is exactly the question worth answering after a t
August 25, 2026
Every tool's read-only and destructive hints were delivered to nobody
fixEvery tool's read-only and destructive hints were delivered to nobody. The catalog carried readOnlyHint as a top-level property of the tool object, sitting next to name and description. MCP puts those hints inside annota
August 19, 2026
A site connected as read-only was not read-only
fixA site connected as read-only was not read-only. Choosing that scope when connecting a site stored it, and the API keys screen in wp-admin showed the key as read-only, but nothing enforced it: the introspection that deci
addA tool policy per site: full access, agency-safe, or read-only. Set it from the dashboard against a site, and it travels with that site's credential and is applied on the site itself, at the same checks that already gove
addThe stricter of the two settings always wins. A site's own governance profile and the policy on the credential are merged into one blocked set rather than one overriding the other, so a policy cannot widen what a site ad
changeSetting a policy no longer discards a site's approval overrides. Both live in the same stored object, and writing one replaced the whole thing. It merges now
August 19, 2026
A site that was connected and working was told it had no API key
fixA site that was connected and working was told it had no API key. The status badge counted keys minted inside that WordPress install, and a site connected from the dashboard's MCP setup authenticates with a scoped token
August 19, 2026
A row nested inside a column was deleted by any write that rebuilt the page
fixA row nested inside a column was deleted by any write that rebuilt the page. The shortcode parser found a module's closing tag with a non-greedy match on the same tag name, so an outer [et_pb_row] ended where the first i
fixA page that never carried _builder_version had one written onto every module the first time any tool touched it. Divi stamps that attribute itself, so a page authored in the visual builder always has it, but a page assem
fixA specialty section's column widths came back as full width when they were halves. column_structure="1_2,1_2" was rewritten to "4_4,4_4", silently, with the call reporting success. The widths were being inferred from the
fixRespira's internal bookkeeping could end up written into the page. On a module carrying an attribute with no value, the attribute run ends early, the module never enters the tree, its parent row flattens to no children,
addA write that would leave a Divi 4 page with fewer modules than it started with now says so, and for a settings-only edit refuses before writing anything. The existing dropped-children check compared the extracted tree ag
knownA Divi 4 attribute written with no value, such as sticky rather than sticky="on", still ends the attribute run, so that module does not appear in the tree and cannot be addressed by find_element or update_element. Its co
August 19, 2026
One edit to one heading on an Oxygen page deleted the body copy of every rich text element on that page
fixOne edit to one heading on an Oxygen page deleted the body copy of every rich text element on that page. Oxygen Classic writes by re-serialising the whole page tree, and the step that turns a tree node back into an Oxyge
fixapply_builder_patch said it had applied a change it had dropped. The same page, a patch on a rich text element by id: success: true, applied: 1, changed: true, and the text byte-identical afterwards. Two separate problem
fixThe patch response reported the element's type from before the write. operations[].target.type was read off the pre-write tree, so on the write above it cheerfully said oxy_rich_text about an element that had just been t
fixA one-attribute patch on a Divi 4 page quietly removed sixteen others. apply_builder_patch did not patch the document, it parsed the whole thing into a tree and wrote a new document back out. That round trip is lossy on
fixdelete_post returned an empty response and deleted nothing. The tool is approval-gated, and the gate answers with a token and HTTP 202. 202 is a success code, so the connector treated it as a normal reply, and the code p
fixCreating a Theme Builder template without saying where it applied took over every page on the site. Divi records a site-wide template as an empty include list and an empty exclude list, which is byte-identical to a calle
August 19, 2026
An HTML document with a list in it could not be converted to Breakdance at all
fixAn HTML document with a list in it could not be converted to Breakdance at all. The converter mapped a list to EssentialElements\Checkmark_List, and Breakdance does not register that name. Its declared identifier is Chec
fixThe list text was never going to arrive either, so fixing the name alone would have shipped an empty list. The section mapper leaves the <li> elements as children of the list node rather than as its content, and the conv
fixLists now convert to BasicList rather than CheckmarkList. The adapter's own shortcut map already sent the generic list type to BasicList and reserved CheckmarkList for markup that actually asks for checkmarks, so the con
changeThe bundled skills catalog was five releases behind. The Skills screen ships a snapshot of the catalog so it renders on a site with no outbound network, and that snapshot still listed 42 skills while 47 exist. Refreshed,
August 19, 2026
A write receipt said nothing had changed while the Yoast title it had just saved sat in the database
fixA write receipt said nothing had changed while the Yoast title it had just saved sat in the database. The receipt fingerprinted three things: the post content, the builder slug, and the builder payload. Post meta was nev
fixApproving an SEO-only duplicate moved the live page's modified date. The merge called wp_update_post() on every approval, including one where the only difference between the duplicate and the live post was a meta value.
fixA Divi 4 page on a Divi 5 site came back as one opaque block that no targeted edit could reach. Every Divi routing decision asked the site's runtime rather than the page in front of it. On a site where Divi 5 is enabled,
fixcheck_structured_data and analyze_aeo reported no schema on a page whose schema was fine. Both share one detector, and it read the stored post content rather than the page a visitor gets. Rank Math prints its @graph on w
fixAn Elementor widget with no type could still pass the render check. 8.6.28 stopped the emitter writing an untyped widget, which was the corruption itself. It did not teach the validator to see that shape, so the parser c
addAn uninstaller, with the destructive half switched off by default. Deleting the plugin left six tables, about a hundred options, five scheduled jobs and their transients behind, with no documented cleanup list. It now cl
August 19, 2026
delete_post answered with an empty response and deleted nothing
fixdelete_post answered with an empty response and deleted nothing. The tool is approval-gated on the site, and the gate replies with a token and HTTP 202. 202 is a success, so the request resolved normally rather than rais
fixupdate_element and remove_element rejected the two things the ambiguity error told you to use. When several elements matched, the site refused to guess and suggested addressing the element by path or narrowing with match
fixbulk_pages_operation documented a rate limit six times stricter than the real one. It said three runs an hour; the limit is twenty, and dry runs have never counted. Agents plan their work around that number. Corrected, a
changecreate_theme_builder_template no longer assigns anything by default. Omitting assignments used to mean site-wide, which on a body template replaced the content of every page. It now creates the template unassigned, and s
August 19, 2026
html-to-breakdance
addhtml-to-breakdance. The Breakdance counterpart to html-to-bricks, for bringing a Webflow, Framer or CodePen export into a Breakdance site. Breakdance keeps nothing in post_content: the page lives entirely in the _breakda
August 19, 2026
An update to a host that silently drops PUT now completes instead of hanging forever
fixAn update to a host that silently drops PUT now completes instead of hanging forever. 8.1.5 taught the client to retry a write as POST when a host *rejects* PUT, which fires on a status code. This host does not reject it
fixThe fallback cannot execute a write twice. The plugin's idempotency cache keys on the HTTP method, so a PUT that reached PHP and executed, and whose response was then dropped, would not have deduplicated against the retr
fixdiagnose_connection no longer reports a dropped request as "not blocked". It probed with OPTIONS and scored the result by status code, and a probe that times out has no status, so the comparison came out false and the ve
addforceWriteMethod: "post" per site, alongside forceRestRoute, so a host that blocks PUT can be worked around in one line of config without waiting for a release
addpurge_cache. Purges one page or the whole site and reports which caching layers it found and exactly what it called, which it looked for and did not find, and what it skipped and why. Requires plugin 8.6.31
addWooCommerce order reads carry customer_ip_address, customer_user_agent and meta_data, with credential-looking meta keys withheld, counted and named. Requires the WooCommerce add-on 4.0.4
August 15, 2026
Every add_* tool wrote straight to the live published page on sites that had turned direct editing off
fixEvery add_* tool wrote straight to the live published page on sites that had turned direct editing off. add_accordion, add_heading, add_image and the other 24 widget shortcuts went from parameters to the builder's inject
fixApproving a duplicate could merge a customer's edits into an unrelated published page. The merge-target walk followed _respira_original_id off any post carrying it, including a page that had itself been a duplicate once
fixA duplicate's base snapshot recorded an empty page, so rollback had nothing to roll back to. The baseline snapshot was captured before the post meta was copied onto the new duplicate, so builder detection looked at a pos
fixElementor widgets were stored with no type, which took the whole page down with a critical error. A tree that mixed simplified containers at the top with Elementor's native widgetType spelling underneath passed validatio
fixImage alt text and Rank Math FAQ questions reported success and changed nothing. The shared update path treated attributes as a key that was already in the right place, which is true for the builders whose attribute buck
fixA paragraph added to a Gutenberg page was written into a different builder entirely. On a page whose last block had just been removed, the content is empty, so the per-page builder check correctly reported nothing, and t
August 15, 2026
wordpress_deactivate_design_direction reaches npm
addwordpress_deactivate_design_direction reaches npm. The tool was written and dispatching, but was never documented in the public tool list, and the parity check that guards every release refused to publish anything until
fixA tool call with no site_id answered from the default site and said nothing about it. On a connection carrying more than one site, get_site_context, list_pages, list_posts and get_active_site now report which site answer
fixTwo MCP connections on the same machine shared one active-site pointer. The active site was persisted to ~/.respira/state.json under a single key with nothing identifying which connection wrote it, so switching sites in
fixadd_image advertised src as the only way to name an image. Passing a media library image_id was refused with a missing-parameter error. The schema now says either works, and add_testimonial gained the same for its author
August 13, 2026
The reset for a wrongly-inherited connection was locked behind the state it fixes
fixThe reset for a wrongly-inherited connection was locked behind the state it fixes. Respira_License::deactivate_license() already deleted exactly the options that make a cloned site believe it is connected, but it is reac
August 13, 2026
A cloned staging site inherited production's connection and hid its own setup screen
fixA cloned staging site inherited production's connection and hid its own setup screen. WordPress keeps plugin options through deactivate, delete and reinstall, so a staging site cloned from a connected production site cam
August 13, 2026
Two Art Direction companions
addTwo Art Direction companions. wordpress_mint_design_preview returns a short lived signed link that lets the respira.press dashboard frame the real rendered page, drafts included, without changing caching, passwords or vi
August 13, 2026
wordpress_check_design gains rendered mode
addwordpress_check_design gains rendered mode. rendered: true (with Respira for WordPress 8.6.20+) renders the real page at desktop and mobile widths through the respira.press render service and turns the five previously-un
changeThe npm listing tells the truth about the numbers, and a test now keeps it that way. The README carried a 303-tool badge, a 16-builder heading over a table that was missing GreenShift entirely, a 103-tool WooCommerce hea
August 13, 2026
A site can now hold one design direction, and every builder obeys it
addA site can now hold one design direction, and every builder obeys it. Nine new tools. wordpress_save_design_direction, wordpress_get_design_direction, wordpress_list_design_directions, wordpress_activate_design_direction
addwordpress_import_design_tokens reads DTCG 2025.10, Tokens Studio exports, Tailwind configs, or a plain :root CSS block into the direction. Dry-run by default, so what would change is visible before anything is written
addwordpress_apply_design_direction pushes the direction's tokens into each builder's own stores: Bricks global colors, the Elementor kit, Oxygen variables, nine builders in all. Approval-gated, with a per-builder report of
addwordpress_check_design reads what a build produced and says whether it is done. Nine deterministic rules: colors and fonts outside the direction, filler copy, placeholder names, the familiar AI tells, and probes generate
changePage builds stop treating the direction as advisory. build_page resolves hardcoded values against the active direction and reports anything that fell outside it, and the build skills run wordpress_check_design before cal
August 12, 2026
Ability category registration logged a notice on every request
fixAbility category registration logged a notice on every request. Reported from a Kinsta multisite on WP 7.0.3, where the network Plugins screen drives the abilities hooks through admin-ajax and turned one notice per reque
fixability_id_is_read_only() warned on an unknown tool id. wp_get_ability() warns the same way for abilities, and every other getter call in the streamable endpoint was already paired with wp_has_ability(). This one was not
August 12, 2026
Client reports printed as dark text on a dark background
fixClient reports printed as dark text on a dark background. The report is written into a blank window as a self-contained document, and it set a text colour but no background and no colour scheme. A blank document inherits
fixThe About screens described a release from June. All three still reported 7.1.0 "Roots" with sixteen builders while the plugin shipped through Canopy to 8.6.9 with seventeen. The version is now read from the live plugin
fixThe About item in the sidebar went unreadable while you were on About. Its muted colour is declared after the active state at equal specificity, so source order let it override: in light mode that left #50575e text on th
changeThe client report is set like a document rather than a default print. Headings use Alan Sans, body text resolves to the platform's real UI face instead of falling through to Arial, and figures are tabular so columns line
August 12, 2026
A leftover config file could beat the credentials in your client entry, silently
fixA leftover config file could beat the credentials in your client entry, silently. ~/.respira/config.json outranks WORDPRESS_URL and WORDPRESS_API_KEY, which is deliberate: an explicit file is the more considered of the t
fixSix builders made get_page_outline unroutable on every site that used them. Display names with spaces were being sent where route slugs belong
changeA site that cannot be found now says which config the server actually read. RESPIRA_CONFIG_B64, RESPIRA_CONFIG_FILE, or the default file, named in the error, because "site not found" is unactionable when three sources ca
changeclaude mcp add now suggests -s user, so a connection follows the machine rather than the folder it was created in
August 12, 2026
"REST route missing" now says which of two opposite things went wrong
fix"REST route missing" now says which of two opposite things went wrong. rest_no_route is WordPress answering in JSON, which it can only do when REST routing already works, so it is never a permalink problem and retrying v
changeThe ?rest_route= fallback stops sounding like a fault. Permalinks set to Plain mean WordPress does not serve /wp-json/ at all, which the connector already handles by falling back to ?rest_route=, core WordPress that work
August 12, 2026
The security tool descriptions named an advisory that had moved on
fixThe security tool descriptions named an advisory that had moved on. wordpress_update_core_security described its advisory_id as "currently wordpress-wp2shell-2026" and listed 6.8.6 / 6.9.5 / 7.0.2 as the targets. The plu
August 11, 2026
The security audit now reports application passwords
addThe security audit now reports application passwords. They are the one
addAdministrator rows carry the context that makes them answerable. Whether a
fixA site could be told it was vulnerable and then refused the fix. The list
fixAudit coverage now distinguishes checked-and-found-none from never-looked for
August 11, 2026
151 of 163 native abilities directed an agent straight into a 404
fix151 of 163 native abilities directed an agent straight into a 404. The abilities directory built each ability's advertised name by stripping a prefix and never converting underscores to hyphens; the plugin actually regis
fixA Divi 4 targeted edit could silently land on the wrong element. find_element and update_element used two different matchers for the same identifier_type=content lookup: find_element searched a self-closing module's own
fixA Divi 5 button's stale content alias couldn't be removed. apply_builder_patch rejected a structured unset operation outright (INVALID_ARGUMENT); update_element accepted it but wrote literal attributes.unset/attrs.unset
fixA plugin update didn't always update what get_server_compatibility reported. Right after updating from 8.6.1 to 8.6.3, diagnose_connection's live probe correctly reported the new version while get_server_compatibility, c
fixTwo dead pointers into the abilities admin surface. inhale_admin_url pointed at an unregistered page slug (page=respira-inhale), and the error text on an un-inhaled ability told you to visit a WordPress submenu item, "MC
August 11, 2026
apply_builder_patch and update_element's unset operation had no valid shape a strict client could use
fixapply_builder_patch and update_element's unset operation had no valid shape a strict client could use. The write-path handling for removing a stale attribute alias (e.g. a Divi 5 button's leftover content key) was alread
August 10, 2026
Agent identity is no longer guessed and reported as fact
fixAgent identity is no longer guessed and reported as fact. The plugin
fixTool reads reported no agent at all. Usage reporting has two payload
addtests/standalone/agent-source-provenance.php, the harness this code path
August 10, 2026
Elementor global classes can be read, reused and created without colliding
addElementor global classes can be read, reused and created without colliding. Respira styled an Elementor v4 element by creating a one-off style on that element. It rendered, but the section never joined the site's own cla
fixTwo malformed tool schemas were making every Respira tool unusable on Anthropic clients. create_design_token and update_design_token declared their value property as an empty array, which is not a JSON Schema object and
August 10, 2026
Respira's own abilities would have gone invisible to other AI clients on WordPress 7.1
fixRespira's own abilities would have gone invisible to other AI clients on WordPress 7.1. Core is adding a single public flag that says an ability is meant for external clients, and the WordPress MCP Adapter starts honouri
addThe weekly snapshot now reports how many abilities on a site declare themselves public. Core held its Guidelines proposal for lack of real-world adoption evidence and is now shipping a flag with no way to watch it land,
August 10, 2026
A "Disconnect and reset" button, under Settings > Advanced, for a site that will not connect
addA "Disconnect and reset" button, under Settings > Advanced, for a site that will not connect. A customer connected a site that had previously been on a different Respira account. It refused his key, so he uninstalled the
fixadd_html on Bricks now creates a real HTML element, unsigned, instead of a signed Code element. Bricks signs Code elements with a key derived from the site's own salts, and an SVG element built on Code has that signature
fixBorders survive convert_html_to_builder on Bricks. Border width, style, colour and radius were being stored under Elementor's key names, which Bricks does not read. They saved without complaint, counted toward the fideli
fixbricks_import_design_tokens hands back a way to undo itself. The importer writes two stores that only make sense together, since a token becomes both a global variable and a colour-palette swatch, and Bricks version-trac
fixFour button settings on Divi 5 stopped being accepted and then ignored. button_font_size, button_font_weight, button_border_width and button_border_radius passed validation, reported success, and wrote nowhere. Two of th
fixEvery Divi 5 module type is registered, not two thirds of them. The list had been hand-maintained and had fallen behind at 67 of the 110 module types Divi 5.10.1 ships, so anything added since Divi 5.5 lost its settings
August 10, 2026
A host briefly refusing one request read as "your site is down"
fixA host briefly refusing one request read as "your site is down". When a server in front of WordPress returned a 5xx, the message said the site might be down, misconfigured or behind a failing proxy, and told you to check
addThree Figma conversion skills: figma-to-divi, figma-to-bricks and figma-to-gutenberg.
August 10, 2026
upload_media no longer turns raw SVG markup into a handful of unreadable bytes
fixupload_media no longer turns raw SVG markup into a handful of unreadable bytes. The tool documents raw SVG as an accepted input and had no branch for it, so the markup fell through to the "assume base64" fallback. Node's
fixbricks_import_design_tokens now tells you it can be undone. The tool returns a rollback handle covering the colour palette, the global variables and their categories, and the description now says so, since neither store
August 9, 2026
Bricks move, reorder and remove now operate on Bricks' real storage shape instead of assuming every builder nests the same way
fixBricks move, reorder and remove now operate on Bricks' real storage shape instead of assuming every builder nests the same way. Bricks stores a page as a flat list where each element points at a parent id and lists its c
fixBricks reorder_elements no longer silently reorders the wrong container. Passing an element id instead of a positional path used to intval() down to 0 and quietly reorder the first section on the page. It's now rejected
fixBricks accordions built through add_accordion now actually render. The cross-builder generic shape (settings.items: [{title, content}]) has no equivalent field on Bricks' own accordion element, which expects a repeater c
fixA targeted single-element edit on a Divi 4 (shortcode) page no longer rewrites the whole page. Divi 5 got this fix in 8.2.2; Divi 4's shortcode storage path had the same disease underneath a different symptom. Nine separ
fixA Divi page built by build_page no longer always shows as an opaque, non-editable block in Divi's own Visual Builder. A column's own width, and every module's admin_label, were only ever lifted when supplied under settin
fixbutton_text_color on a Divi 5 button now actually renders. It wrote to the same JSON path as the button's background/border color, which Divi's own compiler doesn't read for text color; the value stored cleanly and never
August 9, 2026
A mistyped ability name now tells you the right one
fixA mistyped ability name now tells you the right one. When an agent calls an ability that is not registered, the error used to list fifty registered abilities in whatever order the registry held them, which on a site with
addThe weekly adoption snapshot now names the third-party abilities a site registers, not just their vendors. The public directory of plugins that adopted the Abilities API is a hand-made list, and its weakness has always b
August 9, 2026
A partly-edited starter config was accepted as a real one, sending every request to example.com
fixA partly-edited starter config was accepted as a real one, sending every request to example.com. The first run writes a placeholder config carrying a dummy address AND a dummy key, and isPlaceholderConfig() tested only t
fixAn API key pasted with the documentation brackets still around it is now rejected at startup. <respira_...> is not a valid key, but it is also not the placeholder key, so it defeated the same check above and pinned the s
August 9, 2026
A PUT request that a host blocks now retries as POST
fixA PUT request that a host blocks now retries as POST, closing the gap for Elementor's global-colors and global-typography routes (403 on hosts like OVH that block PUT) and every other route built on the shared REST clien
fixThe four WooCommerce card tools' edit_target values now match the FSE tool family they actually route through (approval/live, the same vocabulary update_site_template uses), instead of the page-edit tools' live/duplicate
fixredeem_token now activates sites in the running session immediately. A successful redeem wrote a config file and reported success, but the server kept using its boot-time site list until restarted, and under a sandboxed
adddiagnose_connection reports the actual running transport: bundle, npx cache, global npm install, project-local install, or source checkout, plus a flag when a differently-launched sibling Respira process is detected, clo
August 7, 2026
A site with more than forty guideline records reported forty
fixA site with more than forty guideline records reported forty. The weekly snapshot walks guideline bodies to see which scopes a site populates, and that walk is capped so the report stays small. The count was being taken
August 7, 2026
Respira now reports, once a week, whether site memory is actually doing anything
addRespira now reports, once a week, whether site memory is actually doing anything. Counts and booleans only: how many memory entries a site holds, how many of them are rules, and how often one of those rules refused an ag
addNothing about your content leaves the site. The snapshot carries no memory text, no guideline bodies, no post titles, no post IDs, and no slugs you wrote. The only strings in it are values fixed by code somewhere else: c
August 7, 2026
The other two dependency pins are gone, so a Composer install can now sit in a modern tree
changeThe other two dependency pins are gone, so a Composer install can now sit in a modern tree. 8.5.8 widened symfony/deprecation-contracts, which was the quiet one. psr/log at ^1.1.4 was the loud one: psr/log 1 and 3 cannot
changeRespira calls none of these three. They arrive behind Sentry, which has always declared psr/log at ^1.0|^2.0|^3.0 and options-resolver up to ^8.0, so these pins were narrower than the package that actually depends on the
changeNothing changes for the zip on respira.press. The release build pins its platform to PHP 7.4, so it still resolves psr/log 1.1.4, options-resolver 5.4.45 and deprecation-contracts 2.5.4, the same fourteen packages as 8.5
August 7, 2026
Composer-managed installs can keep their own Symfony 3.x line
changeComposer-managed installs can keep their own Symfony 3.x line. symfony/deprecation-contracts was pinned to ^2.5, so requiring Respira into a Bedrock, Kinsta or WP Engine root pulled that whole project back to the 2.x bra
August 4, 2026
The Observe profile now closes every write, which is what it always said it did
secThe Observe profile now closes every write, which is what it always said it did. It computed its blocked list from a registry of eleven tool families, and a tool belonging to no family was never considered, so it closed
secTwo WooCommerce badge tools were flagged read-only while writing. add-sale-badge and add-low-stock-badge insert blocks into a template through the same path as their siblings. The wrong flag meant a profile that closes w
August 4, 2026
Converting HTML on a site with no page builder no longer throws
fixConverting HTML on a site with no page builder no longer throws. With builder omitted, auto-detect resolved correctly to a block library (GreenShift, Spectra, Kadence Blocks or GenerateBlocks) and the converter then buil
fixThose four block libraries also get block-editor styling keys. They were falling through to the generic map, which is Elementor-shaped: the settings persisted, counted as matched, and emitted no CSS
fixThe fidelity report no longer calls the same token mapped and unmapped. A successful mapping came back with tokens_mapped: 1 and tokens_unmapped: ["--rwx-brand"] plus a warning, because the unmapped list compared token n
fixA shape mismatch handed to the block adapter is refused rather than thrown on.
addget-server-compatibility now says what a conversion would actually do here, not just that the feature exists. feature_detail.html_converter reports the builder a call with no builder would target on this site, whether th
addThe WooCommerce storefront write tools declare edit_target and verification_marker. The add-on's shared passthrough has always forwarded both to the template service; no schema ever declared them, on any surface, so they
August 4, 2026
A failed plugin activation now rolls back in a way that survives Redis
fixA failed plugin activation now rolls back in a way that survives Redis. When the fresh-boot probe fails, Respira deactivates the plugin it just activated. But the active-plugins list lives inside WordPress's alloptions c
August 4, 2026
Tool governance lives in the new admin now, whole
changeTool governance lives in the new admin now, whole. 8.5.3 surfaced the profile switch in Settings but sent you to the pre-7.1 page for the per-tool switches, which meant one click took you from the current design into the
August 4, 2026
The tool profiles from 8.4.0 are finally reachable
addThe tool profiles from 8.4.0 are finally reachable. Everything, Content and Observe shipped with the enforcement wired and the switch hidden: the selector lived on a governance page nothing in the admin linked to, so "Se
fixThe "Pair one now" link on the bridge banner goes somewhere. It was an anchor with no destination, so a site with no paired agent was invited to fix that and then left standing. It now opens the Connect screen
August 4, 2026
Converted headings, paragraphs and lists now carry their styling on the block editor
fixConverted headings, paragraphs and lists now carry their styling on the block editor. 8.5.1 fixed this for sections, which own their wrapper and could be rebuilt from nothing. A heading or paragraph does not: its markup
fixChatGPT can connect again, on both the OAuth and the API-key method. Thirteen tools declared a list-shaped input without saying what the list contains. A strict client rejects the WHOLE tool list over one of those, not t
August 4, 2026
A converted section's background, padding and colour now reach the page on Divi 5, Beaver Builder and the block editor
fixA converted section's background, padding and colour now reach the page on Divi 5, Beaver Builder and the block editor. Three separate faults with one symptom: the styling was stored, the write reported success, and no s
fixThe source element's CSS classes now reach block-editor groups as className, so theme and utility CSS applies to a converted section.
fixDesign tokens close the loop on the block editor: a converted section's wrapper references var(--wp--preset--color--{slug}) and the page declares it. 8.3.2 registered the preset and 8.5.0 kept the reference, but nothing
August 4, 2026
Design tokens now register on the other builders too, and the converted page references them
addDesign tokens now register on the other builders too, and the converted page references them. 8.3.2 did this for Gutenberg. Elementor, Bricks, Divi, Beaver Builder, Breakdance, Oxygen and Oxygen 6 now do it as well, each
addA registered token stays a reference instead of becoming a copy. This is what makes the registration worth anything. The converter used to inline every var() before any builder setting was built, so a colour registered a
addHonest about the gaps, per builder. Elementor 4.x has no stable global store for sizes, so sizes are skipped there rather than written into an option Elementor never reads. Divi 4 substitutes a global colour while render
fixThe last custom property in a :root block was dropped when it had no trailing semicolon, which is how minified CSS is normally written.
August 4, 2026
Access profiles: one switch that scopes what a connected agent may do
addAccess profiles: one switch that scopes what a connected agent may do. Governance has offered per-tool switches since 5.2.0, but scoping a site meant walking a list of checkboxes and knowing which ones matter. A profile
August 4, 2026
Design tokens are registered as theme.json presets
addDesign tokens are registered as theme.json presets. Converting a design used to write VALUES into blocks: a colour became #1a1a1a sitting in a block attribute. Values copied into many places drift, because an agent regen
addWrite receipts. Element operations and page-level writes now return a write_receipt: { changed, fingerprint_before, fingerprint_after }, hashed over the same payload the read snapshots already trust. The incident class t
addSealed audit log. Each audit row now carries seal_seq and a seal: an HMAC chained from the previous row's seal, keyed from the site's salt material, so editing or deleting a row breaks the chain at exactly that row. The
fixThe fidelity report conflated tokens referenced with tokens defined. tokens_total counts declarations in :root{}/html{}. A design system that ships markup and keeps its variables elsewhere produces zero, correctly — and
fixresponsive_mapped: false gave no reason. It did not distinguish "no media queries in the source" from "this builder branch does not emit responsive settings yet", so after passing responsive: true a bare false read as th
August 4, 2026
The HTML converter discarded every attribute it had just mapped
fixThe HTML converter discarded every attribute it had just mapped. The Gutenberg branch appended a second JSON object after the first in the block delimiter. A block comment carries exactly one attributes object, so WordPr
fixOmitting the builder failed instead of auto-detecting. The schema documents auto-detect when the parameter is left out. The converter defaults to auto, but a PHP default only applies when an argument is omitted, and the
fixConnected Apps told working customers nothing was connected. The page lists OAuth grants only, so a customer connected by setup code or Desktop bundle can never appear there. One had 76 tool calls over three weeks and re
adddiagnose_connection now reports the client's effective configuration, not just the site's. Which config source won (RESPIRA_CONFIG_B64, RESPIRA_CONFIG_FILE, or the default path), where it is, how many sites resolved and
addredeem_token now verifies its own write. It reads the config back and reports what landed and whether the next start will actually read it, instead of reporting success for a file an environment variable already outranks
addThe four WooCommerce card tools now accept edit_target and verification_marker. The add-on has always forwarded both to the FSE layer; the tool schemas never declared them, and a client only sends what a schema declares.
August 4, 2026
Three real skills were missing from the public catalog and from npx skills / OpenCode installs
fixThree real skills were missing from the public catalog and from npx skills / OpenCode installs. respira-builder-edits, respira-site-audit, and respira-woocommerce had shipped in the bundled skill set for a while but were
August 4, 2026
Gemini could not connect at all
fixGemini could not connect at all. Google's API validates tool schemas strictly and rejected the entire toolset with a 400 because one array property (the mega-menu columns) had no items definition. It was the only such ar
August 4, 2026
diagnose_connection reports the effective client configuration
adddiagnose_connection reports the effective client configuration. It already reported process facts (version, pid, binary path, sibling processes); it did not report the configuration those facts were operating on. It now
addredeem_token verifies its own write. It writes the config, reads it back, and reports what landed and whether the next start will read it. Previously it wrote a file and reported success, which is true and useless when a
addedit_target and verification_marker on the four WooCommerce card tools. Both were already forwarded to the FSE layer by the add-on; the schemas never declared them, so they could not be supplied
August 3, 2026
Site Memory
addSite Memory. A capped per-site store (wp_respira_memory, 30 entries of 500 characters) of facts, preferences, and lessons your AI accumulates. Entries ride into /context/site-info and /context/builder-info on every sessi
addRules, enforced at the write path. A memory of type rule can protect content by post id or slug. Protected content refuses agent writes, deletes, element operations, patches, and agent-mediated approval of staged copies:
addMemory screen in the admin. A native v7.1 rail item showing rules first, notes below, every entry labeled with who wrote it, read-only with an edit-in-dashboard action. A classic view ships as fallback
addWordPress core Knowledge interop. On sites running the Gutenberg Knowledge experiment, published guideline scopes join the same memory block agents receive. Feature-detected; sites without the experiment skip it at the c
addEntitlement. Included on Builder and Studio plans at no extra cost, not on Maker. The license validate heartbeat syncs entitlements.memory down to the plugin; until the first sync, licensed sites are treated as entitled.
fixWebMCP browser bridge migrated to document.modelContext. Chromium removed navigator.modelContext entirely; the bridge now prefers the document surface and keeps the navigator path as a fallback for older builds
August 3, 2026
Resonance memory tools
addResonance memory tools. wordpress_remember, wordpress_forget, and wordpress_list_memory maintain a persistent per-site memory on the WordPress site itself (plugin 8.3+). The tool descriptions teach the loop: save durable
addMemory-aware session priming. The handshake instructions gain a golden rule for honoring and growing Site Memory, and get_site_context carries the site_memory block through the compact detail: basic projection, so every
fixclaude.ai traffic is no longer mislabeled as Claude Code. Client-reported clientInfo now takes precedence over user-agent heuristics when resolving the agent label, with tests pinning the claude.ai versus claude-code spl
August 2, 2026
find_element returned no identifier you could use
fixfind_element returned no identifier you could use. The compact response built id, admin_label and _path, then filtered out nulls — and two of the three were always null on Divi 5, because admin_label read the Divi-4-only
fixGreenShift reported version "unknown" on current installs. 8.2.2 added a plugin-header fallback, and it worked, but the directory list was one entry short: the live wp.org directory is greenshift-animation-and-page-build
changeBricks structural operations now refuse rather than restructure. Bricks stores _bricks_page_content_2 as one flat array where every element carries a parent id and a children list of child id *strings*, not embedded node
August 2, 2026
A targeted edit re-injected, and restructured, the whole page
fixA targeted edit re-injected, and restructured, the whole page. update_module and the v2 patcher both persist by re-injecting the full tree through inject_content, which re-ran the Divi 5 section scaffold over it. That sc
fixA setting sent inside attributes was accepted and ignored. The alias lift only ran over keys at the top level of updates, and attributes is on the reserved list, so updates: {admin_label: "X"} lifted to its canonical pat
fixadmin_label lookups missed every Divi 5 module. The Divi adapter's own finder has known since 2026-07-28 that the label lives at attributes.module.meta.adminLabel.desktop.value; the shared tree utility checked only a fla
fixapply_builder_patch returned 422 respira_patch_not_persisted on Divi 5. Downstream of the label lookup above, not a save fault: the identifier never resolved to the intended node, so nothing meaningful changed and the no
fixReported paths described a page shape that did not exist. build_path_string() labelled by depth, hardcoding depth 0 as sections[] and depth 1 as rows[], so a fullwidth module at depth 1 was announced as rows[0] on a page
August 2, 2026
include= silently dropped any token it did not recognise
fixinclude= silently dropped any token it did not recognise. An unknown token was discarded and the read fell back to basic, so the caller got HTTP 200 and a plausible payload with no sign that part of the request had been
fixRenewing a lapsed licence never re-enabled the API keys the lapse disabled. The lapse switches keys off from four places; nothing ever switched them back on, so renewal left them dead permanently and the only cure was no
fixThe Builders screen described primary-versus-not-primary in the vocabulary of intelligence-versus-detection. Both columns were ternaries on a string compare against the active builder, because the admin endpoint returned
fixThe Gutenberg-native family reported no intelligence layer. is_intelligence_available() derived its package directory from the builder's display name, so GreenShift went looking for a greenshift-intelligence/ that does n
fixGreenShift reported "vunknown" on a correctly detected site. The plugin has shipped under at least two names with different version constants. The version now falls back to reading the plugin header, which survives whate
fixAn excerpt sent through the meta bag was written as post meta and rendered nowhere. create_custom_post had accepted an excerpt argument since 3.1.0, but none of the three update paths did, so the only way to set one on a
August 2, 2026
An authentication failure was reported as "respira/v2 is not available on this site"
fixAn authentication failure was reported as "respira/v2 is not available on this site". The version probe swallowed its own error and fell back to v1, so every failure mode reached you as the same message followed by four
addexcerpt on update_page, update_post and update_custom_post. There was no way to ask for it, so callers put it in meta, where it became a post meta row that reads back perfectly and renders nowhere. The description says a
August 1, 2026
GreenShift is the 17th supported page builder
addGreenShift is the 17th supported page builder. GreenShift by Wpsoul (shipping as "GL - Page Builder", still greenshift-blocks/ internally) is Gutenberg-native, so reads, element operations and design tokens work through
fixNested blocks were silently dropped when children arrived under a key other than children or innerBlocks. The tree utility walks rows, cols, columns, modules and elements on the read side, so an agent could extract a pag
fixThe activity log recorded a kept write as a failure. A structural write that is applied and deliberately kept but cannot be confirmed on its public route returns stored_unverified with HTTP 502. The audit trail derived i
August 1, 2026
Updates now succeed on hosts that block PUT at the edge
fixUpdates now succeed on hosts that block PUT at the edge. Managed hosts and WAFs commonly allow GET and POST but reject PUT, PATCH and DELETE before the request ever reaches WordPress. The result was every update failing
July 31, 2026
wordpress/mcp-adapter now targets ^0.5
changewordpress/mcp-adapter now targets ^0.5 (was ^0.4, resolving to v0.4.1). Plugins that bundle their own copy of the adapter end up sharing one set of loaded classes, so a plugin requiring 0.5+ (WP Rocket, for one) could fi
July 30, 2026
The Approvals screen called a kept write a failure
fixThe Approvals screen called a kept write a failure. Approving a structural proposal whose change cannot be seen on its verification route returns stored_unverified: the write was applied and was NOT rolled back, it simpl
July 30, 2026
The stored_unverified response added in 8.1.7 described itself wrongly
fixThe stored_unverified response added in 8.1.7 described itself wrongly. It returned HTTP 409, which is the status this same method uses for a rolled-back write, and it omitted mutation_performed, the one field that tells
July 30, 2026
A stored, structurally valid FSE template write was rolled back whenever the verification route could not display it
fixA stored, structurally valid FSE template write was rolled back whenever the verification route could not display it. Frontend verification falls back to comparing a hash of the whole public page when no verification_mar
July 30, 2026
A masked API key copied from WP Admin now fails at config load instead of at the first tool call
fixA masked API key copied from WP Admin now fails at config load instead of at the first tool call. The key shown in WP Admin is masked as respira_5f66e38d followed by bullet characters, and that text is selectable. Copyin
July 30, 2026
The npm listing now states the real tool counts and shows the current key visual
changeThe npm listing now states the real tool counts and shows the current key visual. Three surfaces disagreed: the README said 169 core / 272 with WooCommerce, package.json said 197 / 302, and the canonical source (respira-
July 30, 2026
Version 8.1.2
documentCorrected the npm README heading from 12 to 16 supported page builders.
documentAdded Spectra, Kadence Blocks, GenerateBlocks, and SeedProd to the support table, and corrected the stale Site Editor “Next release” label.
July 30, 2026
Version 8.1.1
documentUpdated the npm package description to name MCP 2026-07-28 and legacy-client compatibility directly.
documentAdded the 8.1 release summary to the top of the npm README and corrected the stale “Next release” heading.
documentIncluded CHANGELOG.md in the npm package so the complete version history ships with every installation.
July 30, 2026
MCP 2026-07-28 protocol support through the official TypeScript SDK 2 packages
addMCP 2026-07-28 protocol support through the official TypeScript SDK 2 packages. New clients can negotiate the modern stateless protocol with server/discover, per-request metadata, typed results, server identity, and cach
addDual-era stdio serving. Existing MCP clients keep using the established initialize handshake, while compatible clients can pin or negotiate 2026-07-28. Existing Respira configuration, site keys, and connection commands d
addRelease coverage for both protocol generations. The packaged-server smoke test now proves both an exact 2026-07-28 negotiation and the legacy initialization path against the complete tool catalog
secUpdated Axios, FormData, Sentry, and their OpenTelemetry runtime dependencies to patched releases. The production npm dependency audit reports zero known vulnerabilities.
July 29, 2026
A Divi 5 settings payload sent to update_element was silently discarded
fixA Divi 5 settings payload sent to update_element was silently discarded. Every other Divi 5 entry point accepts a settings bag: build_page takes one, and patch_module's merge verb routes it through the translator so keys
July 29, 2026
update_element could report a different element as the result of your edit
fixupdate_element could report a different element as the result of your edit. After writing, it re-extracted the page and read the result back by *position*, trusting the post-save tree to index exactly like the pre-edit o
July 29, 2026
Playbooks could be created but never corrected
fixPlaybooks could be created but never corrected. The connector exposed only list and create, so a mistyped step, a wrong template reference or an abandoned experiment was permanent: there was no way to read a playbook bac
July 29, 2026
Divi 5 patch_module could never resolve a node, at any depth
fixDivi 5 patch_module could never resolve a node, at any depth. The lookup bound its result with $out = &$block, which in PHP is a reference *rebind* rather than a value assignment: it detaches the local variable from the
fixPlaybook steps no longer fail with respira_scope_denied. The executor runs each step as its own internal request, and that request was seeded with a key carrying no permissions at all, so every route guarded by a v2 scop
July 29, 2026
The connection screen was handing out an endpoint that does not exist
fixThe connection screen was handing out an endpoint that does not exist. The setup and settings screens told you to point your agent at https://yoursite.com/?respira=mcp, including inside the copyable npx add-mcp one-liner
fixThe API key panel now shows a rotated key and names it after the agent it belongs to. Rotating a key called the mint function without passing the agent's name, so every rotation produced a row literally called "first key
changeA stale admin bundle now fails the build instead of shipping silently. The plugin admin is compiled from admin/assets/v71/src/**.jsx into one committed bundle, and the release zip ships that bundle rather than the source
July 29, 2026
bulk_pages_operation's find_and_replace no longer corrupts escape sequences in post content
fixbulk_pages_operation's find_and_replace no longer corrupts escape sequences in post content. The bulk write path called wp_update_post() directly without wp_slash() first, so WordPress's own unslashing step silently ate
fixrespira_update_option no longer 404s on option names containing a dot (e.g. litespeed.conf.optm-css_min). The write, read, and delete REST routes share one URL pattern, and that pattern didn't allow periods in the option
fixcreate_menu_item with object_type: "page" (or any post type/taxonomy) now produces menu items that actually navigate. The menu item was stored with an invalid _menu_item_type value (the raw object slug instead of WordPre
fixOxygen style writes (color, background-color, etc.) to global Theme Builder templates now actually persist and render. The style-key lift that nests these properties under options.original (where Oxygen's renderer reads
fixA patch with an explicit path no longer silently writes to a different element. When a path failed to resolve, the node finder fell back to matching on type, which returns the FIRST node of that type on the page. A targe
fixDivi accepts the slash-form paths its own tools emit. apply_builder_patch calls carrying a path like /0/1/0/0/0 died in the path parser before reaching the writer, so the edit never happened even though the call reported
July 29, 2026
Safety & Security scanning for connected WordPress sites
addSafety & Security scanning for connected WordPress sites. The read-only audit reports authoritative WordPress, WooCommerce, and reviewed extension versions; official core checksums; administrators; standard and must-use
addReviewed wp2shell evidence. Exact public-exploit account and plugin markers are separated from lower-confidence database and filesystem observations. The scanner inspects bounded oEmbed, customize changeset, navigation-o
addDatabase and configuration posture. Receipts normalize the current database account's global FILE capability to available, absent, or not verifiable without exposing raw grants. DISALLOW_FILE_EDIT and DISALLOW_FILE_MODS
addApproval-gated core security updates. Only catalog-approved patch targets on the running release branch are accepted. A recoverable-backup confirmation and second approval are required, followed by version, REST, fronten
secBroad SQL cleanup, automatic account deletion, and automatic plugin/file removal remain prohibited. Suspicious artifacts are evidence for owner review, not permission to destroy data.
secAudit receipts bind evidence to canonical target URLs and a site fingerprint, reject wrong-site results, expose truncation, and distinguish WordPress-visible evidence from host-only gaps.
July 29, 2026
Divi 5 text modules silently ignored body content
fixDivi 5 text modules silently ignored body content. An update_module / apply_builder_patch call carrying content on a divi/text module reported success but never wrote the text, unless the module already happened to carry
fixPartial attribute patches destroyed neighbouring attributes. Writing a nested attribute such as title.decoration.font replaced the entire title group, taking title.innerContent (the heading text) with it, while still ret
fixbatch_update diverged from every other writer on Divi. It routed through the generic patch builder, which replaces whole attribute groups and applies no Divi 5 translation, so flat keys never reached the paths the builde
fixadmin_label could never resolve on Divi 5. The label is stored at module.meta.adminLabel.desktop.value, but the resolver only read the flat admin_label key that exists on Divi 4 nodes, so the selector always returned res
July 29, 2026
The FSE writer gate now says how to turn it on, in the error message itself
fixThe FSE writer gate now says how to turn it on, in the error message itself. The respira_fse_writer_beta_disabled response already carried an enable_with hint in its data payload, but many MCP clients surface only messag
fixbuild_page now actually halts on a Bricks page that references a global class ID absent from the live registry. The registry-verification added in 8.0.3 was gated on a flag that build_page always set the wrong way, so a
fixDuplicate Bricks global class names are rejected instead of silently accepted. create_bricks_global_class (and update) now refuses an exact name collision with a 409 naming the existing ID, so two classes can no longer s
fixAn unmapped Bricks global-class setting key is now flagged. create_bricks_global_class (and update) checks each key against every Bricks element's real control schema and returns an unmapped_keys array for anything that
fixHTML-to-Bricks conversion no longer writes Elementor-shaped keys into Bricks elements. Background colour, text colour, and typography properties (font family/size/weight, line height, letter spacing, text transform/decor
fixDesign-token re-import distinguishes "already imported" from "ignored your new value." Changing a token's value and re-importing previously reported the same "variable already exists" skip reason as a true no-op re-impor
Respira spoke sixteen page builders. As of 8.0 it also speaks WordPress's own Site Editor: block templates, synced patterns, block navigation and design tokens, readable and writable on the same safety contract as everything else. A navigation link changes by exact block path, not by rewriting the menu. A pattern is created, read back through WordPress, render-checked, then placed by reference. Structural edits can wait for your approval, and every write leaves a snapshot, a normalised diff and a server-render result. The WooCommerce add-on goes to 4.0 alongside it, and its storefront tools now try the native block path first, so a shop built in the Site Editor stops being a place where the store tools quietly go dark. Building all of that meant auditing the safety layer itself, which turned up two places where the safety mechanism was the thing doing the damage: a Divi serialiser rule written for brand-new pages was firing on every write path, and undoing a Theme Builder create could trash a template the agent never created. Both fixed, both pinned by permanent tests.
addNative FSE structure service for templates and template parts with hierarchy/source discovery, exact block-path operations, stale-write fingerprints, structural proposals, snapshots, normalized diffs, cache invalidation,
addNative user-pattern and block-navigation editing on the same structural contract: registered theme/plugin patterns remain read-only; editable user patterns support synced/unsynced state; navigation responses include comp
addFirst-class Site Editor and Gutenberg design-token MCP surfaces.
addAgent-facing activity list/detail endpoints linking audit entries to snapshots, proposals, approvals, and rollbacks.
addShared mutation-result contract for dry runs, pending approvals, verified writes, stored-but-unverified writes, rollbacks, and failures.
addAbility discovery now labels results as Respira-native, inhaled, unavailable, or replaced by a safer Respira workflow and returns the preferred next tool.
changeRewriting a Divi Theme Builder global layout now requires explicit confirmation. update_theme_builder_template refuses the first call with respira_tb_live_edit_confirmation_required, naming the layout and stating that th
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
addProduct configurator tools (STAGGS). 8 tools: configurator status, per-product enable/disable, attribute-group listing, option-items read and write (through the STAGGS/Carbon Fields helpers, so storage stays consistent), and an allow-listed
add"What an agent could do here" card on the Respira ARC screen: eight copyable real prompts covering catalog fixes, pricing previews, cart links, agent-order reporting and storefront design.
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
changethe Respira ARC screen is light-only and matches the standard wp-admin chrome (the dark variant read as a foreign app and had contrast problems).
addofficial platform logos (Google, OpenAI, Meta, Pinterest, TikTok) on the format chips and submit links.
changethe fix-prompt button is smaller ("Fix with AI") with a tooltip explaining what the prompt does and what Respira is.
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
addSubmit links on the feed table. Each feed row links to the right platform dashboard (Merchant Center, OpenAI merchants, Meta Commerce Manager, Pinterest, TikTok) with a one-line where-to-paste instruction on hover.
addA quiet footer with credits and links (add-on, ARC, docs, support), and the agent-tools panel links to the full tool list.
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
addFix prompts on the quality card. Every failing readiness check now carries a copy-ready prompt for your AI assistant (Claude, ChatGPT, Cursor). Paste it into an assistant connected through Respira and the agent fixes what the check flags, s
addProduct picker for cart links. Choose products by name (variations grouped under their parent, prices shown) instead of typing product IDs. Large catalogs show the first 200 by name.
addThe page title now carries the Respira ARC wordmark, set in Alan Sans (bundled, no external font requests).
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
adda small provenance line under the Respira ARC page title, so a screenshot instantly shows whether the screen is rendered by this add-on or by the free Respira ARC plugin.
July 16, 2026
Released 2026-07-16. Agent-Ready Commerce: AI assistants can now find, read, and sell from your store. 79 MCP tools (up from 56).
changeReleased 2026-07-16. Agent-Ready Commerce: AI assistants can now find, read, and sell from your store. 79 MCP tools (up from 56).
addProduct feeds in six formats. Google Shopping XML (Merchant Center scheduled fetch; Bing accepts the same file), OpenAI/ChatGPT JSONL, Meta CSV, Pinterest CSV, TikTok CSV, and generic CSV, plus a store llms.txt at the site root. Built in th
addReadiness becomes a fix loop. readiness_fixlist turns the AI-readiness scan into an ordered work queue mapping every failing check to the tool that fixes it; set_image_alt writes the alt text that fails most; update_product gains global_uni
addAssisted checkout with attribution. create_cart_link builds signed multi-item cart URLs: the shopper's cart fills server-side and lands on your own checkout; tampered signatures are rejected. Orders are attributed via WooCommerce native att
addSubscriptions, Bookings, Memberships write tools (14). Tested against the real extensions. Status transitions validated against what each extension allows, booking reschedules include a conflict scan, everything is dry-run by default with s
addRespira ARC admin screen under WooCommerce → Respira ARC: feed URLs with copy buttons, catalog quality score, cart link generator, agent-origin orders, in light and dark admin schemes.
July 16, 2026
Released 2026-07-16.
changeReleased 2026-07-16.
fixrevert_pricing works end to end for the first time. Two defects, both present since the pricing tools shipped in v2.0: the tool passed a numeric snapshot id to the UUID-keyed snapshot store (so the lookup could never match, and the error ob
July 16, 2026
Released 2026-07-16. The full commerce surface: 56 MCP tools (up from 21). Completes the v3.0 rollout that began in June: the release was built and published then, but the update was never offered to customer sites, which kept stores on the
changeReleased 2026-07-16. The full commerce surface: 56 MCP tools (up from 21). Completes the v3.0 rollout that began in June: the release was built and published then, but the update was never offered to customer sites, which kept stores on the
add15 commerce tools now reachable over MCP. The catalog, pricing, inventory, and storefront endpoints (advanced product listing, natural-language product search, catalog health, bulk product/price/stock updates, sale scheduling, pricing rollb
addBrand tools. list/get/create/update/delete-brand REST routes and MCP tools (the abilities existed since 2.2.0; now they're reachable everywhere).
addVariations and attributes. set_product_attributes (global or custom, creates missing terms), generate_variations (cartesian product, skips existing, capped at 100/call), create_variation, set_variation_gallery (variation image + gallery whe
addCoupons and customers. list/create/update_coupon (discount types, expiry, usage limits, product/email restrictions) and create/update_customer (billing and shipping addresses; passwords auto-generate and are never returned).
addOrder notes and refunds. add_order_note (private by default), get_order_refunds, and create_order_refund which is DRY-RUN BY DEFAULT: it previews the refund until you pass dry_run: false, and never touches the payment gateway unless refund_
The plugin now tells the same story as your dashboard
The setup and connection screens were rebuilt around one source of truth. You link a site once, then watch the moment your first agent reaches it: the screen updates on its own and names what just happened, for example "connected. Claude just ran update_page on page #42". The plugin, the dashboard and your agent now read the same connection state, so they always agree on whether a site is connected and what access it has. One-click installs (the Desktop app, Cursor, Cowork) lead the way in, with browser sign-in still there for ChatGPT and claude.ai. Sites also arrive in the dashboard with their real WordPress title instead of a bare URL, which matters the moment you run more than one. And seven builder fixes land across Bricks, Divi, Elementor 4.x and Gutenberg.
addThe setup and connection screens now show your site coming alive. They tell the same story as your respira.press dashboard: link the site once, then watch the moment an agent first reaches it. When an app connects, the s
addYour site now arrives in the dashboard with its real name. The plugin sends your WordPress site title when it activates and when it checks in, so a site shows up by name instead of a bare URL when you manage more than on
fixBricks: moving or nesting an element no longer drops its siblings. Reordering or re-parenting an element on an existing Bricks page used a nested-tree move against Bricks' flat element tree, which could leave other eleme
fixBricks: a link set to open in the same tab now does. Bricks decides whether to open a new tab based on whether the setting is present at all, so switching the toggle off still opened a new tab. The setting is now removed
fixDivi: editing a single module now refreshes the cached CSS. A single-module or update-page edit on Divi did not clear Divi's static CSS cache, so a change could look like it had not applied until the next full save. The
fixDivi: custom post types are no longer corrupted by certain color settings. A color setting that contained square brackets could end the shortcode early and spill raw text into the page. Those characters are now encoded s
What the agent writes is what actually lands on the page
A deep pass through every supported builder, closing the gaps where a write reported success but the page stayed stale or blank. Styling now lands on Oxygen, Beaver Builder, Elementor v4 Atomic, Bricks, Divi 4 and Divi 5. Brizy and Visual Composer move from read to write, with their caveats stated. Recovery gets deeper: custom CSS and page settings are captured, and globals are versioned, so deleting a Bricks global class, a Divi preset, or an Elementor kit color leaves a recovery point. And when something cannot be persisted in a way the builder reads, Respira says exactly what did not land instead of reporting success. Every fix verified on a real site by loading the actual rendered page.
addBrizy moved from read to write. Respira can now write Brizy pages that Brizy's own editor opens and the front end renders. Writes are labeled with their caveats in the docs (front-end compile depends on Brizy's compiler
addVisual Composer moved from read to write. Respira now writes in VC's canonical storage format, so the editor loads the page and the front end renders. Labeled with its caveats (VC recompiles on the next editor save)
addGlobals are now versioned. Deleting a Bricks global class, a Divi preset, or an Elementor kit color now leaves a recovery point. "The agent deleted my global class" used to be unrecoverable; now you can roll it back. Res
addYour own custom CSS and page settings are now captured in snapshots, so the edits Respira makes to things like custom CSS are recoverable, not just the main content
addLoud-drop behaviour across builders. When a value cannot be persisted in a way the builder reads, Respira names exactly what did not land and tells the agent not to retry blindly. This is the systemic version of the per-
addAn internal check now runs across the test fleet to confirm that every builder function Respira calls actually exists in that builder. It would have caught several of the silent failures below the day they were written,
fixOxygen: generated CSS was being written without the selectors it needed, so styles never reached the page. Element styling now renders, and dynamic content resolves correctly. Code blocks that contained quotes could corr
Redesigned admin, public add-on SDK, generate_activity_report
A React-first plugin admin built around live telemetry: a bridge view of agent ↔ Respira ↔ site, real cards driven by eleven new REST endpoints, and a personalised greeting. A public add-on SDK ships so third-party plugin authors can register their own MCP abilities. And a new MCP tool, generate_activity_report, turns this site's audit log into a structured report your own agent shapes into prose — six framings cover the use cases customers actually have, time-saved math is calibrated to conservative per-tool baselines, and Respira never writes a single line of prose itself.
addCode signatures (Respira_Bricks_Signatures). Bricks refuses to render code / svg / queryEditor elements on the frontend unless they carry a signature minted by Bricks with the site secret. Elements pushed through the RES
addStructural autofix (Respira_Bricks_Autofix). Pre-validation repair pass on the build / inject path: strips bare px (skipping raw-CSS / text / url keys), renames div → block, regenerates invalid or duplicate IDs and rewri
addQuirks coercion + warnings (Respira_Bricks_Quirks). Centralises Bricks settings footguns with a clear split: silently coerce the safe ones (link.postId / _link.postId int → string so the href actually emits; harvest imag
addResponsive inference — builder-agnostic. Explicit, idempotent, non-destructive action that generates tablet + mobile breakpoint overrides for a desktop-only page. The scaling tables + fluid clamp() math live in a builder
addDesign-token import (Respira_Design_Token_Import). Bring a Tailwind theme object, a Figma Tokens Studio export, or a Style Dictionary / DTCG file into Bricks. Colours land as palette swatches plus --color-* CSS variables
addSection presets (Respira_Bricks_Section_Presets). A curated library of production-ready Bricks sections (hero, features, CTA, testimonials, pricing, stats, FAQ) an agent drops onto a page. Each flattens to Bricks' native
May 27, 2026
Released 2026-05-27.
changeReleased 2026-05-27.
addProduct brand support (product_brand taxonomy). The update-product and create-product abilities now accept brand_ids so an AI can assign or clear brands on a product the same way it already assigns categories and tags. Full CRUD endpoints l
addFeatured-image removal. The update-product ability now accepts image_id. Pass an attachment ID to set; pass 0 or null to remove the featured image. Previously the only image-related field on the response was a read-only URL; agents had no w
schemaProduct response shape gains brand_ids, brands, and image_id. image is unchanged.
May 19, 2026
wp.org review fixes
changeDisplay name updated to "Inhale: MCP Abilities by Respira" so the author attribution is visible in wp-admin plugin lists. Slug inhale-mcp-abilities is unchanged.
changeContributors field in readme.txt now lists urbankidro (the wp.org username that owns the plugin) instead of the brand string. The Author header still reads "Respira" so the visible attribution on the directory page is un
changeuninstall.php updated to remove the new primary key, the v0.4.0 migration flag, the canonical compat key, and every legacy key from v0.1.x and v0.2.x. Single-site and multisite sweep.
May 18, 2026
WordPress.org Plugin Directory submission
changeCanonical option key. v0.2.0+ stores the opted-in list under mcp_adapter_public_abilities — the same key proposed first-party in [WordPress/mcp-adapter#184](https://github.com/WordPress/mcp-adapter/pull/184). A one-shot
changeBrand-aligned chrome. Header with "by respira.press" Baskervville italic subtitle and a tiny version pill in the right-side toolbar. Light and dark themes both render with AA contrast
changeiOS-style toggle in the Status column for fast per-row inhale / exhale, on top of the standard wp-admin bulk-actions pattern
changeForeign admin notices suppressed on the Inhale settings page only, so the screen stays focused on the one decision it exists to support
changeHardened uninstall. Removes every option the plugin has ever written, single-site and multisite
changePlugin Directory readiness pass. ABSPATH guards on every shipped PHP file. Every output escaped. Every state-changing request nonce-verified and capability-gated. No remote calls, no tracking, no obfuscation, no bundled
May 17, 2026
hardening pass
changewp_die response code 403 + back link on the settings page permission denial path. Access logs and automated clients now see an authorization failure instead of a generic error
changeRow class escaping normalised: the abilities table's <tr class="…"> attribute is always rendered through esc_attr() instead of conditionally injecting the attribute fragment. No behavioral change, but conforms more stric
May 17, 2026
first public release
changeDiscovers every ability registered via the WordPress Abilities API and lists them in a wp-admin native list table.
changeStandard wp-admin selection + bulk-action UX: row checkboxes are selection; Bulk Actions dropdown plus Apply commits Inhale or Exhale immediately. No save-changes step.
changeRow-hover quick actions for single-ability inhale or exhale.
changeAnnotation badges on each ability (read-only, destructive, idempotent) sourced from the ability's declared meta; falls back to heuristic inference from the ability name when the registering plugin didn't tag it.
changeFilter views (All, Inhaled, Read-only, Destructive, Unannotated), a search box that matches across name / source / description, sortable columns, multi-select source filter, client-side pagination (20/50/100/All).
changeSources summary card above the table listing every plugin or theme that registers abilities, with the count per source and deep-links to each source's wp-admin home.
May 10, 2026
Zero-touch Cowork onboarding (Open in Cowork)
change.mcp.json sets RESPIRA_BOOTSTRAP_OK=1 so the npx server boots even without a config file present.
changeExisting RESPIRA_CONFIG_FILE, RESPIRA_AGENT_CLIENT, RESPIRA_AGENT_TRANSPORT env vars unchanged.
changeVersion label bumped in plugin.json and README.md.
changeThe skill-documented config shape ({url, apiKey}) crashed the MCP server silently on startup because the server required four fields (id, name, url, apiKey). User saw "MCP server still connecting…" forever.
changeThe Cowork form echoed pasted API keys into the chat transcript, contradicting the skill's own privacy promise.
change.mcp.json points RESPIRA_CONFIG_FILE at ~/.respira/config.json.
changenpm dependency pinned to @respira/wordpress-mcp-server@latest so the server schema fix lands immediately.
change/respira:connect-site skill rewritten: check for ~/.respira/config.json, point user at the dashboard to download it if missing, restart Cowork, test. Includes a "if startup fails" branch that reads ~/.respira/last-startu
changeREADME.md and INSTALL.md updated to describe the unified flow.
May 9, 2026
audience-first README rewrite
changeEdit a page without opening WP admin ("Update the headline on my client's homepage to say 'spring collection arriving'", about thirty seconds end to end)
changeMigrate a client site between page builders (sixteen supported paths, week of work into an afternoon)
changeAudit a site before a client meeting (SEO, AI search visibility, accessibility, mobile, technical debt, WooCommerce, with one-click fixes)
changeClean up a media library in one pass (alt text, compression, dimensions)
changeManage ten client sites from one conversation (multi-site context follows the conversation naturally)
changeNo code changes.
May 9, 2026
README accuracy pass: 30 skills
change8 slash commands for the most common workflows
change30 auto activating skills, broken down as:
change1 visual reviewer sub agent that shows what changed after every edit
changeFull access to all 180+ Respira MCP tools through the bundled @respira/wordpress-mcp-server
Every page-builder adapter promoted to deeper-intelligence parity
The biggest release since v5. Every builder adapter promoted in lockstep. Five cross-cutting Phase A invariants every adapter now inherits — render-validation gate, universal write-trace, Variables CRUD shape, source-driven catalog auto-scan, per-property typed validators — plus Phase B slices per builder that close the family-bug arcs surfaced across v6.10.x. 1076 standalone test assertions across 27 alpha cycles, zero failures.
phaseA.1 Render-validation gate. Post-write check: HEAD-fetch the preview URL plus parser-walk the persisted blob using the parser the adapter declares. 9 parser slugs ship. Either failing surfaces partial_write: true with st
Closes 14 customer bugs across 5 named trials and 7 GitHub issues
The release I should have shipped weeks ago. Closes 14 customer-reported bugs across 5 named trial threads and all 7 open public GitHub issues, plus 5 cross-cutting audits — JSON post-meta unicode safety across every adapter, MCP server tool-schema audit, duplicator kses bypass, schema endpoints anon-readable, render-trace fields on every write. New respira_diagnose_connection tool surfaces edge-layer interception so REST returning homepage HTML instead of JSON stops being opaque.
Self-updater fatal on every WP cron tick. class-updater.php:104 called \Respira_License::get_license_key() which has never existed on the core License class — every site that activated the add-on threw Uncaught Error: Call to undefined meth
fixSelf-updater fatal on every WP cron tick. class-updater.php:104 called \Respira_License::get_license_key() which has never existed on the core License class — every site that activated the add-on threw Uncaught Error: Call to undefined meth
April 20, 2026
drop keytar, fix whoami after login, unstick terminal, warm welcome
54 ACF tools covering field reads and writes, field-group management, ACF Pro repeaters, flexible content, galleries, options pages, relationships, and bulk updates. Every write snapshot-backed and dry-run previewable. Works on approximately 2 million WordPress sites that use ACF today.
add54 Advanced Custom Fields tools under respira_acf_*. ACF powers flexible content models on approximately 2 million WordPress sites. Before v6.6.0, Respira could only read ACF values through generic post-meta calls, which
addEvery write tool creates before_edit and after_edit snapshots via Respira_Snapshots::capture_snapshot(), audit-logs through Respira_Auth::log_action(), and supports dry_run=true to preview the change without executing. E
addLicense tier gating follows the existing scope model. Reads (get_*, list_*, search_*) require any valid API key and are available on Lite. Writes (update_*, delete_*, create_*) require the write scope and are available o
addACF presence detection in site context. Respira_Context::get_addons_context() now exposes addons.acf.{installed, pro, version, licensed}. MCP server uses this to register ACF tools only on sites where ACF is active and t
tested17/17 direct-handler assertions via mu-plugin probe.
tested54/54 HTTP assertions against the full endpoint surface using a real encrypted API key (wp-now + ACF 6.8.0): 28 free ACF tools return 200 with the expected payload shape, 26 Pro-gated tools correctly return 412 respira_a
changeSix-phase execution cycle: LoadContext -> PreHooks -> Resolve -> Execute -> PostHooks -> Return. Deterministic. Traceable. Every command runs through every phase
changeFive framework hook contracts, frozen for v0.1: before_resolve, filter_plan, before_execute, filter_result, after_execute. In v0.1 no callbacks register. v0.2 populates them. NullHookRegistry swaps for ManifestBackedHook
changeTyped ToolChainFunction<T> abstraction for all 34 commands. Each function declares capability (read | write | destructive), domain tags, and prerequisites
changeFile-organization convention: one BaseCommand subclass per file, one ToolChainFunction per file, always co-located. Named export <camelCasePath>Function
changeStructured JSON tracing via --verbose, written to ~/.respira/traces/{invocationId}.json. Hard cap 10,000 entries per invocation
addOxygen Deep Intelligence: Full intelligence package for Oxygen Builder — 49 components cataloged with properties, types, defaults, and nesting rules. Component registry with dynamic detection and 24-hour caching. JSON Sc
addOxygen Settings Validator: Validates component properties and data types before injection — colors, URLs, emails, numeric values, booleans, and arrays all checked with detailed error messages
Flatsome UX Builder joins as builder #12. 15 new WooCommerce Commerce tools with storefront design intelligence. Context-aware MCP tool filtering reduces tools in context by ~40. Three coordinated releases.
addFlatsome UX Builder as Builder #12: Full support for the most popular WooCommerce theme on ThemeForest (200K+ sales). Extract, inject, element ops, build_page, and snapshots all work. Detection by active theme. Shortcode
addShortcodeParser utility: Shared shortcode parsing and reconstruction for Divi 4 and Flatsome. Parameterized by tag prefix, column format, and detection patterns. Strict tag allowlists prevent cross-builder content confus
addBundled WooCommerce entitlement: Studio and Founder plans now include the WooCommerce add-on at no extra cost. Maker and Builder customers continue to purchase it separately
addContext-aware tool filtering (MCP server v6.0.0): The MCP server now filters the tool list based on detected builder and active plugins. Bricks tools hidden when Bricks is not active, WooCommerce tools hidden when WooCom
addWooCommerce snapshot safety: All existing WooCommerce write tools (create_product, update_product, update_stock) now create before/after snapshots and log to the audit trail. Previously these operations were invisible an
addFlatsome Intelligence package: 55 element definitions with attributes, types, defaults, nesting rules, and responsive patterns. 6 pre-built page patterns for AI agents
7 new Bricks-dedicated tools. Cross-site element search, page health diagnostics, Automatic.css integration, query loop discovery, style profiling, and design system export.
addCross-site element search (respira_search_bricks_elements): Search across ALL pages and templates for Bricks elements by type, global class name, or setting value. Find every instance of a specific element, audit class u
addPage health check (respira_bricks_health_check): Standalone diagnostic tool that detects orphaned elements, duplicate IDs, broken parent/child references, invalid global class references, empty containers, and heading hi
addACSS integration (respira_bricks_detect_acss, respira_bricks_import_acss): Auto-detect Automatic.css (ACSS) installation, read its color/spacing/typography variables, and import utility classes into the Bricks global cla
addQuery loop discovery (respira_bricks_query_loops): Find all Bricks elements that use query loops across the site. Filter by object type (post, term, user) or queried post type (product, page, etc.). Essential for auditin
addStyle profile learning (respira_bricks_style_profile): Analyze a page and extract its design patterns — colors used (with frequency), spacing values, typography (fonts, sizes, weights), and global class usage. Use to lea
addDesign system export (respira_bricks_design_system): Single-call export of the complete Bricks design system — global classes, color palette, theme styles, typography/variables, components, element types, and Bricks vers
65 new tools. Element-level editing across every supported builder, build_page declarative page creation, HTML-to-builder conversion, stock-image search, tool governance, and dynamic schemas for 12 builders.
addElement-level operations: find_element, update_element, move_element, duplicate_element, remove_element, batch_update (atomic), reorder_elements — works across all 11 builders via tree utility or native overrides
addbuild_page: Create complete pages from a declarative structure in a single API call. Returns preview URL
addStock images via Openverse: search_stock_images and sideload_image with CC attribution, domain allowlist, SSRF protection, and deduplication
addTool governance: Per-tool enable/disable with fail-open safety. Single chokepoint for REST + Abilities API. Audit logging
addElementor dynamic schemas: Reads control registry at runtime, maps to JSON Schema types. Settings validator with "did you mean?" suggestions
Every AI edit now has an undo button. New Changes page in wp-admin, storage management, merge-mode default for approvals, and WebMCP write-tool protection. Three months of "can you revert that?" tickets, gone.
Compact MCP responses, working-copy reuse, simpler multi-site setup, and a broad reliability pass driven by a single support ticket from a customer who asked for their money back. They stayed.
addAdded explicit live-edit preflight responses for original pages, posts, custom posts, builder module updates, and builder patch flows when direct editing is enabled. Clients must now choose editTarget: "live" or editTarg
addAdded rollback guidance for live edits, including the WordPress edit-screen URL for revisions and Respira pre-edit snapshot messaging.
addAdded support for dashboard-issued site tokens (respira_site_...) so hosted agency MCP exports can authenticate without per-site plugin-local keys.
addAdded a hosted-dashboard handoff card in wp-admin so agencies can open the dedicated account-wide MCP Setup page for all-sites exports, install commands, and AI setup prompts.
changeMulti-step write flows now reuse the current working duplicate when available and no longer create a duplicate during the confirmation-only preflight response.
changeGET /respira/v2/status now exposes whether direct editing of originals is enabled, so MCP clients can decide when to present live-edit confirmation.
Added: order reads now return customer_ip_address, customer_user_agent and meta_data. Without the request fingerprint and the order meta, the order tools could not support payment-fraud triage at all, and the reporter kept a competing plugi
changeAdded: order reads now return customer_ip_address, customer_user_agent and meta_data. Without the request fingerprint and the order meta, the order tools could not support payment-fraud triage at all, and the reporter kept a competing plugi
changeFixed: the add-on's own test runner exited before printing its results, so a failing test could report success. Any test sorting before version-surfaces was swallowed and the suite still exited zero.
Fixed: the update notice for this add-on could never clear itself. 4.0.2 bumped the plugin header but not the version constant underneath it, and the constant is what the updater reports to the server as your installed version. So every sit
changeFixed: the update notice for this add-on could never clear itself. 4.0.2 bumped the plugin header but not the version constant underneath it, and the constant is what the updater reports to the server as your installed version. So every sit
Fixed: a site running both Respira and this add-on printed "Ability category respira-woocommerce is already registered" on every request. Both plugins registered the same category, so with the add-on installed the collision was guaranteed r
changeFixed: a site running both Respira and this add-on printed "Ability category respira-woocommerce is already registered" on every request. Both plugins registered the same category, so with the add-on installed the collision was guaranteed r
Fixed: 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
changeFixed: 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
changeFixed: 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; i
changeFixed: 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 r
changeFixed: 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 inst
changeFixed: 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.
Storefront intelligence is now FSE-first with page-builder fallback. On a block theme, analysing a shop page returns real structural analysis against the native archive-product template instead of "no page builder detected". The two badge t
changeStorefront intelligence is now FSE-first with page-builder fallback. On a block theme, analysing a shop page returns real structural analysis against the native archive-product template instead of "no page builder detected". The two badge t
changeSale and low-stock badges are POSITIONED: they anchor inside the product image, matching WooCommerce's own card structure, instead of being appended after the add-to-cart button. If a badge is already present the write is refused as a no-op
changeAdded product-card field addressing: discover the card's composition and set attributes on one named field, by canonical WooCommerce block name. Attributes are intersected with the installed block's registered attributes, so an unrecognised
changeupdate_checkout_layout no longer returns "no page builder detected" on a block theme. It returns the honest capability error its sibling tools already returned.
changeThe missing-changes error no longer advertises a parameter that does not exist. It names only the keys the handler reads.
changeThe legacy woocommerce/product-query block is recognised during discovery, so a store on an older card block is no longer told it has no product grid.
Fatal error on HPOS stores (PHP 8). The daily license check, which also gathers a small agent-orders summary for the dashboard, could run on the plugins_loaded hook before WooCommerce initialized its order data store. On stores using High-P
fixFatal error on HPOS stores (PHP 8). The daily license check, which also gathers a small agent-orders summary for the dashboard, could run on the plugins_loaded hook before WooCommerce initialized its order data store. On stores using High-P
Thrive Architect product pages — description edits didn't appear on the frontend — bulk_update_products with description / short_description wrote to post_content via WooCommerce setters, but Thrive Architect renders from its own wp_postmet
fixThrive Architect product pages — description edits didn't appear on the frontend — bulk_update_products with description / short_description wrote to post_content via WooCommerce setters, but Thrive Architect renders from its own wp_postmet
Product category CRUD endpoints and MCP tools (list/get/create/update/delete).
addProduct category CRUD endpoints and MCP tools (list/get/create/update/delete).
addProduct tag CRUD endpoints and MCP tools (list/get/create/update/delete).
changeProduct create/update now supports category and tag assignment payloads for safer taxonomy-aware catalog workflows.
cookies. the legal kind. one click and i'll get out of your way.
what you'd actually be saying yes to
tune your cookie preferences
essentials stay on regardless. the rest is opt-in. nothing fires until you tap save.
essentials
the cookies that make logging in work and remember which partner sent you. switching these off would just break the site, so the law does not let me make you opt out.
first-touch source on a /respira_acq cookie, plus a flag if an ai chatbot referred you. helps me figure out what is working without turning you into a tracking pixel statue.
messaging
customer.io for in-app notes, chatwoot when you click the support bubble. off by default. on means i can actually answer you in the app.