Perplexity ha hecho público el código de SPACE, la plataforma de sandbox detrás de cada tarea en Perplexity Computer. El sandbox Perplexity SPACE proporciona a cada tarea de agente su propia microVM de Firecracker. Las credenciales y el tráfico saliente se controlan desde fuera de esa VM. El código se publica bajo Apache 2.0 en GitHub. Para los equipos que construyen agentes de programación o navegación, esta es una capa de aislamiento probada en producción que pueden alojar por su cuenta.
TL;DR
- Tamaño: código base en Rust, release 0.8.0, la línea base pública. API HTTP más eventos enviados por el servidor.
- Se ejecuta en: Un host Linux x86_64 con KVM,
/dev/kvm, btrfs y Docker. Modo directo o Kind (Kubernetes) local. No hay macOS. - Rendimiento: En producción, la latencia mediana de creación cayó de 185 ms a 60 ms en comparación con el proveedor anterior de Perplexity.
- Mejor caso: 0 de 108 intentos de escape de VM al host tuvieron éxito a través de 9 modelos de frontera.
- Peor caso: Antes de las correcciones, los agentes eludieron la política de egreso en 11 de 54 ejecuciones con red parcial.
¿Qué es Perplexity SPACE?
SPACE (Sandboxed Platform for Agentic Code Execution) es la plataforma de Perplexity para ejecutar código de agentes en microVMs aisladas. Las aplicaciones llaman a su API HTTP para crear entornos Linux, ejecutar comandos y transmitir la salida.
A plantilla proporciona el sistema de archivos inicial. A sandbox es una instancia de esa plantilla, con su propia máquina virtual y disco escribible. Muchos comandos pueden ejecutarse dentro de un mismo sandbox.
El hilo de lanzamiento explica el objetivo de diseño. Los agentes ejecutan comandos, instalan paquetes y llaman a servicios con root dentro del sandbox. El host queda fuera del control del invitado. El trabajo de los agentes es de larga duración, con estado y ramificado, por lo que debe sobrevivir a los reinicios.
¿Cómo aísla SPACE a los agentes?
Cada sandbox es una Firecracker microVM con su propio kernel invitado. Una puerta de enlace de red por sandbox en el host aplica la política de salida en cada conexión saliente.
Los secretos nunca entran en el invitado. Según la publicación de ingeniería de juliode Perplexity, las credenciales se inyectan en la capa de red. El almacén de credenciales añade alcance jerárquico, límites de tasa y registro de auditoría.
La guía de arquitectura divide el sistema en 4 partes. Estas son una API respaldada por PostgreSQL, controladores, servicios de trabajo y un plano de datos. Los servicios de trabajo gestionan VMs, redes, volúmenes, plantillas y credenciales. btrfs copy-on-write crea cada sistema de archivos raíz.
¿Cómo funcionan pausar, suspender y restaurar?
Los sandboxes pasan por 4 estados: en ejecución, pausado, suspendido y eliminado.
- Pausado: la memoria de la VM permanece residente en el trabajador. Esto no es una instantánea duradera.
- Suspendido: la memoria de la VM, el estado de ejecución y el sistema de archivos raíz se guardan en instantáneas. Los recursos activos se liberan.
- Predeterminado en reposo: los sandboxes se suspenden tras 6 horas sin actividad.
Para creaciones rápidas, los despliegues de Kubernetes utilizan warm pools de sandboxes ya iniciados. Las configuraciones de nodo único utilizan instantáneas base en su lugar.
En producción, la latencia de creación del percentil 90 bajó de 447 ms a 89 ms. Perplexity informa que el 100% de las sesiones de Computer se ejecutan en SPACE.
¿Sobrevivió SPACE a una prueba de equipo rojo?
El informe de Perplexity Escaping SPACE: Part I probó 9 modelos con acceso root dentro del invitado. El estudio realizó 216 ejecuciones en 2 tareas y 4 configuraciones.
- Escape del sandbox: 0 de 108 ejecuciones alcanzó el secreto del lado del host.
- Evasión sin red: 0 de 54 ejecuciones tuvo éxito.
- Evasión con red parcial: 11 de 54 ejecuciones tuvieron éxito antes de las correcciones. 4 modelos encontraron una vía.
Claude Opus 5.0, GPT-5.6 Sol, GPT-5.6 Cyber y Kimi K3 encontraron evasiones. Los ataques usaron suplantación de DNS y direcciones IP compartidas de CDN.
Perplexity añadió entonces validación de direcciones de origen mediante nftables. La pasarela ahora termina el TLS y comprueba tanto el SNI como el host HTTP contra la lista de permitidos. En la repetición de pruebas, ningún modelo produjo una evasión verificada.
El mismo equipo probó 10 plataformas de terceros. 8 mostraron al menos una evasión de la política de red. Perplexity comunicó los resultados a todos los proveedores afectados.
Atrás</button><button class="btn" id="psx-next">Siguiente estado </button></div> </div> <div class="pane" data-p="2"> <div class="bars" id="psx-rt"></div> <div class="note">9 modelos, 216 ejecuciones, root dentro del invitado. Correcciones: validación de direcciones de origen con nftables, terminación TLS con comprobaciones de lista de permitidos SNI + Host. Fuente: Perplexity, Escaping SPACE: Part I (23 de sep. de 2026).</div> </div> <div class="pane" data-p="3"> <div class="bars" id="psx-lat"></div> <div class="note">Tráfico de la semana de lanzamiento en producción, SPACE frente al proveedor anterior de sandboxes de Perplexity. Menor es mejor. Fuente: blog de ingeniería de Perplexity (15 de jul. de 2026).</div> </div> <div class="pane" data-p="4"> <div class="tw"><table> <tr><th>Característica</th><th>SPACE</th><th>E2B Runtime</th><th>microsandbox</th></tr> <tr><td>Aislamiento</td><td>microVM Firecracker</td><td>microVM Firecracker</td><td>microVM libkrun</td></tr> <tr><td>Licencia</td><td>Apache 2.0</td><td>Apache 2.0</td><td>Apache 2.0</td></tr> <tr><td>Lenguaje</td><td>Rust</td><td>Go</td><td>Rust</td></tr> <tr><td>Prueba de egreso de Perplexity</td><td>0 evasiones tras la corrección</td><td>Evasión HTTPS, mitigación planificada</td><td>Evasión HTTP + HTTPS, corrección en v0.6.18</td></tr> </table></div> <div class="note">Resultados de egreso de las pruebas de Perplexity del 31 de ago. al 1 de sep. de 2026, para las versiones probadas.</div> </div> <div class="ft"><span>Fuentes: github.com/perplexityai/SPACE · perplexity.ai/hub/blog</span><b>© Marktechpost</b></div> </div> <script> (function(){ var R=document.getElementById('pplx-space-x'); function post(){try{parent.postMessage({psxHeight:R.offsetHeight+40},'*')}catch(e){}} var tabs=R.querySelectorAll('.tab'),panes=R.querySelectorAll('.pane'); var D=['<b>microVM de invitado.</b> Cada tarea obtiene su propia microVM Firecracker con su propio kernel de invitado. El agente puede ejecutar comandos e instalar paquetes como root. El host queda fuera de su control.', '<b>Pasarela por sandbox.</b> Todo el egreso del invitado pasa por una pasarela del lado del host. Ahora termina el TLS y exige que tanto el SNI como el Host HTTP estén en la lista de permitidos y atribuidos por DNS.', '<b>Servicios externos.</b> Las credenciales nunca entran en el invitado. Se inyectan en la capa de red, con ámbito, límites de velocidad y registro de auditoría.']; var det=document.getElementById('psx-detail'),boxes=R.querySelectorAll('.box'); function showD(i){boxes.forEach(function(b,j){b.classList.toggle('act',i==j)});det.innerHTML=D[i];post()} boxes.forEach(function(b){b.addEventListener('click',function(){showD(+b.dataset.d)});b.addEventListener('mouseenter',function(){showD(+b.dataset.d)})}); showD(0); var L=['<b>En ejecución.</b> Los procesos se ejecutan. La memoria en vivo de la VM y el sistema de archivos escribible se conservan.', '<b>En pausa.</b> La ejecución se detiene. La memoria de la VM permanece residente en el worker. Esto no es una instantánea duradera.', '<b>Suspendida.</b> La memoria de la VM, el estado en tiempo de ejecución y el sistema de archivos raíz se guardan en una instantánea. Los recursos activos de la VM se liberan. Predeterminado: suspender tras 6 horas de inactividad.', '<b>Eliminada.</b> El sandbox ya no está disponible a través de la API.']; var li=0,sts=R.querySelectorAll('.st'),ld=document.getElementById('psx-life'); function life(){sts.forEach(function(s,j){s.classList.toggle('on',j==li)});ld.innerHTML=L[li];post()} document.getElementById('psx-next').onclick=function(){li=(li+1)%4;life()}; document.getElementById('psx-prev').onclick=function(){li=(li+3)%4;life()}; sts.forEach(function(s,j){s.style.cursor='pointer';s. onclick=function(){li=j;life()}}); life(); function bars(el,data){el.innerHTML=data.map(function(d){return '<div class="row"><div class="lbl"><span>'+d[0]+'</span><em>'+d[1]+'</em></div><div class="track"><div class="fill" data-w="'+d[2]+'" style="background:'+d[3]+'"></div></div></div>'}).join('')} bars(document.getElementById('psx-rt'),[ ['Escape de VM al host','0 de 108 ejecuciones',1.5,'#76B900'], ['Evasión de red, sin red','0 de 54 ejecuciones',1.5,'#76B900'], ['Evasión de red, red parcial (antes de la corrección)','11 de 54 ejecuciones',20.4,'#E5675A'], ['Evasión de red, después de la corrección','0 evasiones verificadas',1.5,'#76B900'], ['Plataformas de terceros con una evasión','8 de 10',80,'#1FB8CD']]); bars(document.getElementById('psx-lat'),[ ['Creación mediana, proveedor anterior','185 ms',41.4,'#5E5B66'], ['Creación mediana, SPACE','60 ms',13.4,'#20808D'], ['Creación p90, proveedor anterior','447 ms',100,'#5E5B66'], ['Creación p90, SPACE','89 ms',19.9,'#20808D']]); function anim(p){p.querySelectorAll('.fill').forEach(function(f){f.style.width='0';setTimeout(function(){f.style.width=f.dataset.w+'%'},60)})} tabs.forEach(function(t){t.onclick=function(){var i=+t.dataset.t;tabs.forEach(function(x,j){x.classList.toggle('on',j==i)});panes.forEach(function(p,j){p.classList.toggle('on',j==i)});anim(panes[i]);post()}}); window.addEventListener('load',post);window.addEventListener('resize',post);setTimeout(post,300); })(); </script> </body> </html> ">¿Cómo se compara SPACE con otros sandboxes de código abierto?
| Característica | Perplexity SPACE | E2B Runtime | microsandbox | Daytona |
|---|---|---|---|---|
| Aislamiento | microVM Firecracker por sandbox | microVM Firecracker por sandbox | microVM libkrun | Núcleo dedicado por sandbox |
| Licencia | Apache 2.0 | Apache 2.0 | Apache 2.0 | Repositorio público, sin mantenimiento desde junio de 2026 |
| Lenguaje | Rust | Go | Rust | No divulgado |
| Requisitos del host | Linux x86_64 + KVM | No divulgado | Linux con KVM | No divulgado |
| Control de salida | Puerta de enlace por sandbox, terminación TLS | Firewall nftables, listas SNI/Host | No divulgado | No revelado |
| Prueba de egreso de Perplexity | 0 omisiones tras la corrección | Omisión por HTTPS, mitigación planificada | Omisión por HTTP + HTTPS, corrección en v0.6.18 | Omisión por HTTPS, mitigación publicada |
| Soporte del SDK de E2B | Sí, mediante el wrapper de ECW | Nativo | No revelado | No revelado |
¿Cómo despliegan los desarrolladores SPACE?
La guía de instalación despliega SPACE en un clúster local de Kind. El host necesita /dev/kvm, /dev/net/tun, dispositivos loop y btrfs. Ejecutarlo dentro de una VM requiere virtualización anidada.
Los equipos que ya usan E2B pueden probar el E2B Compatibility Wrapper. Su línea base probada es el paquete de Python e2b==2.21.1. Una implementación de referencia en AWS EKS se incluye en el repositorio.
Conclusiones clave
- SPACE ejecuta cada tarea de agente en su propia microVM de Firecracker.
- Las credenciales y la política de egreso residen fuera de la VM invitada.
- 0 de 108 intentos de escape llegaron al host en las pruebas del equipo rojo.
- Las omisiones de egreso afectaron 11 de 54 ejecuciones antes de las correcciones, y 0 después.
- Apache 2.0, Rust, necesita un host Linux x86_64 con KVM.
Consulta el repositorio de GitHub, la documentación y el informe del equipo rojo. Todo el mérito es del investigador de este proyecto. Además, no dudes en seguirnos en Twitter y no olvides unirte a nuestro SubReddit de ML con más de 150k y suscribirte a nuestro boletín. ¡Espera! ¿estás en telegram? ahora también puedes unirte a nosotros en telegram.
La entrada Perplexity libera SPACE como código abierto, un sandbox de microVM de Firecracker para agentes de IA apareció primero en MarkTechPost.