{"id":338628,"date":"2026-07-13T21:35:46","date_gmt":"2026-07-13T21:35:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/vybe-eye-connector\/"},"modified":"2026-07-19T15:55:24","modified_gmt":"2026-07-19T15:55:24","slug":"vybe-eye-connector","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/vybe-eye-connector\/","author":23530829,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Vybe Eye Connector","header_author":"VybeFind","header_description":"Securely applies VybeFind-approved SEO changes (titles, meta, schema, alt text, internal links, redirects) to this site \u2014 with a full change log, drift detection, and one-click rollback.","assets_banners_color":"7e8387","last_updated":"2026-07-19 15:55:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/vybefind.com\/wordpress","header_author_uri":"https:\/\/vybefind.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":74,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"vybefind","date":"2026-07-13 21:35:33"},"1.1.0":{"tag":"1.1.0","author":"vybefind","date":"2026-07-19 15:55:24"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3606736,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3606736,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3606736,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3606736,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3606742,"resolution":"1","location":"assets","locale":"","width":1200,"height":864}},"screenshots":{"1":"The Vybe Eye Connector settings screen \u2014 connection status plus the live change log, with drift detection and one-click rollback on every applied change."}},"plugin_section":[],"plugin_tags":[569,726,1117,186,271424],"plugin_category":[55],"plugin_contributors":[271425],"plugin_business_model":[],"class_list":["post-338628","plugin","type-plugin","status-publish","hentry","plugin_tags-automation","plugin_tags-redirects","plugin_tags-schema","plugin_tags-seo","plugin_tags-vybefind","plugin_category-seo-and-marketing","plugin_contributors-vybefind","plugin_committers-vybefind"],"banners":{"banner":"https:\/\/ps.w.org\/vybe-eye-connector\/assets\/banner-772x250.png?rev=3606736","banner_2x":"https:\/\/ps.w.org\/vybe-eye-connector\/assets\/banner-1544x500.png?rev=3606736","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vybe-eye-connector\/assets\/icon-128x128.png?rev=3606736","icon_2x":"https:\/\/ps.w.org\/vybe-eye-connector\/assets\/icon-256x256.png?rev=3606736","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vybe-eye-connector\/assets\/screenshot-1.png?rev=3606742","caption":"The Vybe Eye Connector settings screen \u2014 connection status plus the live change log, with drift detection and one-click rollback on every applied change."}],"raw_content":"<!--section=description-->\n<p>Vybe Eye Connector is the WordPress side of the VybeFind Execution Layer. It\nrequires an active VybeFind account (https:\/\/vybefind.com) \u2014 the plugin is the\nsite-side agent for that service and does nothing on its own until paired. Once\npaired with your VybeFind workspace, it pulls the changes your team has approved\nin the Execution console and applies them in place:<\/p>\n\n<ul>\n<li>Title tags and meta descriptions \u2014 via Yoast, Rank Math, or All in One SEO\nwhen present, or a native fallback when no SEO plugin is installed.<\/li>\n<li>JSON-LD structured data \u2014 injected into the page head, idempotently.<\/li>\n<li>Image alt text.<\/li>\n<li>Internal links \u2014 inserted into the target post content, de-duplicated.<\/li>\n<li>301 redirects.<\/li>\n<li>New pages or posts, created from content you approved in VybeFind. <strong>New\ncontent is created as a draft by default<\/strong> so you can review it before it goes\nlive; publishing immediately is opt-in per site from your VybeFind workspace.\nIf a page already exists at the target slug the plugin uses that page instead\nof creating a second one, so a retry can never produce duplicate pages.<\/li>\n<\/ul>\n\n<p>Every applied change is recorded locally with a hash of the value it wrote, so\nthe plugin can detect <strong>drift<\/strong> (something later changed the value out from\nunder it) and offer <strong>one-click rollback<\/strong> to the previous value.<\/p>\n\n<h3>How pairing works<\/h3>\n\n<ol>\n<li>In VybeFind, open <strong>Execution<\/strong> and click <strong>Generate pairing code<\/strong> for your\nsite.<\/li>\n<li>In WordPress, go to <strong>Settings \u2192 Vybe Eye Connector<\/strong>, paste the one-time code,\nand click <strong>Pair site<\/strong>. That is the only field to fill in \u2014 the plugin\nconnects to VybeFind at https:\/\/vybefind.com by default. (Agency or\nself-hosted workspaces can point at a different host under <strong>Advanced<\/strong>.) The\nplugin generates a local keypair, exchanges the code for a per-site bearer\ntoken, and stores it privately (never shown again).<\/li>\n<li>The plugin polls VybeFind every 15 minutes (WP-Cron). Each poll pulls pending\nchanges as an HMAC-signed envelope, verifies the signature, applies each\nchange, and reports the outcome back.<\/li>\n<\/ol>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the VybeFind platform (https:\/\/vybefind.com), the SaaS\nservice it is the WordPress client for. An active VybeFind account is required;\nthe plugin performs no external communication until you pair it with a workspace.<\/p>\n\n<p>When and why it connects:<\/p>\n\n<ul>\n<li><strong>At pairing (once, when you click \"Pair site\").<\/strong> The plugin sends your\none-time pairing code, a locally generated public key, and your WordPress\nversion to <code>https:\/\/&lt;your-platform-host&gt;\/api\/wp\/pair<\/code> in exchange for a\nper-site bearer token. The platform host is the URL you paste at pairing\n(VybeFind-hosted by default); all later requests are pinned to that host.<\/li>\n<li><strong>Every 15 minutes (WP-Cron poll).<\/strong> The plugin requests pending approved\nchanges from <code>\/api\/wp\/changes<\/code> using the bearer token. No site content is\nuploaded on this request \u2014 it only pulls the change instructions your team\napproved in VybeFind. Since 1.1.0 those instructions may include the full body\ntext of a new page or post to create (see below).<\/li>\n<li><strong>After applying each change.<\/strong> The plugin reports the outcome\n(applied \/ drifted \/ rolled_back \/ failed) and a hash of the value it wrote\nto <code>\/api\/wp\/changes\/&lt;id&gt;\/status<\/code>. When it creates a page it also reports the\nresulting post ID and its permalink, so the platform can update that same page\nlater instead of creating a duplicate. It does not transmit your existing page\ncontent, visitor data, or personal data.<\/li>\n<\/ul>\n\n<p>Data sent: pairing code, generated public key, WordPress version, connector\nversion, change IDs, per-change outcome hashes, and \u2014 for created pages only \u2014\nthe new post ID and its public permalink. Data received: the change instructions\nyou approved in your VybeFind workspace (titles, meta descriptions, JSON-LD, alt\ntext, internal links, redirects, and since 1.1.0 the title, slug and body content\nof new pages to create).<\/p>\n\n<p>Your use of the VybeFind service is governed by its terms and privacy policy:<\/p>\n\n<ul>\n<li>Terms of Service: https:\/\/vybefind.com\/legal\/terms<\/li>\n<li>Privacy Policy: https:\/\/vybefind.com\/legal\/privacy<\/li>\n<\/ul>\n\n<h3>Security<\/h3>\n\n<ul>\n<li>The per-site bearer token and the signing keypair are stored as non-autoloaded\noptions and never printed back into the admin UI.<\/li>\n<li>Every changes envelope from the platform is HMAC-verified before anything is\napplied \u2014 unsigned or tampered payloads are refused (fail-closed).<\/li>\n<li>All admin actions are capability- (manage_options) and nonce-guarded.<\/li>\n<li>Outbound requests only ever go to the platform URL saved at pairing.<\/li>\n<\/ul>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: the connector can create a page or post from content approved in your\nVybeFind workspace. Previously it could only edit pages that already existed,\nso approved articles had to be published by hand.<\/li>\n<li>Safe by default: created content is a <strong>draft<\/strong> unless you explicitly enable\nautomatic publishing for that site. An unrecognised status is treated as draft,\nso nothing goes live on your site unless you asked for it.<\/li>\n<li>No duplicates: if a page already exists at the target slug, the plugin adopts\nthat page and reports its ID rather than creating a competing second page.<\/li>\n<li>Post body content is passed through wp_kses_post() before insertion, so only\nmarkup WordPress already permits in post content can be written.<\/li>\n<li>The connector now reports its own version at pairing, so the platform can tell\nwhich features a site supports and withholds anything this build cannot apply\ninstead of sending changes that would fail.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security\/hardening: JSON-LD schema is now escaped late on output via\nwp_json_encode() with JSON_HEX_TAG\/HEX_AMP\/HEX_APOS\/HEX_QUOT so it can never\nbreak out of the  tag, and only well-formed JSON objects are stored\n(malformed input is rejected on write). Addresses the plugin-review escaping note.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: pairing handshake, 15-minute pull-apply loop, Yoast\/RankMath\/\nAIOSEO adapters + native fallback, JSON-LD injection, alt text, internal links,\nredirects, local change log, drift detection, and one-click rollback.<\/li>\n<\/ul>","raw_excerpt":"Securely applies VybeFind-approved SEO changes to this WordPress site \u2014 with a full change log, drift detection, and one-click rollback.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338628"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vybefind"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338628"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338628"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338628"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338628"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338628"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}