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.
change10 skills brought to catalog parity, plus Figma to Elementor, page-template-library, prime-the-agent, stale-content-detector. 41 skills total.
changeMigration skills rewritten to be snapshot-safe with surgical find/update/batch.
changeconnect-site no longer assumes it can write to ~/.respira; it hands you the move command instead.
changeInstall docs corrected. The page claimed Cowork installs Node for you and would prompt if it was missing. Neither is true, and a Windows customer lost an evening to it. The prerequisite now says to install Node yourself,
changeTwo stale counts fixed against their sources: 41 skills (was thirty), 17 page builders (was 16).
August 26, 2026
A Bricks append no longer reports that it duplicated your page
fixA Bricks append no longer reports that it duplicated your page. Appending one container to a 161 element page said 319 elements total, which reads as the whole tree having been copied. The page was correct the entire tim
fixEditing one Bricks setting no longer looks like it edited several. Changing a heading's text also listed that element's typography as changed, which made a strict review step refuse to approve a write that had done exact
fixA builder without modules now tells you which tool does work. update_module on a Gutenberg table answered that module level updates are not supported and stopped there, which is true and a dead end. Eleven of the sixteen
fixA page Respira could not read is no longer reported as a write that failed. This one shipped in 8.7.1 and missed its changelog entry, so here it is properly. After editing a live Elementor page, Respira fetched the publi
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 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 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
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
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
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
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.