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.
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
July 29, 2026
Receipts are bound to the measured site
secReceipts are bound to the measured site. Security audits now return canonical WordPress target URLs and multisite context, allowing the dashboard and assistants to reject evidence from the wrong connected site
secBounded coverage is explicit. Executable-file scans return partial after a time, file, or result limit, and known Breakdance generated-cache paths are labeled as observations whose contents were not independently verifie
secAccount hygiene is visible without exposing secrets. Administrator session counts and supported 2FA provider signals are included while tokens, recovery codes, passwords, salts, and secret values remain excluded
fixSecurity audits report multisite activation truthfully. Network-active plugins are now recognized alongside per-site and must-use plugins, and every inventory row includes its activation scope
July 29, 2026
approval_token is now declared in the input schema of every tool that requires it
fixapproval_token is now declared in the input schema of every tool that requires it. 11 destructive tools (delete_post, delete_comment, delete_term, delete_option, bulk_pages_operation, and the site-pattern/site-navigation
fixrespira_acf_* tools now honor a per-call site_id override. Same root cause as the Bricks/Elementor fix shipped in 8.0.3, just never applied to the ACF branch: the dynamic-dispatch path used the globally active site inste
July 29, 2026
Bundled skills now match the public catalog
fixBundled skills now match the public catalog. content-portability, site-onboarding, woo-agent-storefront, and woo-catalog-perfection were live on the respira.press marketplace and installable straight from GitHub, but mis
July 29, 2026
respira_redeem_token now merges sites instead of replacing them
fixrespira_redeem_token now merges sites instead of replacing them. Redeeming a per-site-scoped token (the dashboard's "Set up assistant" link for one specific site) legitimately carries only that one site. The write to ~/.
July 29, 2026
site_id is now honoured on every Bricks and Elementor tool
fixsite_id is now honoured on every Bricks and Elementor tool. Every tool handled in the main dispatch switch already resolved a per-call site_id override correctly. The Bricks and Elementor tools that fall through to the d
fixCore integrity evidence excludes user-managed files. Official checksum comparison now excludes wp-content, separates changed, missing, unexpected, and symlinked core files, and bounds unexpected-file discovery to executa
July 28, 2026
Bricks global classes no longer report success without persisting
fixBricks global classes no longer report success without persisting. Class creation reads the authoritative option value, invalidates WordPress's alloptions cache, verifies the new ID and every prior ID after the write, an
fixHTML-to-Bricks conversion preserves the expensive parts of the design. Source classes now use Bricks' _cssClasses, CSS Grid templates, grouped padding/margin, absolute offsets, and gaps map to native controls, and inline
fixUnsupported color-mix() degrades honestly. Functional colors inside border shorthand remain intact during parsing, are omitted before Bricks validation instead of aborting the import, and produce a visible warning with a
July 28, 2026
Read-only security audit endpoint
addRead-only security audit endpoint. Adds the bounded /wp-json/respira/v1/security/audit capability used by the Safety & Security dashboard to inspect authoritative WordPress and WooCommerce versions, core checksums, admin
addApproval-gated WordPress security updates. Adds exact, catalog-approved core patch updates with backup confirmation, two-step approval, and post-update version, REST, frontend, and checksum verification
July 27, 2026
OAuth discovery no longer depends on /.well-known/
fixOAuth discovery no longer depends on /.well-known/. RFC 9728 clients look for the protected-resource document at {site}/.well-known/oauth-protected-resource. SiteGround, and most managed WordPress hosts, reserve /.well-k
fixThe admin header no longer claims "MCP connected" when nothing has connected. It read a static default rather than any live signal, so it showed connected on every install, including sites where no agent had ever called,
fixThe Add-ons screen reported stale tool counts. The WooCommerce card showed 79 tools on a v4.0.0 add-on that ships 105, because the version ladder's top rung was open-ended and 4.0 still satisfied >= 3.1. The same ladder
July 27, 2026
respira_redeem_token now writes the config where the server will read it
fixrespira_redeem_token now writes the config where the server will read it. The write target was hardcoded to homedir()/.respira/config.json and ignored RESPIRA_CONFIG_FILE. On a plain machine the two agree, which is why t
July 27, 2026
RESPIRA_CONFIG_FILE now resolves ${HOME}, ~ and %USERPROFILE% itself
fixRESPIRA_CONFIG_FILE now resolves ${HOME}, ~ and %USERPROFILE% itself. The Cowork MCP config ships "RESPIRA_CONFIG_FILE": "\${HOME}/.respira/config.json", and whether that token gets expanded depends entirely on who launc
July 26, 2026
wordpress_update_theme_builder_template now advertises and requires confirm_live_edit
fixwordpress_update_theme_builder_template now advertises and requires confirm_live_edit. Rewriting a Divi global header, footer or body changes every page that uses it and goes live with no approval step, so the plugin ref
fixupload_media accepts Windows paths and file:// URIs again. A C:\Users\...\photo.jpg path, or any file:// URI, was not recognised as a local file and fell through to the base64 branch, where it decoded to garbage and uplo
fixTwo WordPress installs on the same hostname stay two sites. A site id was derived from the hostname alone, so example.com and example.com/blog both became example-com and the second silently replaced the first: you confi
fixThe handshake that could not shake hands: respira_move_element, respira_reorder_elements, respira_remove_element, respira_duplicate_element and respira_batch_update now expose edit_target (and its editTarget alias) plus
addFirst-class FSE template/template-part and Gutenberg design-token tools.
addTen Respira-native Site Editor tools for user patterns and block navigation: source-aware pattern discovery, synced/unsynced pattern creation, compact nested navigation traversal, exact block-path updates, stale/wrong-ta
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 23, 2026
build_mega_menu (Divi)
addbuild_mega_menu (Divi). Builds a complete Divi mega menu in one call: a top-level menu item carrying Divi's mega-menu class, each column as a child item, and each link as a grandchild, with an optional assignment to a th
changeTheme Builder write (list / create / update) is confirmed working on Divi 4 as well as Divi 5 — the create path goes through Divi's own theme-builder functions (et_theme_builder_get_theme_builder_post_id, the et_template
July 23, 2026
Content-based targeting could resolve to a parent/root layout container and silently corrupt it
fixContent-based targeting could resolve to a parent/root layout container and silently corrupt it. On Elementor pages, an update_module / update_element call whose selector resolved to a section, column, or v4 atomic layou
fixAn empty updates object returned success instead of failing validation. update_element replied success: true, write_was_noop: true when the payload carried no change (which can happen if the tool/MCP layer fails to bind
addDivi Theme Builder write access. The agent can now discover and edit Divi's global Theme Builder templates (headers, footers, body layouts), not only regular pages. New tools: list_theme_builder_templates (discovery — re
addWPML translation write access. New tools: get_translations (now a first-class tool), create_translation (creates a translation that JOINS the source's existing translation group — the correct WPML trid + source_language_
fixEvery WPML REST endpoint returned a fatal error. get_translations and duplicate_with_translations registered their permission callback as array( 'Respira_Auth', 'api_key_permission_check' ), but that method lives on Resp
fixWPML element-type computation. get_translations and duplicate_with_translations built the WPML element type with 'post_' . ltrim($type, 'post_'), which strips *characters* rather than a prefix — turning page into post_ag
July 23, 2026
PageSpeed errors keep their specific WordPress/upstream code
fixPageSpeed errors keep their specific WordPress/upstream code. Structured 429 and 5xx responses, proxy HTML responses, and generic HTTP failures now pass through one coded-error path, preserving error envelopes for the ag
fixInvalid PageSpeed calls stop at schema validation. wordpress_run_pagespeed_audit and wordpress_analyze_pagespeed now require at least one of page_id or url
fixTransport retries no longer overwrite attempt evidence. npm events now emit an explicit attempt_id; central ingestion deduplicates by attempt rather than logical call id
changeMCP quality reporting now distinguishes task friction from Respira reliability. Expected safety blocks, caller mistakes, customer environment failures, upstream failures, product errors, unknown failures, and incomplete
changeThe npm package no longer publishes private repository metadata. The public package continues to link to the Respira website and support page
July 23, 2026
wordpress_build_mega_menu
addwordpress_build_mega_menu. Builds a complete native Divi 4 or Divi 5 mega-menu hierarchy in one call, optionally assigning it to a theme location
July 23, 2026
Divi Theme Builder tools
addDivi Theme Builder tools. List, create, and update native header, footer, and body templates
addWPML translation tools. List a post's translations, create a linked translation, and update an existing translation while preserving its translation group
July 22, 2026
apply_builder_patch on Elementor 4.x atomic widgets now persists AND renders content edits targeted by type + match_content, not only by int
fixapply_builder_patch on Elementor 4.x atomic widgets now persists AND renders content edits targeted by type + match_content, not only by internal id. The follow-up to 7.5.57 (which made the silent no-op honest): the root
July 22, 2026
apply_builder_patch (the v2 route) could report success: true with a full applied count while nothing actually persisted to the builder's ca
fixapply_builder_patch (the v2 route) could report success: true with a full applied count while nothing actually persisted to the builder's canonical storage. On Elementor 4.x atomic widgets the patch applies to the extrac
July 22, 2026
create_page_duplicate and a full read_page_v2 on a very heavy Elementor page (~73K bytes of _elementor_data) could still time out at 180s
fixcreate_page_duplicate and a full read_page_v2 on a very heavy Elementor page (~73K bytes of _elementor_data) could still time out at 180s. A prior partial fix (7.5.15) cut redundant builder-extraction work roughly in hal
fixinject_builder_content on Beaver Builder could silently write empty stub modules (settings: {"type":"module"}, heading/button text and links gone) when a {"rows":[...]} payload ended up nested one level inside a list ins
fixDuplicating a page whose postmeta held a serialized object of a since-removed plugin's class (e.g. Link Whisper's Wpil_Model_Link) fataled with a PHP Error, leaving an orphaned, unlinked draft behind. WordPress core's ow
fixDuplicating a Bricks page didn't regenerate Bricks' own per-post CSS, so the copy could render visually broken (wrong corner-radius, colors, typography) because its CSS was still scoped to the original page's body.page-i
fixThe HTML-to-Elementor converter corrupted unitless line-height values into a fixed pixel size (line-height: 1.2 became 1.2px, crushing text), and **silently collapsed nested CSS Grid layouts into a single full-width colu
fixbatch_update on Oxygen 6 / Breakdance elements reported success but silently didn't persist a design (typography, spacing, layout) update, while the identical edit via a single update_element call worked correctly. batch
July 22, 2026
A successful ?rest_route= diagnostic fallback is now sticky
fixA successful ?rest_route= diagnostic fallback is now sticky. Once respira_diagnose_connection proves the fallback works, subsequent calls in the session use it automatically instead of returning to the shadowed pretty /w
July 21, 2026
Changing a custom post type's author could still remove an unrelated meta description
fixChanging a custom post type's author could still remove an unrelated meta description. 7.5.54 folded author reassignment into the guarded atomic save for posts, but the custom-post-type update path (update_custom_post) k
July 21, 2026
Changing a post author could trigger a second, unguarded WordPress save and let SEO/editorial hooks remove an unrelated meta description
fixChanging a post author could trigger a second, unguarded WordPress save and let SEO/editorial hooks remove an unrelated meta description. Author input is now validated before any write and included in the same guarded wp
fixElementor Approve & Apply could be unnecessarily slow and leave its final state unclear. Approval used Elementor's site-wide files_manager->clear_cache() after merging one page, which can spend tens of seconds invalidati
July 21, 2026
A compact, verifiable result contract for targeted Elementor updates
addA compact, verifiable result contract for targeted Elementor updates. update_element now returns applied, short before/after hashes and summaries, a bounded list of changed fields, the Elementor native-save trace, and pu
fixAn Elementor write could persist correctly while the public page kept serving stale content or CSS, yet the tool still returned success: true. The adapter intended to use Elementor's document API but tested save_elements
July 21, 2026
Two WordPress installs on the same hostname but different paths no longer collapse into one site
fixTwo WordPress installs on the same hostname but different paths no longer collapse into one site. Derived identities now include the path and non-default port; unresolved duplicate ids stop startup with a clear configura
improvedCustom Elementor widget guidance uses targeted native edits. Agents are told to read the live third-party widget control schema, find the stable element id, update only changed settings, and verify the result instead of
July 20, 2026
A native MCP write that timed out in the client and then succeeded on a replay-safe retry looked like one healthy call in the MCP quality da
fixA native MCP write that timed out in the client and then succeeded on a replay-safe retry looked like one healthy call in the MCP quality dashboard. The durable queue keyed its local row and the central upsert by the sta
fixNative MCP writes and approvals were classified as reads. Ability IDs such as respira/wordpress-update-element only lost the first namespace prefix during normalization, leaving wordpress_update_element, which did not ma
July 20, 2026
Divi 4: a row nested inside a column (a "specialty" layout) could lose its specialty structure during from-scratch page generation, leaving
fixDivi 4: a row nested inside a column (a "specialty" layout) could lose its specialty structure during from-scratch page generation, leaving the section unopenable in the Visual Builder even though the frontend and update
July 20, 2026
Beaver Builder: build_page could produce a page that renders completely blank while every safety check reported success
fixBeaver Builder: build_page could produce a page that renders completely blank while every safety check reported success. A typed row node whose columns/cols key held column specs (the documented shape) skipped the mandat
fixElementor: editing a widget's children could silently do nothing, and restoring the pre-edit snapshot afterward would not always undo the damage. update_element's generic children update key was never renamed to Elemento
July 19, 2026
Hosted MCP Beaver Builder injections no longer collapse a real node array into one empty module
fixHosted MCP Beaver Builder injections no longer collapse a real node array into one empty module. The hosted tool's object-valued content schema led clients to send the valid round-trip shape {content:[...]}. Beaver's nor
July 19, 2026
Oxygen 6: editing an element's design (typography, spacing, layout) after it was already built silently dropped almost every property except
fixOxygen 6: editing an element's design (typography, spacing, layout) after it was already built silently dropped almost every property except color. update_element's own design update key is a nested bucket (design.typogr
July 19, 2026
tools/list no longer performs three sequential live site checks
fixtools/list no longer performs three sequential live site checks. WooCommerce detection, ACF detection, and builder filtering share one cached, two-second-bounded context fetch, avoiding first-handshake disconnects on slo
July 18, 2026
Bricks append lost a new html element's settings
fixBricks append lost a new html element's settings. inject_builder_content in append mode (and build_page) wrote a fresh type: "html" element with its markup stranded under settings.html/settings.content — keys Bricks' rea
fixDivi 4 corrupted a row nested inside a column. build_divi_shortcodes() emitted a row built as the child of a column with the *same* shortcode tag names (et_pb_row/et_pb_column) as its own parent row. Respira's shortcode
fixA truncated write could leave a corrupted partial structure behind. update_builder_module() wrote to the database *before* checking whether the save was truncated, so a caught truncation error still left whatever partial
fixupdate_module could report success on a write that changed nothing. The response only reflected the absence of a thrown error, never confirming the write actually landed. Ported the same false-success no-op detector upda
July 18, 2026
Replay-safe writes across both Respira REST and the native MCP endpoint
addReplay-safe writes across both Respira REST and the native MCP endpoint. Mutations carrying an Idempotency-Key acquire a credential-scoped atomic lock and cache their successful response for ten minutes. A retry with the
addTimeout-safe native MCP background writes. Every native write schema now accepts _respira_async: true; the call returns a job id immediately, WordPress executes the ability under the original user and key scope through W
addNative connection self-diagnostic. respira_diagnose_connection reports the real transport mode (independent stateless HTTP POSTs, not a persistent write channel), stable session, PHP limits, plugin/client versions, idemp
addDurable native MCP quality telemetry. A started event is persisted before ability execution and completed in place afterward, so proxy/PHP terminations show as incomplete instead of disappearing. Delivery runs off the re
addWrite-stage timing for update_element. Responses now separate target resolution, builder detection, before/after snapshots, canonical reads, builder write, cache/verification, and total duration so a slow host can be dis
changeNative MCP sessions now survive stateless POST boundaries. Clients can echo Mcp-Session-Id; clients that do not are correlated through a six-hour credential/user-agent fingerprint stored only inside WordPress. Stable ses
July 18, 2026
Plugin delete/install/update could fatal with an undefined-function error
fixPlugin delete/install/update could fatal with an undefined-function error. delete_plugins()/Plugin_Upgrader call WordPress's filesystem-credential functions directly, which a normal wp-admin page load has already bootstr
fixDivi 5 contact forms lost every custom field. respira_add_form wrote the caller's fields array as a flat attribute on the divi/contact-form module, but Divi 5 renders custom fields from divi/contact-field **child** modul
fixACF repeater/flexible-content writes went missing from ACF's own read path. Sending a repeater or flexible-content field through the generic meta parameter on update_page/update_post/update_custom_post/create_custom_post
fixBricks header/footer/template content was invisible to search and query tools. Bricks stores that content under one of several possible meta keys depending on the install (_bricks_page_content_2, _bricks_page_header_2, _
fixOxygen 6 code blocks stayed empty on the canvas. create_code_block() wrote content under the meta key for the pre-swap element type instead of html_code, the key OxygenElements\HtmlCode actually reads, so the block exist
fixbatch_update validation errors were missing their HTTP status code. A failed element lookup or an unknown operation in a batch returned a WP_Error with no explicit status, which WordPress then defaults to 500 — turning a
July 18, 2026
Windows absolute paths and file:// URIs work in upload_media
fixWindows absolute paths and file:// URIs work in upload_media
fixdelete_media now forwards approval_token and force, allowing the approval flow to complete
July 18, 2026
Interrupted writes are no longer retried as if they were reads
fixInterrupted writes are no longer retried as if they were reads. Every connector mutation now carries a stable Idempotency-Key. Reads still retry transient 5xx and connection failures, but writes retry only 502/503/504 re
fixTelemetry delivery survives short network and dashboard outages. Failed batches return to a bounded queue with exponential backoff instead of being discarded. A rejected scoped token is cleared and reminted on the next a
changeLocal WordPress API keys no longer authenticate central telemetry. With plugin 7.5.46+, the connector exchanges its local credential inside WordPress for a revocable rp_mcp_* token bound to that licensed site. Local resp
changeConnection-quality events can distinguish retry from sweep. Events now include a per-process-secret HMAC of canonical arguments, stable session/call metadata, transport mode, connector/plugin versions, separate tool and
July 18, 2026
Every respira_acf_* tool was unreachable
fixEvery respira_acf_* tool was unreachable. normalizeToolName() rewrites respira_* names to wordpress_* before dispatch, but the ACF dispatcher only matched the original names. Normalized ACF names now map back to their re
fixDashboard site-token 401s lost their specific reason. Invalid/stale token and inactive-license WP error codes now survive as the thrown error name instead of collapsing into a generic Error telemetry bucket
July 17, 2026
Eight STAGGS product-configurator tools, bringing the WooCommerce surface to 87 tools
addEight STAGGS product-configurator tools, bringing the WooCommerce surface to 87 tools. Agents can inspect configurator status, enable or disable it per product, and read/write allow-listed attribute and plugin state with
"Get the add-on" led paying customers to a marketing page
fix"Get the add-on" led paying customers to a marketing page. A customer who purchased a subscription including the WooCommerce Add-on clicked the button in wp-admin and landed on the add-on's marketing page with no downloa
July 16, 2026
Add-ons screen showed "21 tools" for the WooCommerce add-on regardless of version
fixAdd-ons screen showed "21 tools" for the WooCommerce add-on regardless of version. The badge was hardcoded to the pre-v3.0 surface, so an up-to-date site running add-on v3.1 (79 tools) still advertised 21 in its own admi
July 16, 2026
Stale launch banners retired
fixStale launch banners retired. The "Skills are live" (v4.0.9) and "v5.2.0 Elemental is here" one-off notices computed their 7-day display window from an option stamped on first render, so every fresh install replayed mont
July 16, 2026
Native connector (WebMCP) support for WooCommerce Add-on v3.1 "Agent-Ready Commerce"
addNative connector (WebMCP) support for WooCommerce Add-on v3.1 "Agent-Ready Commerce". The plugin's native MCP connector now registers and dispatches the 23 new v3.1 tools: feeds (configure/generate/status/validate/catego
July 16, 2026
A customer whose free trial had expired had no visible way to enter a newly-purchased license key
fixA customer whose free trial had expired had no visible way to enter a newly-purchased license key. The license screen only showed the key-entry field when no key was present or the status was inactive; an expired trial k
July 16, 2026
Native connector (WebMCP/ChatGPT) now surfaces the WooCommerce add-on's full v3.0.1 surface: 56 tools, up from 21
addNative connector (WebMCP/ChatGPT) now surfaces the WooCommerce add-on's full v3.0.1 surface: 56 tools, up from 21. The 35 additions mirror the MCP server: catalog, pricing, inventory and storefront tools that were previo
fixVersion skew between the plugin and the WooCommerce add-on can no longer advertise tools the add-on can't execute. The 20 tools whose REST routes only exist in add-on v3.0+ are hidden from tools/list when an older add-on
July 16, 2026
Sites added on the dashboard after connector startup self-heal into the live session
fixSites added on the dashboard after connector startup self-heal into the live session. list_sites and switch_site refresh the account inventory, merge missing sites by id/normalized URL, and work under both file config an
July 16, 2026
23 new WooCommerce tools — Agent-Ready Commerce (79 total, up from 56)
add23 new WooCommerce tools — Agent-Ready Commerce (79 total, up from 56). Requires add-on v3.1.0. Product feeds in six formats with a store llms.txt (configure_feed, generate_feed, get_feed_status, validate_feed, set_feed_
July 16, 2026
35 new WooCommerce tools — the add-on's full commerce surface (56 total, up from 21)
add35 new WooCommerce tools — the add-on's full commerce surface (56 total, up from 21). Completes the commerce rollout that began in June; thanks to D.S. for flagging that his MCP client was not seeing the full surface. Ne
improvedA missing /woocommerce/ route now explains itself. When a Woo tool hits a site running an add-on older than the tool, the rest_no_route error is enriched with "update the Respira WooCommerce Add-on (v3.0+)" instead of 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.
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.