Segurança e autenticação
Como o purplemux protege o seu painel — senha hash com scrypt, dados apenas locais e HTTPS para acesso externo.
O purplemux é self-hosted e fica na sua máquina. Não há servidores externos, telemetria nem conta na nuvem. Tudo abaixo descreve as poucas peças que de fato guardam o seu painel.
Configurando a senha
Na primeira vez que você abre o purplemux, a tela de onboarding pede para você escolher uma senha. Depois que envia:
- A senha é hashada com scrypt (salt aleatório de 16 bytes, chave derivada de 64 bytes).
- O hash é gravado em
~/.purplemux/config.jsoncomoscrypt:{salt}:{hash}— o texto plano nunca é armazenado. - Um
authSecretseparado (hex aleatório) é gerado e guardado junto. O purplemux o usa para assinar o cookie de sessão emitido após o login.
Visitas seguintes mostram uma tela de login que verifica sua senha com crypto.timingSafeEqual contra o hash armazenado.
Resetando a senha
Esqueceu? Você só precisa de acesso de shell ao host:
rm ~/.purplemux/config.json
Reinicie o purplemux (pnpm start, npx purplemux, ou como você o iniciou) e a tela de onboarding reaparece para você escolher uma nova senha.
Isso apaga outras configurações guardadas no mesmo arquivo (tema, locale, tamanho de fonte, toggle de notificações etc.). Seus workspaces e abas vivem em workspaces.json e no diretório workspaces/, então os layouts ficam intactos.
HTTPS para acesso externo
O bind padrão é localhost, servido em HTTP plano. Tudo bem para a mesma máquina — mas no momento em que você acessa o purplemux de outro dispositivo, deveria estar em HTTPS.
- Tailscale Serve é o caminho recomendado: criptografia WireGuard mais cert Let's Encrypt automático. Veja Acesso via Tailscale.
- Reverse proxy (Nginx, Caddy etc.) também funciona, contanto que você encaminhe os headers
UpgradeeConnectiondo WebSocket.
O iOS Safari também exige HTTPS para instalação de PWA e registro de Web Push. Veja Configuração de PWA e Web Push.
O que vive em ~/.purplemux/
Tudo é local. Permissões em arquivos sensíveis são 0600.
| Arquivo | O que guarda |
|---|---|
config.json |
hash scrypt da senha, secret de sessão, preferências do app |
workspaces.json + workspaces/ |
lista de workspaces e layouts de painel/aba por workspace |
vapid-keys.json |
par VAPID de Web Push (gerado automaticamente) |
push-subscriptions.json |
assinaturas de push por dispositivo |
cli-token |
token compartilhado para hooks/CLI conversarem com o servidor local |
pmux.lock |
lock de instância única (pid, port, startedAt) |
logs/ |
arquivos de log pino com rotação |
Para o inventário completo e a tabela de reset, veja a referência fonte da verdade em docs/DATA-DIR.md.
Sem telemetria
O purplemux não faz nenhuma chamada para fora por conta própria. As únicas chamadas de rede que ele inicia são:
- Notificações Web Push que você assinou, enviadas pelos serviços de push do SO.
- Tudo que o CLI do Claude faz por si — isso é entre você e a Anthropic, não o purplemux.
Código e dados de sessão nunca saem da sua máquina.
Próximos passos
- Acesso via Tailscale — o caminho seguro para HTTPS externo.
- Configuração de PWA — depois que a auth estiver resolvida, instale na tela de início.
- Notificações Web Push — alertas em background.