O hub é uma ponte do momento, não memória de longo prazo. Ele mantém a conversa atual sincronizada entre canais, com banco limitado (poda automática). Memória persistente entre projetos/sessões continua sendo o sistema de memória (
/memory) e o /session save.Como funciona
- Principal: a identidade compartilhada da conversa. No modo single-user (padrão), o CLI local e o gateway colapsam no mesmo principal (
defaultse você não definir nada), então tudo compartilha sem configuração. hub.db: um log append-only em SQLite (~/.chatcli/hub.db). O CLI e o daemon do gateway abrem o mesmo arquivo — é por isso que se entendem entre processos.- Efêmero por sessão: ao abrir o chatcli, começa uma conversa nova e a anterior é podada — o banco não cresce e você não carrega um histórico gigante. Conversas ociosas além do TTL (
CHATCLI_HUB_TTL_HOURS, padrão 24h) são varridas. - Silencioso: mensagens de outros canais entram no contexto do modelo sem serem impressas no seu prompt (nada de poluição, nada de “apertar Enter pra continuar”).
/newsessionzera a conversa compartilhada para todos os canais.
/agent e /coder: o pedido e a resposta final atravessam os canais (o detalhe de execução das tools fica local em cada máquina).
Modos
- Local (mesma máquina)
- Co-locado no servidor (tempo real)
- Multi-usuário / bot público
O caso mais simples — chatcli + gateway no mesmo notebook, zero configuração (basta o principal padrão):Converse no notebook, depois puxe o assunto no Telegram → tem o contexto. Mande no Telegram com o prompt aberto → entra no contexto do próximo turno do notebook.
Cross-process, o notebook pega o contexto no próximo turno (não há push ao vivo no prompt já aberto). Para tempo real, use o modo co-locado abaixo.
Comandos
hub.db (lidas ao vivo pelo gateway, sem restart):
Identidade compartilhada (single-user vs multi-user)
Com o isolamento ligado, o gateway também dá a cada principal seu próprio conjunto de stores — sessões salvas, memória de longo prazo, contextos de conhecimento, arquivo CCR, snapshots de custo, journal de transcript e a conversa viva — na raiz
~/.chatcli/tenants/<principal>/. O conjunto é instalado para o turno daquele remetente e o compartilhado é restaurado depois, então um /session list num chat nunca mostra as sessões de outro usuário e os fatos de um usuário nunca aparecem no turno de outro. CHATCLI_GATEWAY_MAX_TENANTS (16) limita quantos conjuntos ficam residentes; os menos usados recentemente são liberados e reconstruídos do disco no próximo turno. Execuções parkeadas (/park, /resume) e execuções de task-graph também seguem a raiz do tenant, e CHATCLI_DAILY_BUDGET_USD limita o gasto de cada tenant por dia-calendário separadamente. Tudo que deriva de uma conversa troca junto com o conjunto: o cartão de memória do início de sessão, a pilha de undo do /rewind compact, o último trace de auto-recall, a marca d’água de encaminhamento do provedor de memória externo, imagens recebidas pendentes e a última resposta do agente; o memory worker base continua lendo o histórico base enquanto o turno de um tenant roda, e as chamadas MCP memory_recall / memory_store de um provedor externo carregam um argumento tenant. O que fica global ao processo está listado em “Compartilhado entre tenants” no /config security: hooks, o MCP manager (servidores e OAuth), o reflexion runner, o arquivo de histórico do REPL, o banco do hub e o scheduler — além do board do squad e do cache de vocabulário do tokenizer (dados públicos).
Relação com memória e sessões
O hub é um trilho paralelo aditivo: o histórico local, o
/session save e a memória continuam funcionando exatamente como antes. Para continuidade durável de uma conversa nomeada entre REPL, IDE, MCP e gateway, veja Continuidade cross-surface — o hub segue sendo a ponte em tempo real do turno atual.
Observabilidade — o hub nunca morre em silêncio
A continuidade depende do hub estar de pé, então todo estado dele é explícito no log:- Hub ativo: o daemon loga
gateway: conversation hub active (principal=…, isolate=…, idle_ttl=…)no boot; o CLI logalocal hub mode enabled. - Hub desligado: um
Warnnomeia a fonte exata da decisão —db setting enabled=false,env CHATCLI_HUB_ENABLED=falseoudefault— em vez de simplesmente sumir com a continuidade. - Daemon servindo sem hub (banco inacessível): um aviso único por execução deixa claro que as respostas estão sem contexto cross-channel.
Veja também
- Agent Squad — o squad mail e o registry de runs viajam por este mesmo hub: o
/agentsenxerga (e cancela) runs em outros processos, e o/mail sendalcança agents rodando no gateway daemon - Chat Gateway — expõe o ChatCLI nos canais de mensagem
- Servidor Remoto (/connect) — conectar o CLI a um hub remoto
- Variáveis de Ambiente
- Referência de Comandos