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.
Beaver Builder duplicate/restore fataled with Cannot use object of type stdClass as array (box.php:61)
fixBeaver Builder duplicate/restore fataled with Cannot use object of type stdClass as array (box.php:61). The write path (normalize_bb_layout_for_write) already coerced every compound module setting value (margin/padding/b
June 20, 2026
Beaver Builder writes no longer fatal on compound settings
fixBeaver Builder writes no longer fatal on compound settings. Respira stored compound Beaver settings (border, place_content, typography, dimension and friends) as objects, but Beaver reads every compound setting value wit
fixDuplicating a Bricks section no longer throws. Bricks stores a flat element list where each element references its children by ID string, but the element-duplicate path used a nested-tree clone that expected each child t
fixinject-builder-content now accepts raw HTML. Passing HTML (a string, or { html: "..." }) to inject-builder-content was refused with "did not map to any Beaver Builder nodes", even though convert-html-to-builder accepted
fixEditing a Respira duplicate edits it in place. Hardened duplicate detection so a post that is already a Respira duplicate is always recognised and edited directly, instead of occasionally creating a duplicate of the dupl
June 18, 2026
Bricks now matches its real control contract
addBricks now matches its real control contract. A scanner captures every Bricks element's full runtime control schema (75 elements, the complete control set) into a committed snapshot, and the element registry + schema now
addOff-contract Bricks controls are flagged (warn mode). A settings validator checks each element's settings against its real control schema and surfaces unknown controls (with a "did you mean") in the write notes. It annot
addThe Bricks component library is reachable. Respira now reads the bricks_components option: find/replace and the SEO/readability analyzers resolve component instances (cid + properties) so component-owned text is no longe
fixBricks patterns mint native 6-character IDs. The pattern library still produced long prefixed ids; it now uses the same native 6-character generator as the rest of the Bricks write path, so pattern-injected elements matc
fixHTML-to-builder keeps blockquotes. Converting HTML with a <blockquote> produced a plain text module that dropped the quote; the converter now keeps the <blockquote> wrapper and its class so theme quote styles apply
fixHTML-to-builder preserves section order on nested layouts (Beaver). Sections wrapping nested <div>s were reordered because the converter produced invalid row-in-row structures the builder reflowed; the Beaver hierarchy p
June 17, 2026
Bricks elements now use Bricks' native 6-character IDs
fixBricks elements now use Bricks' native 6-character IDs. Every Respira path that created a Bricks element (build_page, HTML convert, section presets, in-place inserts) minted long respira_-prefixed ids of 21 or more chara
fixSEO, schema, and readability checks now read Bricks content. Bricks stores the page in postmeta, not post_content, so the analyzers reported 0 words, 0 headings, no images, and no JSON-LD on Bricks pages that render fine
fixBricks content extraction no longer fails its own output schema. extract-builder-content could return a null warning on a valid Bricks page, which the MCP output schema rejected ("output[warning] is not of type string").
fixOxygen 6 accepts its real elements in build_page. Multi-element types the builder advertises (Columns, Column, Div, Grid, Accordion, Tabs, TextLink, and more) were rejected with a 422, because the write path validated wi
fixHTML-to-builder convert keeps CSS classes and image sources. With preserve_tokens on, custom classes on the source HTML (for example .btn) were dropped, and content images came in without a source so they did not render.
fixDuplicating a Beaver Builder page with PowerPack or UABB modules no longer corrupts it. The duplicate path copied the Beaver layout without the canonical type-reshape that the inject and restore paths use, so nested modu
June 17, 2026
Bricks Components survive Respira writes
fixBricks Components survive Respira writes. A Component instance carries cid (the component template) and properties (per-instance overrides) at the element root. The write-path normalizer rebuilt every element from a fixe
fixBricks writes no longer report a false "no-op". The write-verification signature cast the Bricks postmeta array straight to a string ("Array"), so every write looked byte-identical (pre_write_bytes:6, bytes_changed:0) an
fixHTML→Beaver convert builds real content, not a blank page. convert-html-to-builder with builder:beaver built the module tree but every module came back empty (blank page, success:true). Two causes: the beaver slug wasn't
fixBeaver in-place tools. extract-builder-content returned diagnostics: null and failed the tool's object schema; it now always returns an object. add-html accepts html as an alias for content. The add-section column build
fixDivi 5 Custom CSS edits stop reporting a false warning. update_module wrote the top-level css group correctly but flagged it unknown_attribute_group, which read as a silent drop. css is a universal Divi 5 group and is no
fixbuild_page no longer rejects real full pages. The 200-element limit blocked a typical multi-section page (a 14-section Divi page is ~200+ nodes). Raised to 1000 (still filterable)
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
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.