openvibers/openvibe.sites Commits
Sites: openvibe.actor leaves Sites (OpenVibe.Actor serves it: the task router and OpenVibe's own agent); contracts v0.115.0. (#18)
Changes
@@@ -13,7 +13,7 @@ Both are `noindex`. The existing page presentation is held in `notice-pages/`; t## Frozen product pages--`frozen.json` lists all 26 product domains, including OpenVibe.Actor. Their committed front pages remain available as static files with their original indexing, status, and sitemaps. The build does not regenerate them. `node build.js --check` verifies that each frozen domain still has an index page and a Sites vhost, while checking that notice outputs are current. The repository facts snapshot is historical data, not a build input.++`frozen.json` lists all 25 product domains. Their committed front pages remain available as static files with their original indexing, status, and sitemaps. The build does not regenerate them. `node build.js --check` verifies that each frozen domain still has an index page and a Sites vhost, while checking that notice outputs are current. The repository facts snapshot is historical data, not a build input.## Product catalog@@@ -37,6 +37,6 @@ The pinned `openvibe-contracts` release supplies the catalog `sites.json` mirrorReport security issues through [SECURITY.md](SECURITY.md).<!-- versions:start -->--- openvibe-contracts: v0.114.0++- openvibe-contracts: v0.115.0- openvibe-shared: v2.13.2<!-- versions:end -->@@@ -23,7 +23,6 @@"openvibe.help","openvibe.bot","openvibe.watch",-- "openvibe.actor","openre.stream","auth.openvibe.network","api.openvibe.network",@@@ -32,12 +31,12 @@"realtime.openvibe.network (closed notice)","status.openvibe.network (status notice)"],-- "contracts": "openvibe-contracts v0.114.0: sites.json mirrors products.catalog() (scripts/sync-catalog.js)",++ "contracts": "openvibe-contracts v0.115.0: sites.json mirrors products.catalog() (scripts/sync-catalog.js)","shared": "openvibe-shared v2.13.2","deployed": true,"deployment": "Deployed with `sudo ovhost deploy sites --restart` (OpenVibe.Host strategy static-build since the 2026-09-27 cutover): /opt/openvibe.sites, nginx serves dist/<domain>/ through deploy/nginx/<domain>.conf; no unit, no port, no env file","features": [-- "two generated notices and 26 frozen product domains",++ "two generated notices and 25 frozen product domains","sites.json generated from the OpenVibe.Contracts product catalog","notice pages use preserved presentation; product pages are no longer generated","the pinned OpenVibe Frame served from dist/_shared/",ddeleted file mode 100644@@@ -1,111 +0,0 @@--# openvibe.actor — static front page (OpenVibe.Sites). Generated by build.js; edit notices.json, not this.--server {-- listen 80;-- listen [::]:80;-- server_name openvibe.actor www.openvibe.actor;-- return 301 https://openvibe.actor$request_uri;--}----server {-- listen 443 ssl;-- listen [::]:443 ssl;-- http2 on;-- server_name www.openvibe.actor;-- ssl_certificate /etc/letsencrypt/live/openvibe.actor/fullchain.pem;-- ssl_certificate_key /etc/letsencrypt/live/openvibe.actor/privkey.pem;-- return 301 https://openvibe.actor$request_uri;--}----server {-- listen 443 ssl;-- listen [::]:443 ssl;-- http2 on;-- server_name openvibe.actor;-- include snippets/security-txt.conf; # /.well-known/security.txt (host file; SECURITY.md in every repo)---- ssl_certificate /etc/letsencrypt/live/openvibe.actor/fullchain.pem;-- ssl_certificate_key /etc/letsencrypt/live/openvibe.actor/privkey.pem;---- root /opt/openvibe.sites/dist/openvibe.actor;-- index index.html;---- access_log /var/log/nginx/openvibe.actor.access.log;-- error_log /var/log/nginx/openvibe.actor.error.log;---- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;---- gzip on;-- gzip_types text/html text/plain text/css application/json application/javascript application/xml image/svg+xml application/manifest+json;---- # An add_header inside a location replaces the server's list (nginx does not merge them), so every-- # location that sets its own header repeats the security headers.-- location = /robots.txt {-- add_header Cache-Control "public, max-age=3600";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }-- location = /sitemap.xml {-- types { application/xml xml; }-- add_header Cache-Control "public, max-age=3600";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }-- location = /manifest.webmanifest {-- types { application/manifest+json webmanifest; }-- add_header Cache-Control "public, max-age=86400";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }-- location = /status.json {-- add_header Cache-Control "public, max-age=600";-- add_header Access-Control-Allow-Origin "*";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }-- location = /release.json {-- add_header Cache-Control "no-cache";-- add_header Access-Control-Allow-Origin "*";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }-- # This repository's pinned shared browser files (navbar, footer, theme loader…), one copy for every Sites-- # vhost. Pages ask for them content-addressed (?v=); the few loaded without it (navbar's companions) get-- # the same hour.-- location ^~ /shared/ {-- alias /opt/openvibe.sites/dist/_shared/;-- add_header Cache-Control "public, max-age=3600";-- add_header Access-Control-Allow-Origin "*";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- }---- # Only the files in dist/ exist; anything else is a real 404 with a page, never the front page.-- error_page 404 /404.html;-- location = /404.html { internal; }---- location / {-- add_header Cache-Control "public, max-age=600";-- add_header X-Content-Type-Options nosniff always;-- add_header X-Frame-Options SAMEORIGIN always;-- add_header Referrer-Policy strict-origin-when-cross-origin always;-- add_header Strict-Transport-Security "max-age=31536000" always;-- try_files $uri $uri.html $uri/ =404;-- }---- location ~ /\.(?!well-known) { deny all; }--}ddeleted file mode 100644@@@ -1,35 +0,0 @@--<!DOCTYPE html>--<html lang="en">--<head>--<meta charset="utf-8">--<meta name="viewport" content="width=device-width, initial-scale=1">--<title>Not found · OpenVibe.Actor</title>--<meta name="robots" content="noindex">--<meta name="theme-color" content="#a78bfa">--<link rel="icon" type="image/svg+xml" data-ov-icon="network" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">--<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>--<style>--*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}--:root{--bg-primary:#0a0f1c;--bg-secondary:#101828;--border:#1f2d47;--text-primary:#e6edf7;--text-secondary:#96a7c2;--site:#a78bfa}--body{background:var(--bg-primary);color:var(--text-primary);font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;min-height:100vh;display:grid;place-items:center;padding:24px 16px}--main{max-width:560px;text-align:center}--.code{font-size:14px;font-weight:700;letter-spacing:.2em;color:var(--site)}--h1{font-size:clamp(28px,5vw,40px);font-weight:800;letter-spacing:-.8px;margin:10px 0 12px}--p{color:var(--text-secondary);font-size:15px;line-height:1.65}--.links{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}--a{display:inline-block;padding:11px 18px;border-radius:12px;font-size:14px;font-weight:600;text-decoration:none;border:1px solid var(--border);color:var(--text-primary);background:var(--bg-secondary)}--a:first-child{background:var(--site);border-color:var(--site);color:#0b0d10}--</style>--</head>--<body>--<main>-- <p class="code">404</p>-- <h1>This page does not exist</h1>-- <p>openvibe.actor has only its front page and legal pages for now. The address you followed is not one of them.</p>-- <div class="links">-- <a href="https://openvibe.actor/">OpenVibe.Actor</a>-- <a href="https://openvibe.network/">OpenVibe.Network</a>-- </div>--</main>--</body>--</html>ddeleted file mode 100644@@@ -1,109 +0,0 @@--<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">--<title>DMCA & Copyright — OpenVibe.Actor</title>--<meta name="description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">--<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">--<link rel="canonical" href="https://openvibe.actor/dmca">--<meta property="og:type" content="article">--<meta property="og:site_name" content="OpenVibe.Actor">--<meta property="og:title" content="DMCA & Copyright — OpenVibe.Actor">--<meta property="og:description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">--<meta property="og:url" content="https://openvibe.actor/dmca">--<meta property="og:locale" content="en_US">--<meta name="twitter:card" content="summary">--<meta name="twitter:title" content="DMCA & Copyright — OpenVibe.Actor">--<meta name="twitter:description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">--<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">--<meta name="theme-color" content="#0d131d">--<meta name="color-scheme" content="dark">--<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>--<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}--.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}--.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}--.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}--.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}--.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}--.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>--<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>--<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>DMCA & Copyright</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>--<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">Our position</a></li><li><a href="#s2">Before you send a notice</a></li><li><a href="#s3">Send a takedown notice</a></li><li><a href="#s4">What happens next</a></li><li><a href="#s5">Repeat infringers and false claims</a></li><li><a href="#s6">Other complaints</a></li></ol></nav>--<section><h2 id="s1">Our position</h2><p>OpenVibe.Actor respects copyright and responds to clear notices of alleged infringement under the Digital Millennium Copyright Act (17 U.S.C. § 512). OpenVibe.Actor currently publishes only its own material and does not host uploads from the public.</p></section>--<section><h2 id="s2">Before you send a notice</h2><p>Consider whether the use is permitted, for example as fair use, commentary, criticism, or under a licence. Notices must come from the copyright owner or someone authorised to act for them. Misrepresentations in a notice carry legal liability.</p></section>--<section><h2 id="s3">Send a takedown notice</h2><p>Email <a href="mailto:[email protected]">[email protected]</a> with all of the following:</p><ol><li>Your name, postal address, phone number and email address, and whom you represent.</li><li>The copyrighted work you say was infringed, or a representative list if there are several.</li><li>The exact URL on openvibe.actor of each item you want removed. General descriptions, search results and channel links are not enough to find it.</li><li>A statement that you have a good-faith belief the use is not authorised by the copyright owner, its agent or the law.</li><li>A statement, under penalty of perjury, that the information is accurate and that you are the owner or authorised to act for the owner.</li><li>Your physical or electronic signature.</li></ol></section>--<section><h2 id="s4">What happens next</h2><p>We remove or disable access to the material, tell the person who posted it, and give them a copy of your notice, including your contact details. We act on complete notices as quickly as we can, normally within a few business days. Incomplete notices get a reply saying what is missing.</p></section>--<section><h2 id="s5">Repeat infringers and false claims</h2><p>Accounts that receive repeated valid notices lose the ability to post and, in appropriate circumstances, are terminated across the network. Knowingly false notices and counter-notices carry liability under § 512(f); we refuse notices that are clearly abusive or automated without review.</p></section>--<section><h2 id="s6">Other complaints</h2><p>Trademark, privacy, impersonation, harassment and other non-copyright complaints go to the same address; say which kind of complaint it is and give the exact URL. Content that sexually exploits children should be reported to us immediately and to the <a href="https://report.cybertip.org/" rel="noopener">NCMEC CyberTipline</a> or your national hotline; we remove it and report it to the authorities.</p></section>--<nav class="ov-legal-more" aria-label="Other policies"><a href="/terms">Terms of Service</a><a href="/privacy">Privacy Policy</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">--.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;-- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}--.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}--.ovf-inner{max-width:1240px;margin:0 auto}--.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}--.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}--.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}--.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}--.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}--.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}--.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}--.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}--.ovf-brand--sm{font-size:.9rem}--.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}--.ovf-social{display:flex;gap:8px;margin-top:4px}--.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);-- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}--.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}--.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;-- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;-- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));-- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));-- animation:ovfIn .4s ease-out both}--@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}--.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}--.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}--.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;-- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}--.ovf-avatar img{width:100%;height:100%;object-fit:cover}--.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}--.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;-- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));-- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}--.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}--.ovf-account-links i{font-size:.72rem;opacity:.8}--.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;-- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));-- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}--.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}--.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}--.ovf [hidden],.ovf-account[hidden]{display:none!important}--.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}--.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}--.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}--.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}--@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}--@media (max-width:560px){-- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf-cols{gap:22px 16px}-- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}-- .ovf-legal-inline{justify-content:center}-- .ovf-account{flex-direction:column;align-items:flex-start}--}--@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}--.ovf{-webkit-tap-highlight-color:transparent}--:where(.ovf) :where(a,button):active{scale:.97}--:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}--@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">-- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>-- <nav class="ovf-compact-links" aria-label="Site links">---- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>-- <a href="https://openvibe.network/updates?site=network">Updates</a>-- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>-- </nav>-- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>-- <span class="ovf-compact-meta">Open source · 2026</span>-- </div></footer>--<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>--<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}--try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}--try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>--</body></html>\\ No newline at end of fileddeleted file mode 100644@@@ -1,439 +0,0 @@--<!DOCTYPE html>--<html lang="en">--<head>--<meta charset="utf-8">--<meta name="viewport" content="width=device-width, initial-scale=1">--<title>OpenVibe.Actor — Every AI agent, every device, one command console.</title>--<meta name="description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">--<meta name="keywords" content="ai agent router, openrouter for agents, ai agent that controls your computer, remote control computer with ai, self-hosted ai agent, computer use agent, ai command console, agent api, cloud ai agent, mcp server">--<meta name="robots" content="index, follow, max-image-preview:large">--<meta name="theme-color" content="#a78bfa">--<link rel="canonical" href="https://openvibe.actor/">--<link rel="icon" type="image/svg+xml" data-ov-icon="network" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">--<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>--<link rel="manifest" href="/manifest.webmanifest">--<link rel="alternate" type="text/html" hreflang="en" href="https://openvibe.actor/">--<meta property="og:type" content="website">--<meta property="og:site_name" content="OpenVibe.Actor">--<meta property="og:url" content="https://openvibe.actor/">--<meta property="og:title" content="OpenVibe.Actor — Every AI agent, every device, one command console.">--<meta property="og:description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">--<meta property="og:image" content="https://openvibe.network/assets/logo-512.png">--<meta property="og:image:alt" content="OpenVibe">--<meta name="twitter:card" content="summary">--<meta name="twitter:title" content="OpenVibe.Actor — Every AI agent, every device, one command console.">--<meta name="twitter:description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">--<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Every AI agent, every device, one command console.","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-03","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"Can an agent take full control of my computer?","acceptedAnswer":{"@type":"Answer","text":"Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first."}},{"@type":"Question","name":"Can I run Actor myself?","acceptedAnswer":{"@type":"Answer","text":"Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script>--<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>--<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>--<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>--<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">--<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>--<style>--*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}--:root{--bg-primary:#0a0f1c;--bg-secondary:#101828;--bg-card:#131c2e;--bg-hover:#1c2a44;--border:#1f2d47;--text-primary:#e6edf7;--text-secondary:#96a7c2;--text-muted:#7386a3;--accent:#3b82f6;--accent-light:#60a5fa;--accent-rgb:59,130,246;--on-accent:#fff;--site:#a78bfa;--site-rgb:167,139,250}--html{scroll-behavior:smooth}--body{background:var(--bg-primary);color:var(--text-primary);font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}--main{flex:1;position:relative}--.orbs{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}--.orbs i{position:absolute;border-radius:50%;filter:blur(90px);opacity:.16;animation:drift 26s ease-in-out infinite alternate}--.orbs i:nth-child(1){width:420px;height:420px;background:var(--site);top:-140px;left:-120px}--.orbs i:nth-child(2){width:360px;height:360px;background:var(--accent);top:40%;right:-140px;animation-delay:-9s}--.orbs i:nth-child(3){width:300px;height:300px;background:var(--site);bottom:-120px;left:38%;animation-delay:-17s}--@keyframes drift{0%{transform:translate(0,0) scale(1)}50%{transform:translate(-26px,36px) scale(1.07)}100%{transform:translate(34px,-28px) scale(.95)}}--.wrap{position:relative;z-index:1;max-width:1040px;margin:0 auto;padding:0 20px}--.hero{padding:84px 0 44px;text-align:center}--.hero .mark{display:inline-grid;place-items:center;width:84px;height:84px;border-radius:24px;background:rgba(var(--site-rgb),.12);border:1px solid rgba(var(--site-rgb),.35);color:var(--site);font-size:34px;margin-bottom:22px;box-shadow:0 20px 60px rgba(var(--site-rgb),.18);animation:rise .6s cubic-bezier(.2,.8,.2,1) both}--.hero .badge{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;border:1px solid var(--border);background:var(--bg-secondary);font-size:12px;font-weight:600;color:var(--text-secondary);letter-spacing:.3px;margin-bottom:22px;animation:rise .6s .05s cubic-bezier(.2,.8,.2,1) both}--.hero .badge b{color:var(--site)}--.hero h1{font-size:clamp(34px,6vw,58px);font-weight:800;letter-spacing:-1.4px;line-height:1.08;animation:rise .6s .1s cubic-bezier(.2,.8,.2,1) both}--.hero h1 .d{color:var(--site)}--.hero h1 .tld{color:var(--text-secondary)}--.hero .tag{font-size:clamp(18px,2.6vw,24px);font-weight:600;color:var(--text-primary);margin:18px 0 10px;animation:rise .6s .16s cubic-bezier(.2,.8,.2,1) both}--.hero p.lead{color:var(--text-secondary);font-size:16px;line-height:1.65;max-width:680px;margin:0 auto;animation:rise .6s .22s cubic-bezier(.2,.8,.2,1) both}--.ctas{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:30px;animation:rise .6s .3s cubic-bezier(.2,.8,.2,1) both}--.hero .status{margin:22px auto 0;max-width:720px;font-size:12.5px;line-height:1.7;color:var(--text-muted);border:1px dashed var(--border);border-radius:12px;padding:10px 14px;background:rgba(0,0,0,.15)}--.hero .status b{color:var(--site)}--.hero .status code{font-size:12px;color:var(--text-secondary);background:var(--bg-secondary);padding:1px 6px;border-radius:6px}--.hero .status a{color:var(--text-secondary)}--.btn{display:inline-flex;align-items:center;gap:9px;padding:12px 20px;border-radius:12px;font-size:14px;font-weight:600;text-decoration:none;border:1px solid var(--border);color:var(--text-primary);background:var(--bg-secondary);transition:transform .15s,border-color .15s,box-shadow .15s}--.btn:hover{transform:translateY(-1px);border-color:var(--site);box-shadow:0 10px 30px rgba(var(--site-rgb),.15)}--.btn-primary{background:var(--site);border-color:var(--site);color:#0b0d10}--.btn-primary:hover{filter:brightness(1.08)}--@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}--section{padding:36px 0}--h2{font-size:22px;font-weight:700;letter-spacing:-.3px;margin-bottom:6px}--.lead2{color:var(--text-secondary);font-size:14px;margin-bottom:20px}--.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}--.card{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:20px;transition:transform .2s,border-color .2s,box-shadow .2s;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:8px}--a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);box-shadow:0 16px 40px rgba(0,0,0,.35)}--.card .ic{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:rgba(var(--site-rgb),.12);color:var(--site);font-size:17px}--.card b{font-size:15px}--.card span{font-size:13px;color:var(--text-secondary);line-height:1.55}--.card .go{margin-top:auto;font-size:12.5px;font-weight:600;color:var(--site)}--.highlight .hl-card{border:1px solid rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.10);border-radius:18px;padding:22px 22px 18px}--.highlight h2{margin:0 0 8px}.highlight h2 i{color:var(--accent-light)}.highlight p{margin:0 0 10px}--.highlight ul{margin:0 0 14px;padding-left:20px}.highlight li{margin:4px 0}--.faq details{border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:12px 14px;margin:8px 0}--.faq summary{cursor:pointer;font-weight:600}.faq details p{margin:8px 0 0;opacity:.85}--.meanwhile .card .ic{background:rgba(var(--accent-rgb),.12);color:var(--accent-light)}--.net .card .ic{background:var(--bg-hover);color:var(--text-primary)}--.rooms{display:flex;flex-wrap:wrap;gap:8px}--.rooms a{font-size:12.5px;padding:7px 12px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary);text-decoration:none;transition:all .15s;background:var(--bg-secondary)}--.rooms a:hover{color:var(--text-primary);border-color:var(--site)}--.rooms a i{margin-right:6px;opacity:.8}--.strip{border:1px solid var(--border);border-radius:18px;background:var(--bg-secondary);padding:30px 26px;text-align:center;margin:10px 0 50px}--.strip h3{font-size:19px;font-weight:700;margin:12px 0 8px}--.strip p{font-size:14px;color:var(--text-secondary);max-width:600px;margin:0 auto 18px;line-height:1.6}--.strip .ov-mark{width:44px;height:44px}--.hero.split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:40px;align-items:center;text-align:left;padding-top:64px}--.hero.split .ctas{justify-content:flex-start}.hero.split p.lead{margin:0}--.viz{background:var(--bg-card);border:1px solid var(--border);border-radius:20px;padding:14px;box-shadow:0 30px 80px rgba(0,0,0,.45),0 0 0 1px rgba(var(--site-rgb),.08);animation:rise .7s .25s cubic-bezier(.2,.8,.2,1) both;text-align:left}--.viz figcaption{margin-top:10px;font-size:11.5px;color:var(--text-muted);text-align:center}--.viz-top{display:flex;align-items:center;gap:8px;font-size:13px;padding:2px 4px 12px}--.viz-top b{font-weight:700}.viz-top .muted{color:var(--text-muted)}--.viz-top .lat{margin-left:auto;font-size:12px;color:var(--site);background:rgba(var(--site-rgb),.1);border:1px solid rgba(var(--site-rgb),.3);padding:3px 9px;border-radius:999px}--.viz-top .dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.18)}--.viz-top .av{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:rgba(var(--site-rgb),.15);color:var(--site);font-size:13px}--.viz-video{position:relative;aspect-ratio:16/9;border-radius:14px;overflow:hidden;background:radial-gradient(120% 90% at 30% 20%,rgba(var(--site-rgb),.28),transparent 60%),linear-gradient(160deg,#1a2338,#0b1020 70%);border:1px solid var(--border)}--.viz-video::after{content:'';position:absolute;left:10%;right:10%;bottom:0;height:42%;background:linear-gradient(transparent,rgba(0,0,0,.35)),repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 1px,transparent 1px 38px);transform:perspective(220px) rotateX(58deg);transform-origin:bottom}--.viz-video .scan{position:absolute;inset:0;background:linear-gradient(transparent 0,rgba(255,255,255,.04) 50%,transparent 100%);background-size:100% 6px;opacity:.5}--.viz-video .onair{position:absolute;top:10px;left:10px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;background:rgba(239,68,68,.9);color:#fff}.viz-video .onair i{font-size:7px;vertical-align:2px;margin-right:3px}--.viz-video .cam{position:absolute;bottom:10px;right:10px;font-size:11px;color:#dbe4f5;background:rgba(0,0,0,.45);padding:3px 8px;border-radius:6px}--.viz-ctrl{display:flex;gap:14px;align-items:center;margin-top:12px}--.dpad{display:grid;grid-template-columns:repeat(3,34px);grid-template-rows:repeat(3,34px);gap:4px;flex:none}--.dpad span{display:grid;place-items:center;border-radius:9px;background:var(--bg-hover);color:var(--text-primary);font-size:15px;border:1px solid var(--border)}--.dpad .u{grid-area:1/2}.dpad .l{grid-area:2/1}.dpad .c{grid-area:2/2;background:rgba(var(--site-rgb),.15);border-color:rgba(var(--site-rgb),.35)}.dpad .r{grid-area:2/3}.dpad .d{grid-area:3/2}--.dpad .u{background:rgba(var(--site-rgb),.22);border-color:rgba(var(--site-rgb),.5)}--.viz-side{flex:1;min-width:0;display:grid;gap:8px}--.viz-side .keys{display:flex;flex-wrap:wrap;gap:6px}--.viz-side .keys span{font-size:11.5px;padding:5px 9px;border-radius:8px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary)}--.viz-side .meter{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text-muted)}--.viz-side .meter i{flex:1;height:6px;border-radius:9px;background:linear-gradient(90deg,#22c55e var(--v),var(--bg-hover) var(--v))}--.viz-side .meter b{color:var(--text-secondary);font-weight:600}--.viz-side .estop{justify-self:end;font-size:12px;font-weight:800;letter-spacing:.08em;color:#fff;background:#dc2626;border-radius:10px;padding:7px 16px;box-shadow:0 0 0 3px rgba(220,38,38,.25)}--.feed{list-style:none;display:grid;gap:8px;padding:2px}--.feed li{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;line-height:1.45;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary)}--.feed li i{color:#22c55e;margin-top:3px}--.feed li.ask{flex-wrap:wrap;border-color:rgba(var(--site-rgb),.45);background:rgba(var(--site-rgb),.08);color:var(--text-primary)}.feed li.ask i{color:var(--site)}.feed li.ask>span:first-of-type{flex:1;min-width:160px}--.feed .pills{display:flex;gap:6px;margin-left:auto}.feed .pills span{font-size:12px;font-weight:600;padding:4px 11px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}.feed .pills .ok{background:var(--site);border-color:var(--site);color:#0b0d10}--.steps{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;counter-reset:s}--.steps li{position:relative;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:20px 20px 20px;display:flex;flex-direction:column;gap:8px}--.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}--.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}--.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}--.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}--.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}--.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}--.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}--.cands{list-style:none;display:grid;gap:6px}--.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}--.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}--.cands li span{text-align:right;font-variant-numeric:tabular-nums}--.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}--.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}--.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}--.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}--.card.big{padding:24px}.card.big b{font-size:17px}--.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}--.chips span{font-size:12.5px;padding:6px 11px;border-radius:999px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary)}--.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}--.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}--@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}--@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}--@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}--</style>--</head>--<body>--<div class="orbs"><i></i><i></i><i></i></div>--<div id="navbar-mount"></div>--<main class="wrap">-- <header class="hero split"><div class="hero-main">-- <div class="mark"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div>-- <div class="badge"><span class="ov-mark" data-size="16" data-variant="actor"></span> Part of the OpenVibe network · <b>being built</b></div>-- <h1>OpenVibe<span class="d">.</span><span class="tld">Actor</span></h1>-- <div class="tag">Every AI agent, every device, one command console.</div>-- <p class="lead">OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.</p>-- <div class="ctas">-- <a class="btn btn-primary" href="https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F"><i class="fa-solid fa-right-to-bracket"></i> Sign in with OpenVibe</a>-- <a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> See the network</a>-- <a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>-- </div>-- </div>-- <figure class="viz" aria-label="Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected">-- <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> budget 50¢</span></div>-- <p class="task">Research five competitors of my shop and write a one-page brief with sources.</p>-- <div class="modes" aria-hidden="true"><span>Cheapest</span><span class="on">Balanced</span><span>Best</span><span>Fastest</span><span>Private</span></div>-- <ol class="cands" aria-hidden="true"><li class="pick"><i class="fa-solid fa-circle-nodes"></i><b>OpenVibe runtime</b><span>6¢</span><span>3 min</span><span>92%</span><em>picked</em></li><li><i class="fa-solid fa-cloud"></i><b>Hosted frontier agent</b><span>31¢</span><span>2 min</span><span>95%</span></li><li><i class="fa-solid fa-code"></i><b>Coding agent</b><span>12¢</span><span>4 min</span><span>81%</span></li><li><i class="fa-solid fa-lock"></i><b>Open model on OpenVibe</b><span>1¢</span><span>7 min</span><span>74%</span></li></ol>-- <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.</p>-- <figcaption>Design preview; the numbers are illustrative</figcaption>-- </figure>-- </header>------ <section id="what">-- <h2>How a task runs</h2>-- <p class="lead2">Send a task from the site, the API or any OpenVibe app. Actor does the rest.</p>-- <ol class="steps">-- <li><span class="n">1</span><b>Describe the task</b><span>Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with.</span></li>-- <li><span class="n">2</span><b>Actor picks the agent</b><span>It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why.</span></li>-- <li><span class="n">3</span><b>Checked, then delivered</b><span>A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent.</span></li>-- </ol>-- </section>------ <section>-- <h2>Modes</h2>-- <p class="lead2">Tell Actor what matters most. It balances the rest.</p>-- <div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-coins" aria-hidden="true"></i></div><b>Cheapest</b><span>The lowest expected cost that still meets the task's quality bar.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-scale-balanced" aria-hidden="true"></i></div><b>Balanced</b><span>The default: cost, quality and speed weighed together.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-trophy" aria-hidden="true"></i></div><b>Best</b><span>The highest chance of a right answer first time; cost comes second.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-bolt" aria-hidden="true"></i></div><b>Fastest</b><span>The shortest time to a checked result.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-lock" aria-hidden="true"></i></div><b>Private</b><span>Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-wallet" aria-hidden="true"></i></div><b>Budgets</b><span>A hard limit per task and per day. Actor never goes over it.</span></div>-- </div>-- </section>---- <section id="routes">-- <h2>What it routes to</h2>-- <p class="lead2">Every agent system worth using, behind one API, one key and one bill.</p>-- <div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe's own runtime</b><span>Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Hosted agent platforms</b><span>Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-code" aria-hidden="true"></i></div><b>Coding agents</b><span>For tasks that are really code: fixes, features, reviews and tests.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Open-source agents</b><span>Open runtimes and open models on OpenVibe's own hardware: the Private mode.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-key" aria-hidden="true"></i></div><b>Your own keys</b><span>Bring a key for any platform and pay it directly; Actor still routes, checks and explains.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-plug-circle-plus" aria-hidden="true"></i></div><b>New ones, fast</b><span>A new agent platform is one adapter. The day it lands, every app and agent can use it.</span></div>-- </div>-- </section>-- <section id="devices">-- <h2>Your devices, under control</h2>-- <p class="lead2">Install the OpenVibe Node on a computer, a server, a Raspberry Pi or a phone. No open ports: it connects out. You decide how much an agent may do.</p>-- <div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-terminal" aria-hidden="true"></i></div><b>Terminal and files</b><span>A live terminal, a file browser, processes and services, from anywhere, for you and your agents.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-display" aria-hidden="true"></i></div><b>Screen, keyboard and mouse</b><span>Agents can use any app on the machine the way you would, and you watch the screen while they work.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-code-branch" aria-hidden="true"></i></div><b>Your own coding agents</b><span>The coding agents already installed on the machine become agents Actor can hand tasks to.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-sliders" aria-hidden="true"></i></div><b>Four control levels</b><span>Observe, Ask, Trusted or Full control, set on the device itself. Full control is time-boxed and recorded.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-power-off" aria-hidden="true"></i></div><b>A kill switch you hold</b><span>A button, a hotkey or one command on the device ends any agent session at once. Work can stay inside a container.</span></div>-- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>Robots too</b><span>The same Node drives robots on OpenVibe.Bot, so one install covers your computers and your robots.</span><span class="go">openvibe.bot →</span></a>-- </div>-- </section>-- <section id="console">-- <h2>One console for everything</h2>-- <p class="lead2">Agents, tasks, approvals, devices, robots, sites, streams and costs in one place, on the web and on your phone.</p>-- <div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-keyboard" aria-hidden="true"></i></div><b>Command bar</b><span>Type what you want in plain words or as a slash command; it goes to the right agent, device or product.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Tasks and approvals</b><span>Live progress for every task, and one inbox for everything waiting on you.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Devices</b><span>Every Node with its status, a terminal, its files and its screen.</span></div>-- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>Robots</b><span>Your robots' control panels from OpenVibe.Bot, next to everything else.</span><span class="go">openvibe.bot →</span></a>-- <div class="card"><div class="ic"><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i></div><b>Sites and streams</b><span>Deploys on OpenVibe.Host and your streams on OpenVibe.Live and openre.stream.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-wave-square" aria-hidden="true"></i></div><b>Events and costs</b><span>What happened across the network, live, and what every task cost.</span></div>-- </div>-- </section>-- <section>-- <h2>Balanced live, explained always</h2>-- <p class="lead2">Choices come from what actually happens, not from marketing pages.</p>-- <div class="grid three">-- <div class="card"><div class="ic"><i class="fa-solid fa-chart-line" aria-hidden="true"></i></div><b>Live signals</b><span>Price, speed, success rate and outages per agent system and per kind of task, updated from real runs.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-arrows-rotate" aria-hidden="true"></i></div><b>Failover</b><span>When an agent system slows down or fails, tasks move to the next best one at once.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Checked results</b><span>Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-magnifying-glass-chart" aria-hidden="true"></i></div><b>Public rankings</b><span>Success, cost and time per agent system for each kind of task, from real traffic, with dates.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-receipt" aria-hidden="true"></i></div><b>Every choice explained</b><span>Which agent ran, why it won, what else was considered and what it cost.</span></div>-- <div class="card"><div class="ic"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div><b>Your agents, on top</b><span>Always-on agents with memory, schedules and approvals; every task they take goes through the router.</span></div>-- </div>-- </section>---- <section>-- <h2>Start an agent from a template</h2>-- <p class="lead2">Each one is a starting point you can change, and each routes its work through Actor.</p>-- <div class="chips big"><span><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i>Stream co-host</span><span><i class="fa-solid fa-shield" aria-hidden="true"></i>Chat moderator</span><span><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>Research assistant</span><span><i class="fa-solid fa-globe" aria-hidden="true"></i>Site builder</span><span><i class="fa-solid fa-robot" aria-hidden="true"></i>Robot pilot</span><span><i class="fa-solid fa-calendar-check" aria-hidden="true"></i>Personal assistant</span></div>-- </section>---- <section class="meanwhile">-- <h2>Reachable everywhere</h2>-- <p class="lead2">Actor is part of the network, not a separate app.</p>-- <div class="grid">-- <div class="card"><div class="ic"><i class="fa-solid fa-bars" aria-hidden="true"></i></div><b>On every OpenVibe site</b><span>An agent button in the navbar, with the page you are on as context.</span></div>-- <a class="card" href="https://openvibe.chat"><div class="ic"><i class="fa-solid fa-comments" aria-hidden="true"></i></div><b>In chat</b><span>Direct messages on OpenVibe.Chat and @mentions in Live chat and Community threads.</span><span class="go">openvibe.chat →</span></a>-- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>-- <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.</span><span class="go">openvibe.codes →</span></a>-- </div>-- </section>---- <section id="questions" class="faq">-- <h2>Questions</h2>-- <details><summary>Is this like OpenRouter?</summary><p>Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them.</p></details>-- <details><summary>Which agent systems does it use?</summary><p>OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly.</p></details>-- <details><summary>How does it choose?</summary><p>For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained.</p></details>-- <details><summary>Can I keep my data on OpenVibe?</summary><p>Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware.</p></details>-- <details><summary>Can it act without asking?</summary><p>Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged.</p></details>-- <details><summary>Can an agent take full control of my computer?</summary><p>Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first.</p></details>-- <details><summary>Can I run Actor myself?</summary><p>Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network.</p></details>-- <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task.</p></details>-- </section>---- <section class="build">-- <div class="card">-- <b><i class="fa-solid fa-person-digging" aria-hidden="true"></i> Build status</b>-- <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts. · as of 2026-09-29 · <a href="/status.json">status.json</a></span>-- </div>-- </section>---- <section class="net">-- <h2>The OpenVibe network</h2>-- <p class="lead2">One account for all of it. Sign in once and every site signs you in.</p>-- <div class="grid">-- <a class="card" href="https://openvibe.live"><div class="ic"><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i></div><b>OpenVibe.Live</b><span>Go live, chat, clip, restream</span><span class="go">openvibe.live →</span></a>-- <a class="card" href="https://openvibe.tools"><div class="ic"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i></div><b>OpenVibe.Tools</b><span>Hundreds of online tools</span><span class="go">openvibe.tools →</span></a>-- <a class="card" href="https://openvibe.community"><div class="ic"><i class="fa-solid fa-people-group" aria-hidden="true"></i></div><b>OpenVibe.Community</b><span>Pastes, posts, people</span><span class="go">openvibe.community →</span></a>-- <a class="card" href="https://openvibe.games"><div class="ic"><i class="fa-solid fa-gamepad" aria-hidden="true"></i></div><b>OpenVibe.Games</b><span>Scraplandia and browser games</span><span class="go">openvibe.games →</span></a>-- <a class="card" href="https://openvibe.media"><div class="ic"><i class="fa-solid fa-photo-film" aria-hidden="true"></i></div><b>OpenVibe.Media</b><span>VODs, clips and files</span><span class="go">openvibe.media →</span></a>-- <a class="card" href="https://openvibe.network"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe.Network</b><span>One account, every site</span><span class="go">openvibe.network →</span></a>-- </div>-- <h2 style="margin-top:28px;font-size:16px">Other OpenVibe domains, not open yet</h2>-- <div class="rooms" style="margin-top:8px">-- <a href="https://openvibe.news/"><i class="fa-solid fa-newspaper" aria-hidden="true"></i>OpenVibe.News</a>-- <a href="https://openvibe.reviews/"><i class="fa-solid fa-star-half-stroke" aria-hidden="true"></i>OpenVibe.Reviews</a>-- <a href="https://openvibe.tips/"><i class="fa-solid fa-hand-holding-heart" aria-hidden="true"></i>OpenVibe.Tips</a>-- <a href="https://openvibe.vip/"><i class="fa-solid fa-crown" aria-hidden="true"></i>OpenVibe.VIP</a>-- <a href="https://openvibe.trade/"><i class="fa-solid fa-chart-line" aria-hidden="true"></i>OpenVibe.Trade</a>-- <a href="https://openvibe.host/"><i class="fa-solid fa-server" aria-hidden="true"></i>OpenVibe.Host</a>-- <a href="https://openvibe.deals/"><i class="fa-solid fa-tags" aria-hidden="true"></i>OpenVibe.Deals</a>-- <a href="https://openvibe.coupons/"><i class="fa-solid fa-ticket" aria-hidden="true"></i>OpenVibe.Coupons</a>-- <a href="https://openre.stream/"><i class="fa-solid fa-satellite-dish" aria-hidden="true"></i>OpenRe.Stream</a>-- <a href="https://auth.openvibe.network/"><i class="fa-solid fa-key" aria-hidden="true"></i>auth.openvibe.network</a>-- <a href="https://api.openvibe.network/"><i class="fa-solid fa-plug" aria-hidden="true"></i>api.openvibe.network</a>-- <a href="https://admin.openvibe.network/"><i class="fa-solid fa-shield-halved" aria-hidden="true"></i>admin.openvibe.network</a>-- <a href="https://themes.openvibe.network/"><i class="fa-solid fa-palette" aria-hidden="true"></i>themes.openvibe.network</a>-- <a href="https://ai.openvibe.services/"><i class="fa-solid fa-robot" aria-hidden="true"></i>ai.openvibe.services</a>-- <a href="https://openvibe.pics/"><i class="fa-solid fa-images" aria-hidden="true"></i>OpenVibe.Pics</a>-- <a href="https://openvibe.download/"><i class="fa-solid fa-cloud-arrow-down" aria-hidden="true"></i>OpenVibe.Download</a>-- <a href="https://openvibe.space/"><i class="fa-solid fa-layer-group" aria-hidden="true"></i>OpenVibe.Space</a>-- <a href="https://openvibe.food/"><i class="fa-solid fa-utensils" aria-hidden="true"></i>OpenVibe.Food</a>-- <a href="https://openvibe.quest/"><i class="fa-solid fa-map" aria-hidden="true"></i>OpenVibe.Quest</a>-- <a href="https://openvibe.rent/"><i class="fa-solid fa-key" aria-hidden="true"></i>OpenVibe.Rent</a>-- <a href="https://openvibe.homes/"><i class="fa-solid fa-house" aria-hidden="true"></i>OpenVibe.Homes</a>-- <a href="https://openvibe.services/"><i class="fa-solid fa-server" aria-hidden="true"></i>OpenVibe.Services</a>-- <a href="https://openvibe.run/"><i class="fa-solid fa-terminal" aria-hidden="true"></i>OpenVibe.Run</a>-- <a href="https://openvibe.work/"><i class="fa-solid fa-briefcase" aria-hidden="true"></i>OpenVibe.Work</a>-- <a href="https://openvibe.zone/"><i class="fa-solid fa-box-archive" aria-hidden="true"></i>OpenVibe.Zone</a>-- <a href="https://openvibe.video/"><i class="fa-solid fa-film" aria-hidden="true"></i>OpenVibe.Video</a>-- <a href="https://openvibe.website/"><i class="fa-solid fa-globe" aria-hidden="true"></i>OpenVibe.Website</a>-- <a href="https://openvibe.help/"><i class="fa-solid fa-life-ring" aria-hidden="true"></i>OpenVibe.Help</a>-- <a href="https://openvibe.bot/"><i class="fa-solid fa-robot" aria-hidden="true"></i>OpenVibe.Bot</a>-- <a href="https://openvibe.watch/"><i class="fa-solid fa-eye" aria-hidden="true"></i>OpenVibe.Watch</a>-- <a href="https://openvibe.events/"><i class="fa-solid fa-bolt" aria-hidden="true"></i>OpenVibe.Events</a>-- </div>-- </section>---- <div class="strip">-- <span class="ov-mark" data-size="44" data-variant="actor"></span>-- <h3>Open source. Community run.</h3>-- <p>Every OpenVibe site is built in the open by the people using it — free speech within the rules, no gatekeeping, one identity that follows you everywhere.</p>-- <a class="btn" href="https://github.com/OpenVibers" rel="noopener"><i class="fa-brands fa-github"></i> OpenVibers on GitHub</a>-- </div>--</main>--<style id="ovf-css">--.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;-- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}--.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}--.ovf-inner{max-width:1240px;margin:0 auto}--.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}--.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}--.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}--.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}--.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}--.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}--.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}--.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}--.ovf-brand--sm{font-size:.9rem}--.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}--.ovf-social{display:flex;gap:8px;margin-top:4px}--.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);-- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}--.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}--.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;-- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;-- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));-- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));-- animation:ovfIn .4s ease-out both}--@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}--.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}--.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}--.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;-- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}--.ovf-avatar img{width:100%;height:100%;object-fit:cover}--.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}--.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;-- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));-- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}--.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}--.ovf-account-links i{font-size:.72rem;opacity:.8}--.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;-- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));-- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}--.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}--.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}--.ovf [hidden],.ovf-account[hidden]{display:none!important}--.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}--.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}--.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}--.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}--@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}--@media (max-width:560px){-- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf-cols{gap:22px 16px}-- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}-- .ovf-legal-inline{justify-content:center}-- .ovf-account{flex-direction:column;align-items:flex-start}--}--@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}--.ovf{-webkit-tap-highlight-color:transparent}--:where(.ovf) :where(a,button):active{scale:.97}--:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}--@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="full"><div class="ovf-inner">-- <div class="ovf-cols">-- <div class="ovf-col ovf-col--brand">-- <a class="ovf-brand" href="/"><span class="ov-mark" data-size="26"></span><span>OpenVibe</span></a>-- <p class="ovf-tagline">Open source and community run. Built in the open by the people using it.</p>-- <div class="ovf-social">-- <a href="https://github.com/OpenVibers" target="_blank" rel="noopener" aria-label="GitHub" title="GitHub"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path fill="currentColor" stroke="none" d="M12 2.2a9.8 9.8 0 0 0-3.1 19.1c.5.1.7-.2.7-.5v-1.7c-2.7.6-3.3-1.2-3.3-1.2-.4-1.1-1.1-1.4-1.1-1.4-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.5 2.3 1.1 2.9.8.1-.6.3-1.1.6-1.3-2.2-.2-4.5-1.1-4.5-4.8 0-1.1.4-1.9 1-2.6-.1-.2-.4-1.2.1-2.6 0 0 .8-.3 2.7 1a9.3 9.3 0 0 1 4.9 0c1.9-1.3 2.7-1 2.7-1 .5 1.4.2 2.4.1 2.6.6.7 1 1.5 1 2.6 0 3.7-2.3 4.6-4.5 4.8.4.3.7.9.7 1.800v2.700c0 .3.2.6.7.5A9.8 9.8 0 0 0 12 2.200z"/></svg></a><a href="https://discord.gg/M6MuRUaeJj" target="_blank" rel="noopener" aria-label="Discord" title="Discord"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path fill="currentColor" stroke="none" d="M19.3 5.300a16.5 16.5 0 0 0-4.1-1.300l-.5 1a15.3 15.3 0 0 0-5.4 0l-.5-1a16.5 16.5 0 0 0-4.1 1.300C2.1 9.2 1.4 13 1.7 16.700a16.6 16.6 0 0 0 5.1 2.600l1.1-1.800c-.6-.2-1.2-.5-1.7-.8l.4-.3a11.8 11.8 0 0 0 10.8 0l.4.3c-.5.3-1.1.6-1.7.8l1.1 1.800a16.6 16.6 0 0 0 5.1-2.600c.4-4.3-.7-8.1-3-11.400zM8.7 14.400c-1 0-1.8-.9-1.8-2.100s.8-2.1 1.8-2.1 1.9 1 1.8 2.100c0 1.2-.8 2.1-1.8 2.100zm6.6 0c-1 0-1.8-.9-1.8-2.100s.8-2.1 1.8-2.1 1.9 1 1.8 2.100c0 1.2-.8 2.1-1.8 2.100z"/></svg></a>-- <a href="/sitemap.xml" aria-label="Sitemap" title="Sitemap"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="9" y="3.5" width="6" height="4.5" rx="1"/><rect x="3" y="16" width="6" height="4.5" rx="1"/><rect x="15" y="16" width="6" height="4.5" rx="1"/><path d="M12 8v4M6 16v-2.500h12V16"/></svg></a>-- </div>-- </div>---- <nav class="ovf-col" aria-label="The OpenVibe network">-- <h3>Network</h3>-- <a href="https://openvibe.live" title="Go live, restream and clip">Live streaming</a><a href="https://openvibe.tools" title="The whole toolbox">Online tools</a><a href="https://dev.openvibe.tools" title="Formatters, encoders, validators">Developer tools</a><a href="https://net.openvibe.tools" title="Ping, DNS, Whois, SSL">Network diagnostics</a><a href="https://img.openvibe.tools" title="Convert, resize, compress">Image converter</a><a href="https://audio.openvibe.tools" title="Convert, trim, pitch-shift">Audio converter</a>-- <a class="ovf-more" href="https://openvibe.network" target="_blank" rel="noopener">Everything else <svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a>-- </nav>---- <nav class="ovf-col" aria-label="Legal">-- <h3>Legal</h3>-- <a href="https://openvibe.live/tos">Terms of Service</a><a href="https://openvibe.live/privacy">Privacy Policy</a><a href="https://openvibe.live/dmca">DMCA</a>-- </nav>-- </div>-- <div class="ovf-account" id="ovf-account" hidden></div>-- <div class="ovf-bar">-- <span class="ovf-copy">Open source & community driven · built in the open</span>-- <a class="ovf-shipped" data-ov-shipped="latest" data-service="actor" href="https://openvibe.network/updates?site=actor" hidden></a>-- <span class="ovf-legal-inline">-- <a href="https://openvibe.network/updates?site=actor">Updates</a>-- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>-- </span>-- </div>-- </div></footer>--<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>--<script src="/shared/navbar.js?v=017a740747b4"></script>--<script src="/shared/footer.js?v=a85ab893be88"></script>--<script>--(function () {-- if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'actor', apiBase: 'https://openvibe.network', links: [{ label: 'How it works', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Actor' } }); } catch (e) {} }-- if (window.OpenVibeFooter) { try { OpenVibeFooter.init({ service: 'actor', variant: 'full', links: [{ heading: 'OpenVibe.Actor', items: [{ name: 'Sign in', url: 'https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F' }, { name: 'The network', url: 'https://openvibe.network/#network' }, { name: 'Discord', url: 'https://discord.gg/M6MuRUaeJj' }] }] }); } catch (e) {} }--})();--</script>--</body>--</html>ddeleted file mode 100644@@@ -1,48 +0,0 @@--{-- "name": "OpenVibe.Actor",-- "short_name": "Actor",-- "description": "Every AI agent, every device, one command console.",-- "start_url": "/",-- "scope": "/",-- "display": "standalone",-- "background_color": "#0a0f1c",-- "theme_color": "#3b82f6",-- "icons": [-- {-- "src": "https://openvibe.network/assets/logo-72.png",-- "sizes": "72x72",-- "type": "image/png",-- "purpose": "any"-- },-- {-- "src": "https://openvibe.network/assets/logo-192.png",-- "sizes": "192x192",-- "type": "image/png",-- "purpose": "any"-- },-- {-- "src": "https://openvibe.network/assets/logo-512.png",-- "sizes": "512x512",-- "type": "image/png",-- "purpose": "any"-- },-- {-- "src": "https://openvibe.network/assets/logo-maskable-192.png",-- "sizes": "192x192",-- "type": "image/png",-- "purpose": "maskable"-- },-- {-- "src": "https://openvibe.network/assets/logo-maskable-512.png",-- "sizes": "512x512",-- "type": "image/png",-- "purpose": "maskable"-- },-- {-- "src": "https://openvibe.network/assets/logo.svg",-- "sizes": "any",-- "type": "image/svg+xml",-- "purpose": "any"-- }-- ]--}ddeleted file mode 100644@@@ -1,115 +0,0 @@--<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">--<title>Privacy Policy — OpenVibe.Actor</title>--<meta name="description" content="What OpenVibe.Actor collects, why, and the choices you have.">--<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">--<link rel="canonical" href="https://openvibe.actor/privacy">--<meta property="og:type" content="article">--<meta property="og:site_name" content="OpenVibe.Actor">--<meta property="og:title" content="Privacy Policy — OpenVibe.Actor">--<meta property="og:description" content="What OpenVibe.Actor collects, why, and the choices you have.">--<meta property="og:url" content="https://openvibe.actor/privacy">--<meta property="og:locale" content="en_US">--<meta name="twitter:card" content="summary">--<meta name="twitter:title" content="Privacy Policy — OpenVibe.Actor">--<meta name="twitter:description" content="What OpenVibe.Actor collects, why, and the choices you have.">--<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">--<meta name="theme-color" content="#0d131d">--<meta name="color-scheme" content="dark">--<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>--<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}--.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}--.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}--.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}--.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}--.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}--.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>--<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>--<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>Privacy Policy</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>--<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">The short version</a></li><li><a href="#s2">What we collect</a></li><li><a href="#s3">Why we use it</a></li><li><a href="#s4">Cookies and storage in your browser</a></li><li><a href="#s5">Across OpenVibe sites</a></li><li><a href="#s6">Who we share with</a></li><li><a href="#s7">How long we keep things</a></li><li><a href="#s8">Where your data is</a></li><li><a href="#s9">Security</a></li><li><a href="#s10">Your choices and rights</a></li><li><a href="#s11">Children</a></li><li><a href="#s12">Changes and contact</a></li></ol></nav>--<section><h2 id="s1">The short version</h2><p>OpenVibe.Actor collects what it needs to work and to keep abuse out, and no more. We do not sell or rent personal information, we do not share it for advertising, and we do not run advertising trackers. Most of OpenVibe.Actor works without an account.</p></section>--<section><h2 id="s2">What we collect</h2><ul><li><b>Request logs.</b> Like every web server, ours record your IP address, browser type, the address requested and the time. We use them for security, rate limiting, debugging and aggregate traffic statistics.</li><li><b>Usage statistics.</b> First-party page views with a random session identifier, kept on our own servers, so we can see which parts of the network are used.</li><li><b>An anonymous page count.</b> The shared navigation bar reports one count per page load containing only the site's hostname and the day. No user, IP address or page is stored with it. It decides the order of sites in our menus. It is skipped when your browser sends Global Privacy Control or Do Not Track.</li></ul></section>--<section><h2 id="s3">Why we use it</h2><ul><li>To provide the service you asked for and keep you signed in (performance of our agreement with you).</li><li>To keep the service secure, prevent abuse and understand usage in aggregate (our legitimate interests).</li><li>To send account email such as verification and password resets, and notifications you switched on (agreement and consent).</li><li>To comply with the law.</li></ul></section>--<section><h2 id="s4">Cookies and storage in your browser</h2><p>We use a small number of first-party cookies: a sign-in token (<code>ov_token</code>), a refresh token limited to the sign-in paths, a short-lived state cookie during sign-in, and a hint (<code>ov_sso_hint</code>) that remembers whether you were signed in. openvibe.network also keeps a sign-in cookie that lets other OpenVibe sites check, in a hidden frame or through your browser's built-in federated sign-in, whether to sign you in quietly. It is never used for anything except that check.</p><p>Your theme, display settings (text size, reduced motion), recent pages, a cached copy of the navigation and similar conveniences are kept in your browser's local storage. There are no third-party advertising or social cookies. Our sites sit behind Cloudflare, which may set its own security cookies and measure performance.</p></section>--<section><h2 id="s5">Across OpenVibe sites</h2><p>OpenVibe sites share one account. When you are signed in, the site you visit learns who you are from openvibe.network. While cross-site history is switched on, the pages and tools you open while signed in are listed for you, and only you, at <a href="https://openvibe.network/history">openvibe.network/history</a>, where you can clear the list or pause it.</p></section>--<section><h2 id="s6">Who we share with</h2><p>Only the services needed to run the network: hosting (OVH, servers in the United States), network security and delivery (Cloudflare), object storage for media (Backblaze B2 or Cloudflare R2), and email delivery for account messages. They process data on our instructions. We disclose information when the law requires it, and we tell the person affected when we are allowed to. If OpenVibe is ever reorganised or handed to new maintainers, the data moves under the same promises.</p></section>--<section><h2 id="s7">How long we keep things</h2><ul><li>Request logs and raw usage events: a limited rolling period, then totals only.</li><li>The anonymous page count: totals per site and day, nothing personal to delete.</li></ul></section>--<section><h2 id="s8">Where your data is</h2><p>Our servers are in the United States. If you use OpenVibe from elsewhere, your information is transferred to and processed in the United States, which may have different data protection rules from your country.</p></section>--<section><h2 id="s9">Security</h2><p>Traffic is encrypted in transit. Passwords are stored as salted hashes, sign-in tokens are signed and short-lived, and internal service routes are not reachable from the internet. No system is perfectly secure; if a breach affects your personal information we will tell you and the relevant authorities as the law requires.</p></section>--<section><h2 id="s10">Your choices and rights</h2><p>You can use most of OpenVibe.Actor without an account, block cookies, and switch on Global Privacy Control to skip the anonymous page count. With an account you can view, correct, export and delete your data from your account settings, or ask us to do it.</p><p>Depending on where you live, including the EEA, the UK and US states such as California, you may have rights to access, correct, delete, restrict or object to the use of your data, to data portability, and to complain to your data protection authority. We do not sell or share personal information as those laws define it, and we do not make automated decisions with legal effect. Write to <a href="mailto:[email protected]">[email protected]</a>; we answer within 30 days and will not treat you differently for asking.</p></section>--<section><h2 id="s11">Children</h2><p>OpenVibe.Actor is not for children under 13, and we do not knowingly collect their information. If you believe a child has given us personal information, contact us and we will delete it.</p></section>--<section><h2 id="s12">Changes and contact</h2><p>We will post changes here and update the date above; significant changes are announced on the site. Questions and requests: <a href="mailto:[email protected]">[email protected]</a>.</p></section>--<nav class="ov-legal-more" aria-label="Other policies"><a href="/terms">Terms of Service</a><a href="/dmca">DMCA & Copyright</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">--.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;-- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}--.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}--.ovf-inner{max-width:1240px;margin:0 auto}--.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}--.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}--.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}--.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}--.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}--.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}--.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}--.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}--.ovf-brand--sm{font-size:.9rem}--.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}--.ovf-social{display:flex;gap:8px;margin-top:4px}--.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);-- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}--.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}--.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;-- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;-- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));-- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));-- animation:ovfIn .4s ease-out both}--@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}--.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}--.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}--.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;-- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}--.ovf-avatar img{width:100%;height:100%;object-fit:cover}--.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}--.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;-- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));-- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}--.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}--.ovf-account-links i{font-size:.72rem;opacity:.8}--.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;-- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));-- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}--.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}--.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}--.ovf [hidden],.ovf-account[hidden]{display:none!important}--.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}--.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}--.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}--.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}--@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}--@media (max-width:560px){-- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf-cols{gap:22px 16px}-- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}-- .ovf-legal-inline{justify-content:center}-- .ovf-account{flex-direction:column;align-items:flex-start}--}--@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}--.ovf{-webkit-tap-highlight-color:transparent}--:where(.ovf) :where(a,button):active{scale:.97}--:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}--@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">-- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>-- <nav class="ovf-compact-links" aria-label="Site links">---- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>-- <a href="https://openvibe.network/updates?site=network">Updates</a>-- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>-- </nav>-- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>-- <span class="ovf-compact-meta">Open source · 2026</span>-- </div></footer>--<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>--<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}--try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}--try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>--</body></html>\\ No newline at end of fileddeleted file mode 100644@@@ -1,13 +0,0 @@--{-- "service": "actor",-- "release": "3693cad70f33",-- "released_at": "2026-10-03T00:00:00.000Z",-- "booted_at": null,-- "contracts_version": null,-- "packages": {-- "openvibe-shared": "2.5.0"-- },-- "min_client_release": null,-- "mixed_version_window_hours": 24,-- "kind": "placeholder"--}ddeleted file mode 100644@@@ -1,4 +0,0 @@--User-agent: *--Allow: /--Disallow: /auth/--Sitemap: https://openvibe.actor/sitemap.xmlddeleted file mode 100644@@@ -1,4 +0,0 @@--<?xml version="1.0" encoding="UTF-8"?>--<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">-- <url><loc>https://openvibe.actor/</loc><lastmod>2026-10-03</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>--</urlset>ddeleted file mode 100644@@@ -1,16 +0,0 @@--{-- "domain": "openvibe.actor",-- "name": "OpenVibe.Actor",-- "stage": "placeholder",-- "live": false,-- "plannedRepo": null,-- "repoUrl": null,-- "repoExists": false,-- "repoStage": "charter-only",-- "service": null,-- "launchWaitsFor": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",-- "factsAsOf": "2026-09-29",-- "network": "https://openvibe.network",-- "updated": "2026-10-03",-- "note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."--}ddeleted file mode 100644@@@ -1,114 +0,0 @@--<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">--<title>Terms of Service — OpenVibe.Actor</title>--<meta name="description" content="The rules for using OpenVibe.Actor, in plain language.">--<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">--<link rel="canonical" href="https://openvibe.actor/terms">--<meta property="og:type" content="article">--<meta property="og:site_name" content="OpenVibe.Actor">--<meta property="og:title" content="Terms of Service — OpenVibe.Actor">--<meta property="og:description" content="The rules for using OpenVibe.Actor, in plain language.">--<meta property="og:url" content="https://openvibe.actor/terms">--<meta property="og:locale" content="en_US">--<meta name="twitter:card" content="summary">--<meta name="twitter:title" content="Terms of Service — OpenVibe.Actor">--<meta name="twitter:description" content="The rules for using OpenVibe.Actor, in plain language.">--<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">--<meta name="theme-color" content="#0d131d">--<meta name="color-scheme" content="dark">--<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>--<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}--.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}--.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}--.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}--.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}--.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}--.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>--<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>--<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>Terms of Service</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>--<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">The short version</a></li><li><a href="#s2">Who can use it</a></li><li><a href="#s3">This site is not open yet</a></li><li><a href="#s4">Rules for everyone</a></li><li><a href="#s5">Automated and AI-written text</a></li><li><a href="#s6">Reporting and moderation</a></li><li><a href="#s7">Leaving</a></li><li><a href="#s8">Open source, links and feedback</a></li><li><a href="#s9">No warranty, limited liability</a></li><li><a href="#s10">Governing law</a></li><li><a href="#s11">Changes and contact</a></li></ol></nav>--<section><h2 id="s1">The short version</h2><p>OpenVibe.Actor is part of OpenVibe, an open source, community-run network. Use it for lawful things, be decent to other people, and do not try to break it. Most of it works without an account. We can remove content or accounts that break these terms. The service is provided as it is, without warranties.</p><p>These terms cover openvibe.actor, its subdomains, and any other domain that serves the same service. Other OpenVibe sites have their own terms, written for what those sites do.</p></section>--<section><h2 id="s2">Who can use it</h2><p>You must be at least 13 years old, or the minimum age of digital consent where you live. If you are under 18, a parent or guardian must agree to these terms for you. You may not use OpenVibe.Actor if you were banned from the network, or if the law where you live forbids it.</p></section>--<section><h2 id="s3">This site is not open yet</h2><p>OpenVibe.Actor is a reserved address that currently shows a preview page. There is nothing to sign up for or post here yet. When it opens, these terms will be replaced with ones written for what it does, and the date above will change.</p></section>--<section><h2 id="s4">Rules for everyone</h2><p>OpenVibe leans toward open expression. These limits apply on every site:</p><ul><li>Nothing illegal where you are or in the United States, where our servers are.</li><li>No sexual content involving minors and no sexualisation of minors, ever. We report it to the authorities.</li><li>No credible threats, incitement to violence, or publishing private information to harm someone.</li><li>No content you do not have the rights to.</li><li>No malware, phishing, spam, fraud, or impersonation of a person or organisation to deceive.</li><li>No attempts to disrupt the service, get around bans, rate limits or access controls, or reach other people's accounts or data.</li><li>No scraping that ignores robots.txt or our rate limits. Respectful crawlers, archives and AI agents are welcome; a machine-readable map is at /llms.txt where available.</li></ul></section>--<section><h2 id="s5">Automated and AI-written text</h2><p>Some descriptive text on OpenVibe, such as footer blurbs, summaries and suggestions, is written by automated systems and checked by rules rather than by a person. It can be wrong. Do not rely on it for decisions that matter.</p></section>--<section><h2 id="s6">Reporting and moderation</h2><p>Report content with the report controls where they exist, or write to <a href="mailto:[email protected]">[email protected]</a>. Copyright complaints follow the <a href="/dmca">DMCA process</a>. We may remove content, limit features, or suspend accounts that break these terms or put other people or the service at risk, and we may act without notice when the harm is urgent. If you think we got it wrong, reply to the notice or write to the same address and a person will look again.</p></section>--<section><h2 id="s7">Leaving</h2><p>You can stop using OpenVibe.Actor at any time. Sections that by their nature should survive (licences for content already shared, liability, governing law) continue after you leave.</p></section>--<section><h2 id="s8">Open source, links and feedback</h2><p>OpenVibe's code is public. Each repository's licence governs your use of the code; these terms govern your use of the hosted service at openvibe.actor. Links to other sites are provided for convenience and we are not responsible for them. If you send us ideas or fixes, we may use them without owing you anything, and contributions to the code are made under the repository's licence.</p></section>--<section><h2 id="s9">No warranty, limited liability</h2><p>The service is provided "as is" and "as available", without warranties of any kind, including fitness for a particular purpose, accuracy of results, or uninterrupted availability. To the extent the law allows, OpenVibe and the people who run it are not liable for indirect, incidental or consequential losses, lost data or lost profits arising from your use of OpenVibe.Actor, and our total liability is limited to the greater of what you paid us in the past twelve months or fifty US dollars. Nothing here limits liability that cannot be limited by law, and consumer rights you have under the law of your country remain.</p><p>If your use of OpenVibe.Actor breaks these terms or the law and someone brings a claim against us because of it, you agree to cover our reasonable costs.</p></section>--<section><h2 id="s10">Governing law</h2><p>These terms are governed by the laws of the United States and the State of Washington, without regard to conflicts of law. Disputes are handled in the federal or state courts located in Washington State, unless the consumer law of your country gives you the right to use your local courts. If part of these terms cannot be enforced, the rest still applies. Not enforcing a term once does not waive it. These terms are the whole agreement between us about OpenVibe.Actor.</p></section>--<section><h2 id="s11">Changes and contact</h2><p>We may update these terms. Material changes are announced on the site before they take effect, and the date at the top changes. Continuing to use OpenVibe.Actor after a change means you accept it. Questions: <a href="mailto:[email protected]">[email protected]</a>.</p></section>--<nav class="ov-legal-more" aria-label="Other policies"><a href="/privacy">Privacy Policy</a><a href="/dmca">DMCA & Copyright</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">--.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;-- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}--.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}--.ovf-inner{max-width:1240px;margin:0 auto}--.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}--.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}--.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}--.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}--.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}--.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}--.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}--.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}--.ovf-brand--sm{font-size:.9rem}--.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}--.ovf-social{display:flex;gap:8px;margin-top:4px}--.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);-- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}--.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}--.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;-- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;-- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));-- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));-- animation:ovfIn .4s ease-out both}--@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}--.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}--.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}--.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;-- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}--.ovf-avatar img{width:100%;height:100%;object-fit:cover}--.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}--.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;-- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));-- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}--.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}--.ovf-account-links i{font-size:.72rem;opacity:.8}--.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;-- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));-- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}--.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}--.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}--.ovf [hidden],.ovf-account[hidden]{display:none!important}--.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}--.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}--.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}--.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}--@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}--@media (max-width:560px){-- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}-- .ovf-cols{gap:22px 16px}-- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}-- .ovf-legal-inline{justify-content:center}-- .ovf-account{flex-direction:column;align-items:flex-start}--}--@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}--.ovf{-webkit-tap-highlight-color:transparent}--:where(.ovf) :where(a,button):active{scale:.97}--:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}--@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">-- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>-- <nav class="ovf-compact-links" aria-label="Site links">---- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>-- <a href="https://openvibe.network/updates?site=network">Updates</a>-- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>-- </nav>-- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>-- <span class="ovf-compact-meta">Open source · 2026</span>-- </div></footer>--<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>--<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}--try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}--try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>--</body></html>\\ No newline at end of file@@@ -24,7 +24,7 @@ added; they have no Contracts manifest yet, so `sync-catalog.js` keeps them as t| `api.openvibe.network.conf` | placeholder | OpenVibe.Network | no || `auth.openvibe.network.conf` | placeholder | OpenVibe.Network | no || `openre.stream.conf` | placeholder | OpenRe.Stream | yes: `deploy/nginx/openre.stream.conf` |--| `openvibe.actor.conf` | placeholder (no repo) | park: DNS only (OpenVibe.Node exists but has no deploy config and does not run) | no |++| (`openvibe.actor`, no Sites host file) | nothing (removed 2026-10-08) | OpenVibe.Actor: the task router and OpenVibe's own agent (Actor 0.1.0); its repo vhost deploy/nginx/openvibe.actor.conf replaces this one | yes || (`openvibe.bot`, no Sites host file) | legal pages, 404, sitemap and manifest (its front page, robots.txt, release.json and status.json are Bot's since 2026-10-07, OpenVibe.Bot#34) | OpenVibe.Bot, which already supplies the vhost | yes (Contracts still says `noRepo`) || `openvibe.coupons.conf` | placeholder | OpenVibe.Coupons | yes: `deploy/nginx/openvibe.coupons.conf` || `openvibe.deals.conf` | placeholder | OpenVibe.Deals | yes: `deploy/nginx/openvibe.deals.conf` |@@@ -23,6 +23,5 @@"openvibe.video","openvibe.website","openvibe.help",-- "openvibe.watch",-- "openvibe.actor"++ "openvibe.watch"]@@@ -6,7 +6,7 @@"": {"name": "openvibe-sites","dependencies": {-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"},"engines": {@@@ -181,9 +181,9 @@"license": "MIT"},"node_modules/openvibe-contracts": {-- "version": "0.114.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",-- "integrity": "sha512-MLtahxYztHGzN09L0D6TuXzPoueuqb/6+v9QVivaaGMO92PDhGK3Q9mg9f0oWX6pYa+iL25Au5sI2MEK0spsRw==",++ "version": "0.115.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0",++ "integrity": "sha512-2si6od4+RLgZEIAuWMmTrLZL65TzvCwB/sKoe24vSzC9+sNPt2RXWGXDCwE2fB90vmaRvX6pI+DQyu18QN2f0Q==","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -7,7 +7,7 @@"test": "node test/run.js"},"dependencies": {-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"},"engines": {@@@ -1607,10 +1607,10 @@]],"keywords": "ai agent router, openrouter for agents, ai agent that controls your computer, remote control computer with ai, self-hosted ai agent, computer use agent, ai command console, agent api, cloud ai agent, mcp server",-- "launch": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",++ "launch": "the task router: its own runtime on OpenVibe services, other platforms' agents, a private open model and a cross-family check; then Codes, personal agents and Node control","noRepo": true,"vision": {-- "badge": "being built",++ "badge": "alpha","cta": ["See the network","https://openvibe.network/#network",@@@ -18,7 +18,9 @@ assert.deepStrictEqual(notices.map(n => n.domain), ['realtime.openvibe.network', 'status.openvibe.network',]);assert.strictEqual(new Set(frozen).size, frozen.length, 'frozen domains are unique');--assert.strictEqual(frozen.length, 26, 'all 26 product domains are frozen');++assert.strictEqual(frozen.length, 25, 'all 25 product domains are frozen');++// OpenVibe.Actor serves openvibe.actor itself since 2026-10-08 (its own vhost; Actor 0.1.0).++assert.ok(!frozen.includes('openvibe.actor'), 'openvibe.actor left Sites');// OpenVibe.AI serves ai.openvibe.services itself and ai.openvibe.network answers 301 to it since 2026-10-07 (AI#23).assert.ok(!frozen.includes('ai.openvibe.services') && !exists('dist/ai.openvibe.services') && !exists('dist/ai.openvibe.network') && !exists('deploy/nginx/ai.openvibe.services.conf') && !exists('deploy/nginx/ai.openvibe.network.conf'), 'OpenVibe.AI owns both AI addresses');// OpenVibe.Events serves openvibe.events itself since 2026-10-07 (its own vhost; Events#16).@@@ -47,14 +49,6 @@ for (const domain of frozen) {assert.doesNotMatch(html, PRICING, `${domain}: pricing copy`);assert.doesNotMatch(html, UNBACKED, `${domain}: claims a hosting product that does not exist`);}--for (const domain of ['openvibe.actor']) {-- assert.ok(frozen.includes(domain), `${domain}: remains frozen`);-- assert.match(read(`dist/${domain}/index.html`), /<meta name="robots" content="index, follow, max-image-preview:large">/, `${domain}: original indexing`);-- assert.strictEqual(JSON.parse(read(`dist/${domain}/status.json`)).stage, 'placeholder', `${domain}: lifecycle stage`);-- assert.strictEqual(JSON.parse(read(`dist/${domain}/release.json`)).kind, 'placeholder', `${domain}: release kind`);-- assert.ok(exists(`dist/${domain}/sitemap.xml`), `${domain}: frozen sitemap`);-- assert.ok(read(`dist/${domain}/robots.txt`).includes(`Sitemap: https://${domain}/sitemap.xml`), `${domain}: sitemap advertised`);--}for (const notice of notices) {const d = notice.domain;
@@ -13,7 +13,7 @@ Both are `noindex`. The existing page presentation is held in `notice-pages/`; t
@@ -13,7 +13,7 @@ Both are `noindex`. The existing page presentation is held in `notice-pages/`; t
## Frozen product pages
## Frozen product pages
-`frozen.json` lists all 26 product domains, including OpenVibe.Actor. Their committed front pages remain available as static files with their original indexing, status, and sitemaps. The build does not regenerate them. `node build.js --check` verifies that each frozen domain still has an index page and a Sites vhost, while checking that notice outputs are current. The repository facts snapshot is historical data, not a build input.
+`frozen.json` lists all 25 product domains. Their committed front pages remain available as static files with their original indexing, status, and sitemaps. The build does not regenerate them. `node build.js --check` verifies that each frozen domain still has an index page and a Sites vhost, while checking that notice outputs are current. The repository facts snapshot is historical data, not a build input.
## Product catalog
## Product catalog
@@ -37,6 +37,6 @@ The pinned `openvibe-contracts` release supplies the catalog `sites.json` mirror
@@ -37,6 +37,6 @@ The pinned `openvibe-contracts` release supplies the catalog `sites.json` mirror
Report security issues through [SECURITY.md](SECURITY.md).
Report security issues through [SECURITY.md](SECURITY.md).
<!-- versions:start -->
<!-- versions:start -->
-- openvibe-contracts: v0.114.0
+- openvibe-contracts: v0.115.0
- openvibe-shared: v2.13.2
- openvibe-shared: v2.13.2
<!-- versions:end -->
<!-- versions:end -->
@@ -23,7 +23,6 @@
@@ -23,7 +23,6 @@
"openvibe.help",
"openvibe.help",
"openvibe.bot",
"openvibe.bot",
"openvibe.watch",
"openvibe.watch",
- "openvibe.actor",
"openre.stream",
"openre.stream",
"auth.openvibe.network",
"auth.openvibe.network",
"api.openvibe.network",
"api.openvibe.network",
@@ -32,12 +31,12 @@
@@ -32,12 +31,12 @@
"realtime.openvibe.network (closed notice)",
"realtime.openvibe.network (closed notice)",
"status.openvibe.network (status notice)"
"status.openvibe.network (status notice)"
],
],
- "contracts": "openvibe-contracts v0.114.0: sites.json mirrors products.catalog() (scripts/sync-catalog.js)",
+ "contracts": "openvibe-contracts v0.115.0: sites.json mirrors products.catalog() (scripts/sync-catalog.js)",
"shared": "openvibe-shared v2.13.2",
"shared": "openvibe-shared v2.13.2",
"deployed": true,
"deployed": true,
"deployment": "Deployed with `sudo ovhost deploy sites --restart` (OpenVibe.Host strategy static-build since the 2026-09-27 cutover): /opt/openvibe.sites, nginx serves dist/<domain>/ through deploy/nginx/<domain>.conf; no unit, no port, no env file",
"deployment": "Deployed with `sudo ovhost deploy sites --restart` (OpenVibe.Host strategy static-build since the 2026-09-27 cutover): /opt/openvibe.sites, nginx serves dist/<domain>/ through deploy/nginx/<domain>.conf; no unit, no port, no env file",
"features": [
"features": [
- "two generated notices and 26 frozen product domains",
+ "two generated notices and 25 frozen product domains",
"sites.json generated from the OpenVibe.Contracts product catalog",
"sites.json generated from the OpenVibe.Contracts product catalog",
"notice pages use preserved presentation; product pages are no longer generated",
"notice pages use preserved presentation; product pages are no longer generated",
"the pinned OpenVibe Frame served from dist/_shared/",
"the pinned OpenVibe Frame served from dist/_shared/",
deleted file mode 100644
deleted file mode 100644
@@ -1,111 +0,0 @@
@@ -1,111 +0,0 @@
-# openvibe.actor — static front page (OpenVibe.Sites). Generated by build.js; edit notices.json, not this.
-server {
- listen 80;
- listen [::]:80;
- server_name openvibe.actor www.openvibe.actor;
- return 301 https://openvibe.actor$request_uri;
-}
-
-server {
- listen 443 ssl;
- listen [::]:443 ssl;
- http2 on;
- server_name www.openvibe.actor;
- ssl_certificate /etc/letsencrypt/live/openvibe.actor/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/openvibe.actor/privkey.pem;
- return 301 https://openvibe.actor$request_uri;
-}
-
-server {
- listen 443 ssl;
- listen [::]:443 ssl;
- http2 on;
- server_name openvibe.actor;
- include snippets/security-txt.conf; # /.well-known/security.txt (host file; SECURITY.md in every repo)
-
- ssl_certificate /etc/letsencrypt/live/openvibe.actor/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/openvibe.actor/privkey.pem;
-
- root /opt/openvibe.sites/dist/openvibe.actor;
- index index.html;
-
- access_log /var/log/nginx/openvibe.actor.access.log;
- error_log /var/log/nginx/openvibe.actor.error.log;
-
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
-
- gzip on;
- gzip_types text/html text/plain text/css application/json application/javascript application/xml image/svg+xml application/manifest+json;
-
- # An add_header inside a location replaces the server's list (nginx does not merge them), so every
- # location that sets its own header repeats the security headers.
- location = /robots.txt {
- add_header Cache-Control "public, max-age=3600";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
- location = /sitemap.xml {
- types { application/xml xml; }
- add_header Cache-Control "public, max-age=3600";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
- location = /manifest.webmanifest {
- types { application/manifest+json webmanifest; }
- add_header Cache-Control "public, max-age=86400";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
- location = /status.json {
- add_header Cache-Control "public, max-age=600";
- add_header Access-Control-Allow-Origin "*";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
- location = /release.json {
- add_header Cache-Control "no-cache";
- add_header Access-Control-Allow-Origin "*";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
- # This repository's pinned shared browser files (navbar, footer, theme loader…), one copy for every Sites
- # vhost. Pages ask for them content-addressed (?v=); the few loaded without it (navbar's companions) get
- # the same hour.
- location ^~ /shared/ {
- alias /opt/openvibe.sites/dist/_shared/;
- add_header Cache-Control "public, max-age=3600";
- add_header Access-Control-Allow-Origin "*";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- }
-
- # Only the files in dist/ exist; anything else is a real 404 with a page, never the front page.
- error_page 404 /404.html;
- location = /404.html { internal; }
-
- location / {
- add_header Cache-Control "public, max-age=600";
- add_header X-Content-Type-Options nosniff always;
- add_header X-Frame-Options SAMEORIGIN always;
- add_header Referrer-Policy strict-origin-when-cross-origin always;
- add_header Strict-Transport-Security "max-age=31536000" always;
- try_files $uri $uri.html $uri/ =404;
- }
-
- location ~ /\.(?!well-known) { deny all; }
-}
deleted file mode 100644
deleted file mode 100644
@@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-<title>Not found · OpenVibe.Actor</title>
-<meta name="robots" content="noindex">
-<meta name="theme-color" content="#a78bfa">
-<link rel="icon" type="image/svg+xml" data-ov-icon="network" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
-<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>
-<style>
-*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
-:root{--bg-primary:#0a0f1c;--bg-secondary:#101828;--border:#1f2d47;--text-primary:#e6edf7;--text-secondary:#96a7c2;--site:#a78bfa}
-body{background:var(--bg-primary);color:var(--text-primary);font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;min-height:100vh;display:grid;place-items:center;padding:24px 16px}
-main{max-width:560px;text-align:center}
-.code{font-size:14px;font-weight:700;letter-spacing:.2em;color:var(--site)}
-h1{font-size:clamp(28px,5vw,40px);font-weight:800;letter-spacing:-.8px;margin:10px 0 12px}
-p{color:var(--text-secondary);font-size:15px;line-height:1.65}
-.links{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}
-a{display:inline-block;padding:11px 18px;border-radius:12px;font-size:14px;font-weight:600;text-decoration:none;border:1px solid var(--border);color:var(--text-primary);background:var(--bg-secondary)}
-a:first-child{background:var(--site);border-color:var(--site);color:#0b0d10}
-</style>
-</head>
-<body>
-<main>
- <p class="code">404</p>
- <h1>This page does not exist</h1>
- <p>openvibe.actor has only its front page and legal pages for now. The address you followed is not one of them.</p>
- <div class="links">
- <a href="https://openvibe.actor/">OpenVibe.Actor</a>
- <a href="https://openvibe.network/">OpenVibe.Network</a>
- </div>
-</main>
-</body>
-</html>
deleted file mode 100644
deleted file mode 100644
@@ -1,109 +0,0 @@
@@ -1,109 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>DMCA & Copyright — OpenVibe.Actor</title>
-<meta name="description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">
-<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">
-<link rel="canonical" href="https://openvibe.actor/dmca">
-<meta property="og:type" content="article">
-<meta property="og:site_name" content="OpenVibe.Actor">
-<meta property="og:title" content="DMCA & Copyright — OpenVibe.Actor">
-<meta property="og:description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">
-<meta property="og:url" content="https://openvibe.actor/dmca">
-<meta property="og:locale" content="en_US">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="DMCA & Copyright — OpenVibe.Actor">
-<meta name="twitter:description" content="How to report copyright infringement on OpenVibe.Actor, and how to respond to a report.">
-<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
-<meta name="theme-color" content="#0d131d">
-<meta name="color-scheme" content="dark">
-<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>
-<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
-.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}
-.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}
-.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}
-.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}
-.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}
-.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>
-<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>
-<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>DMCA & Copyright</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>
-<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">Our position</a></li><li><a href="#s2">Before you send a notice</a></li><li><a href="#s3">Send a takedown notice</a></li><li><a href="#s4">What happens next</a></li><li><a href="#s5">Repeat infringers and false claims</a></li><li><a href="#s6">Other complaints</a></li></ol></nav>
-<section><h2 id="s1">Our position</h2><p>OpenVibe.Actor respects copyright and responds to clear notices of alleged infringement under the Digital Millennium Copyright Act (17 U.S.C. § 512). OpenVibe.Actor currently publishes only its own material and does not host uploads from the public.</p></section>
-<section><h2 id="s2">Before you send a notice</h2><p>Consider whether the use is permitted, for example as fair use, commentary, criticism, or under a licence. Notices must come from the copyright owner or someone authorised to act for them. Misrepresentations in a notice carry legal liability.</p></section>
-<section><h2 id="s3">Send a takedown notice</h2><p>Email <a href="mailto:[email protected]">[email protected]</a> with all of the following:</p><ol><li>Your name, postal address, phone number and email address, and whom you represent.</li><li>The copyrighted work you say was infringed, or a representative list if there are several.</li><li>The exact URL on openvibe.actor of each item you want removed. General descriptions, search results and channel links are not enough to find it.</li><li>A statement that you have a good-faith belief the use is not authorised by the copyright owner, its agent or the law.</li><li>A statement, under penalty of perjury, that the information is accurate and that you are the owner or authorised to act for the owner.</li><li>Your physical or electronic signature.</li></ol></section>
-<section><h2 id="s4">What happens next</h2><p>We remove or disable access to the material, tell the person who posted it, and give them a copy of your notice, including your contact details. We act on complete notices as quickly as we can, normally within a few business days. Incomplete notices get a reply saying what is missing.</p></section>
-<section><h2 id="s5">Repeat infringers and false claims</h2><p>Accounts that receive repeated valid notices lose the ability to post and, in appropriate circumstances, are terminated across the network. Knowingly false notices and counter-notices carry liability under § 512(f); we refuse notices that are clearly abusive or automated without review.</p></section>
-<section><h2 id="s6">Other complaints</h2><p>Trademark, privacy, impersonation, harassment and other non-copyright complaints go to the same address; say which kind of complaint it is and give the exact URL. Content that sexually exploits children should be reported to us immediately and to the <a href="https://report.cybertip.org/" rel="noopener">NCMEC CyberTipline</a> or your national hotline; we remove it and report it to the authorities.</p></section>
-<nav class="ov-legal-more" aria-label="Other policies"><a href="/terms">Terms of Service</a><a href="/privacy">Privacy Policy</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">
-.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;
- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}
-.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}
-.ovf-inner{max-width:1240px;margin:0 auto}
-.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}
-.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}
-.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}
-.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}
-.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}
-.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}
-.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}
-.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}
-.ovf-brand--sm{font-size:.9rem}
-.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}
-.ovf-social{display:flex;gap:8px;margin-top:4px}
-.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);
- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}
-.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}
-.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;
- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;
- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));
- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));
- animation:ovfIn .4s ease-out both}
-@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
-.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}
-.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}
-.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;
- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}
-.ovf-avatar img{width:100%;height:100%;object-fit:cover}
-.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}
-.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;
- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));
- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}
-.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}
-.ovf-account-links i{font-size:.72rem;opacity:.8}
-.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;
- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));
- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}
-.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}
-.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}
-.ovf [hidden],.ovf-account[hidden]{display:none!important}
-.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}
-.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}
-.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}
-.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
-@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
-@media (max-width:560px){
- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf-cols{gap:22px 16px}
- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}
- .ovf-legal-inline{justify-content:center}
- .ovf-account{flex-direction:column;align-items:flex-start}
-}
-@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}
-.ovf{-webkit-tap-highlight-color:transparent}
-:where(.ovf) :where(a,button):active{scale:.97}
-:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}
-@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">
- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>
- <nav class="ovf-compact-links" aria-label="Site links">
-
- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>
- <a href="https://openvibe.network/updates?site=network">Updates</a>
- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>
- </nav>
- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>
- <span class="ovf-compact-meta">Open source · 2026</span>
- </div></footer>
-<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>
-<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}
-try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}
-try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>
-</body></html>
\ No newline at end of file
\ No newline at end of file
deleted file mode 100644
deleted file mode 100644
@@ -1,439 +0,0 @@
@@ -1,439 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-<title>OpenVibe.Actor — Every AI agent, every device, one command console.</title>
-<meta name="description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">
-<meta name="keywords" content="ai agent router, openrouter for agents, ai agent that controls your computer, remote control computer with ai, self-hosted ai agent, computer use agent, ai command console, agent api, cloud ai agent, mcp server">
-<meta name="robots" content="index, follow, max-image-preview:large">
-<meta name="theme-color" content="#a78bfa">
-<link rel="canonical" href="https://openvibe.actor/">
-<link rel="icon" type="image/svg+xml" data-ov-icon="network" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
-<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>
-<link rel="manifest" href="/manifest.webmanifest">
-<link rel="alternate" type="text/html" hreflang="en" href="https://openvibe.actor/">
-<meta property="og:type" content="website">
-<meta property="og:site_name" content="OpenVibe.Actor">
-<meta property="og:url" content="https://openvibe.actor/">
-<meta property="og:title" content="OpenVibe.Actor — Every AI agent, every device, one command console.">
-<meta property="og:description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">
-<meta property="og:image" content="https://openvibe.network/assets/logo-512.png">
-<meta property="og:image:alt" content="OpenVibe">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="OpenVibe.Actor — Every AI agent, every device, one command console.">
-<meta name="twitter:description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">
-<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
-<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Every AI agent, every device, one command console.","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-03","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"Can an agent take full control of my computer?","acceptedAnswer":{"@type":"Answer","text":"Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first."}},{"@type":"Question","name":"Can I run Actor myself?","acceptedAnswer":{"@type":"Answer","text":"Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script>
-<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
-<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
-<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
-<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
-<style>
-*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
-:root{--bg-primary:#0a0f1c;--bg-secondary:#101828;--bg-card:#131c2e;--bg-hover:#1c2a44;--border:#1f2d47;--text-primary:#e6edf7;--text-secondary:#96a7c2;--text-muted:#7386a3;--accent:#3b82f6;--accent-light:#60a5fa;--accent-rgb:59,130,246;--on-accent:#fff;--site:#a78bfa;--site-rgb:167,139,250}
-html{scroll-behavior:smooth}
-body{background:var(--bg-primary);color:var(--text-primary);font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}
-main{flex:1;position:relative}
-.orbs{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
-.orbs i{position:absolute;border-radius:50%;filter:blur(90px);opacity:.16;animation:drift 26s ease-in-out infinite alternate}
-.orbs i:nth-child(1){width:420px;height:420px;background:var(--site);top:-140px;left:-120px}
-.orbs i:nth-child(2){width:360px;height:360px;background:var(--accent);top:40%;right:-140px;animation-delay:-9s}
-.orbs i:nth-child(3){width:300px;height:300px;background:var(--site);bottom:-120px;left:38%;animation-delay:-17s}
-@keyframes drift{0%{transform:translate(0,0) scale(1)}50%{transform:translate(-26px,36px) scale(1.07)}100%{transform:translate(34px,-28px) scale(.95)}}
-.wrap{position:relative;z-index:1;max-width:1040px;margin:0 auto;padding:0 20px}
-.hero{padding:84px 0 44px;text-align:center}
-.hero .mark{display:inline-grid;place-items:center;width:84px;height:84px;border-radius:24px;background:rgba(var(--site-rgb),.12);border:1px solid rgba(var(--site-rgb),.35);color:var(--site);font-size:34px;margin-bottom:22px;box-shadow:0 20px 60px rgba(var(--site-rgb),.18);animation:rise .6s cubic-bezier(.2,.8,.2,1) both}
-.hero .badge{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;border:1px solid var(--border);background:var(--bg-secondary);font-size:12px;font-weight:600;color:var(--text-secondary);letter-spacing:.3px;margin-bottom:22px;animation:rise .6s .05s cubic-bezier(.2,.8,.2,1) both}
-.hero .badge b{color:var(--site)}
-.hero h1{font-size:clamp(34px,6vw,58px);font-weight:800;letter-spacing:-1.4px;line-height:1.08;animation:rise .6s .1s cubic-bezier(.2,.8,.2,1) both}
-.hero h1 .d{color:var(--site)}
-.hero h1 .tld{color:var(--text-secondary)}
-.hero .tag{font-size:clamp(18px,2.6vw,24px);font-weight:600;color:var(--text-primary);margin:18px 0 10px;animation:rise .6s .16s cubic-bezier(.2,.8,.2,1) both}
-.hero p.lead{color:var(--text-secondary);font-size:16px;line-height:1.65;max-width:680px;margin:0 auto;animation:rise .6s .22s cubic-bezier(.2,.8,.2,1) both}
-.ctas{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:30px;animation:rise .6s .3s cubic-bezier(.2,.8,.2,1) both}
-.hero .status{margin:22px auto 0;max-width:720px;font-size:12.5px;line-height:1.7;color:var(--text-muted);border:1px dashed var(--border);border-radius:12px;padding:10px 14px;background:rgba(0,0,0,.15)}
-.hero .status b{color:var(--site)}
-.hero .status code{font-size:12px;color:var(--text-secondary);background:var(--bg-secondary);padding:1px 6px;border-radius:6px}
-.hero .status a{color:var(--text-secondary)}
-.btn{display:inline-flex;align-items:center;gap:9px;padding:12px 20px;border-radius:12px;font-size:14px;font-weight:600;text-decoration:none;border:1px solid var(--border);color:var(--text-primary);background:var(--bg-secondary);transition:transform .15s,border-color .15s,box-shadow .15s}
-.btn:hover{transform:translateY(-1px);border-color:var(--site);box-shadow:0 10px 30px rgba(var(--site-rgb),.15)}
-.btn-primary{background:var(--site);border-color:var(--site);color:#0b0d10}
-.btn-primary:hover{filter:brightness(1.08)}
-@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
-section{padding:36px 0}
-h2{font-size:22px;font-weight:700;letter-spacing:-.3px;margin-bottom:6px}
-.lead2{color:var(--text-secondary);font-size:14px;margin-bottom:20px}
-.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}
-.card{background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:20px;transition:transform .2s,border-color .2s,box-shadow .2s;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:8px}
-a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);box-shadow:0 16px 40px rgba(0,0,0,.35)}
-.card .ic{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:rgba(var(--site-rgb),.12);color:var(--site);font-size:17px}
-.card b{font-size:15px}
-.card span{font-size:13px;color:var(--text-secondary);line-height:1.55}
-.card .go{margin-top:auto;font-size:12.5px;font-weight:600;color:var(--site)}
-.highlight .hl-card{border:1px solid rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.10);border-radius:18px;padding:22px 22px 18px}
-.highlight h2{margin:0 0 8px}.highlight h2 i{color:var(--accent-light)}.highlight p{margin:0 0 10px}
-.highlight ul{margin:0 0 14px;padding-left:20px}.highlight li{margin:4px 0}
-.faq details{border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:12px 14px;margin:8px 0}
-.faq summary{cursor:pointer;font-weight:600}.faq details p{margin:8px 0 0;opacity:.85}
-.meanwhile .card .ic{background:rgba(var(--accent-rgb),.12);color:var(--accent-light)}
-.net .card .ic{background:var(--bg-hover);color:var(--text-primary)}
-.rooms{display:flex;flex-wrap:wrap;gap:8px}
-.rooms a{font-size:12.5px;padding:7px 12px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary);text-decoration:none;transition:all .15s;background:var(--bg-secondary)}
-.rooms a:hover{color:var(--text-primary);border-color:var(--site)}
-.rooms a i{margin-right:6px;opacity:.8}
-.strip{border:1px solid var(--border);border-radius:18px;background:var(--bg-secondary);padding:30px 26px;text-align:center;margin:10px 0 50px}
-.strip h3{font-size:19px;font-weight:700;margin:12px 0 8px}
-.strip p{font-size:14px;color:var(--text-secondary);max-width:600px;margin:0 auto 18px;line-height:1.6}
-.strip .ov-mark{width:44px;height:44px}
-.hero.split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:40px;align-items:center;text-align:left;padding-top:64px}
-.hero.split .ctas{justify-content:flex-start}.hero.split p.lead{margin:0}
-.viz{background:var(--bg-card);border:1px solid var(--border);border-radius:20px;padding:14px;box-shadow:0 30px 80px rgba(0,0,0,.45),0 0 0 1px rgba(var(--site-rgb),.08);animation:rise .7s .25s cubic-bezier(.2,.8,.2,1) both;text-align:left}
-.viz figcaption{margin-top:10px;font-size:11.5px;color:var(--text-muted);text-align:center}
-.viz-top{display:flex;align-items:center;gap:8px;font-size:13px;padding:2px 4px 12px}
-.viz-top b{font-weight:700}.viz-top .muted{color:var(--text-muted)}
-.viz-top .lat{margin-left:auto;font-size:12px;color:var(--site);background:rgba(var(--site-rgb),.1);border:1px solid rgba(var(--site-rgb),.3);padding:3px 9px;border-radius:999px}
-.viz-top .dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.18)}
-.viz-top .av{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:rgba(var(--site-rgb),.15);color:var(--site);font-size:13px}
-.viz-video{position:relative;aspect-ratio:16/9;border-radius:14px;overflow:hidden;background:radial-gradient(120% 90% at 30% 20%,rgba(var(--site-rgb),.28),transparent 60%),linear-gradient(160deg,#1a2338,#0b1020 70%);border:1px solid var(--border)}
-.viz-video::after{content:'';position:absolute;left:10%;right:10%;bottom:0;height:42%;background:linear-gradient(transparent,rgba(0,0,0,.35)),repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 1px,transparent 1px 38px);transform:perspective(220px) rotateX(58deg);transform-origin:bottom}
-.viz-video .scan{position:absolute;inset:0;background:linear-gradient(transparent 0,rgba(255,255,255,.04) 50%,transparent 100%);background-size:100% 6px;opacity:.5}
-.viz-video .onair{position:absolute;top:10px;left:10px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;background:rgba(239,68,68,.9);color:#fff}.viz-video .onair i{font-size:7px;vertical-align:2px;margin-right:3px}
-.viz-video .cam{position:absolute;bottom:10px;right:10px;font-size:11px;color:#dbe4f5;background:rgba(0,0,0,.45);padding:3px 8px;border-radius:6px}
-.viz-ctrl{display:flex;gap:14px;align-items:center;margin-top:12px}
-.dpad{display:grid;grid-template-columns:repeat(3,34px);grid-template-rows:repeat(3,34px);gap:4px;flex:none}
-.dpad span{display:grid;place-items:center;border-radius:9px;background:var(--bg-hover);color:var(--text-primary);font-size:15px;border:1px solid var(--border)}
-.dpad .u{grid-area:1/2}.dpad .l{grid-area:2/1}.dpad .c{grid-area:2/2;background:rgba(var(--site-rgb),.15);border-color:rgba(var(--site-rgb),.35)}.dpad .r{grid-area:2/3}.dpad .d{grid-area:3/2}
-.dpad .u{background:rgba(var(--site-rgb),.22);border-color:rgba(var(--site-rgb),.5)}
-.viz-side{flex:1;min-width:0;display:grid;gap:8px}
-.viz-side .keys{display:flex;flex-wrap:wrap;gap:6px}
-.viz-side .keys span{font-size:11.5px;padding:5px 9px;border-radius:8px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary)}
-.viz-side .meter{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text-muted)}
-.viz-side .meter i{flex:1;height:6px;border-radius:9px;background:linear-gradient(90deg,#22c55e var(--v),var(--bg-hover) var(--v))}
-.viz-side .meter b{color:var(--text-secondary);font-weight:600}
-.viz-side .estop{justify-self:end;font-size:12px;font-weight:800;letter-spacing:.08em;color:#fff;background:#dc2626;border-radius:10px;padding:7px 16px;box-shadow:0 0 0 3px rgba(220,38,38,.25)}
-.feed{list-style:none;display:grid;gap:8px;padding:2px}
-.feed li{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;line-height:1.45;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary)}
-.feed li i{color:#22c55e;margin-top:3px}
-.feed li.ask{flex-wrap:wrap;border-color:rgba(var(--site-rgb),.45);background:rgba(var(--site-rgb),.08);color:var(--text-primary)}.feed li.ask i{color:var(--site)}.feed li.ask>span:first-of-type{flex:1;min-width:160px}
-.feed .pills{display:flex;gap:6px;margin-left:auto}.feed .pills span{font-size:12px;font-weight:600;padding:4px 11px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}.feed .pills .ok{background:var(--site);border-color:var(--site);color:#0b0d10}
-.steps{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;counter-reset:s}
-.steps li{position:relative;background:var(--bg-card);border:1px solid var(--border);border-radius:16px;padding:20px 20px 20px;display:flex;flex-direction:column;gap:8px}
-.steps .n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:14px;color:#0b0d10;background:var(--site)}
-.steps b{font-size:15px}.steps span:last-child{font-size:13px;color:var(--text-secondary);line-height:1.55}
-.grid.three{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
-.viz .task{font-size:14px;line-height:1.5;padding:10px 12px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary)}
-.viz .modes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
-.viz .modes span{font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}
-.viz .modes .on{background:var(--site);border-color:var(--site);color:#0b0d10}
-.cands{list-style:none;display:grid;gap:6px}
-.cands li{display:grid;grid-template-columns:18px minmax(0,1fr) 54px 50px 44px;align-items:center;gap:8px;font-size:12.5px;padding:8px 10px;border-radius:10px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);position:relative}
-.cands li i{color:var(--text-muted)}.cands li b{font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
-.cands li span{text-align:right;font-variant-numeric:tabular-nums}
-.cands li.pick{border-color:rgba(var(--site-rgb),.55);background:rgba(var(--site-rgb),.09)}.cands li.pick i{color:var(--site)}
-.cands li em{position:absolute;top:-8px;right:10px;font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:1px 7px;border-radius:999px;background:var(--site);color:#0b0d10}
-.viz .why{margin-top:10px;font-size:12.5px;line-height:1.5;color:var(--text-secondary)}.viz .why i{color:var(--site);margin-right:4px}
-.choice{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
-.card.big{padding:24px}.card.big b{font-size:17px}
-.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:6px}
-.chips span{font-size:12.5px;padding:6px 11px;border-radius:999px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary)}
-.chips.big span{font-size:13.5px;padding:9px 14px;color:var(--text-primary)}.chips.big span i{color:var(--site);margin-right:8px}
-.build .card{border-style:dashed;background:rgba(0,0,0,.15)}.build .card b i{color:var(--site);margin-right:6px}.build .card span a{color:var(--text-secondary)}.build .card code{font-size:12px}
-@media (max-width:860px){.hero.split{grid-template-columns:1fr;text-align:center;gap:28px}.hero.split .ctas{justify-content:center}.hero.split p.lead{margin:0 auto}}
-@media (max-width:600px){.hero{padding-top:56px}.ctas .btn{width:100%;justify-content:center}.viz-ctrl{flex-direction:column;align-items:stretch}.dpad{align-self:center}.cands li{grid-template-columns:14px minmax(0,1fr) 30px 40px 30px;gap:6px;font-size:12px;padding:8px}}
-@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
-</style>
-</head>
-<body>
-<div class="orbs"><i></i><i></i><i></i></div>
-<div id="navbar-mount"></div>
-<main class="wrap">
- <header class="hero split"><div class="hero-main">
- <div class="mark"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div>
- <div class="badge"><span class="ov-mark" data-size="16" data-variant="actor"></span> Part of the OpenVibe network · <b>being built</b></div>
- <h1>OpenVibe<span class="d">.</span><span class="tld">Actor</span></h1>
- <div class="tag">Every AI agent, every device, one command console.</div>
- <p class="lead">OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.</p>
- <div class="ctas">
- <a class="btn btn-primary" href="https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F"><i class="fa-solid fa-right-to-bracket"></i> Sign in with OpenVibe</a>
- <a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> See the network</a>
- <a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
- </div>
- </div>
- <figure class="viz" aria-label="Design preview: a task routed across four agent systems with cost, time and success estimates, the balanced mode selected">
- <div class="viz-top"><span class="av"><i class="fa-solid fa-route" aria-hidden="true"></i></span><b>New task</b><span class="lat"><i class="fa-solid fa-wallet" aria-hidden="true"></i> budget 50¢</span></div>
- <p class="task">Research five competitors of my shop and write a one-page brief with sources.</p>
- <div class="modes" aria-hidden="true"><span>Cheapest</span><span class="on">Balanced</span><span>Best</span><span>Fastest</span><span>Private</span></div>
- <ol class="cands" aria-hidden="true"><li class="pick"><i class="fa-solid fa-circle-nodes"></i><b>OpenVibe runtime</b><span>6¢</span><span>3 min</span><span>92%</span><em>picked</em></li><li><i class="fa-solid fa-cloud"></i><b>Hosted frontier agent</b><span>31¢</span><span>2 min</span><span>95%</span></li><li><i class="fa-solid fa-code"></i><b>Coding agent</b><span>12¢</span><span>4 min</span><span>81%</span></li><li><i class="fa-solid fa-lock"></i><b>Open model on OpenVibe</b><span>1¢</span><span>7 min</span><span>74%</span></li></ol>
- <p class="why"><i class="fa-solid fa-circle-info" aria-hidden="true"></i> Meets this task's quality bar at the lowest expected cost; a second model family checks the brief before you get it.</p>
- <figcaption>Design preview; the numbers are illustrative</figcaption>
- </figure>
- </header>
-
-
- <section id="what">
- <h2>How a task runs</h2>
- <p class="lead2">Send a task from the site, the API or any OpenVibe app. Actor does the rest.</p>
- <ol class="steps">
- <li><span class="n">1</span><b>Describe the task</b><span>Say what you want done, pick a mode and set a budget. Attach files or give it a robot, a site or a stream to work with.</span></li>
- <li><span class="n">2</span><b>Actor picks the agent</b><span>It weighs every agent system on live price, speed and success for this kind of task, picks one, and tells you why.</span></li>
- <li><span class="n">3</span><b>Checked, then delivered</b><span>A different model checks the result; a failed check moves the task to a stronger agent. You see the cost to the cent.</span></li>
- </ol>
- </section>
-
-
- <section>
- <h2>Modes</h2>
- <p class="lead2">Tell Actor what matters most. It balances the rest.</p>
- <div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-coins" aria-hidden="true"></i></div><b>Cheapest</b><span>The lowest expected cost that still meets the task's quality bar.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-scale-balanced" aria-hidden="true"></i></div><b>Balanced</b><span>The default: cost, quality and speed weighed together.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-trophy" aria-hidden="true"></i></div><b>Best</b><span>The highest chance of a right answer first time; cost comes second.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-bolt" aria-hidden="true"></i></div><b>Fastest</b><span>The shortest time to a checked result.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-lock" aria-hidden="true"></i></div><b>Private</b><span>Only agents that keep your data on OpenVibe: its own runtime and open models on its hardware.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-wallet" aria-hidden="true"></i></div><b>Budgets</b><span>A hard limit per task and per day. Actor never goes over it.</span></div>
- </div>
- </section>
-
- <section id="routes">
- <h2>What it routes to</h2>
- <p class="lead2">Every agent system worth using, behind one API, one key and one bill.</p>
- <div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe's own runtime</b><span>Uses every OpenVibe product as a tool, with models chosen by OpenVibe.AI.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-cloud" aria-hidden="true"></i></div><b>Hosted agent platforms</b><span>Agent platforms from companies like OpenAI and Anthropic, with their browsers, code runners and search.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-code" aria-hidden="true"></i></div><b>Coding agents</b><span>For tasks that are really code: fixes, features, reviews and tests.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Open-source agents</b><span>Open runtimes and open models on OpenVibe's own hardware: the Private mode.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-key" aria-hidden="true"></i></div><b>Your own keys</b><span>Bring a key for any platform and pay it directly; Actor still routes, checks and explains.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-plug-circle-plus" aria-hidden="true"></i></div><b>New ones, fast</b><span>A new agent platform is one adapter. The day it lands, every app and agent can use it.</span></div>
- </div>
- </section>
- <section id="devices">
- <h2>Your devices, under control</h2>
- <p class="lead2">Install the OpenVibe Node on a computer, a server, a Raspberry Pi or a phone. No open ports: it connects out. You decide how much an agent may do.</p>
- <div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-terminal" aria-hidden="true"></i></div><b>Terminal and files</b><span>A live terminal, a file browser, processes and services, from anywhere, for you and your agents.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-display" aria-hidden="true"></i></div><b>Screen, keyboard and mouse</b><span>Agents can use any app on the machine the way you would, and you watch the screen while they work.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-code-branch" aria-hidden="true"></i></div><b>Your own coding agents</b><span>The coding agents already installed on the machine become agents Actor can hand tasks to.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-sliders" aria-hidden="true"></i></div><b>Four control levels</b><span>Observe, Ask, Trusted or Full control, set on the device itself. Full control is time-boxed and recorded.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-power-off" aria-hidden="true"></i></div><b>A kill switch you hold</b><span>A button, a hotkey or one command on the device ends any agent session at once. Work can stay inside a container.</span></div>
- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>Robots too</b><span>The same Node drives robots on OpenVibe.Bot, so one install covers your computers and your robots.</span><span class="go">openvibe.bot →</span></a>
- </div>
- </section>
- <section id="console">
- <h2>One console for everything</h2>
- <p class="lead2">Agents, tasks, approvals, devices, robots, sites, streams and costs in one place, on the web and on your phone.</p>
- <div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-keyboard" aria-hidden="true"></i></div><b>Command bar</b><span>Type what you want in plain words or as a slash command; it goes to the right agent, device or product.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Tasks and approvals</b><span>Live progress for every task, and one inbox for everything waiting on you.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-server" aria-hidden="true"></i></div><b>Devices</b><span>Every Node with its status, a terminal, its files and its screen.</span></div>
- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>Robots</b><span>Your robots' control panels from OpenVibe.Bot, next to everything else.</span><span class="go">openvibe.bot →</span></a>
- <div class="card"><div class="ic"><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i></div><b>Sites and streams</b><span>Deploys on OpenVibe.Host and your streams on OpenVibe.Live and openre.stream.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-wave-square" aria-hidden="true"></i></div><b>Events and costs</b><span>What happened across the network, live, and what every task cost.</span></div>
- </div>
- </section>
- <section>
- <h2>Balanced live, explained always</h2>
- <p class="lead2">Choices come from what actually happens, not from marketing pages.</p>
- <div class="grid three">
- <div class="card"><div class="ic"><i class="fa-solid fa-chart-line" aria-hidden="true"></i></div><b>Live signals</b><span>Price, speed, success rate and outages per agent system and per kind of task, updated from real runs.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-arrows-rotate" aria-hidden="true"></i></div><b>Failover</b><span>When an agent system slows down or fails, tasks move to the next best one at once.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-list-check" aria-hidden="true"></i></div><b>Checked results</b><span>Cheap first, then stronger agents only when a check fails: you pay for strength only when a task needs it.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-magnifying-glass-chart" aria-hidden="true"></i></div><b>Public rankings</b><span>Success, cost and time per agent system for each kind of task, from real traffic, with dates.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-receipt" aria-hidden="true"></i></div><b>Every choice explained</b><span>Which agent ran, why it won, what else was considered and what it cost.</span></div>
- <div class="card"><div class="ic"><i class="fa-solid fa-user-astronaut" aria-hidden="true"></i></div><b>Your agents, on top</b><span>Always-on agents with memory, schedules and approvals; every task they take goes through the router.</span></div>
- </div>
- </section>
-
- <section>
- <h2>Start an agent from a template</h2>
- <p class="lead2">Each one is a starting point you can change, and each routes its work through Actor.</p>
- <div class="chips big"><span><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i>Stream co-host</span><span><i class="fa-solid fa-shield" aria-hidden="true"></i>Chat moderator</span><span><i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>Research assistant</span><span><i class="fa-solid fa-globe" aria-hidden="true"></i>Site builder</span><span><i class="fa-solid fa-robot" aria-hidden="true"></i>Robot pilot</span><span><i class="fa-solid fa-calendar-check" aria-hidden="true"></i>Personal assistant</span></div>
- </section>
-
- <section class="meanwhile">
- <h2>Reachable everywhere</h2>
- <p class="lead2">Actor is part of the network, not a separate app.</p>
- <div class="grid">
- <div class="card"><div class="ic"><i class="fa-solid fa-bars" aria-hidden="true"></i></div><b>On every OpenVibe site</b><span>An agent button in the navbar, with the page you are on as context.</span></div>
- <a class="card" href="https://openvibe.chat"><div class="ic"><i class="fa-solid fa-comments" aria-hidden="true"></i></div><b>In chat</b><span>Direct messages on OpenVibe.Chat and @mentions in Live chat and Community threads.</span><span class="go">openvibe.chat →</span></a>
- <a class="card" href="https://openvibe.bot"><div class="ic"><i class="fa-solid fa-robot" aria-hidden="true"></i></div><b>With your robots</b><span>Give an agent a robot on OpenVibe.Bot to patrol, check on or perform with, with your approval.</span><span class="go">openvibe.bot →</span></a>
- <a class="card" href="https://openvibe.codes"><div class="ic"><i class="fa-solid fa-plug" aria-hidden="true"></i></div><b>From your own apps</b><span>An API, webhooks and an MCP server, so other assistants can hand tasks to Actor.</span><span class="go">openvibe.codes →</span></a>
- </div>
- </section>
-
- <section id="questions" class="faq">
- <h2>Questions</h2>
- <details><summary>Is this like OpenRouter?</summary><p>Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them.</p></details>
- <details><summary>Which agent systems does it use?</summary><p>OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly.</p></details>
- <details><summary>How does it choose?</summary><p>For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained.</p></details>
- <details><summary>Can I keep my data on OpenVibe?</summary><p>Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware.</p></details>
- <details><summary>Can it act without asking?</summary><p>Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged.</p></details>
- <details><summary>Can an agent take full control of my computer?</summary><p>Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first.</p></details>
- <details><summary>Can I run Actor myself?</summary><p>Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network.</p></details>
- <details><summary>What will it cost?</summary><p>You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task.</p></details>
- </section>
-
- <section class="build">
- <div class="card">
- <b><i class="fa-solid fa-person-digging" aria-hidden="true"></i> Build status</b>
- <span>OpenVibe.Actor is being built now, on the network's accounts, AI router and event system that already run. Its own service is not running yet: this page is a placeholder, nothing here is live yet. It opens with the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts. · as of 2026-09-29 · <a href="/status.json">status.json</a></span>
- </div>
- </section>
-
- <section class="net">
- <h2>The OpenVibe network</h2>
- <p class="lead2">One account for all of it. Sign in once and every site signs you in.</p>
- <div class="grid">
- <a class="card" href="https://openvibe.live"><div class="ic"><i class="fa-solid fa-tower-broadcast" aria-hidden="true"></i></div><b>OpenVibe.Live</b><span>Go live, chat, clip, restream</span><span class="go">openvibe.live →</span></a>
- <a class="card" href="https://openvibe.tools"><div class="ic"><i class="fa-solid fa-screwdriver-wrench" aria-hidden="true"></i></div><b>OpenVibe.Tools</b><span>Hundreds of online tools</span><span class="go">openvibe.tools →</span></a>
- <a class="card" href="https://openvibe.community"><div class="ic"><i class="fa-solid fa-people-group" aria-hidden="true"></i></div><b>OpenVibe.Community</b><span>Pastes, posts, people</span><span class="go">openvibe.community →</span></a>
- <a class="card" href="https://openvibe.games"><div class="ic"><i class="fa-solid fa-gamepad" aria-hidden="true"></i></div><b>OpenVibe.Games</b><span>Scraplandia and browser games</span><span class="go">openvibe.games →</span></a>
- <a class="card" href="https://openvibe.media"><div class="ic"><i class="fa-solid fa-photo-film" aria-hidden="true"></i></div><b>OpenVibe.Media</b><span>VODs, clips and files</span><span class="go">openvibe.media →</span></a>
- <a class="card" href="https://openvibe.network"><div class="ic"><i class="fa-solid fa-circle-nodes" aria-hidden="true"></i></div><b>OpenVibe.Network</b><span>One account, every site</span><span class="go">openvibe.network →</span></a>
- </div>
- <h2 style="margin-top:28px;font-size:16px">Other OpenVibe domains, not open yet</h2>
- <div class="rooms" style="margin-top:8px">
- <a href="https://openvibe.news/"><i class="fa-solid fa-newspaper" aria-hidden="true"></i>OpenVibe.News</a>
- <a href="https://openvibe.reviews/"><i class="fa-solid fa-star-half-stroke" aria-hidden="true"></i>OpenVibe.Reviews</a>
- <a href="https://openvibe.tips/"><i class="fa-solid fa-hand-holding-heart" aria-hidden="true"></i>OpenVibe.Tips</a>
- <a href="https://openvibe.vip/"><i class="fa-solid fa-crown" aria-hidden="true"></i>OpenVibe.VIP</a>
- <a href="https://openvibe.trade/"><i class="fa-solid fa-chart-line" aria-hidden="true"></i>OpenVibe.Trade</a>
- <a href="https://openvibe.host/"><i class="fa-solid fa-server" aria-hidden="true"></i>OpenVibe.Host</a>
- <a href="https://openvibe.deals/"><i class="fa-solid fa-tags" aria-hidden="true"></i>OpenVibe.Deals</a>
- <a href="https://openvibe.coupons/"><i class="fa-solid fa-ticket" aria-hidden="true"></i>OpenVibe.Coupons</a>
- <a href="https://openre.stream/"><i class="fa-solid fa-satellite-dish" aria-hidden="true"></i>OpenRe.Stream</a>
- <a href="https://auth.openvibe.network/"><i class="fa-solid fa-key" aria-hidden="true"></i>auth.openvibe.network</a>
- <a href="https://api.openvibe.network/"><i class="fa-solid fa-plug" aria-hidden="true"></i>api.openvibe.network</a>
- <a href="https://admin.openvibe.network/"><i class="fa-solid fa-shield-halved" aria-hidden="true"></i>admin.openvibe.network</a>
- <a href="https://themes.openvibe.network/"><i class="fa-solid fa-palette" aria-hidden="true"></i>themes.openvibe.network</a>
- <a href="https://ai.openvibe.services/"><i class="fa-solid fa-robot" aria-hidden="true"></i>ai.openvibe.services</a>
- <a href="https://openvibe.pics/"><i class="fa-solid fa-images" aria-hidden="true"></i>OpenVibe.Pics</a>
- <a href="https://openvibe.download/"><i class="fa-solid fa-cloud-arrow-down" aria-hidden="true"></i>OpenVibe.Download</a>
- <a href="https://openvibe.space/"><i class="fa-solid fa-layer-group" aria-hidden="true"></i>OpenVibe.Space</a>
- <a href="https://openvibe.food/"><i class="fa-solid fa-utensils" aria-hidden="true"></i>OpenVibe.Food</a>
- <a href="https://openvibe.quest/"><i class="fa-solid fa-map" aria-hidden="true"></i>OpenVibe.Quest</a>
- <a href="https://openvibe.rent/"><i class="fa-solid fa-key" aria-hidden="true"></i>OpenVibe.Rent</a>
- <a href="https://openvibe.homes/"><i class="fa-solid fa-house" aria-hidden="true"></i>OpenVibe.Homes</a>
- <a href="https://openvibe.services/"><i class="fa-solid fa-server" aria-hidden="true"></i>OpenVibe.Services</a>
- <a href="https://openvibe.run/"><i class="fa-solid fa-terminal" aria-hidden="true"></i>OpenVibe.Run</a>
- <a href="https://openvibe.work/"><i class="fa-solid fa-briefcase" aria-hidden="true"></i>OpenVibe.Work</a>
- <a href="https://openvibe.zone/"><i class="fa-solid fa-box-archive" aria-hidden="true"></i>OpenVibe.Zone</a>
- <a href="https://openvibe.video/"><i class="fa-solid fa-film" aria-hidden="true"></i>OpenVibe.Video</a>
- <a href="https://openvibe.website/"><i class="fa-solid fa-globe" aria-hidden="true"></i>OpenVibe.Website</a>
- <a href="https://openvibe.help/"><i class="fa-solid fa-life-ring" aria-hidden="true"></i>OpenVibe.Help</a>
- <a href="https://openvibe.bot/"><i class="fa-solid fa-robot" aria-hidden="true"></i>OpenVibe.Bot</a>
- <a href="https://openvibe.watch/"><i class="fa-solid fa-eye" aria-hidden="true"></i>OpenVibe.Watch</a>
- <a href="https://openvibe.events/"><i class="fa-solid fa-bolt" aria-hidden="true"></i>OpenVibe.Events</a>
- </div>
- </section>
-
- <div class="strip">
- <span class="ov-mark" data-size="44" data-variant="actor"></span>
- <h3>Open source. Community run.</h3>
- <p>Every OpenVibe site is built in the open by the people using it — free speech within the rules, no gatekeeping, one identity that follows you everywhere.</p>
- <a class="btn" href="https://github.com/OpenVibers" rel="noopener"><i class="fa-brands fa-github"></i> OpenVibers on GitHub</a>
- </div>
-</main>
-<style id="ovf-css">
-.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;
- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}
-.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}
-.ovf-inner{max-width:1240px;margin:0 auto}
-.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}
-.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}
-.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}
-.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}
-.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}
-.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}
-.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}
-.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}
-.ovf-brand--sm{font-size:.9rem}
-.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}
-.ovf-social{display:flex;gap:8px;margin-top:4px}
-.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);
- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}
-.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}
-.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;
- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;
- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));
- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));
- animation:ovfIn .4s ease-out both}
-@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
-.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}
-.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}
-.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;
- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}
-.ovf-avatar img{width:100%;height:100%;object-fit:cover}
-.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}
-.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;
- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));
- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}
-.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}
-.ovf-account-links i{font-size:.72rem;opacity:.8}
-.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;
- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));
- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}
-.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}
-.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}
-.ovf [hidden],.ovf-account[hidden]{display:none!important}
-.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}
-.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}
-.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}
-.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
-@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
-@media (max-width:560px){
- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf-cols{gap:22px 16px}
- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}
- .ovf-legal-inline{justify-content:center}
- .ovf-account{flex-direction:column;align-items:flex-start}
-}
-@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}
-.ovf{-webkit-tap-highlight-color:transparent}
-:where(.ovf) :where(a,button):active{scale:.97}
-:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}
-@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="full"><div class="ovf-inner">
- <div class="ovf-cols">
- <div class="ovf-col ovf-col--brand">
- <a class="ovf-brand" href="/"><span class="ov-mark" data-size="26"></span><span>OpenVibe</span></a>
- <p class="ovf-tagline">Open source and community run. Built in the open by the people using it.</p>
- <div class="ovf-social">
- <a href="https://github.com/OpenVibers" target="_blank" rel="noopener" aria-label="GitHub" title="GitHub"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path fill="currentColor" stroke="none" d="M12 2.2a9.8 9.8 0 0 0-3.1 19.1c.5.1.7-.2.7-.5v-1.7c-2.7.6-3.3-1.2-3.3-1.2-.4-1.1-1.1-1.4-1.1-1.4-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.5 2.3 1.1 2.9.8.1-.6.3-1.1.6-1.3-2.2-.2-4.5-1.1-4.5-4.8 0-1.1.4-1.9 1-2.6-.1-.2-.4-1.2.1-2.6 0 0 .8-.3 2.7 1a9.3 9.3 0 0 1 4.9 0c1.9-1.3 2.7-1 2.7-1 .5 1.4.2 2.4.1 2.6.6.7 1 1.5 1 2.6 0 3.7-2.3 4.6-4.5 4.8.4.3.7.9.7 1.800v2.700c0 .3.2.6.7.5A9.8 9.8 0 0 0 12 2.200z"/></svg></a><a href="https://discord.gg/M6MuRUaeJj" target="_blank" rel="noopener" aria-label="Discord" title="Discord"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path fill="currentColor" stroke="none" d="M19.3 5.300a16.5 16.5 0 0 0-4.1-1.300l-.5 1a15.3 15.3 0 0 0-5.4 0l-.5-1a16.5 16.5 0 0 0-4.1 1.300C2.1 9.2 1.4 13 1.7 16.700a16.6 16.6 0 0 0 5.1 2.600l1.1-1.800c-.6-.2-1.2-.5-1.7-.8l.4-.3a11.8 11.8 0 0 0 10.8 0l.4.3c-.5.3-1.1.6-1.7.8l1.1 1.800a16.6 16.6 0 0 0 5.1-2.600c.4-4.3-.7-8.1-3-11.400zM8.7 14.400c-1 0-1.8-.9-1.8-2.100s.8-2.1 1.8-2.1 1.9 1 1.8 2.100c0 1.2-.8 2.1-1.8 2.100zm6.6 0c-1 0-1.8-.9-1.8-2.100s.8-2.1 1.8-2.1 1.9 1 1.8 2.100c0 1.2-.8 2.1-1.8 2.100z"/></svg></a>
- <a href="/sitemap.xml" aria-label="Sitemap" title="Sitemap"><svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="9" y="3.5" width="6" height="4.5" rx="1"/><rect x="3" y="16" width="6" height="4.5" rx="1"/><rect x="15" y="16" width="6" height="4.5" rx="1"/><path d="M12 8v4M6 16v-2.500h12V16"/></svg></a>
- </div>
- </div>
-
- <nav class="ovf-col" aria-label="The OpenVibe network">
- <h3>Network</h3>
- <a href="https://openvibe.live" title="Go live, restream and clip">Live streaming</a><a href="https://openvibe.tools" title="The whole toolbox">Online tools</a><a href="https://dev.openvibe.tools" title="Formatters, encoders, validators">Developer tools</a><a href="https://net.openvibe.tools" title="Ping, DNS, Whois, SSL">Network diagnostics</a><a href="https://img.openvibe.tools" title="Convert, resize, compress">Image converter</a><a href="https://audio.openvibe.tools" title="Convert, trim, pitch-shift">Audio converter</a>
- <a class="ovf-more" href="https://openvibe.network" target="_blank" rel="noopener">Everything else <svg class="ovf-ic" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="1.800" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a>
- </nav>
-
- <nav class="ovf-col" aria-label="Legal">
- <h3>Legal</h3>
- <a href="https://openvibe.live/tos">Terms of Service</a><a href="https://openvibe.live/privacy">Privacy Policy</a><a href="https://openvibe.live/dmca">DMCA</a>
- </nav>
- </div>
- <div class="ovf-account" id="ovf-account" hidden></div>
- <div class="ovf-bar">
- <span class="ovf-copy">Open source & community driven · built in the open</span>
- <a class="ovf-shipped" data-ov-shipped="latest" data-service="actor" href="https://openvibe.network/updates?site=actor" hidden></a>
- <span class="ovf-legal-inline">
- <a href="https://openvibe.network/updates?site=actor">Updates</a>
- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>
- </span>
- </div>
- </div></footer>
-<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
-<script src="/shared/navbar.js?v=017a740747b4"></script>
-<script src="/shared/footer.js?v=a85ab893be88"></script>
-<script>
-(function () {
- if (window.OpenVibeNavbar) { try { OpenVibeNavbar.init({ service: 'actor', apiBase: 'https://openvibe.network', links: [{ label: 'How it works', href: '#what' }, { label: 'The network', href: 'https://openvibe.network/#network', external: false }], history: { type: 'page', title: 'OpenVibe.Actor' } }); } catch (e) {} }
- if (window.OpenVibeFooter) { try { OpenVibeFooter.init({ service: 'actor', variant: 'full', links: [{ heading: 'OpenVibe.Actor', items: [{ name: 'Sign in', url: 'https://openvibe.network/login?return=https%3A%2F%2Fopenvibe.actor%2F' }, { name: 'The network', url: 'https://openvibe.network/#network' }, { name: 'Discord', url: 'https://discord.gg/M6MuRUaeJj' }] }] }); } catch (e) {} }
-})();
-</script>
-</body>
-</html>
deleted file mode 100644
deleted file mode 100644
@@ -1,48 +0,0 @@
@@ -1,48 +0,0 @@
-{
- "name": "OpenVibe.Actor",
- "short_name": "Actor",
- "description": "Every AI agent, every device, one command console.",
- "start_url": "/",
- "scope": "/",
- "display": "standalone",
- "background_color": "#0a0f1c",
- "theme_color": "#3b82f6",
- "icons": [
- {
- "src": "https://openvibe.network/assets/logo-72.png",
- "sizes": "72x72",
- "type": "image/png",
- "purpose": "any"
- },
- {
- "src": "https://openvibe.network/assets/logo-192.png",
- "sizes": "192x192",
- "type": "image/png",
- "purpose": "any"
- },
- {
- "src": "https://openvibe.network/assets/logo-512.png",
- "sizes": "512x512",
- "type": "image/png",
- "purpose": "any"
- },
- {
- "src": "https://openvibe.network/assets/logo-maskable-192.png",
- "sizes": "192x192",
- "type": "image/png",
- "purpose": "maskable"
- },
- {
- "src": "https://openvibe.network/assets/logo-maskable-512.png",
- "sizes": "512x512",
- "type": "image/png",
- "purpose": "maskable"
- },
- {
- "src": "https://openvibe.network/assets/logo.svg",
- "sizes": "any",
- "type": "image/svg+xml",
- "purpose": "any"
- }
- ]
-}
deleted file mode 100644
deleted file mode 100644
@@ -1,115 +0,0 @@
@@ -1,115 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Privacy Policy — OpenVibe.Actor</title>
-<meta name="description" content="What OpenVibe.Actor collects, why, and the choices you have.">
-<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">
-<link rel="canonical" href="https://openvibe.actor/privacy">
-<meta property="og:type" content="article">
-<meta property="og:site_name" content="OpenVibe.Actor">
-<meta property="og:title" content="Privacy Policy — OpenVibe.Actor">
-<meta property="og:description" content="What OpenVibe.Actor collects, why, and the choices you have.">
-<meta property="og:url" content="https://openvibe.actor/privacy">
-<meta property="og:locale" content="en_US">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="Privacy Policy — OpenVibe.Actor">
-<meta name="twitter:description" content="What OpenVibe.Actor collects, why, and the choices you have.">
-<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
-<meta name="theme-color" content="#0d131d">
-<meta name="color-scheme" content="dark">
-<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>
-<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
-.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}
-.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}
-.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}
-.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}
-.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}
-.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>
-<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>
-<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>Privacy Policy</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>
-<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">The short version</a></li><li><a href="#s2">What we collect</a></li><li><a href="#s3">Why we use it</a></li><li><a href="#s4">Cookies and storage in your browser</a></li><li><a href="#s5">Across OpenVibe sites</a></li><li><a href="#s6">Who we share with</a></li><li><a href="#s7">How long we keep things</a></li><li><a href="#s8">Where your data is</a></li><li><a href="#s9">Security</a></li><li><a href="#s10">Your choices and rights</a></li><li><a href="#s11">Children</a></li><li><a href="#s12">Changes and contact</a></li></ol></nav>
-<section><h2 id="s1">The short version</h2><p>OpenVibe.Actor collects what it needs to work and to keep abuse out, and no more. We do not sell or rent personal information, we do not share it for advertising, and we do not run advertising trackers. Most of OpenVibe.Actor works without an account.</p></section>
-<section><h2 id="s2">What we collect</h2><ul><li><b>Request logs.</b> Like every web server, ours record your IP address, browser type, the address requested and the time. We use them for security, rate limiting, debugging and aggregate traffic statistics.</li><li><b>Usage statistics.</b> First-party page views with a random session identifier, kept on our own servers, so we can see which parts of the network are used.</li><li><b>An anonymous page count.</b> The shared navigation bar reports one count per page load containing only the site's hostname and the day. No user, IP address or page is stored with it. It decides the order of sites in our menus. It is skipped when your browser sends Global Privacy Control or Do Not Track.</li></ul></section>
-<section><h2 id="s3">Why we use it</h2><ul><li>To provide the service you asked for and keep you signed in (performance of our agreement with you).</li><li>To keep the service secure, prevent abuse and understand usage in aggregate (our legitimate interests).</li><li>To send account email such as verification and password resets, and notifications you switched on (agreement and consent).</li><li>To comply with the law.</li></ul></section>
-<section><h2 id="s4">Cookies and storage in your browser</h2><p>We use a small number of first-party cookies: a sign-in token (<code>ov_token</code>), a refresh token limited to the sign-in paths, a short-lived state cookie during sign-in, and a hint (<code>ov_sso_hint</code>) that remembers whether you were signed in. openvibe.network also keeps a sign-in cookie that lets other OpenVibe sites check, in a hidden frame or through your browser's built-in federated sign-in, whether to sign you in quietly. It is never used for anything except that check.</p><p>Your theme, display settings (text size, reduced motion), recent pages, a cached copy of the navigation and similar conveniences are kept in your browser's local storage. There are no third-party advertising or social cookies. Our sites sit behind Cloudflare, which may set its own security cookies and measure performance.</p></section>
-<section><h2 id="s5">Across OpenVibe sites</h2><p>OpenVibe sites share one account. When you are signed in, the site you visit learns who you are from openvibe.network. While cross-site history is switched on, the pages and tools you open while signed in are listed for you, and only you, at <a href="https://openvibe.network/history">openvibe.network/history</a>, where you can clear the list or pause it.</p></section>
-<section><h2 id="s6">Who we share with</h2><p>Only the services needed to run the network: hosting (OVH, servers in the United States), network security and delivery (Cloudflare), object storage for media (Backblaze B2 or Cloudflare R2), and email delivery for account messages. They process data on our instructions. We disclose information when the law requires it, and we tell the person affected when we are allowed to. If OpenVibe is ever reorganised or handed to new maintainers, the data moves under the same promises.</p></section>
-<section><h2 id="s7">How long we keep things</h2><ul><li>Request logs and raw usage events: a limited rolling period, then totals only.</li><li>The anonymous page count: totals per site and day, nothing personal to delete.</li></ul></section>
-<section><h2 id="s8">Where your data is</h2><p>Our servers are in the United States. If you use OpenVibe from elsewhere, your information is transferred to and processed in the United States, which may have different data protection rules from your country.</p></section>
-<section><h2 id="s9">Security</h2><p>Traffic is encrypted in transit. Passwords are stored as salted hashes, sign-in tokens are signed and short-lived, and internal service routes are not reachable from the internet. No system is perfectly secure; if a breach affects your personal information we will tell you and the relevant authorities as the law requires.</p></section>
-<section><h2 id="s10">Your choices and rights</h2><p>You can use most of OpenVibe.Actor without an account, block cookies, and switch on Global Privacy Control to skip the anonymous page count. With an account you can view, correct, export and delete your data from your account settings, or ask us to do it.</p><p>Depending on where you live, including the EEA, the UK and US states such as California, you may have rights to access, correct, delete, restrict or object to the use of your data, to data portability, and to complain to your data protection authority. We do not sell or share personal information as those laws define it, and we do not make automated decisions with legal effect. Write to <a href="mailto:[email protected]">[email protected]</a>; we answer within 30 days and will not treat you differently for asking.</p></section>
-<section><h2 id="s11">Children</h2><p>OpenVibe.Actor is not for children under 13, and we do not knowingly collect their information. If you believe a child has given us personal information, contact us and we will delete it.</p></section>
-<section><h2 id="s12">Changes and contact</h2><p>We will post changes here and update the date above; significant changes are announced on the site. Questions and requests: <a href="mailto:[email protected]">[email protected]</a>.</p></section>
-<nav class="ov-legal-more" aria-label="Other policies"><a href="/terms">Terms of Service</a><a href="/dmca">DMCA & Copyright</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">
-.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;
- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}
-.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}
-.ovf-inner{max-width:1240px;margin:0 auto}
-.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}
-.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}
-.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}
-.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}
-.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}
-.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}
-.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}
-.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}
-.ovf-brand--sm{font-size:.9rem}
-.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}
-.ovf-social{display:flex;gap:8px;margin-top:4px}
-.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);
- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}
-.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}
-.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;
- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;
- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));
- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));
- animation:ovfIn .4s ease-out both}
-@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
-.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}
-.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}
-.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;
- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}
-.ovf-avatar img{width:100%;height:100%;object-fit:cover}
-.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}
-.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;
- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));
- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}
-.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}
-.ovf-account-links i{font-size:.72rem;opacity:.8}
-.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;
- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));
- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}
-.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}
-.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}
-.ovf [hidden],.ovf-account[hidden]{display:none!important}
-.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}
-.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}
-.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}
-.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
-@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
-@media (max-width:560px){
- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf-cols{gap:22px 16px}
- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}
- .ovf-legal-inline{justify-content:center}
- .ovf-account{flex-direction:column;align-items:flex-start}
-}
-@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}
-.ovf{-webkit-tap-highlight-color:transparent}
-:where(.ovf) :where(a,button):active{scale:.97}
-:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}
-@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">
- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>
- <nav class="ovf-compact-links" aria-label="Site links">
-
- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>
- <a href="https://openvibe.network/updates?site=network">Updates</a>
- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>
- </nav>
- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>
- <span class="ovf-compact-meta">Open source · 2026</span>
- </div></footer>
-<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>
-<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}
-try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}
-try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>
-</body></html>
\ No newline at end of file
\ No newline at end of file
deleted file mode 100644
deleted file mode 100644
@@ -1,13 +0,0 @@
@@ -1,13 +0,0 @@
-{
- "service": "actor",
- "release": "3693cad70f33",
- "released_at": "2026-10-03T00:00:00.000Z",
- "booted_at": null,
- "contracts_version": null,
- "packages": {
- "openvibe-shared": "2.5.0"
- },
- "min_client_release": null,
- "mixed_version_window_hours": 24,
- "kind": "placeholder"
-}
deleted file mode 100644
deleted file mode 100644
@@ -1,4 +0,0 @@
@@ -1,4 +0,0 @@
-User-agent: *
-Allow: /
-Disallow: /auth/
-Sitemap: https://openvibe.actor/sitemap.xml
deleted file mode 100644
deleted file mode 100644
@@ -1,4 +0,0 @@
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url><loc>https://openvibe.actor/</loc><lastmod>2026-10-03</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
-</urlset>
deleted file mode 100644
deleted file mode 100644
@@ -1,16 +0,0 @@
@@ -1,16 +0,0 @@
-{
- "domain": "openvibe.actor",
- "name": "OpenVibe.Actor",
- "stage": "placeholder",
- "live": false,
- "plannedRepo": null,
- "repoUrl": null,
- "repoExists": false,
- "repoStage": "charter-only",
- "service": null,
- "launchWaitsFor": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",
- "factsAsOf": "2026-09-29",
- "network": "https://openvibe.network",
- "updated": "2026-10-03",
- "note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
-}
deleted file mode 100644
deleted file mode 100644
@@ -1,114 +0,0 @@
@@ -1,114 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
-<title>Terms of Service — OpenVibe.Actor</title>
-<meta name="description" content="The rules for using OpenVibe.Actor, in plain language.">
-<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">
-<link rel="canonical" href="https://openvibe.actor/terms">
-<meta property="og:type" content="article">
-<meta property="og:site_name" content="OpenVibe.Actor">
-<meta property="og:title" content="Terms of Service — OpenVibe.Actor">
-<meta property="og:description" content="The rules for using OpenVibe.Actor, in plain language.">
-<meta property="og:url" content="https://openvibe.actor/terms">
-<meta property="og:locale" content="en_US">
-<meta name="twitter:card" content="summary">
-<meta name="twitter:title" content="Terms of Service — OpenVibe.Actor">
-<meta name="twitter:description" content="The rules for using OpenVibe.Actor, in plain language.">
-<link rel="icon" type="image/svg+xml" data-ov-icon="actor" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%22-32%20-32%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22ring%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%221%22%20y2%3D%221%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232563eb%22%2F%3E%3C%2FlinearGradient%3E%0A%3CradialGradient%20id%3D%22glow%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%22.34%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%2360a5fa%22%20stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%0A%3CradialGradient%20id%3D%22bg%22%20cx%3D%22.5%22%20cy%3D%22.38%22%20r%3D%22.8%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%2316223a%22%2F%3E%3Cstop%20offset%3D%22.6%22%20stop-color%3D%22%230a0f1c%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23060912%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3Crect%20x%3D%22-32%22%20y%3D%22-32%22%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2215%22%20fill%3D%22url(%23bg)%22%2F%3E%3Cg%20transform%3D%22scale(1.22)%22%3E%0A%3Ccircle%20r%3D%2221%22%20fill%3D%22url(%23glow)%22%2F%3E%0A%3Ccircle%20r%3D%2218%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224%22%20opacity%3D%22.38%22%2F%3E%0A%3Cpath%20d%3D%22M0%2C-18%20A18%2C18%200%200%2C1%2017.4%2C4.6%22%20fill%3D%22none%22%20stroke%3D%22url(%23ring)%22%20stroke-width%3D%224.4%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3Cpath%20d%3D%22M-9.5%2C-7%20L0%2C10%20L9.5%2C-7%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%224.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%0A%3Ccircle%20cx%3D%2217.4%22%20cy%3D%224.6%22%20r%3D%223.2%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
-<meta name="theme-color" content="#0d131d">
-<meta name="color-scheme" content="dark">
-<style id="ov-critical">html{background:#0a0f1c;color:#e6edf7;color-scheme:dark}</style><script>(function(){try{var r=localStorage.getItem('ov_theme');if(!r)return;var t=JSON.parse(r),v=t&&t.variables;if(!v)return;var e=document.documentElement;for(var k in v)if(k.charAt(0)==='-')e.style.setProperty(k,v[k]);if(v['--bg-primary'])e.style.background=v['--bg-primary'];if(v['--text-primary'])e.style.color=v['--text-primary'];if(v['--color-scheme']==='light'||v['--color-scheme']==='dark')e.style.colorScheme=v['--color-scheme'];if(t.id)e.setAttribute('data-theme',t.id)}catch(_){}})();</script>
-<script src="https://openvibe.network/shared/theme-loader.js" defer></script><style>*{box-sizing:border-box}body{margin:0;background:var(--bg-primary,#0a0f18);color:var(--text-primary,#e6edf7);font:400 16px/1.65 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
-.ov-legal{max-width:760px;margin:0 auto;padding:40px 20px 24px}.ov-legal-kicker{margin:0;font-size:13px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--accent-light,var(--accent,#60a5fa))}
-.ov-legal h1{font-size:clamp(28px,4.5vw,40px);letter-spacing:-.03em;line-height:1.1;margin:6px 0 4px}.ov-legal-date{color:var(--text-muted,#7d8aa0);font-size:14px;margin:0 0 28px}
-.ov-legal-toc{margin:0 0 8px;padding:14px 18px;border:1px solid var(--border,rgba(255,255,255,.1));border-radius:12px;background:var(--bg-secondary,#111826)}.ov-legal-toc ol{margin:0;padding-left:20px;columns:2 220px;column-gap:28px}.ov-legal-toc li{margin:3px 0;font-size:14px;break-inside:avoid}.ov-legal-toc a{text-decoration:none}.ov-legal section{scroll-margin-top:80px}
-.ov-legal h2{font-size:19px;margin:30px 0 8px;letter-spacing:-.01em}.ov-legal p,.ov-legal li{color:var(--text-secondary,#a8b3c4)}.ov-legal li{margin:6px 0}.ov-legal b{color:var(--text-primary,#e6edf7)}
-.ov-legal a{color:var(--accent-light,var(--accent,#60a5fa))}.ov-legal code{font-size:13.5px;background:var(--bg-secondary,#111826);padding:1px 6px;border-radius:5px}
-.ov-legal-more{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;padding-top:20px;border-top:1px solid var(--border,rgba(255,255,255,.1))}.ov-legal-more a{padding:8px 14px;border:1px solid var(--border,rgba(255,255,255,.12));border-radius:10px;text-decoration:none;font-weight:600;font-size:14px}</style></head><body>
-<noscript><nav aria-label="Site" style="display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:12px 20px;border-bottom:1px solid rgba(255,255,255,.1);font:500 14px/1.4 system-ui,sans-serif"><a href="/" style="font-weight:700;color:inherit;text-decoration:none">OpenVibe.Actor</a><span style="flex:1"></span><a href="https://openvibe.live/">Live</a><a href="https://openvibe.tools/">Tools</a><a href="https://openvibe.community/">Community</a><a href="https://openvibe.games/">Games</a><a href="https://openvibe.media/">Media</a><a href="https://openvibe.network/">Network</a></nav></noscript>
-<main><article class="ov-legal"><p class="ov-legal-kicker">OpenVibe.Actor</p><h1>Terms of Service</h1><p class="ov-legal-date">Last updated <time datetime="2026-09-18">September 18, 2026</time></p>
-<nav class="ov-legal-toc" aria-label="On this page"><ol><li><a href="#s1">The short version</a></li><li><a href="#s2">Who can use it</a></li><li><a href="#s3">This site is not open yet</a></li><li><a href="#s4">Rules for everyone</a></li><li><a href="#s5">Automated and AI-written text</a></li><li><a href="#s6">Reporting and moderation</a></li><li><a href="#s7">Leaving</a></li><li><a href="#s8">Open source, links and feedback</a></li><li><a href="#s9">No warranty, limited liability</a></li><li><a href="#s10">Governing law</a></li><li><a href="#s11">Changes and contact</a></li></ol></nav>
-<section><h2 id="s1">The short version</h2><p>OpenVibe.Actor is part of OpenVibe, an open source, community-run network. Use it for lawful things, be decent to other people, and do not try to break it. Most of it works without an account. We can remove content or accounts that break these terms. The service is provided as it is, without warranties.</p><p>These terms cover openvibe.actor, its subdomains, and any other domain that serves the same service. Other OpenVibe sites have their own terms, written for what those sites do.</p></section>
-<section><h2 id="s2">Who can use it</h2><p>You must be at least 13 years old, or the minimum age of digital consent where you live. If you are under 18, a parent or guardian must agree to these terms for you. You may not use OpenVibe.Actor if you were banned from the network, or if the law where you live forbids it.</p></section>
-<section><h2 id="s3">This site is not open yet</h2><p>OpenVibe.Actor is a reserved address that currently shows a preview page. There is nothing to sign up for or post here yet. When it opens, these terms will be replaced with ones written for what it does, and the date above will change.</p></section>
-<section><h2 id="s4">Rules for everyone</h2><p>OpenVibe leans toward open expression. These limits apply on every site:</p><ul><li>Nothing illegal where you are or in the United States, where our servers are.</li><li>No sexual content involving minors and no sexualisation of minors, ever. We report it to the authorities.</li><li>No credible threats, incitement to violence, or publishing private information to harm someone.</li><li>No content you do not have the rights to.</li><li>No malware, phishing, spam, fraud, or impersonation of a person or organisation to deceive.</li><li>No attempts to disrupt the service, get around bans, rate limits or access controls, or reach other people's accounts or data.</li><li>No scraping that ignores robots.txt or our rate limits. Respectful crawlers, archives and AI agents are welcome; a machine-readable map is at /llms.txt where available.</li></ul></section>
-<section><h2 id="s5">Automated and AI-written text</h2><p>Some descriptive text on OpenVibe, such as footer blurbs, summaries and suggestions, is written by automated systems and checked by rules rather than by a person. It can be wrong. Do not rely on it for decisions that matter.</p></section>
-<section><h2 id="s6">Reporting and moderation</h2><p>Report content with the report controls where they exist, or write to <a href="mailto:[email protected]">[email protected]</a>. Copyright complaints follow the <a href="/dmca">DMCA process</a>. We may remove content, limit features, or suspend accounts that break these terms or put other people or the service at risk, and we may act without notice when the harm is urgent. If you think we got it wrong, reply to the notice or write to the same address and a person will look again.</p></section>
-<section><h2 id="s7">Leaving</h2><p>You can stop using OpenVibe.Actor at any time. Sections that by their nature should survive (licences for content already shared, liability, governing law) continue after you leave.</p></section>
-<section><h2 id="s8">Open source, links and feedback</h2><p>OpenVibe's code is public. Each repository's licence governs your use of the code; these terms govern your use of the hosted service at openvibe.actor. Links to other sites are provided for convenience and we are not responsible for them. If you send us ideas or fixes, we may use them without owing you anything, and contributions to the code are made under the repository's licence.</p></section>
-<section><h2 id="s9">No warranty, limited liability</h2><p>The service is provided "as is" and "as available", without warranties of any kind, including fitness for a particular purpose, accuracy of results, or uninterrupted availability. To the extent the law allows, OpenVibe and the people who run it are not liable for indirect, incidental or consequential losses, lost data or lost profits arising from your use of OpenVibe.Actor, and our total liability is limited to the greater of what you paid us in the past twelve months or fifty US dollars. Nothing here limits liability that cannot be limited by law, and consumer rights you have under the law of your country remain.</p><p>If your use of OpenVibe.Actor breaks these terms or the law and someone brings a claim against us because of it, you agree to cover our reasonable costs.</p></section>
-<section><h2 id="s10">Governing law</h2><p>These terms are governed by the laws of the United States and the State of Washington, without regard to conflicts of law. Disputes are handled in the federal or state courts located in Washington State, unless the consumer law of your country gives you the right to use your local courts. If part of these terms cannot be enforced, the rest still applies. Not enforcing a term once does not waive it. These terms are the whole agreement between us about OpenVibe.Actor.</p></section>
-<section><h2 id="s11">Changes and contact</h2><p>We may update these terms. Material changes are announced on the site before they take effect, and the date at the top changes. Continuing to use OpenVibe.Actor after a change means you accept it. Questions: <a href="mailto:[email protected]">[email protected]</a>.</p></section>
-<nav class="ov-legal-more" aria-label="Other policies"><a href="/privacy">Privacy Policy</a><a href="/dmca">DMCA & Copyright</a><a href="https://openvibe.network/">About OpenVibe</a></nav></article></main><style id="ovf-css">
-.ovf{background:var(--bg-secondary,#12131c);border-top:1px solid var(--border,rgba(255,255,255,.08));margin-top:40px;
- padding:clamp(24px,4vw,40px) clamp(14px,4vw,32px) calc(clamp(20px,3vw,28px) + env(safe-area-inset-bottom,0px));}
-.ovf[data-variant="compact"]{margin-top:24px;padding:14px clamp(12px,3vw,24px) calc(14px + env(safe-area-inset-bottom,0px));}
-.ovf-inner{max-width:1240px;margin:0 auto}
-.ovf-inner--compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 18px;text-align:center}
-.ovf-cols{display:grid;gap:clamp(20px,3vw,36px);grid-template-columns:minmax(230px,1.6fr) repeat(auto-fit,minmax(120px,1fr));align-items:start}
-.ovf-col{display:flex;flex-direction:column;gap:8px;min-width:0}
-.ovf-col h3{margin:0 0 2px;font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted,#8b93ad)}
-.ovf-col a{color:var(--text-secondary,#b6bdd2);font-size:.86rem;text-decoration:none;line-height:1.4;width:fit-content;transition:color .15s,transform .15s}
-.ovf-col a:hover{color:var(--accent,#60a5fa);transform:translateX(2px)}
-.ovf-more{font-weight:600;opacity:.85}.ovf-ic{flex:none;vertical-align:-.14em}.ovf-more .ovf-ic{font-size:.85em;margin-left:3px;transition:transform .15s}.ovf-more:hover .ovf-ic{transform:translateX(3px)}.ovf-social .ovf-ic{font-size:17px}.ovf-account-links .ovf-ic{font-size:1.05em;opacity:.85}
-.ovf-brand{display:inline-flex;align-items:center;gap:9px;color:var(--text-primary,#f1f4fb);font-size:1.05rem;font-weight:700;text-decoration:none}
-.ovf-brand--sm{font-size:.9rem}
-.ovf-tagline{margin:0;font-size:.82rem;line-height:1.55;color:var(--text-muted,#8b93ad);max-width:46ch}
-.ovf-social{display:flex;gap:8px;margin-top:4px}
-.ovf-social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--text-secondary,#b6bdd2);
- background:var(--bg-tertiary,#1a1b28);border:1px solid var(--border,rgba(255,255,255,.08));font-size:.95rem;transition:color .15s,border-color .15s,transform .15s}
-.ovf-social a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-2px)}
-.ovf-account{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;
- margin-top:clamp(18px,2.5vw,26px);padding:10px 14px;border-radius:14px;
- background:color-mix(in srgb, var(--accent,#60a5fa) 8%, var(--bg-tertiary,#1a1b28));
- border:1px solid color-mix(in srgb, var(--accent,#60a5fa) 26%, var(--border,rgba(255,255,255,.08)));
- animation:ovfIn .4s ease-out both}
-@keyframes ovfIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
-.ovf-account-who{display:inline-flex;align-items:center;gap:8px;font-size:.84rem;color:var(--text-secondary,#b6bdd2)}
-.ovf-account-who strong{color:var(--text-primary,#f1f4fb)}
-.ovf-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;display:grid;place-items:center;
- background:var(--accent,#60a5fa);color:#fff;font-size:.7rem;font-weight:800;flex:none}
-.ovf-avatar img{width:100%;height:100%;object-fit:cover}
-.ovf-account-links{display:flex;flex-wrap:wrap;gap:6px}
-.ovf-account-links a{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-size:.78rem;font-weight:600;
- color:var(--text-secondary,#b6bdd2);background:var(--bg-secondary,#12131c);border:1px solid var(--border,rgba(255,255,255,.08));
- text-decoration:none;transition:color .15s,border-color .15s,transform .15s}
-.ovf-account-links a:hover{color:var(--accent,#60a5fa);border-color:var(--accent,#60a5fa);transform:translateY(-1px)}
-.ovf-account-links i{font-size:.72rem;opacity:.8}
-.ovf-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;
- margin-top:clamp(20px,3vw,30px);padding-top:16px;border-top:1px solid var(--border,rgba(255,255,255,.08));
- padding-inline:clamp(0px, calc(84px - (100vw - 1240px) / 2), 84px)}
-.ovf-copy{color:var(--text-muted,#8b93ad);font-size:.78rem}
-.ovf-legal-inline,.ovf-compact-links{display:flex;flex-wrap:wrap;gap:14px}
-.ovf [hidden],.ovf-account[hidden]{display:none!important}
-.ovf .ovf-shipped.ov-shipped-latest{font-size:.76rem;padding:4px 12px;max-width:min(520px,100%);background:transparent}
-.ovf-legal-inline a,.ovf-compact-links a{color:var(--text-muted,#8b93ad);font-size:.78rem;text-decoration:none;transition:color .15s}
-.ovf-legal-inline a:hover,.ovf-compact-links a:hover{color:var(--accent,#60a5fa)}
-.ovf-compact-meta{color:var(--text-muted,#8b93ad);font-size:.74rem}
-@media (max-width:900px){.ovf-cols{grid-template-columns:repeat(2,minmax(0,1fr))}.ovf-col--brand{grid-column:1/-1}}
-@media (max-width:560px){
- .ovf{padding-bottom:calc(20px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf[data-variant="compact"]{padding-bottom:calc(14px + var(--ov-footer-clearance,0px) + env(safe-area-inset-bottom,0px))}
- .ovf-cols{gap:22px 16px}
- .ovf-bar{justify-content:center;text-align:center;padding-inline:0}
- .ovf-legal-inline{justify-content:center}
- .ovf-account{flex-direction:column;align-items:flex-start}
-}
-@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}
-.ovf{-webkit-tap-highlight-color:transparent}
-:where(.ovf) :where(a,button):active{scale:.97}
-:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}
-@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}</style><footer id="ov-footer" class="ovf" data-variant="compact"><div class="ovf-inner ovf-inner--compact">
- <a class="ovf-brand ovf-brand--sm" href="/"><span class="ov-mark" data-size="20"></span><span>OpenVibe.Network</span></a>
- <nav class="ovf-compact-links" aria-label="Site links">
-
- <a href="https://openvibe.network" target="_blank" rel="noopener">Network</a>
- <a href="https://openvibe.network/updates?site=network">Updates</a>
- <a href="https://openvibe.live/tos">Terms</a><a href="https://openvibe.live/privacy">Privacy</a><a href="https://openvibe.live/dmca">DMCA</a>
- </nav>
- <a class="ovf-shipped" data-ov-shipped="latest" data-service="network" href="https://openvibe.network/updates?site=network" hidden></a>
- <span class="ovf-compact-meta">Open source · 2026</span>
- </div></footer>
-<script src="https://openvibe.network/shared/navbar.js" defer></script><script src="https://openvibe.network/shared/footer.js" defer></script>
-<script>addEventListener('DOMContentLoaded',function(){var t=null;try{t=(document.cookie.match(/(?:^|; )ov_token=([^;]*)/)||[])[1]||localStorage.getItem('ov_token')}catch(e){}
-try{OpenVibeNavbar.init({service:"network",apiBase:'https://openvibe.network',token:t?decodeURIComponent(t):null})}catch(e){}
-try{OpenVibeFooter.init({service:"network",variant:'compact',mount:'#ov-footer',apiBase:'https://openvibe.network'})}catch(e){}});</script>
-</body></html>
\ No newline at end of file
\ No newline at end of file
@@ -24,7 +24,7 @@ added; they have no Contracts manifest yet, so `sync-catalog.js` keeps them as t
@@ -24,7 +24,7 @@ added; they have no Contracts manifest yet, so `sync-catalog.js` keeps them as t
| `api.openvibe.network.conf` | placeholder | OpenVibe.Network | no |
| `api.openvibe.network.conf` | placeholder | OpenVibe.Network | no |
| `auth.openvibe.network.conf` | placeholder | OpenVibe.Network | no |
| `auth.openvibe.network.conf` | placeholder | OpenVibe.Network | no |
| `openre.stream.conf` | placeholder | OpenRe.Stream | yes: `deploy/nginx/openre.stream.conf` |
| `openre.stream.conf` | placeholder | OpenRe.Stream | yes: `deploy/nginx/openre.stream.conf` |
-| `openvibe.actor.conf` | placeholder (no repo) | park: DNS only (OpenVibe.Node exists but has no deploy config and does not run) | no |
+| (`openvibe.actor`, no Sites host file) | nothing (removed 2026-10-08) | OpenVibe.Actor: the task router and OpenVibe's own agent (Actor 0.1.0); its repo vhost deploy/nginx/openvibe.actor.conf replaces this one | yes |
| (`openvibe.bot`, no Sites host file) | legal pages, 404, sitemap and manifest (its front page, robots.txt, release.json and status.json are Bot's since 2026-10-07, OpenVibe.Bot#34) | OpenVibe.Bot, which already supplies the vhost | yes (Contracts still says `noRepo`) |
| (`openvibe.bot`, no Sites host file) | legal pages, 404, sitemap and manifest (its front page, robots.txt, release.json and status.json are Bot's since 2026-10-07, OpenVibe.Bot#34) | OpenVibe.Bot, which already supplies the vhost | yes (Contracts still says `noRepo`) |
| `openvibe.coupons.conf` | placeholder | OpenVibe.Coupons | yes: `deploy/nginx/openvibe.coupons.conf` |
| `openvibe.coupons.conf` | placeholder | OpenVibe.Coupons | yes: `deploy/nginx/openvibe.coupons.conf` |
| `openvibe.deals.conf` | placeholder | OpenVibe.Deals | yes: `deploy/nginx/openvibe.deals.conf` |
| `openvibe.deals.conf` | placeholder | OpenVibe.Deals | yes: `deploy/nginx/openvibe.deals.conf` |
@@ -23,6 +23,5 @@
@@ -23,6 +23,5 @@
"openvibe.video",
"openvibe.video",
"openvibe.website",
"openvibe.website",
"openvibe.help",
"openvibe.help",
- "openvibe.watch",
- "openvibe.actor"
+ "openvibe.watch"
]
]
@@ -6,7 +6,7 @@
@@ -6,7 +6,7 @@
"": {
"": {
"name": "openvibe-sites",
"name": "openvibe-sites",
"dependencies": {
"dependencies": {
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"
},
},
"engines": {
"engines": {
@@ -181,9 +181,9 @@
@@ -181,9 +181,9 @@
"license": "MIT"
"license": "MIT"
},
},
"node_modules/openvibe-contracts": {
"node_modules/openvibe-contracts": {
- "version": "0.114.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",
- "integrity": "sha512-MLtahxYztHGzN09L0D6TuXzPoueuqb/6+v9QVivaaGMO92PDhGK3Q9mg9f0oWX6pYa+iL25Au5sI2MEK0spsRw==",
+ "version": "0.115.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0",
+ "integrity": "sha512-2si6od4+RLgZEIAuWMmTrLZL65TzvCwB/sKoe24vSzC9+sNPt2RXWGXDCwE2fB90vmaRvX6pI+DQyu18QN2f0Q==",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -7,7 +7,7 @@
@@ -7,7 +7,7 @@
"test": "node test/run.js"
"test": "node test/run.js"
},
},
"dependencies": {
"dependencies": {
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.114.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.115.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.13.2"
},
},
"engines": {
"engines": {
@@ -1607,10 +1607,10 @@
@@ -1607,10 +1607,10 @@
]
]
],
],
"keywords": "ai agent router, openrouter for agents, ai agent that controls your computer, remote control computer with ai, self-hosted ai agent, computer use agent, ai command console, agent api, cloud ai agent, mcp server",
"keywords": "ai agent router, openrouter for agents, ai agent that controls your computer, remote control computer with ai, self-hosted ai agent, computer use agent, ai command console, agent api, cloud ai agent, mcp server",
- "launch": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",
+ "launch": "the task router: its own runtime on OpenVibe services, other platforms' agents, a private open model and a cross-family check; then Codes, personal agents and Node control",
"noRepo": true,
"noRepo": true,
"vision": {
"vision": {
- "badge": "being built",
+ "badge": "alpha",
"cta": [
"cta": [
"See the network",
"See the network",
"https://openvibe.network/#network",
"https://openvibe.network/#network",
@@ -18,7 +18,9 @@ assert.deepStrictEqual(notices.map(n => n.domain), [
@@ -18,7 +18,9 @@ assert.deepStrictEqual(notices.map(n => n.domain), [
'realtime.openvibe.network', 'status.openvibe.network',
'realtime.openvibe.network', 'status.openvibe.network',
]);
]);
assert.strictEqual(new Set(frozen).size, frozen.length, 'frozen domains are unique');
assert.strictEqual(new Set(frozen).size, frozen.length, 'frozen domains are unique');
-assert.strictEqual(frozen.length, 26, 'all 26 product domains are frozen');
+assert.strictEqual(frozen.length, 25, 'all 25 product domains are frozen');
+// OpenVibe.Actor serves openvibe.actor itself since 2026-10-08 (its own vhost; Actor 0.1.0).
+assert.ok(!frozen.includes('openvibe.actor'), 'openvibe.actor left Sites');
// OpenVibe.AI serves ai.openvibe.services itself and ai.openvibe.network answers 301 to it since 2026-10-07 (AI#23).
// OpenVibe.AI serves ai.openvibe.services itself and ai.openvibe.network answers 301 to it since 2026-10-07 (AI#23).
assert.ok(!frozen.includes('ai.openvibe.services') && !exists('dist/ai.openvibe.services') && !exists('dist/ai.openvibe.network') && !exists('deploy/nginx/ai.openvibe.services.conf') && !exists('deploy/nginx/ai.openvibe.network.conf'), 'OpenVibe.AI owns both AI addresses');
assert.ok(!frozen.includes('ai.openvibe.services') && !exists('dist/ai.openvibe.services') && !exists('dist/ai.openvibe.network') && !exists('deploy/nginx/ai.openvibe.services.conf') && !exists('deploy/nginx/ai.openvibe.network.conf'), 'OpenVibe.AI owns both AI addresses');
// OpenVibe.Events serves openvibe.events itself since 2026-10-07 (its own vhost; Events#16).
// OpenVibe.Events serves openvibe.events itself since 2026-10-07 (its own vhost; Events#16).
@@ -47,14 +49,6 @@ for (const domain of frozen) {
@@ -47,14 +49,6 @@ for (const domain of frozen) {
assert.doesNotMatch(html, PRICING, `${domain}: pricing copy`);
assert.doesNotMatch(html, PRICING, `${domain}: pricing copy`);
assert.doesNotMatch(html, UNBACKED, `${domain}: claims a hosting product that does not exist`);
assert.doesNotMatch(html, UNBACKED, `${domain}: claims a hosting product that does not exist`);
}
}
-for (const domain of ['openvibe.actor']) {
- assert.ok(frozen.includes(domain), `${domain}: remains frozen`);
- assert.match(read(`dist/${domain}/index.html`), /<meta name="robots" content="index, follow, max-image-preview:large">/, `${domain}: original indexing`);
- assert.strictEqual(JSON.parse(read(`dist/${domain}/status.json`)).stage, 'placeholder', `${domain}: lifecycle stage`);
- assert.strictEqual(JSON.parse(read(`dist/${domain}/release.json`)).kind, 'placeholder', `${domain}: release kind`);
- assert.ok(exists(`dist/${domain}/sitemap.xml`), `${domain}: frozen sitemap`);
- assert.ok(read(`dist/${domain}/robots.txt`).includes(`Sitemap: https://${domain}/sitemap.xml`), `${domain}: sitemap advertised`);
-}
for (const notice of notices) {
for (const notice of notices) {
const d = notice.domain;
const d = notice.domain;