reminal

Permite a los agentes listar, buscar, leer y escribir en las terminales que ya tienes en ejecución, en cada máquina que posees.

Documentación

reminal

Cada ventana, escritorio y terminal de tus máquinas — en vivo en cualquier navegador.

Cierra la tapa del portátil y vete. reminal mantiene la máquina activa — y te entrega sus aplicaciones reales, no solo una shell — en cualquier navegador, desde cualquier lugar. Sin puertos abiertos, sin claves en disco, nada que instalar en el dispositivo que tienes en la mano.

License: AGPL v3 Release Go Platform Encryption Relay

Animation: a MacBook desktop with VS Code, Keynote and Mail windows folds its lid shut — then the same windows appear live as panes in the reminal web viewer, still controllable, with nothing plugged in

La tapa se cierra sin monitor y sin adaptador conectado — y las ventanas siguen transmitiéndose, en vivo y controlables, a un navegador.


Sin monitor. Sin enchufe ficticio. Sin adaptador.

Al cerrar la tapa de un MacBook, macOS lo pone en reposo — a menos que esté enchufado con un monitor y teclado conectados. La solución habitual es un enchufe HDMI "ficticio" de hardware que simula una pantalla, o simplemente dejar la tapa abierta sobre tu escritorio.

El modo de tapa cerrada lo hace por software. Actívalo y vete — sin monitor, sin adaptador, en cualquier orden. reminal desactiva el reposo en modo concha y, como las aplicaciones GUI necesitan una pantalla para dibujar, crea una pantalla virtual en el momento en que el Mac se queda sin pantalla — para que el espejo de ventanas siga funcionando sin nada conectado. Desactívalo y todo se revierte.

El modo de tapa cerrada es solo para macOS; todo lo demás funciona en macOS, Linux y Windows por igual.


Configúralo en una línea

curl -fsSL https://raw.githubusercontent.com/harshalgajjar/Reminal/main/install.sh | sh
reminal

En Windows (PowerShell):

irm https://raw.githubusercontent.com/harshalgajjar/Reminal/main/install.ps1 | iex
reminal

Esa es toda la configuración — un comando en la máquina que dejas atrás. Todo lo demás que posees ya es un cliente, porque el cliente es un navegador.


Entra y maneja las aplicaciones

Cualquier ventana de aplicación se transmite en vivo a tu navegador — y no solo la miras, la manejas: cursor, clic y clic derecho, escribir, desplazarte, arrastrar, zoom con pellizco. ¿No está abierta? Inicia cualquier aplicación instalada en el host desde el menú Apps, y luego manéjala. O toca Host → Ver escritorio completo para ejecutar toda la máquina a la vez. En un teléfono, la pantalla se convierte en un panel táctil — tu Mac, completamente práctico, desde tu bolsillo.

Real capture: a phone opens the Mac's TextEdit window and types 'Hello from my phone!' — the words land in the real app on the Mac, live — then the phone mirrors the entire desktop

Captura real, sin editar. El teléfono elige una ventana, escribe en ella — las palabras aparecen en la aplicación real en el Mac — y luego refleja todo el escritorio. Captura nativa, transmitida de igual a igual.


60 fps, desde una máquina que no está aquí

Y nada de esas ventanas dice transmisión. Arrástrala, desplázate por un video dentro de ella, mira pasar una compilación — se mantiene fluida todo el camino, en el Wi-Fi del hotel o en un teléfono con datos móviles. Sesenta fotogramas por segundo, 17 ms de su pantalla a la tuya.

A Mac Studio named mac-studio, with one of its windows streaming live into a browser below it at 60 fps — the motion inside sweeping a smooth trail across the canvas — beside a large '60 fps' and the line 'of a live window, from a machine that isn't here'

H.264 por el propio DataChannel de la sesión — de igual a igual, alrededor de 2.6 Mbps. Los visores solo de retransmisión obtienen el mismo video a 30 fps.


También una terminal completa — escanea un código QR y estás dentro

reminal imprime un ID de sesión, un PIN y un código QR. Escanéalo, y tu teléfono es una terminal completa en tu máquina — color real, selección de texto táctil, teclas modificadoras en pantalla. Sin reenvío de puertos. Sin claves que gestionar. Nada que instalar en el teléfono; el navegador es el cliente.

A terminal runs reminal and prints a QR code; a phone scans it and joins the same session — end-to-end encrypted

El SSH más rápido que jamás configurarás — porque no hay nada que configurar.


Interactúa con tus máquinas como si estuvieran aquí

Saca cualquier ventana remota a tu escritorio y se queda ahí como su propia ventana de aplicación — excepto que se ejecuta en otra máquina por completo. Alinea un editor de tu MacBook, una terminal en una caja en la nube y un panel del Mac mini en casa, y trabaja en todos ellos como si fueran locales.

Three native windows in front — an editor, a terminal, and a dashboard — each linked by a dotted line to the machine behind it: a MacBook (studio-mac), a cloud VM (aws-eu-1), and a Mac mini (mini-01)

Posee tus máquinas. Obsérvalas todas.

En el momento en que tu trabajo abarca más de una máquina — un rack de servidores, o agentes sueltos en varias cajas a la vez — la parte difícil no es empezar, es verlo. reminal machines es una vista en vivo de todo lo que posees: cada máquina, cada terminal en ella, lo que se está ejecutando ahora, quién está mirando, cuánto tiempo ha estado inactiva. Un agente ejecutando una suite de pruebas en tu portátil, parcheando un CVE en una VM en la nube y rotando copias de seguridad en el Mac mini — o solo tus propias sesiones — todo de un vistazo. Está en la CLI y en el panel web Machines, donde puedes saltar a cualquier sesión, renombrarla, crear una nueva o eliminarla en cualquier caja.

Ese panel único funciona porque posees las máquinas. Inscribe un dispositivo una vez — reminal own imprime su id, pegas sudo reminal add owner <id> en cada máquina — y desde entonces llega a cada sesión sin PIN. La confianza es una clave por dispositivo: revocable de una en una, sudo-protegida para otorgar, y la retransmisión solo ve texto cifrado.

A live 'reminal machines' view of a fleet you own — studio-mac, aws-eu-1 and mini-01, all online — each showing its sessions: agents running a test suite, patching a CVE and rotating backups, alongside ordinary sessions like api-prod, worker and grafana, with live indicators and viewer counts

Tus agentes pueden verse entre sí

reminal integrate

Un comando registra el servidor MCP de reminal con cada CLI de agente que tengas — Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity, Amp. Desde entonces tus agentes pueden:

  • list_sessions — cada sesión que posees, en esta máquina y en cada caja inscrita
  • search_sessions — regex en el scrollback de terminal en vivo, en todas ellas
  • read_transcript — leer la terminal de otra sesión como texto plano
  • send_keys — escribir en el PTY de otra sesión, entre máquinas

Lo que significa que un agente en tu portátil puede ver lo que un agente en tu caja de compilación está haciendo, y responderle. No tienen que ser el mismo agente, ni del mismo proveedor — Claude Code puede manejar una sesión de Codex. No hay protocolo que adoptar ni nada contra lo que integrarse: el bus es la terminal. Si se ejecuta en un PTY, se puede leer y escribir en él.

Los agentes también pueden levantar la mano. add_note fija una insignia en la ventana real que está usando — el editor, el navegador que maneja — y eso llega a tu teléfono, donde puedes responder.

send_keys escribe pulsaciones de teclas reales en una shell real en una máquina que posees. Solo llega a cajas que tú mismo has inscrito, y todo lo que hace es visible en vivo en el visor — pero trátalo con el respeto que le darías a cualquier herramienta que pueda escribir Ctrl+C en tu terminal.

¿Prefieres sin MCP? Entrega a un agente un ID de sesión y un PIN y se conecta como cualquier otro visor, a cada máquina que hayas compartido.

An AI agent given the session key dispatches jobs in parallel to three machines — run test suite on studio-mac, scan and patch on aws-eu-1, rotate backups on mini-01

Comparte un puerto local con el mundo

reminal expose 3000 convierte lo que se esté ejecutando en localhost en una URL HTTPS pública — un servidor de desarrollo, un objetivo de webhook, una compilación para mostrar a un cliente. Protegido con PIN por defecto (o --public para abrirlo), para que puedas compartir el enlace sin implementar nada. Es un ngrok integrado, en la herramienta que ya tienes ejecutándose.

A terminal runs a dev server on localhost:3000, then reminal expose 3000 prints a public https URL — which loads the same app live on a phone, PIN-gated over TLS

Mueve un archivo entre dos máquinas cualesquiera

reminal copy report.pdf en una máquina imprime un código de un solo uso; reminal paste <code> en otra descarga el archivo — Mac a Linux, Windows a Mac, portátil a servidor, de cualquier lugar a cualquier lugar. Cifrado de extremo a extremo, sin nube, sin cuenta. AirDrop, para cada máquina que posees.

One terminal runs reminal copy report.pdf and gets a one-time code; another machine runs reminal paste with that code and the file transfers, end-to-end encrypted

Lo último que instalarás de pie frente a tu computadora

Configúralo una vez, en persona — y luego nunca más tendrás que sentarte frente a esa máquina. Desde cualquier navegador obtienes su terminal, cualquier ventana, el escritorio completo, un enlace público a un puerto local, archivos hacia y desde ella, incluso una sesión en vivo compartida con otra persona. Una herramienta, cada trabajo remoto.

reminal at the center, wired to the five things it does: a terminal in any browser, control any window or desktop, a public URL for a local port, sending files between machines, and pairing with anyone live — no accounts, no subscriptions, nothing for the other side to install

Cómo funciona

Architecture: your machine (reminal) and any device both dial out to a Cloudflare relay over encrypted WSS — the relay only routes ciphertext it can't read — while window and desktop frames go directly peer-to-peer over WebRTC, off the relay

Tu máquina llama hacia afuera a una retransmisión por WSS; los visores llaman hacia afuera a la misma retransmisión. Nada escucha nunca en tu máquina. Todo a través de la retransmisión está cifrado de extremo a extremo — enruta texto cifrado que no puede leer. Los fotogramas de ventana y escritorio ni siquiera toman ese camino: viajan por una conexión WebRTC directa entre el navegador y el host.

Confías en Cloudflare para entregar paquetes — de la misma manera que confías en tu ISP con el tráfico SSH. Ninguno puede leer lo que envías. La diferencia: reminal nunca abre tu máquina a internet.


Todo lo que obtienes

Únete a una sesión desde cualquier lugar — teléfono (escanea el QR), cualquier navegador (abre la URL, escribe el PIN), u otra terminal (reminal --connect <id> --pin <pin>). Luego:

Shell persistente y resistente

Cierra el portátil, cambia a tu teléfono, reconéctate desde otra ciudad — tu shell está justo donde la dejaste, y la pantalla actual se pinta al instante (una instantánea, sin avance rápido lento). ¿Se cae el Wi-Fi, túnel, ascensor? Reconexión automática con retroceso, 2 MiB de scrollback intacto.

Comparte con cualquiera

Envía un ID de sesión y un PIN a un compañero por cualquier canal y se unen a la misma shell en vivo — o a un espejo de ventana — desde un navegador. Sin cuenta, sin instalación, múltiples visores a la vez. Ctrl+C lo termina; no hay nada que revocar.

Sesiones que sobreviven a tu terminal

Inicia un trabajo largo y cierra la tapa — sigue ejecutándose. reminal new deploy crea una sesión con nombre; list · attach · rename · kill · prune gestionan toda la flota por nombre, id o coincidencia difusa. El panel Host muestra CPU/memoria en vivo y crea una con un toque.

Terminal web sin instalación

Una terminal xterm.js completa está integrada en la retransmisión. Cualquier navegador es el cliente — teléfono, iPad, portátil de trabajo bloqueado, PC del vestíbulo del hotel. Zoom con pellizco, selección de texto con manijas arrastrables, teclas modificadoras en pantalla, dictado por voz, búsqueda en scrollback.

Archivos, puertos y pings

reminal copy / paste mueven un archivo entre dos máquinas cualesquiera con un código de un solo uso. reminal expose 3000 pone un puerto local en una URL pública protegida con PIN. reminal send empuja un archivo a cada visor a la vez, y reminal notify dispara una notificación del navegador en todos ellos.

Seguro por construcción

Sin puertos abiertos, ID de sesión + PIN efímeros, AES-256-GCM de extremo a extremo con un handshake X25519 autenticado por PIN que la retransmisión no puede descifrar sin conexión. Ctrl+C y las credenciales desaparecen. Detalles abajo.

Posee una máquina, omite el PIN

Inscribe un dispositivo como propietarioreminal own, luego sudo reminal add owner <id> una vez — y se conecta a cualquier sesión de esa máquina sin PIN. Confianza por dispositivo, revocable de una en una (reminal owners revoke, o auto-revocación desde el navegador). La retransmisión permanece ciega de cualquier manera.

Cada máquina, una lista

reminal machines muestra cada caja que posees y cada sesión en vivo en ella — lo que se está ejecutando, visores, tiempo inactivo. La misma vista en el panel web Machines: adjuntar, renombrar, crear o eliminar una sesión en cualquier máquina desde el navegador.


Seguridad

Construido para ser tan seguro como un SSH correctamente configurado — y más seguro por defecto.

SSH deja el puerto 22 abierto, almacena claves de larga duración en disco y confía en que configures todo correctamente. reminal toma el enfoque opuesto: nada que exponer, nada permanente que robar, cifrado de extremo a extremo.

CapaQué hace
Sin puertos abiertosTu máquina solo inicia conexiones salientes. No hay nada en la red que escanear, forzar por fuerza bruta o explotar con un zero-day.
Credenciales efímerasEl ID de sesión y el PIN existen solo mientras reminal está en ejecución. Ctrl+C y desaparecen para siempre.
Dispositivos propietarios, revocablesUn dispositivo que inscribes como propietario se conecta sin el PIN usando su propia clave — una ruta de confianza separada del PIN efímero, protegida por sudo para inscribirse y revocable por dispositivo (o auto-revocable desde cualquier navegador). El relay solo enruta texto cifrado.
Doble factor por diseñoUn atacante necesita tanto el ID de sesión (~1 billón de combinaciones) como el PIN de 6 dígitos. Saber uno solo es inútil.
Limitado por el agenteCada intento de PIN cuesta un handshake en línea completo con tu máquina, y el agente responde como máximo ~6 por minuto (ráfaga de 8, un token cada 10s). Agotar un PIN de 6 dígitos a ese ritmo lleva meses — mucho más de lo que dura una sesión.
Cifrado de extremo a extremoAES-256-GCM con una clave de sesión aleatoria de 256 bits por ejecución del agente. Distribuida a cada visor mediante un handshake X25519 autenticado por PIN (estilo EKE) — el relay nunca ve la clave ni nada que se pueda forzar offline a partir de ella.
Handshake con secreto perfecto hacia adelanteCada conexión WebSocket ejecuta su propio intercambio X25519 efímero. Incluso si un atacante futuro recupera el PIN, el texto cifrado grabado permanece ilegible.
Ciego al relayCloudflare Workers enruta texto cifrado. Un relay que graba tráfico no puede recuperar la clave de sesión offline — los intentos de PIN incorrectos solo se detectan intentando un handshake completo en línea (un disparo cada vez, limitado por el throttle de kex del agente).
P2P en el que puedes confiarLa señalización WebRTC (SDP, ICE) viaja dentro del canal de sesión ya cifrado, así que el relay no puede manipular las huellas DTLS — sin ventana de man-in-the-middle. Los frames en el DataChannel están protegidos por DTLS de extremo a extremo.
TLS en tránsitoWSS / TLS en cada salto en producción.

Una excepción deliberada: los reenvíos de puerto de reminal expose no están cifrados de extremo a extremo — el visitante es un navegador ordinario sin clave de reminal, así que ese tráfico pasa por el relay en texto plano (protegido por PIN, pero legible por el relay). Todo lo demás arriba es E2E. Auto-aloja el relay si eso te importa.

Mejores prácticas: comparte el ID de sesión y el PIN por canales diferentes (envía el ID por email, el PIN por SMS) · Ctrl+C al terminar — las credenciales mueren al instante · mantén el cliente actualizado con reminal upgrade.

Profundizando: Arquitectura de seguridad · Modelo de amenazas · Subprocesadores y manejo de datos · Autoevaluación · Reportar una vulnerabilidad


reminal vs SSH, de un vistazo

SSH fue diseñado en 1995 — asume una IP estática, un router que puedes configurar y claves que mantienes rotadas. reminal no asume nada de eso, así que las compensaciones se alinean de manera diferente:

reminalSSH
Tiempo de configuraciónUn comandoClaves, configuraciones, reenvío de puertos, firewalls
Puerto de escuchaNingunoTCP 22 expuesto a internet
CredencialesID de sesión efímero + PINClaves permanentes en disco
Detrás de NAT / Wi-Fi de hotelSimplemente funcionaVPN o host de salto requerido
Cliente requerido en el visorNinguno — un navegador es el clientessh + una clave configurada por dispositivo
Amigable con el teléfonoEscanea QR → dentroSin cliente nativo
La sesión sobrevive a la desconexiónEl shell sigue corriendo, salta entre dispositivosPierde la conexión, pierde tu trabajo (a menos que lo envuelvas en tmux)
Caídas de redReconexión automática, reproducción de scrollbackWrite failed: Broken pipe
Aplicaciones GUIEspejo y control de cualquier ventana — o todo el escritorioReenvío X11, si te atreves
Tapa del portátil cerrada, sin monitorModo de tapa cerrada sigue sirviendo en un display virtualSolo terminal
Si roban el portátilLas sesiones ya están muertasLas claves antiguas aún otorgan acceso
CifradoDe extremo a extremo a través del relayDe extremo a extremo directo (si está bien configurado)

Ejecuta tu propio relay (gratis, una vez)

El relay se ejecuta en Cloudflare Workers + Durable Objects. El nivel gratuito maneja miles de sesiones al mes — y los frames de ventana van peer-to-peer, así que el tráfico pesado nunca lo toca.

cd cloudflare
npm install
npx wrangler login
npm run deploy

Luego copia reminal.build.env.example al reminal.build.env ignorado por git, pon tu URL de workers.dev allí, y ejecuta ./scripts/build.sh. No se necesita editar el código fuente. Guía completa en cloudflare/README.md.


Desarrollo local

# Build once; source builds retain the upstream public relay by default
./scripts/build.sh

# Terminal 1 — your own relay on localhost:8080
./dist/reminal relay

# Terminal 2 — share a session via the local relay
REMINAL_LOCAL=1 ./dist/reminal

# Terminal 3 — connect from another shell or the browser
REMINAL_LOCAL=1 ./dist/reminal connect <session_id> <pin>
# or http://localhost:8080/?s=<session_id>

Para probar contra un relay remoto sin reconstruir, establece cualquiera de las URLs de runtime; reminal deriva su contraparte automáticamente:

REMINAL_RELAY=wss://your-relay.example/ws ./dist/reminal
# or: REMINAL_WEB=https://your-relay.example ./dist/reminal

Referencia

Soporte de plataformas

El espejo que ves arriba no es solo de macOS — la captura de ventanas y el control completo (clic, escribir, desplazar, arrastrar) funcionan en Linux/X11 y Windows también.

CapacidadmacOSLinuxWindows
Compartir terminal · sesiones · archivos · reenvío de puertos✅ ConPTY
Conexión de propietario (sin PIN) · reminal machines
Espejo y control de ventanas y escritorio✅ ScreenCaptureKit — H.264 hasta 60 fps✅ X11 — wmctrl · xdotool · ImageMagick✅ Win32 — PrintWindow · SendInput
Modo de tapa cerrada (display virtual automático)
Reinicio en caliente (reminal restart)✅ (las sesiones en primer plano se convierten en segundo plano + visor adjunto)

La captura en Linux necesita una sesión X11 (o Xwayland) — Wayland nativo bloquea la entrada sintética, así que aún no está soportado. Apple Silicon, x86_64 y Windows ARM64 están todos soportados.

Notas de Windows

  • Shell: las sesiones abren PowerShell 7 (pwsh) cuando está instalado, si no Windows PowerShell, si no cmd — establece $env:SHELL para anular. Los terminales se ejecutan a través de ConPTY, la misma API que usa Windows Terminal, así que los colores, TUIs y el redimensionado se comportan como una consola nativa.
  • Sin avisos de permisos: a diferencia de la concesión de Grabación de Pantalla de macOS, el espejo de ventanas y la inyección de entrada no necesitan nada habilitado — funciona de fábrica.
  • Aviso de firewall en el primer espejo: cuando un visor se adjunta por primera vez a un panel de ventana/escritorio, el Firewall de Windows pregunta por reminal — eso es el stream peer-to-peer directo (WebRTC) que vincula un puerto UDP, el mismo aviso que recibe cualquier app de videollamada. Permitir habilita P2P; Cancelar también está bien — el streaming cae al camino cifrado del relay.
  • Streaming: Windows usa la ruta de captura JPEG (~5–15 fps). El pipeline H.264 de 60 fps es actualmente solo de macOS.
  • El espejo necesita un escritorio con sesión iniciada — una máquina en la pantalla de inicio de sesión (o una sesión de servicio) no tiene ventanas que capturar; compartir terminal funciona igualmente.
  • Actualizaciones y reinicio en caliente: reminal upgrade reemplaza el exe en su lugar (el que se ejecuta se renombra a un lado), y reminal restart intercambia en caliente el agente de una sesión al nuevo binario sin tocar el shell interno — el shell de cada sesión vive en un proceso diminuto que sostiene ConPTY, así que el agente puede reemplazarse debajo de él (el PID de la sesión cambia, a diferencia de Unix). Una sesión en primer plano se reinicia convirtiéndose: se mueve a segundo plano y tu terminal se convierte en un visor adjunto de ella — mismo shell, mismas teclas, Ctrl-] se separa. El host en segundo plano también se reinicia automáticamente después de una actualización.

Comandos

ComandoQué hace
reminal [--name <name>]Comparte esta sesión de terminal
reminal new [name]Genera una sesión nueva en segundo plano (separada — sobrevive al cierre de este terminal)
reminal list [filter] [-v]Lista sesiones, más recientes primero; filtra por id/nombre/cwd/título (--idle, --viewers, --headless)
reminal attach [id|name]Reconecta a una sesión local como visor (sin argumento → selector interactivo)
reminal connect <id-or-url> [pin]Conecta a una sesión remota desde tu terminal (se pide PIN si se omite)
reminal rename [id|name] <new-name>Renombra una sesión en ejecución (dentro de una sesión: reminal rename <new-name>)
reminal stop [id|name|port]Detiene la capa de reminal — expulsa visores, mantiene tu shell/servidor corriendo
reminal kill [id|name]Termina completamente una sesión (mata el shell — irreversible)
reminal prune [dur] [-y]Mata sesiones inactivas y sin visores de una vez (inactividad predeterminada ≥ 30m)
reminal restart [--all]Intercambia en caliente el/los agente(s) en ejecución al binario más reciente — el shell sigue vivo
reminal integrate [--remove]Registra el servidor MCP de reminal con tus CLIs de agente (Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity, Amp)
reminal mcpEjecuta el servidor MCP en stdio — lista, busca, lee y escribe en sesiones en todas tus máquinas
reminal expose <port> [--public]Reenvía un puerto HTTP local a una URL pública (protegida por PIN por defecto)
reminal send <file>Envía un archivo a cada visor conectado (el cliente web lo descarga automáticamente)
reminal copy [--ttl <dur>] <file>Ofrece un archivo para recoger desde cualquier lugar; imprime un código de un solo uso
reminal paste <code> [dest]Recupera un archivo ofrecido por reminal copy en otra máquina
reminal notify <message>Envía una notificación a los visores (notificación del navegador en la web)
reminal connectionsLista los visores adjuntos actualmente con el tiempo de conexión
reminal ownImprime el id de propietario de este dispositivo + la línea de add owner para pegar en máquinas que quieras poseer
reminal add owner <id> [--label <name>]Inscribe un dispositivo propietario en esta máquina (necesita sudo / un terminal de Administrador en Windows) — le permite conectarse sin PIN
reminal owners [rename|revoke|restore <id|label> …]Lista / reetiqueta / revoca / restaura los dispositivos propietarios de esta máquina
reminal machines [rename <id|name> <new-name>]Lista cada máquina que posees y sus sesiones en vivo (el panel web de Máquinas las gestiona)
reminal info [id|name] [--all] [--qr] [--json]Muestra detalles de conexión — ID / PIN / URL / QR
reminal qr [id|name]Imprime solo el QR de unión (para una segunda pantalla)
reminal settingsPágina de configuración: mantén el Mac desbloqueado para control remoto; modo de tapa cerrada (sirve con la tapa cerrada y nada enchufado — desactiva el sueño de clamshell, crea automáticamente un display virtual mientras está sin cabeza)
reminal doctorAutodiagnóstico: versión, alcance del relay, terminal, shell
reminal permissionsmacOS: concede Grabación de Pantalla a reminal una vez, para que las sesiones en segundo plano (+) puedan hacer espejo de ventanas
reminal completion <bash|zsh|fish|powershell>Imprime un script de completado de shell
reminal upgradeActualiza a la última versión
reminal relay [port]Inicia un relay local (solo desarrollo)
reminal version [--verbose]Imprime la versión

Las sesiones se resuelven por id exacto, nombre exacto, prefijo único de id o subcadena única de nombre / cwd / título — reminal attach deploy simplemente funciona.

Variables de entorno

VariableValor por defectoQué hace
REMINAL_RELAYRelay público upstreamURL base del WebSocket del relay; también deriva REMINAL_WEB cuando no está definido
REMINAL_WEBInterfaz web pública upstreamURL de la interfaz web; también deriva REMINAL_RELAY cuando no está definido
REMINAL_LOCALEstablécelo en 1 para apuntar todo a localhost
REMINAL_OWNERS_DIR/etc/reminal (%ProgramData%\reminal en Windows)Dónde vive la lista de propietarios de la máquina (el almacén de confianza restringido por administrador) — sobrescríbelo para pruebas o diseños inusuales
REMINAL_NO_KEEP_AWAKEEstablécelo en 1 para permitir que el host duerma mientras reminal se ejecuta (por defecto lo mantiene despierto mediante caffeinate / systemd-inhibit / SetThreadExecutionState)
REMINAL_TURN / REMINAL_TURN_USER / REMINAL_TURN_PASSServidor TURN opcional para el espejo de ventanas P2P detrás de NAT hostiles (o REMINAL_TURN_CF_KEY + REMINAL_TURN_CF_TOKEN para Cloudflare TURN). Sin uno, los visores que no pueden atravesar NAT permanecen en el respaldo del relay
REMINAL_NO_CAPTURE_HELPEREstablécelo en 1 para forzar la ruta de captura de pantalla (omite el asistente nativo ScreenCaptureKit)
REMINAL_DEBUGEstablécelo en 1 para añadir la cadena de error cruda a las líneas de estado, para diagnosticar problemas de conexión
SHELL$SHELL, luego sondea /bin/zsh, /bin/bash, /bin/sh (Windows: pwshpowershellcmd)Qué shell se inicia dentro de la sesión

Se instala en ~/.local/bin/reminal (macOS/Linux) o %LOCALAPPDATA%\Programs\reminal (Windows) — no se necesita sudo/admin. Apple Silicon, x86_64 y Windows ARM64. Compila desde el código fuente con ./scripts/build.sh (Go 1.25+, toolchain de Swift en macOS para el asistente de captura nativo); en Windows es un simple go build ./cmd/reminal.

Para un valor predeterminado personalizado persistente en compilaciones locales, copia reminal.build.env.example a reminal.build.env y establece REMINAL_DEFAULT_RELAY y/o REMINAL_DEFAULT_WEB. El archivo local es ignorado por git y se analiza como datos KEY=VALUE inertes (no se ejecuta como código de shell). Los flujos de trabajo de lanzamiento usan variables de repositorio con los mismos nombres, por lo que los forks pueden publicar sus propios valores predeterminados; cuando esas variables están ausentes, los valores predeterminados upstream permanecen intactos para que las compilaciones de contribuyentes ordinarios y upstream sigan funcionando.


¿Listo para probarlo?

curl -fsSL https://raw.githubusercontent.com/harshalgajjar/Reminal/main/install.sh | sh
reminal

En Windows (PowerShell):

irm https://raw.githubusercontent.com/harshalgajjar/Reminal/main/install.ps1 | iex
reminal

Escanea el código QR — ya estás dentro. Sin registro, sin reenvío de puertos, sin claves en disco. Aproximadamente 30 segundos desde esta página hasta tu propia máquina, en vivo en un navegador.


Licencia

reminal está bajo doble licencia según AGPL-3.0. Usarlo — personalmente o dentro de una empresa, sin modificaciones — no requiere nada de nosotros. Una licencia comercial cubre la integración de reminal en un producto que distribuyas, o ejecutar una copia modificada como servicio. Consulta LICENSING.md para ver dónde está esa línea, y CLA.md si deseas contribuir.

Creado por @harshalgajjar. Las estrellas son apreciadas. Los problemas aún más.