O cliente de linha de comando

Para as máquinas que não têm área de transferência nenhuma. Ele lê a entrada padrão e escreve na saída padrão, então se encaixa em tudo o que você já usa — e não é uma segunda implementação: importa exatamente os mesmos arquivos de criptografia e transporte que o navegador executa.

Instale

npx realtimeclipboard D75LV

Não há nada para instalar: o npx baixa, executa e não deixa nada para trás. Se preferir tê-lo no seu PATH:

npm install -g realtimeclipboard

É preciso Node 22 ou mais novo, por causa do WebSocket embutido. Num Node mais antigo o cliente sai na hora e diz o motivo, em vez de falhar no meio de uma transferência.

Ou por um gerenciador de pacotes

brew install akshaynikhare/tap/realtimeclipboard-cli

Repare no nome: a formula do CLI é realtimeclipboard-cli e o aplicativo de desktop é o cask realtimeclipboard. São coisas diferentes, e instalar uma não te dá a outra — um servidor quer o pipe, não um ícone na barra de menus.

Confira se funcionou

npx realtimeclipboard --version

Ao conectar, ele imprime uma linha de status na saída de erro, nunca na saída padrão:

realtimeclipboard · room 3f2a91c4…

Esse é o hash da sala, truncado — nunca a chave. Como vai para o stderr, watch > file continua gravando só o conteúdo. Passe -q para silenciar de vez.

Sua primeira sincronização

  1. Abra o aplicativo no navegador e anote a chave.
  2. No servidor, mande alguma coisa para ela:
    echo "deploy key" | npx realtimeclipboard send D75LV
  3. Aparece no navegador. Agora faça o caminho inverso — copie algo no navegador e, no servidor, rode:
    npx realtimeclipboard watch D75LV --once > token.txt

Os quatro comandos

ComandoO que faz
realtimeclipboard <KEY>Mão dupla: imprime o que chega, envia o que você digita
realtimeclipboard watch <KEY>Imprime o conteúdo que chega
realtimeclipboard send <KEY>Lê a entrada padrão até o EOF e envia
realtimeclipboard new [--long]Imprime uma chave nova

Opções: --relay <url>, --pin <pin>, --once, --json, --timeout <s>, -q, -h, -v. O retransmissor e o PIN também são lidos de REALTIMECLIPBOARD_RELAY e REALTIMECLIPBOARD_PIN, que é o jeito certo de passar um PIN — como argumento ele fica no histórico do seu shell.

# saída estruturada, um objeto JSON por linha
npx realtimeclipboard watch D75LV --once --json | jq -r .text

# de uma máquina em que você entrou por ssh
ssh build-01 'cat /var/log/deploy.log' | npx realtimeclipboard send D75LV

# apontando para o seu próprio retransmissor
npx realtimeclipboard --relay wss://clip.example.com D75LV

Quando não funciona

“this needs Node 22 or newer” (precisa do Node 22 ou mais novo)

Exatamente o que está escrito: o cliente usa o WebSocket embutido do Node em vez de puxar uma dependência, e ele só chegou na 22. Ele sai na inicialização, não no meio da transferência.

Ele trava e nunca imprime nada

O watch espera por conteúdo, é assim mesmo — nada chega enquanto ninguém copiar nada do outro lado. Use --timeout 30 num script para ele não esperar para sempre, e --once para sair depois do primeiro conteúdo.

Funciona no terminal, mas não na CI

Não há TTY, então passe -q e leia a saída padrão. Ponha a chave numa variável de ambiente em vez da linha de comando, onde ela apareceria nos logs de build.

Nada conecta atrás de um proxy

O cliente fala o mesmo protocolo do navegador e pode ser apontado para o seu próprio retransmissor com --relay. Rodar um é um contêiner.

Desinstalando

O npx não deixa nada para desinstalar. Use npm uninstall -g realtimeclipboard se você instalou globalmente, ou brew uninstall realtimeclipboard-cli.

A chave é uma credencial ao portador. Quem estiver com ela consegue ler a sessão enquanto ela estiver aberta, então mantenha a chave fora do histórico do shell, fora dos logs de CI e fora de arquivos versionados. O conteúdo é criptografado nesta máquina antes de sair; o retransmissor só vê um hash de sala e texto cifrado.

Todas as outras plataformas: o guia de instalação. Algo errado ou desatualizado aqui? Abra uma issue.