{"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-13T21:35:33","modified_gmt":"2026-07-13T21:35:33","slug":"vybe-eye-connector","status":"publish","type":"plugin","link":"https:\/\/dsb.wordpress.org\/plugins\/vybe-eye-connector\/","author":23530829,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0.1","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-13 21:35:33","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":41,"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"}},"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"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3606742,"resolution":"1","location":"assets","locale":"","width":1200,"height":864}},"screenshots":[]},"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":""}],"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<\/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.<\/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>. It does not transmit page content, visitor\ndata, or personal data.<\/li>\n<\/ul>\n\n<p>Data sent: pairing code, generated public key, WordPress version, change IDs,\nand per-change outcome hashes. Data received: the SEO change instructions\n(titles, meta descriptions, JSON-LD, alt text, internal links, redirects) you\napproved in your VybeFind workspace.<\/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.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:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338628"}],"author":[{"embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vybefind"}],"wp:attachment":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338628"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338628"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338628"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338628"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338628"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}