reminal

Permite que agentes listem, pesquisem, leiam e digitem nos terminais que você já tem em execução, em todas as máquinas que você possui.

Documentação

reminal

Cada janela, desktop e terminal nas suas máquinas — ao vivo em qualquer navegador.

Feche a tampa do laptop e vá embora. O reminal mantém a máquina servindo — e entrega seus aplicativos reais, não apenas um shell — em qualquer navegador, de qualquer lugar. Sem portas abertas, sem chaves no disco, nada para instalar no dispositivo que você está segurando.

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

A tampa fecha sem monitor e sem dongle conectado — e as janelas continuam transmitindo, ao vivo e controláveis, para um navegador.


Sem monitor. Sem plug fictício. Sem dongle.

Feche a tampa de um MacBook e o macOS o coloca em repouso — a menos que esteja na energia com um monitor e teclado conectados. A correção usual é um plug HDMI "fictício" de hardware que simula uma tela, ou simplesmente deixar a tampa aberta apoiada na sua mesa.

O modo de tampa fechada faz isso por software. Ative e vá embora — sem monitor, sem dongle, em qualquer ordem. O reminal desativa o repouso em modo concha e, como aplicativos GUI precisam de uma tela para desenhar, cria um display virtual no momento em que o Mac fica sem cabeça — para que o espelhamento de janelas continue funcionando sem nada conectado. Desative e tudo é desfeito.

O modo de tampa fechada é exclusivo para macOS; todo o resto abaixo funciona em macOS, Linux e Windows igualmente.


Configure em uma linha

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

No Windows (PowerShell):

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

Essa é toda a configuração — um comando na máquina que você está deixando para trás. Todo o resto que você possui já é um cliente, porque o cliente é um navegador.


Alcance e dirija os aplicativos

Qualquer janela de aplicativo transmite ao vivo para o seu navegador — e você não apenas assiste, você dirige: cursor, clique e clique com botão direito, digitação, rolagem, arrastar, pinça para zoom. Ainda não está aberto? Inicie qualquer aplicativo instalado no host pelo menu Apps e depois dirija-o. Ou toque em Host → Ver desktop completo para executar a máquina inteira de uma vez. Em um telefone, a tela se torna um trackpad — seu Mac, totalmente prático, do seu bolso.

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, sem edição. O telefone escolhe uma janela, digita nela — as palavras aparecem no aplicativo real no Mac — e então espelha o desktop inteiro. Captura nativa, transmitida peer-to-peer.


60 fps, de uma máquina que não está aqui

E nada nessas janelas parece streaming. Arraste, role um vídeo dentro dela, veja um build passar — continua fluido o tempo todo, em Wi-Fi de hotel ou em um telefone na rede celular. Sessenta quadros por segundo, 17 ms da tela dela para a sua.

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 pelo DataChannel da própria sessão — peer-to-peer, cerca de 2,6 Mbps. Visualizadores somente via relay recebem o mesmo vídeo a 30 fps.


Um terminal completo também — escaneie um QR e pronto

reminal imprime um ID de sessão, um PIN e um código QR. Escaneie-o, e seu telefone é um terminal completo na sua máquina — cor real, seleção de texto por toque, teclas modificadoras na tela. Sem redirecionamento de porta. Sem chaves para gerenciar. Nada para instalar no telefone; o navegador é o cliente.

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

O SSH mais rápido que você já configurou — porque não há nada para configurar.


Interaja com suas máquinas como se estivessem bem aqui

Coloque qualquer janela remota para fora no seu desktop e ela fica ali como uma janela de aplicativo própria — exceto que está rodando em outra máquina inteiramente. Alinhe um editor do seu MacBook, um terminal em uma máquina na nuvem e um painel do Mac mini em casa, e trabalhe em todos eles como se fossem locais.

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)

Possua suas máquinas. Observe todas elas.

No momento em que seu trabalho abrange mais de uma máquina — um rack de servidores, ou agentes soltos em várias máquinas ao mesmo tempo — a parte difícil não é começar, é ver. reminal machines é uma visão ao vivo de tudo que você possui: cada máquina, cada terminal nela, o que está rodando agora, quem está assistindo, há quanto tempo está ocioso. Um agente rodando uma suíte de testes no seu laptop, corrigindo um CVE em uma VM na nuvem e rotacionando backups no Mac mini — ou apenas suas próprias sessões — tudo de relance. Está na CLI e no painel web Machines, onde você pode entrar em qualquer sessão, renomeá-la, criar uma nova ou encerrá-la em qualquer máquina.

Esse painel único funciona porque você possui as máquinas. Registre um dispositivo uma vez — reminal own imprime seu id, você cola sudo reminal add owner <id> em cada máquina — e a partir daí ele alcança todas as sessões sem PIN. A confiança é uma chave por dispositivo: revogável uma de cada vez, protegida por sudo para conceder, e o relay ainda só vê 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

Seus agentes podem ver uns aos outros

reminal integrate

Um comando registra o servidor MCP do reminal com cada CLI de agente que você tem — Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity, Amp. A partir daí, seus agentes podem:

  • list_sessions — todas as sessões que você possui, nesta máquina e em cada máquina registrada
  • search_sessions — regex no scrollback do terminal ao vivo, em todas elas
  • read_transcript — ler o terminal de outra sessão como texto simples
  • send_keys — digitar no PTY de outra sessão, entre máquinas

O que significa que um agente no seu laptop pode observar o que um agente na sua máquina de build está fazendo e responder a ele. Eles não precisam ser o mesmo agente, nem do mesmo fornecedor — Claude Code pode dirigir uma sessão do Codex. Não há protocolo para adotar e nada para integrar: o barramento é o terminal. Se roda em um PTY, pode ser lido e receber digitação.

Agentes também podem levantar a mão. add_note fixa um selo na janela real em questão — o editor, o navegador que está dirigindo — e isso chega ao seu telefone, onde você pode responder.

send_keys digita teclas reais em um shell real em uma máquina que você possui. Ele só alcança máquinas que você mesmo registrou, e tudo o que faz é visível ao vivo no visualizador — mas trate-o com o respeito que você daria a qualquer ferramenta que pode digitar Ctrl+C no seu terminal.

Prefere sem MCP? Entregue a um agente um ID de sessão e PIN e ele se conecta como qualquer outro visualizador, a todas as máquinas que você compartilhou.

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

Compartilhe uma porta local com o mundo

reminal expose 3000 transforma o que estiver rodando em localhost em uma URL HTTPS pública — um servidor de desenvolvimento, um alvo de webhook, um build para mostrar a um cliente. Protegido por PIN por padrão (ou --public para abrir), para que você possa compartilhar o link sem implantar nada. É um ngrok embutido, na ferramenta que você já tem rodando.

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

Mova um arquivo entre quaisquer duas máquinas

reminal copy report.pdf em uma máquina imprime um código de uso único; reminal paste <code> em outra baixa o arquivo — Mac para Linux, Windows para Mac, laptop para servidor, qualquer lugar para qualquer lugar. Criptografado de ponta a ponta, sem nuvem, sem conta. AirDrop, para cada máquina que você possui.

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

A última coisa que você instalará em pé na frente do computador

Configure uma vez, pessoalmente — e então você nunca mais precisa sentar naquela máquina. De qualquer navegador você obtém seu terminal, qualquer janela, o desktop inteiro, um link público para uma porta local, arquivos de e para ela, até uma sessão ao vivo compartilhada com outra pessoa. Uma ferramenta, todo trabalho 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

Como 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

Sua máquina disca para fora para um relay via WSS; visualizadores discam para fora para o mesmo relay. Nada nunca escuta na sua máquina. Tudo através do relay é criptografado de ponta a ponta — ele roteia texto cifrado que não consegue ler. Quadros de janela e desktop nem passam por esse caminho: eles viajam em uma conexão WebRTC direta entre navegador e host.

Você confia na Cloudflare para entregar pacotes — da mesma forma que confia no seu ISP com tráfego SSH. Nenhum dos dois pode ler o que você envia. A diferença: o reminal nunca abre sua máquina para a internet.


Tudo o que você obtém

Entre em uma sessão de qualquer lugar — telefone (escaneie o QR), qualquer navegador (abra a URL, digite o PIN), ou outro terminal (reminal --connect <id> --pin <pin>). Então:

Shell persistente e resiliente

Feche o laptop, mude para o telefone, reconecte de outra cidade — seu shell está exatamente onde você o deixou, e a tela atual é pintada instantaneamente (um snapshot, sem avanço rápido lento). Queda de Wi-Fi, túnel, elevador? Reconexão automática com backoff, 2 MiB de scrollback intacto.

Pareie com qualquer pessoa

Envie um ID de sessão e PIN para um colega por qualquer canal e ele entra no mesmo shell ao vivo — ou um espelho de janela — de um navegador. Sem conta, sem instalação, múltiplos visualizadores ao mesmo tempo. Ctrl+C encerra; não há nada para revogar.

Sessões que sobrevivem ao seu terminal

Inicie um trabalho longo e feche a tampa — ele continua rodando. reminal new deploy cria uma sessão nomeada; list · attach · rename · kill · prune gerenciam toda a frota por nome, id ou correspondência difusa. O painel Host mostra CPU/memória ao vivo e cria uma em um toque.

Terminal web sem instalação

Um terminal xterm.js completo está embutido no relay. Qualquer navegador é o cliente — telefone, iPad, laptop de trabalho bloqueado, PC de lobby de hotel. Pinça para zoom, seleção de texto com alças arrastáveis, teclas modificadoras na tela, ditado por voz, busca no scrollback.

Arquivos, portas e pings

reminal copy / paste movem um arquivo entre quaisquer duas máquinas com um código de uso único. reminal expose 3000 coloca uma porta local em uma URL pública protegida por PIN. reminal send envia um arquivo para todos os visualizadores de uma vez, e reminal notify dispara uma notificação do navegador em todos eles.

Seguro por construção

Sem portas abertas, ID de sessão + PIN efêmeros, AES-256-GCM de ponta a ponta com handshake X25519 autenticado por PIN que o relay não consegue quebrar offline. Ctrl+C e as credenciais desaparecem. Detalhes abaixo.

Possua uma máquina, pule o PIN

Registre um dispositivo como proprietárioreminal own, depois sudo reminal add owner <id> uma vez — e ele se conecta a qualquer sessão dessa máquina sem PIN. Confiança por dispositivo, revogável um de cada vez (reminal owners revoke, ou auto-revogação pelo navegador). O relay permanece cego de qualquer forma.

Cada máquina, uma lista

reminal machines mostra cada máquina que você possui e cada sessão ao vivo nela — o que está rodando, visualizadores, tempo ocioso. A mesma visão no painel web Machines: anexar, renomear, criar ou encerrar uma sessão em qualquer máquina pelo navegador.


Segurança

Construído para ser tão seguro quanto um SSH configurado corretamente — e mais seguro por padrão.

O SSH deixa a porta 22 aberta, armazena chaves de longa duração no disco e confia que você configure tudo corretamente. O reminal adota a abordagem oposta: nada para expor, nada permanente para roubar, criptografia de ponta a ponta.

CamadaO que faz
Sem portas abertasSua máquina apenas inicia conexões de saída. Não há nada na rede para escanear, forçar ou explorar com zero-day.
Credenciais efêmerasO ID da sessão e o PIN existem apenas enquanto o reminal estiver em execução. Ctrl+C e eles desaparecem para sempre.
Dispositivos do proprietário, revogáveisUm dispositivo que você registra como proprietário conecta-se sem o PIN usando sua própria chave — um caminho de confiança separado do PIN efêmero, protegido pelo sudo para registro e revogável por dispositivo (ou auto-revogado de qualquer navegador). O relay ainda apenas roteia texto cifrado.
Dois fatores por designUm invasor precisa tanto do ID da sessão (~1 trilhão de combinações) quanto do PIN de 6 dígitos. Saber apenas um é inútil.
Limitado por taxa pelo agenteCada tentativa de PIN custa um handshake online completo com sua máquina, e o agente responde no máximo ~6 por minuto (rajada de 8, um token a cada 10s). Esgotar um PIN de 6 dígitos nesse ritmo leva meses — muito mais do que a vida útil de uma sessão.
Criptografia de ponta a pontaAES-256-GCM com uma chave de sessão aleatória de 256 bits gerada a cada execução do agente. Distribuída a cada visualizador via handshake X25519 autenticado por PIN (estilo EKE) — o relay nunca vê a chave nem nada que possa ser forçado offline a partir dela.
Handshake com sigilo perfeitoCada conexão WebSocket executa sua própria troca X25519 efêmera. Mesmo que um invasor futuro recupere o PIN, o texto cifrado gravado permanece ilegível.
Relay cegoCloudflare Workers roteiam texto cifrado. Um relay que grava tráfego não consegue recuperar a chave de sessão offline — tentativas de PIN erradas são detectáveis apenas ao tentar um handshake online completo (uma tentativa por vez, limitado pelo throttle de troca de chaves do agente).
P2P em que você pode confiarA sinalização WebRTC (SDP, ICE) viaja dentro do canal de sessão já criptografado, então o relay não pode adulterar impressões digitais DTLS — sem janela para man-in-the-middle. Os quadros no DataChannel são protegidos por DTLS de ponta a ponta.
TLS em trânsitoWSS / TLS em cada salto em produção.

Uma exceção deliberada: os encaminhamentos de porta do reminal expose não são criptografados de ponta a ponta — o visitante é um navegador comum sem chave reminal, então esse tráfego passa pelo relay em texto puro (protegido por PIN, mas legível pelo relay). Todo o resto acima é E2E. Auto-hospede o relay se isso for importante para você.

Boas práticas: compartilhe o ID da sessão e o PIN por canais diferentes (envie o ID por e-mail, o PIN por SMS) · Ctrl+C ao terminar — as credenciais morrem instantaneamente · mantenha o cliente atualizado com o reminal upgrade.

Aprofundando: Arquitetura de segurança · Modelo de ameaças · Subprocessadores e tratamento de dados · Autoavaliação · Reportar uma vulnerabilidade


reminal vs SSH, de relance

O SSH foi projetado em 1995 — ele assume um IP estático, um roteador que você pode configurar e chaves que você mantém rotacionadas. O reminal não assume nada disso, então as compensações se alinham de forma diferente:

reminalSSH
Tempo de configuraçãoUm comandoChaves, configurações, encaminhamento de porta, firewalls
Porta de escutaNenhumaTCP 22 exposta à internet
CredenciaisID de sessão efêmero + PINChaves permanentes no disco
Atrás de NAT / Wi-Fi de hotelSimplesmente funcionaVPN ou host de salto necessário
Cliente necessário no visualizadorNenhum — um navegador é o clientessh + uma chave configurada por dispositivo
Amigável para celularEscaneie o QR → entreSem cliente nativo
Sessão sobrevive à desconexãoO shell continua rodando, alterne entre dispositivosCaia a conexão, perca seu trabalho (a menos que você o envolva em tmux)
Oscilações de redeReconexão automática, replay de scrollbackWrite failed: Broken pipe
Aplicativos GUIEspelhe e controle qualquer janela — ou a área de trabalho inteiraEncaminhamento X11, se você ousar
Tampa do laptop fechada, sem monitorModo de tampa fechada continua servindo em um display virtualApenas terminal
Se o laptop for roubadoSessões já mortasChaves antigas ainda concedem acesso
CriptografiaPonta a ponta através do relayPonta a ponta direta (se configurado corretamente)

Execute seu próprio relay (grátis, uma vez)

O relay roda em Cloudflare Workers + Durable Objects. O nível gratuito lida com milhares de sessões por mês — e os quadros de janela vão peer-to-peer, então o tráfego pesado nunca o toca.

cd cloudflare
npm install
npx wrangler login
npm run deploy

Em seguida, copie o reminal.build.env.example para o reminal.build.env ignorado pelo git, coloque sua URL do workers.dev lá e execute o ./scripts/build.sh. Nenhuma edição de código-fonte é necessária. Guia completo em cloudflare/README.md.


Desenvolvimento 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 testar contra um relay remoto sem recompilar, defina qualquer URL de tempo de execução; o reminal deriva sua contraparte automaticamente:

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

Referência

Suporte de plataforma

O espelhamento que você vê acima não é exclusivo do macOS — captura de janela e controle total (clique, digitação, rolagem, arrastar) funcionam em Linux/X11 e Windows também.

CapacidademacOSLinuxWindows
Compartilhamento de terminal · sessões · arquivos · encaminhamento de porta✅ ConPTY
Conexão do proprietário (sem PIN) · reminal machines
Espelhamento e controle de janela e área de trabalho✅ ScreenCaptureKit — H.264 até 60 fps✅ X11 — wmctrl · xdotool · ImageMagick✅ Win32 — PrintWindow · SendInput
Modo de tampa fechada (display virtual automático)
Reinicialização rápida (reminal restart)✅ (sessões em primeiro plano convertem para segundo plano + visualizador anexado)

A captura no Linux precisa de uma sessão X11 (ou Xwayland) — o Wayland nativo bloqueia entrada sintética, então ainda não é suportado. Apple Silicon, x86_64 e Windows ARM64 são todos suportados.

Notas do Windows

  • Shell: as sessões abrem o PowerShell 7 (pwsh) quando instalado, caso contrário o Windows PowerShell, caso contrário o cmd — defina o $env:SHELL para substituir. Os terminais rodam através do ConPTY, a mesma API que o Windows Terminal usa, então cores, TUIs e redimensionamento se comportam como um console nativo.
  • Sem prompts de permissão: ao contrário da concessão de Gravação de Tela do macOS, o espelhamento de janela e a injeção de entrada não precisam de nada habilitado — funciona imediatamente.
  • Prompt do firewall no primeiro espelhamento: quando um visualizador anexa pela primeira vez a um painel de janela/área de trabalho, o Firewall do Windows pergunta sobre o reminal — isso é o fluxo peer-to-peer direto (WebRTC) vinculando uma porta UDP, o mesmo prompt que qualquer aplicativo de videochamada recebe. Permitir habilita P2P; Cancelar também é aceitável — o streaming volta para o caminho do relay criptografado.
  • Streaming: o Windows usa o caminho de captura JPEG (~5–15 fps). O pipeline H.264 de 60 fps é atualmente exclusivo do macOS.
  • Espelhamento precisa de uma área de trabalho com login — uma máquina parada na tela de login (ou uma sessão de serviço) não tem janelas para capturar; o compartilhamento de terminal funciona independentemente.
  • Atualizações e reinicialização rápida: o reminal upgrade substitui o exe no lugar (o que está em execução é renomeado para o lado), e o reminal restart troca a quente o agente de uma sessão para o novo binário sem tocar no shell interno — o shell de cada sessão vive em um pequeno processo detentor de ConPTY, então o agente pode ser substituído sob ele (o PID da sessão muda, ao contrário do Unix). Uma sessão em primeiro plano reinicia convertendo: ela se move para o segundo plano e seu terminal se torna um visualizador anexado a ela — mesmo shell, mesmas teclas, Ctrl-] desanexa. O host em segundo plano também se reinicia automaticamente após uma atualização.

Comandos

ComandoO que faz
reminal [--name <name>]Compartilhe esta sessão de terminal
reminal new [name]Crie uma nova sessão em segundo plano (destacada — sobrevive ao fechamento deste terminal)
reminal list [filter] [-v]Liste sessões, mais recentes primeiro; filtre por id/nome/cwd/título (--idle, --viewers, --headless)
reminal attach [id|name]Reconecte-se a uma sessão local como visualizador (sem argumento → seletor interativo)
reminal connect <id-or-url> [pin]Conecte-se a uma sessão remota do seu terminal (PIN solicitado se omitido)
reminal rename [id|name] <new-name>Renomeie uma sessão em execução (dentro de uma sessão: reminal rename <new-name>)
reminal stop [id|name|port]Pare a camada reminal — remove visualizadores, mantém seu shell/servidor em execução
reminal kill [id|name]Termine completamente uma sessão (mata o shell — irreversível)
reminal prune [dur] [-y]Mate sessões ociosas e sem visualização de uma vez (padrão ocioso ≥ 30m)
reminal restart [--all]Troque a quente o(s) agente(s) em execução para o binário mais recente — o shell permanece vivo
reminal integrate [--remove]Registre o servidor MCP do reminal com seus CLIs de agente (Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity, Amp)
reminal mcpExecute o servidor MCP no stdio — liste, pesquise, leia e digite em sessões em suas máquinas
reminal expose <port> [--public]Encaminhe uma porta HTTP local para uma URL pública (protegida por PIN por padrão)
reminal send <file>Envie um arquivo para cada visualizador conectado (o cliente web baixa automaticamente)
reminal copy [--ttl <dur>] <file>Ofereça um arquivo para coleta em qualquer lugar; imprime um código de uso único
reminal paste <code> [dest]Busque um arquivo oferecido pelo reminal copy em outra máquina
reminal notify <message>Envie uma notificação para os visualizadores (notificação do navegador na web)
reminal connectionsListe os visualizadores atualmente anexados com o tempo de conexão
reminal ownImprima o id do proprietário deste dispositivo + a linha do add owner para colar em máquinas que você deseja possuir
reminal add owner <id> [--label <name>]Registre um dispositivo proprietário nesta máquina (precisa do sudo / um terminal de Administrador no Windows) — permite que ele conecte sem PIN
reminal owners [rename|revoke|restore <id|label> …]Liste / renomeie / revogue / restaure os dispositivos proprietários desta máquina
reminal machines [rename <id|name> <new-name>]Liste todas as máquinas que você possui e suas sessões ativas (o painel web Machines as gerencia)
reminal info [id|name] [--all] [--qr] [--json]Mostre detalhes de conexão — ID / PIN / URL / QR
reminal qr [id|name]Imprima apenas o QR de entrada (para uma segunda tela)
reminal settingsPágina de configurações: mantenha o Mac desbloqueado para controle remoto; modo de tampa fechada (sirva com a tampa fechada e nada conectado — desativa o sono do clamshell, cria automaticamente um display virtual enquanto sem cabeça)
reminal doctorAutodiagnóstico: versão, alcance do relay, terminal, shell
reminal permissionsmacOS: conceda Gravação de Tela ao reminal uma vez, para que sessões em segundo plano (+) possam espelhar janelas
reminal completion <bash|zsh|fish|powershell>Imprima um script de conclusão de shell
reminal upgradeAtualize para a versão mais recente
reminal relay [port]Inicie um relay local (apenas desenvolvimento)
reminal version [--verbose]Imprima a versão

As sessões são resolvidas por id exato, nome exato, prefixo de id único ou substring única de nome / cwd / título — o reminal attach deploy simplesmente funciona.

Variáveis de ambiente

VariávelPadrãoO que faz
REMINAL_RELAYRelay público upstreamURL base do WebSocket do relay; também deriva REMINAL_WEB quando não definido
REMINAL_WEBWeb UI pública upstreamURL da interface web; também deriva REMINAL_RELAY quando não definido
REMINAL_LOCALDefina como 1 para apontar tudo para localhost
REMINAL_OWNERS_DIR/etc/reminal (%ProgramData%\reminal no Windows)Onde fica a lista de proprietários da máquina (o armazenamento de confiança controlado por admin) — sobrescreva para testes ou layouts incomuns
REMINAL_NO_KEEP_AWAKEDefina como 1 para permitir que o host durma enquanto o reminal roda (o padrão mantém o host acordado via caffeinate / systemd-inhibit / SetThreadExecutionState)
REMINAL_TURN / REMINAL_TURN_USER / REMINAL_TURN_PASSServidor TURN opcional para espelhamento de janela P2P atrás de NATs hostis (ou REMINAL_TURN_CF_KEY + REMINAL_TURN_CF_TOKEN para TURN do Cloudflare). Sem um, espectadores sem furação de NAT permanecem no fallback do relay
REMINAL_NO_CAPTURE_HELPERDefina como 1 para forçar o caminho de captura de tela (pule o helper nativo ScreenCaptureKit)
REMINAL_DEBUGDefina como 1 para anexar a string de erro bruta às linhas de status, para diagnosticar problemas de conexão
SHELL$SHELL, depois testa /bin/zsh, /bin/bash, /bin/sh (Windows: pwshpowershellcmd)Qual shell iniciar dentro da sessão

Instala em ~/.local/bin/reminal (macOS/Linux) ou %LOCALAPPDATA%\Programs\reminal (Windows) — sem necessidade de sudo/admin. Apple Silicon, x86_64 e Windows ARM64. Compile a partir do código-fonte com ./scripts/build.sh (Go 1.25+, toolchain Swift no macOS para o helper nativo de captura); no Windows é um simples go build ./cmd/reminal.

Para um padrão personalizado persistente em builds locais, copie reminal.build.env.example para reminal.build.env e defina REMINAL_DEFAULT_RELAY e/ou REMINAL_DEFAULT_WEB. O arquivo local é ignorado pelo git e é interpretado como dados KEY=VALUE inertes (não executado como código shell). Os fluxos de release usam variáveis de repositório com os mesmos nomes, então forks podem publicar seus próprios padrões; quando essas variáveis estão ausentes, os padrões upstream permanecem intactos para que builds comuns de contribuidores e upstream continuem funcionando.


Pronto para experimentar?

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

No Windows (PowerShell):

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

Escaneie o QR — você está dentro. Sem cadastro, sem redirecionamento de porta, sem chaves no disco. Cerca de 30 segundos desta página até sua própria máquina, ao vivo no navegador.


Licença

reminal é duplamente licenciado sob AGPL-3.0. Usá-lo — pessoalmente ou dentro de uma empresa, sem modificações — não exige nada de nós. Uma licença comercial cobre a incorporação do reminal em um produto que você distribui, ou a execução de uma cópia modificada como serviço. Veja LICENSING.md para saber onde fica essa linha, e CLA.md se quiser contribuir.

Construído por @harshalgajjar. Estrelas são apreciadas. Issues ainda mais.