paratia
icono de paratia: una carpeta clara con una puerta estanca de acero y una rueda de cobre, sobre un cuadrado redondeado verde petróleo

Herramienta de línea de comandos y app para macOS

paratia

paratia mantiene cifradas las carpetas que eliges, de modo que un agente de programación no pueda leerlas mientras están bloqueadas. También guarda un registro de quién abre o cambia los archivos que vigilas.

Un agente de programación es un programa de IA que edita archivos y ejecuta comandos en tu equipo.

Funciona en macOS. Licencia GPL-3.0.

El problema, en dos partes

Un agente de programación funciona con tus permisos, así que puede leer todos los archivos que tu cuenta puede leer.

Primera parte

Un archivo que el agente no puede leer

La respuesta habitual es escribir la regla: una línea en un archivo de configuración, una ruta en una lista de bloqueo (una lista de rutas que el agente no puede tocar) o una frase en una skill (un conjunto de instrucciones que el agente carga para un tipo de tarea). Las tres cosas están donde están las instrucciones propias del agente, así que un modelo que las interpreta mal las elude todas. Una página web también puede llevar una instrucción, y el agente puede abrir esa página en medio de una tarea.

Una lista de bloqueo cubre solo las variantes de escritura que alguien ha previsto. La ruta /Volumes/vault/token puede estar en la lista. El comando cat "$(printf '/Volumes/va''ult/token')" lee el mismo archivo, y la lista no lo detecta. Las variantes de escritura no tienen fin, así que cualquier lista está incompleta.

Segunda parte

Capacidades que se combinan

Dos agentes de distintos fabricantes siguen cada uno su propia política, y nadie aplica una política sobre el par. Un agente sujeto a una restricción puede pedirle a un segundo agente, que nunca estuvo sujeto a esa regla, que haga lo que el primero no puede. Juntos pueden hacer lo que ninguno puede hacer por sí solo.

Un preprint en arXiv (2607.07097) (en inglés) mide este efecto. Informa de que la proporción de escenarios dañinos cumplidos sube del 8,9 % al 38,9 %. Encuentra que Gemini es el modelo más seguro con instrucciones directas, y el más amplificado bajo un planificador de Claude.

Qué hace paratia con cada parte

La primera parte necesita archivos que el agente no pueda leer, y un control sobre las acciones que el agente pide realizar que no dependa de lo que el agente diga. La segunda parte necesita una regla sobre lo que un agente puede pedirle a otro.

Primera parte: un archivo que el agente no puede leer

Carpetas protegidas

Una carpeta protegida es una imagen de disco cifrada, un archivo que macOS monta como volumen cuando lo abres. El cifrado es AES-256, un método de cifrado estándar, y cada carpeta tiene su propia frase de contraseña. Mientras una carpeta está bloqueada, sus archivos son texto cifrado: bytes ilegibles que solo se leen con la frase de contraseña. Esto vale para todos los procesos, con cualquier nivel de privilegios, incluido root, la cuenta de administrador del sistema.

La frase de contraseña existe solo en tu cabeza. La configuración la pide dos veces y no la escribe en ningún sitio, así que no hay nada que un agente pueda encontrar. Si la pierdes, el contenido se pierde.

Una carpeta abierta es un volumen normal, legible por tus procesos. Un temporizador la cierra tras un retardo que tú eliges, de 1 a 1440 minutos. Si la carpeta está ocupada, el temporizador vuelve a intentarlo y nunca fuerza el cierre. Forzar el cierre es una acción aparte, con un paso de confirmación, porque puede hacer perder cambios sin guardar.

Mover una carpeta que ya existe

Puedes proteger una carpeta que ya existe, y eliges solo esa carpeta. Su imagen cifrada se guarda sola en el mismo disco, en un lugar oculto, así que no hace falta un disco externo. El contenido pasa a la imagen y paratia lo comprueba. Después cierra y vuelve a abrir la imagen para comprobar la copia de nuevo, y solo tras un segundo cierre confirmado elimina los archivos en claro. La carpeta se queda donde está: cerrada está vacía, y abierta con la frase de contraseña vuelve a mostrar sus archivos. Quitar la protección devuelve los archivos a la carpeta como archivos normales, tras comprobarlos, y después borra la imagen cifrada.

El origen debe quedarse quieto durante el traslado, así que cierra antes los documentos y las apps que puedan cambiarlo. Si el traslado se interrumpe, la app deja visibles los pasos de recuperación.

Barrera

La barrera es un hook PreToolUse, una comprobación que el programa del agente ejecuta antes de cada llamada a una herramienta (una acción que el agente pide realizar, como ejecutar un comando). Mientras una carpeta cifrada está abierta, la barrera deniega las llamadas a herramientas de las sesiones que la ejecutan. Hace al kernel, la parte de macOS que gestiona el hardware, una sola pregunta: ¿está montado el volumen? Nunca mira una ruta, así que no hay ninguna forma de escribir que sortear.

La barrera tiene pocas excepciones: los comandos que cierran o inspeccionan carpetas. Solo cuentan cuando se ejecutan con la copia del programa protegida por root. La regla es simple a propósito. Comprueba un solo hecho, si el volumen está montado, y ese hecho no depende de cómo esté escrito un comando.

Intermediario

El intermediario ejecuta un comando fijo con un secreto que rellena paratia. Los comandos que puede ejecutar, llamados verbos (comandos con nombre), se declaran dentro de la carpeta cifrada, donde el agente no puede leerlos ni cambiarlos. El agente nombra un verbo y lee la salida. Nunca tiene el secreto y nunca elige el comando.

Segunda parte: capacidades que se combinan

Delegación

Cuando un agente pide ayuda a otro, el hook lee la transcripción de la sesión, el registro que escribe el programa del agente y que el modelo no controla. Si quien habló por última vez es otro agente, el hook quita de la lista, para ese turno, las acciones reservadas a personas. Esas acciones son el uso del equipo, el navegador, el simulador, el propio paratia, security (el comando de macOS para los llaveros), sudo (el comando para acciones de administrador) y osascript (el comando de macOS que ejecuta AppleScript).

Puente SSH

SSH es un acceso remoto seguro. El puente conecta dos equipos que ejecutan sesiones de agentes. Su acceso puede ejecutar un solo programa y nada más, así que quien lo tenga no puede abrir una shell, un puerto, un agente ni una terminal. El puente calcula el origen de cada mensaje a partir de la transcripción, así que quien hace la llamada no puede proporcionarlo. Además limita cuántas veces se puede reenviar un mensaje, y lleva un registro en el que cada entrada incluye una huella (un hash) de la anterior, de modo que cualquier edición se nota.

Registro de quién tocó qué

El registro de accesos anota quién abrió y quién cambió los archivos de las carpetas que vigilas. Puedes vigilar cualquier carpeta que sea tuya, cifrada o no.

Qué se registra

Cada evento guarda la ruta, el proceso y su usuario, la app responsable cuando se puede identificar, y el ID del proceso (PID). También indica si el actor parece un agente de programación, con las pruebas en que se basa esa suposición. El registro guarda solo metadatos. No guarda contenidos de archivos, ni transcripciones, ni argumentos de comandos, ni variables de entorno.

Abrir una ruta muestra quién la consultó. Escribir, crear, renombrar, borrar (unlink) y truncar muestran quién la cambió. Puedes filtrar por carpeta, archivo, proceso, agente y hora, y exportar el resultado a CSV, un formato de tabla en texto plano.

El nombre del agente sale del ejecutable del programa y de su firma. No hay ninguna prueba autenticada de la identidad del fabricante que lo respalde.

Dos fuentes, separadas

Las operaciones propias de la app, como abrir o cerrar una carpeta protegida, forman una fuente. Los eventos del kernel forman la otra. Vienen de eslogger, una herramienta de línea de comandos de Apple que lee Endpoint Security, el marco de macOS que informa de los eventos de archivos y procesos a las herramientas de seguridad. Apple no presenta eslogger como una interfaz estable.

Cada fuente es una cadena: cada entrada lleva una huella (un hash) de la anterior, así que una edición dentro de la cadena rompe la verificación. Los registros de la app pertenecen a tu cuenta, así que un programa que se ejecute como tú puede reescribirlos. El registro del kernel es un archivo propiedad de root, y tu cuenta solo tiene acceso de lectura. Cortar entradas al final no se detecta sin un punto de control externo.

Las rutas que escribe paranco se pueden leer con paratia registro rotte-paranco, que propone las carpetas que vigilar.

paratia y paranco

paratia y paranco son dos programas pequeños del mismo autor. Funcionan en el mismo Mac y no se llaman entre sí. El único vínculo entre ellos es un archivo.

paratia

Mantiene los datos lejos de los agentes

Carpetas cifradas que ningún agente lee mientras están cerradas. Un registro de quién toca qué. Un control que bloquea a los agentes mientras una carpeta está abierta. También comprueba que un agente no pida a otro lo que no puede hacer. Esa comprobación solo vale en el lado de Claude (véase Límites).

paranco

Abre una puerta controlada

paranco tiene el Acceso total al disco (Acceso completo al disco en Latinoamérica), el permiso de macOS para archivos protegidos, de modo que los programas que leen los archivos copiados no lo necesitan. Copia archivos en una sola dirección, desde una carpeta que macOS protege, como Notas de voz, hacia una carpeta normal. Sigue las rutas que tú configuras. Sus orígenes están compilados en el programa, así que una ruta no puede añadir uno escribiendo un archivo.

Quién tiene el Acceso total al disco

Cada programa tiene su propia entrada en la lista de macOS, y cada uno necesita su propio permiso.

ProgramaPara qué se usa el Acceso total al discoTras una nueva compilación
paratia
Paratia.app
Leer eventos del kernel a través de su servicio de registroQuitar la entrada, añadirla de nuevo; reinstalar el servicio solo cuando cambia su código
paranco
Paranco.app
Leer la carpeta de Notas de vozQuitar la entrada y añadir Paranco.app de nuevo

Son dos entradas separadas. El permiso de paranco no hace innecesario el de paratia.

Por qué no un solo programa

  • Tienen objetivos opuestos. Uno cierra el acceso, y el otro abre una puerta controlada.
  • Cada compilación ad hoc nueva tiene un hash de código nuevo, y sus permisos de privacidad hay que concederlos de nuevo. Recompilar uno no debe detener el otro.
  • Tienen licencias distintas: GPL-3.0 para paratia y MIT para paranco.

El único archivo que comparten

paranco escribe routes.json. paratia puede leer ese archivo en modo de solo lectura con paratia registro rotte-paranco. El comando propone vigilar las carpetas en las que escriben las rutas, así puedes ver quién abre los archivos copiados. Sin paranco, el comando informa de que no hay rutas. Sin paratia, paranco no cambia.

paranco en GitHub

La app para Mac

La app necesita macOS 13 o posterior. Tiene cinco secciones. Sus nombres están en italiano, tal como aparecen en la app, y cada uno se explica aquí.

  • Cartelle (carpetas): carpetas protegidas, su estado, sus temporizadores y sus traslados.
  • Registro (log): el registro de accesos, sus filtros y la exportación a CSV, y si la recogida de eventos del kernel está activa.
  • Etichette (etiquetas): decisiones sobre qué proteger. Una etiqueta registra una decisión y no mueve nada.
  • Banco di prova (banco de pruebas): cuatro fases, antes, cerrada, abierta y cerrada de nuevo, cada una con su resultado de comprobación y las pruebas del kernel que haya.
  • Impostazioni (ajustes): actualizaciones del servicio de registro, configuración de los hooks y permisos de privacidad. Las contraseñas de administrador se quedan en los diálogos de macOS.

Las capturas muestran una vista previa con datos de ejemplo sintéticos, como indica la franja de arriba de cada una. No se ha ejecutado ninguna operación real.

Pantalla Cartelle con dos carpetas de ejemplo: una cerrada, con un candado verde, y otra abierta, con un candado naranja y un temporizador de 15 minutos.
Cartelle. Cada carpeta protegida muestra su estado, su tamaño y su temporizador. Una carpeta ocupada se vuelve a intentar, y forzar su cierre requiere una confirmación aparte.
Abrir a tamaño completo (1240 por 860 píxeles)
Pantalla Registro titulada «Chi ha aperto cosa» (quién abrió qué), con una carpeta de ejemplo que el recolector rechazó y una fila de evento: una carpeta cerrada por paratia.
Registro. El recolector rechazó la carpeta de ejemplo, y la app muestra el motivo. El estado de la recogida aparece junto al número de eventos, también cuando hay cero eventos.
Abrir a tamaño completo (1240 por 860 píxeles)
Pantalla Etichette con dos carpetas de ejemplo: una marcada como riservato en rojo, y otra marcada como pubblico en gris.
Etichette. Una etiqueta registra una decisión. La protección empieza cuando proteges la carpeta.
Abrir a tamaño completo (1240 por 860 píxeles)
Pantalla Banco di prova titulada «Prima, chiusa, aperta, richiusa» (antes, cerrada, abierta, cerrada de nuevo), con un ejemplo de ejecución cuya primera fase no tiene pruebas del kernel, marcada en naranja.
Banco di prova. Cada fase muestra su resultado de comprobación junto a las pruebas del kernel que encontró. Las pruebas que faltan se marcan como ausentes.
Abrir a tamaño completo (1240 por 860 píxeles)
Pantalla Impostazioni con seis pasos numerados para actualizar el servicio de registro, y un aviso de que hace falta autorización o verificación.
Impostazioni. Los pasos numerados actualizan el servicio de registro. Las contraseñas de administrador y los permisos de privacidad se quedan en los diálogos de macOS.
Abrir a tamaño completo (1240 por 860 píxeles)

Instalación

  • Herramienta de línea de comandos: macOS y Python 3.11 o posterior. No usa paquetes de terceros.
  • App para Mac: macOS 13 o posterior. La compilas desde el repositorio con las Command Line Tools de Apple (las herramientas gratuitas para desarrolladores de Apple) y rsvg-convert, una herramienta que convierte imágenes SVG. La app se firma ad hoc, lo que significa que lleva una firma local y ninguna identidad de desarrollador. No está notarizada, así que la comprobación automática de Apple no se ha ejecutado sobre ella.
  • Guarda la app en /Applications.

El README (en inglés) tiene los comandos exactos para ambas.

La barrera necesita el hook de sesión, un control registrado en los ajustes del agente. Sin el hook, una carpeta cifrada sigue funcionando. La barrera no cubre esa sesión.

La app muestra los cambios previstos en la configuración de hooks de Claude Code y Codex antes de aplicarlos. Guarda copias de seguridad de los archivos que cambia y conserva los ajustes que ya había. Los hooks de Codex deben aprobarse a mano en el gestor de hooks de la app de Codex.

Los eventos del kernel llegan de un servicio del sistema. Lo instalas ejecutando tú mismo un comando de preparación en Terminal, y después aprobando un diálogo de administrador en macOS. La app también necesita el Acceso total al disco, un permiso de privacidad de macOS. Tras cada compilación nueva, quita la entrada de la app y vuelve a añadirla. Reinstala el servicio solo cuando cambia su código. Los pasos están en la guía de la app para Mac (en italiano).

Pasos de instalación en el README (en inglés)

Límites

El proyecto documenta estos límites. Léelos antes de confiar en una garantía.

  1. Mientras una carpeta está bloqueada, sus archivos son texto cifrado. Mientras está abierta, es un volumen normal, y un secreto que un agente haya leído mientras estaba abierta permanece en el contexto del modelo. Sustituye todo lo que un agente haya visto.
  2. Mientras una carpeta está abierta, la barrera deniega las llamadas a herramientas de las sesiones que la ejecutan. Un agente no puede trabajar en esas sesiones hasta que cierres la carpeta.
  3. En un Mac con una sola cuenta, la barrera deja rastro de los cambios. No los impide. Un agente que se ejecute como tú puede reescribir tus archivos de política y los ajustes de los agentes, incluido el hook que se ejecuta. paratia seal y paratia attest informan de esos cambios después. No los impiden. La protección que no depende de la colaboración del agente es el cifrado mientras la carpeta está bloqueada.
  4. La barrera cubre solo las sesiones que ejecutan su hook. Otros programas de agentes, como Cursor y Aider, aplican sus propios hooks o ninguno. Todo lo de aquí es local a una sola máquina: un agente con acceso a la red y una credencial de API puede llegar a un modelo sin ninguno de estos hooks.
  5. La delegación se comprueba solo en el lado de Claude. Una conversación que empieza en el lado de Codex no tiene restricciones hasta que Codex ejecute su parte de la comprobación.
  6. El registro de accesos no es un historial completo. Un evento de apertura no prueba que se haya leído un byte. La recogida del kernel no informa de cada acceso ni de cada intento fallido, las escrituras hechas solo mediante mapeo en memoria no se informan, y los montajes y desmontajes no aparecen en el registro del kernel. No se garantiza la cobertura de todos los accesos.
  7. Una etiqueta registra una decisión y no protege nada por sí sola. Es un archivo JSON (un formato de datos en texto plano) en tu carpeta personal, y la cuenta del agente puede reescribirlo. La protección viene del cifrado de los archivos.
  8. Borrar el original después de un traslado no es un borrado seguro. Las copias de seguridad, las instantáneas de APFS (estados guardados del disco que macOS conserva) y las copias en la nube hechas antes conservan sus versiones, y los bloques físicos de un SSD (disco de estado sólido) no se borran.
  9. Algunas mediciones siguen pendientes. A octubre de 2026, la ejecución en vivo del banco de pruebas no se ha realizado. El uso de CPU en reposo y el retardo de los eventos deben medirse de nuevo después de instalar una compilación nueva.
  10. El plan de vigilancia sale de un archivo que cualquier programa que se ejecute como tú puede reescribir. Te ayuda a configurar la vigilancia, y no es un límite de seguridad.

Para leer más

Los documentos siguientes están en italiano.

Sobre el nombre

Una paratia stagna es un mamparo estanco: un tabique que atraviesa el barco y evita que un compartimento inundado arrastre al resto del barco.