Relay auto-alojado

Aloje o relay do Happier você mesmo: SSO, mTLS e a sua própria base de dados

O Happier tem licença MIT, e o relay por onde todos os dispositivos falam é um contentor que pode correr você mesmo. Esta página é a lista de controlos que vêm com ele — o que o servidor impõe, o que guarda, e o que entrega aos seus clientes em tempo de execução.

Vale a pena perceber o formato antes da lista. As sessões correm nos computadores dos seus programadores, contra as CLIs dos fornecedores que eles já têm. O relay leva mensagens entre esses computadores e os telemóveis, navegadores e desktops deles. É a única peça que tem de estar acessível a partir de fora, e é a peça que lhe estamos a pedir para alojar.

Tudo o que vem abaixo é configuração do servidor: variáveis de ambiente nesse contentor, aplicadas por esse contentor, sem nenhum serviço operado pelo Happier no caminho. A postura predefinida de um servidor novo é armazenamento encriptado de ponta a ponta e registo aberto, no pressuposto de que a maioria das pessoas o põe atrás do Tailscale. Se está a ler esta página, é quase certo que quer o oposto da segunda metade dessa frase.

O que essa predefinição encriptada significa por baixo — que chave é gerada onde, o que fica no seu relay, e as colunas que ele consegue ler sem uma chave — é a arquitetura de encriptação, escrita para o programador e não para si. É a página a enviar a quem perguntar o que é que o servidor consegue ver; esta fica-se pelo que você pode impor.

SSO: organizações do GitHub, grupos OIDC e certificados de cliente

A identidade é delegada no que já tem a correr. O trabalho do Happier é impô-la em cada pedido, e não apenas no registo, e continuar a perguntar.

Exija um fornecedor de identidade, verificado de novo em cada pedido
O registo anónimo está ativo por predefinição porque a maioria de quem aloja o relay põe-no atrás do Tailscale e fica por aí. Desligue-o e exija antes um fornecedor de identidade, e a elegibilidade passa a ser aplicada em todas as rotas HTTP autenticadas e no handshake em tempo real — não só à porta de entrada. Um pedido de alguém que já não qualifica é recusado, não é despromovido.
Início de sessão pelo GitHub, restrito às suas organizações
Permita logins específicos, ou exija pertença a uma ou mais organizações do GitHub, correspondendo a qualquer uma ou a todas elas. O caminho recomendado verifica a pertença através de uma GitHub App em vez do token OAuth do próprio utilizador, para que o acesso não sobreviva a um programador revogar o consentimento — e não se quebre quando ele o faz.
Início de sessão único por OIDC, com regras de permissão por fornecedor
Okta, Entra ID, Auth0, Keycloak, qualquer coisa com um documento de descoberta. Cada fornecedor tem as suas próprias regras de permissão: uma lista de logins permitidos, domínios de e-mail autorizados, grupos a que o utilizador tem de pertencer a pelo menos um, grupos a que tem de pertencer a todos. Se o seu IdP omitir os grupos do token e devolver antes um ponteiro de excesso, o Happier trata o utilizador como não elegível em vez de o tratar como sem grupos.
Certificados de cliente mTLS a partir do seu MDM
Termine o mTLS no seu proxy inverso e encaminhe uma identidade verificada para o Happier. Mapeie-a a partir do e-mail SAN ou do UPN SAN do certificado, para que um dispositivo que rode o certificado continue a ser a mesma pessoa, e restrinja-a com listas de emissores e domínios de e-mail permitidos. Os certificados desconhecidos são rejeitados a menos que tenha ativado deliberadamente o aprovisionamento automático.
Saída de colaboradores: pertença verificada de novo no intervalo que definir
A pertença é verificada de novo num intervalo que define — diariamente por predefinição, até ao minuto — e o resultado fica em cache no registo de identidade. A definição interessante é o que acontece quando o seu IdP está inacessível: permissiva por predefinição, ou estrita, em que o servidor falha fechado em vez de deixar uma verificação de elegibilidade desatualizada substituir uma verificação em tempo real.

Política de armazenamento, retenção e a base de dados que você aloja

Os controlos pelos quais um auditor pergunta a seguir, depois de ter acabado com a autenticação.

Três políticas de armazenamento, e a predefinida é a estrita
Apenas encriptado de ponta a ponta, que rejeita escritas em texto simples e é o que um servidor novo faz. Opcional, em que uma conta ou uma sessão decide. Ou apenas texto simples, para organizações que gerem a encriptação na camada de infraestrutura e querem indexação do lado do servidor — uma troca real, dita com clareza: nessa definição o servidor consegue ler o conteúdo guardado.
Janelas de retenção que define, aplicadas sem ler uma transcrição
Desligado por predefinição: não defina nada e o servidor guarda as sessões para sempre. Ligue-o e a regra das sessões é conservadora de propósito — uma árvore de sessão só é eliminada quando está inativa segundo a flag persistida, mais antiga do que o limite em dois carimbos temporais distintos, e não é observada como ativa em memória, com o limite verificado de novo dentro da transação de eliminação. Nunca precisa de desencriptar uma transcrição para decidir.
Desligue funcionalidades para toda a gente de uma vez
Voz, social, envios de relatórios de erro, anexos, o terminal embebido, a transferência de sessões, os serviços ligados, os medidores de quota — cada um é uma variável de ambiente no servidor, anunciada aos clientes em tempo de execução. Os clientes adaptam-se ao que o servidor diz estar disponível, por isso uma capacidade desativada está ausente da interface em vez de estar presente e a falhar.
Limites de taxa e um endpoint de diagnóstico que controla
Um limitador global mais limites por rota, cada um com a sua própria janela e uma estratégia de chave à sua escolha — por IP, ou por utilizador com recurso ao IP, que é o que quer quando cem programadores partilham um endereço de saída de VPN. O instantâneo de diagnóstico do servidor está desligado até o ativar, e é apenas para o owner quando o ativa.
Uma imagem Docker, com SQLite ou Postgres por trás
A imagem publicada do relay-server corre com um utilizador não-root, com a interface web embebida, usa SQLite por predefinição num único volume montado, e aceita uma configuração Postgres documentada. O MySQL também funciona, a partir de uma imagem construída da fonte — a imagem pré-construída deixa esse cliente de fora deliberadamente. Fixe uma tag imutável; a imagem não se atualiza sozinha.

Se a sua organização tem retenção zero de dados

Se está a ler esta página, é possível que já tenha batido nesta parede pelo outro lado. A própria documentação do Remote Control da Anthropic é explícita: as organizações com requisitos de conformidade como Zero Data Retention não o podem ativar. Nesse estado, a opção na consola de administração do Claude Code está a cinzento, por isso não é algo que um Owner possa decidir de forma diferente. Também não está disponível no Amazon Bedrock, na Agent Platform da Google Cloud e no Microsoft Foundry, e é desativado quando o tráfego é apontado a um gateway de LLM em vez de api.anthropic.com.

Nada disto é uma crítica. O Remote Control mantém a transcrição da sessão em servidores da Anthropic para a poder sincronizar entre os seus dispositivos, e uma organização que contratou retenção zero excluiu isso, e bem. É simplesmente uma resposta diferente a uma pergunta diferente, e se a sua organização estiver nessa posição, um relay que aloja você mesmo é o formato de resposta que resta.

O que a aquisição recebe: uma licença MIT e uma imagem de contentor

MIT. Não é source-available, não é open-core com a camada de autenticação atrás de um plano comercial, não é AGPL. Tudo o que está nesta página está no mesmo repositório que o cliente, sob a mesma licença, e nada disto depende de um contrato connosco. Se a política da sua organização for que o copyleft não entra em casa, essa política não é travada aqui.

Nenhum dos controlos acima está atrás de uma compra: não há nenhum plano empresarial para comprar nem contagem de lugares para negociar por nenhum deles. Consoante o seu processo de aquisição, essa é a parte tranquilizadora desta página ou a parte preocupante. O que recebe em vez disso é o código-fonte, uma licença MIT e uma imagem de contentor.

Levante um relay de teste e verifique o que ele impõe

A ordem honesta é: levante o relay numa máquina descartável, aponte-lhe um programador, e leia GET /v1/features para ver exatamente o que esse servidor está a anunciar aos clientes dele. Essa resposta é o contrato, e é a forma mais rápida de confirmar que uma política que definiu é uma política que os clientes vão de facto respeitar.

curl -fsSL https://happier.dev/install | bash

O guia de implantação com Docker cobre a imagem, o volume e a configuração alternativa com Postgres. A referência de autenticação do servidor cobre todas as variáveis nomeadas acima, incluindo as receitas para um servidor público que exija GitHub ou um fornecedor OIDC.