A ideia: o OneDrive, peça por peça
Os dados moram num lugar; cada computador abre, edita localmente e devolve. No COGNIX[WS], o "lugar" é o seu computador principal e o "Excel" são os agentes.
Como funciona
Os dois computadores têm o COGNIX[WS] completo. O app desktop de cada um continua falando com o próprio daemon, como hoje; quem passa a conversar são os daemons. já existe marca o que reaproveitamos; novo, o que falta construir.
- COGNIX[WS] completo, como hoje já existe
- Fonte da verdade: o banco e os repositórios dos workspaces novo
- Manda o push para o celular — um envio só
- Roda automações, Channels e Calendar por padrão
- Os agentes criados aqui rodam aqui
- COGNIX[WS] completo (WSL + daemon) que entra no seu ambiente novo
- Sempre aqui: estrutura e trabalho
- Sob demanda: código e histórico
- Os agentes criados aqui rodam aqui, com o CLI, o navegador e o Computer daqui
- Sem o CASA-PC: segue trabalhando; a fila espera
Dados
Cada evento do change feed já carrega o JSON da entidade (ADR-0048). O notebook segue o feed do CASA-PC e grava as próprias mudanças numa fila, na mesma transação do banco local. Mais de 7 dias offline: cópia completa.
Código
Git, nunca a sincronização de dados. Open here = clone do repositório do CASA-PC pelo vínculo (ou do GitHub, se o CASA-PC estiver fora). A branch do agente volta como notebook/<agente>; o merge acontece no Review/Merge, como hoje.
Execução
O agente roda onde foi criado. Logins de CLI, navegador do agente, Computer, VMs, terminais e confiança de pasta são de cada computador e nunca viajam.
Protótipos
Telas clicáveis. O texto das telas está em inglês, como no produto; as legendas em português explicam o que acontece. Os números são ilustrativos.
Você instala o COGNIX[WS] no notebook normalmente. Na primeira tela, em vez de começar do zero, ele entra no ambiente do CASA-PC com um código — o mesmo pareamento do celular.
A sidebar do notebook mostra tudo, com o estado de cada workspace — como os ícones do OneDrive. Clique num workspace só no CASA-PC e use Open here; o ⋯ de cada linha tem Always keep e Free up space.
Um agente criado no notebook roda no notebook. Siga os passos e veja o que aparece em cada lugar — o contorno azul marca o que acabou de mudar.
Desligue o CASA-PC e continue usando o notebook. Ligue de novo para ver a fila sair — e, se marcar a caixa, um conflito ser resolvido.
Em Settings → Computers, no notebook: quem é quem, o que este computador guarda e quanto espaço ocupa. Mude as opções para ver o espaço mudar.
O que sincroniza
Três classes. Toda tabela do banco cai em uma delas, e o CI recusa tabela nova sem classe (regra 3).
Sempre
- Estrutura dos workspaces: nome, origem git, setup, templates ligados
- Templates e blueprints, skills, lista de extensões
- Registro MCP, sem os segredos
- Preferências, tags, snippets
- Inbox, missions, mensagens, lembretes e agenda
- Artifacts: lista, versões e comentários
- Estado dos agentes e terminais de cada computador — para ver, não para rodar
Sob demanda
- Código: clone git na versão do servidor
- Arquivos dos artifacts
- Conversas antigas, para o histórico e o Recall
- Pacotes das extensões, da mesma fonte e versão
- Imagens do Assistant
Nunca
- Processos, terminais, portas e dev servers
- Navegador do agente e os logins dele em sites
- Computer, VMs e Sandbox; WSL e disco
- Confiança de pasta (é por caminho)
- Logins dos CLIs e o cofre (por padrão)
- Certificados, tokens e dispositivos pareados
Regras de base
As que ficam caras de mudar depois. O resto da implementação pode crescer por partes sem retrabalho.
- O servidor é a fonte da verdade; cada computador trabalha numa cópia e devolve.Grava localmente primeiro, manda pela fila, e o servidor aceita pela versão.
- O agente roda onde foi criado.Com o CLI, o login, o navegador, o Computer e as VMs daquele computador. Sobre um agente, decide o computador onde ele roda.
- Todo dado tem uma classe: sempre, sob demanda ou nunca.O CI recusa tabela nova sem classe — como o inventário de backup já faz (ADR-0288).
- Identidade global antes de sincronizar.Hoje o id é nome + 6 hex (
internal/store/store.go:143, 63 usos), único só no banco de cada computador. - Os dados andam no change feed.Cada tipo ganha um codec que deixa de fora o que é da máquina (caminho, PID, porta).
- Código anda por git, nunca pela sincronização de dados.Branch no espaço do computador (
notebook/*); merge no Review/Merge. - Efeito externo tem um computador dono.Automações, push, Channels, Calendar e alertas de painel. Sem isso, um lembrete dispara duas vezes.
- Versão por tipo.Um computador desatualizado pausa só o que não entende e pede Update — o Remote já tem esse estado.
Decisões — o que recomendo
A 9 é comercial e só você decide. As outras têm uma recomendação; basta dizer OK ou mudar.
Fases
Primeiro as regras de base; o visível vem logo depois. Cada fase entra na main sozinha e deixa as anteriores funcionando.
O que já existe e o que muda
Reaproveita
- Pareamento por código e Devices (ADR-0049)
- Certificado válido no nome do tailnet (ADR-0050, ADR-0339)
- Remote (ADR-0283): seletor de computador, visão ao vivo, Inbox mesclada, Move agent, relay de login de CLI
- Change feed com o JSON de cada entidade e cursor (ADR-0048)
- Inventário de backup como modelo do inventário de sincronização (ADR-0288)
- Review/Merge para o código que volta (ADR-0232)
Muda
- A 1ª versão do ADR-0343 (o app desktop como viewer de outro servidor) sai. O app de cada computador continua ligado ao próprio daemon.
- Fica uma correção pequena, que vale em qualquer modelo: só o app nativo em loopback deveria abrir o canal de comandos do navegador e do Computer. Hoje qualquer sessão pareada abre (
internal/server/browser.go:425). - O notebook precisa da instalação completa (WSL + daemon): é o custo de rodar localmente.
feat/desktop-remote-client. Nada disto foi implementado ou medido ainda.