O ChatCLI usa um histórico unificado — um único array de mensagens compartilhado entre todos os modos (chat, agent, coder). Ao salvar uma sessão, todo o contexto e preservado independente do modo em que foi gerado. Use
/compact para reduzir o tamanho e /rewind para voltar a pontos anteriores.Comandos de Sessão
Todos os comandos de gerenciamento de sessão começam com/session.
/session save <nome>
Salva a conversa atual (todo o histórico de prompts e respostas) com um nome de sua escolha.
/session load <nome>
Carrega uma sessão salva anteriormente. A conversa atual é substituída pelo histórico da sessão carregada.
/session delete <nome>
Remove permanentemente uma sessão salva do disco. Esta ação não pode ser desfeita.
/session new (ou /newsession)
Limpa o histórico atual e inicia uma conversa completamente nova. É perfeito para começar uma tarefa do zero sem estar atrelado a nenhuma sessão nomeada.
Onde as Sessões são Armazenadas
As sessões são salvas como arquivos JSON no diretório de trabalho atual (CWD) — ou seja, o diretório de onde você iniciou o ChatCLI. O padrão de nomenclatura dos arquivos é:/session save debug-api, o arquivo criado será:
O
SessionManager é o componente interno responsável por toda a E/S de arquivos de sessão. Ele trata erros de leitura/escrita (permissões, disco cheio, JSON malformado) e exibe mensagens claras caso algo falhe./compact.
Formato de Dados (v2)
Os arquivos de sessão utilizam o formato v2, definido pela structSessionData no pacote models. A estrutura JSON é:
Campos de cada mensagem
| Campo | Tipo | Descrição |
|---|---|---|
role | string | "user", "assistant", "system" ou "tool" |
content | string | Conteúdo textual da mensagem |
meta.is_summary | bool | true se a mensagem é um resumo gerado por /compact |
meta.summary_of | int | Número de mensagens originais que este resumo representa |
meta.mode | string | Modo em que a mensagem foi gerada ("chat", "agent", "coder") |
tool_calls | array/null | Lista de chamadas de ferramenta (agent/coder mode) |
tool_call_id | string | ID da tool call que está mensagem responde (para mensagens role: "tool") |
Evolução do formato
- v1 (versões antigas): Mantinha históricos separados por modo —
chat_history,agent_historyecoder_historycada um com suas próprias mensagens. - v2 (versão atual): Usa um histórico unificado. O campo
chat_historycontém todas as mensagens de todos os modos. Os camposagent_historyecoder_historyexistem por compatibilidade, mas ficam vazios em sessões novas.
Histórico Unificado e Sessões
O ChatCLI usa um único array de mensagens para todos os modos de interação. Isso significa que:- Ao salvar uma sessão, o histórico inteiro e unificado é serializado — incluindo mensagens de chat, agent e coder mode.
- Mensagens do sistema, resultados de tool calls e resumos compactados são todos preservados no arquivo.
- Ao carregar uma sessão, o histórico atual é completamente substituído pelo da sessão carregada.
Interação com Outros Sistemas
As sessões interagem com vários outros subsistemas do ChatCLI. Veja como cada um se comporta:Compactação (/compact)
O comando /compact reduz o tamanho do histórico criando resumos das mensagens mais antigas. Ao salvar uma sessão após compactar, o arquivo resultante será significativamente menor, pois contém os resumos em vez das mensagens originais.
Rewind (/rewind)
Os checkpoints usados pelo /rewind existem apenas em memória durante a execução atual. Eles não são salvos no arquivo de sessão. Ao carregar uma sessão, você não terá pontos de rewind disponíveis até criar novos durante a conversa.
Bootstrap (SOUL.md, etc.)
Arquivos de bootstrap não fazem parte da sessão. Eles são carregados automaticamente a cada inicialização do ChatCLI, independente de qual sessão esteja ativa. Isso garante que o comportamento base da IA seja sempre consistente.Memória (/memory)
A memória é global — não está vinculada a nenhuma sessão específica. Dados salvos com /memory save ficam disponíveis em todas as sessões e sobrevivem ao encerramento do ChatCLI.
Contexto (/context attach)
Contextos anexados via /context attach não são salvos no arquivo de sessão. Ao carregar uma sessão, você precisa re-anexar os contextos necessários manualmente.
Resumo rápido: Sessões salvam apenas o histórico de mensagens. Bootstrap, memória, contextos e checkpoints de rewind são gerenciados separadamente.
Auto-Save e Persistência
Se você fechar o ChatCLI sem salvar, o histórico da conversa será perdido permanentemente. Não há mecanismo de recuperação automática.Arquivo .chatcli_history (não confundir)
O ChatCLI mantém um arquivo separado chamado .chatcli_history que armazena o histórico de comandos digitados (similar ao ~/.bash_history). Esse arquivo:
- Contém apenas os textos que você digitou no prompt, não as respostas da IA
- É controlado pelas variáveis de ambiente
HISTORY_FILEeHISTORY_MAX_SIZE - Não tem relação com os arquivos de sessão (
.chatcli_session_*.json)
| Aspecto | Sessões (.chatcli_session_*.json) | Histórico de comandos (.chatcli_history) |
|---|---|---|
| Conteúdo | Conversa completa (user + assistant + tool) | Apenas o que você digitou |
| Salvamento | Manual (/session save) | Automático |
| Formato | JSON estruturado (v2) | Texto simples, uma linha por comando |
| Controle | Comandos /session | Variáveis HISTORY_FILE, HISTORY_MAX_SIZE |
Workflow Recomendado
Para tirar o máximo proveito do sistema de sessões, siga estas práticas:Nomeie sessões pela tarefa
Use nomes descritivos que identifiquem claramente o objetivo. Exemplos:
fix-auth-bug, refactor-api, docs-v2, debug-memory-leak.Compacte antes de salvar
Use
/compact antes de /session save para reduzir o tamanho do arquivo e manter apenas as informações essenciais.Inicie limpo antes de trocar de sessão
Use
/session new antes de carregar outra sessão. Isso garante que o contexto anterior não interfira.Criptografia de Sessões
Os arquivos de sessão podem ser criptografados em repouso usando AES-256-GCM para proteger dados sensíveis de conversas:| Variável | Descrição | Padrão |
|---|---|---|
CHATCLI_ENCRYPTION_KEY | Chave de criptografia (32 bytes, base64-encoded) | "" (desabilitado) |
A derivação de chaves usa HKDF (HMAC-based Key Derivation Function) para gerar chaves únicas por sessão a partir da chave mestra. Isso garante que comprometer uma sessão não compromete as demais.
Limpeza Automática
O ChatCLI pode remover automaticamente sessões antigas na inicialização:| Variável | Descrição | Padrão |
|---|---|---|
CHATCLI_SESSION_TTL | Tempo de vida máximo das sessões | 90d (90 dias) |
CHATCLI_SESSION_TTL são removidas automaticamente quando o ChatCLI é iniciado. Isso evita acúmulo indefinido de sessões antigas no disco.
Validação de Nomes
Nomes de sessão são validados com uma regex estrita para evitar path traversal e caracteres problemáticos:- Caracteres permitidos: letras (a-z, A-Z), números (0-9), hífens (
-), underscores (_) e pontos (.) - Comprimento: 1 a 128 caracteres
- Proibido: espaços, barras, caracteres especiais, sequências
..
Perguntas Frequentes
As sessões são compartilhadas entre máquinas?
As sessões são compartilhadas entre máquinas?
Não. Os arquivos de sessão são armazenados localmente no diretório de trabalho atual. Para transferir uma sessão entre máquinas, você precisaria copiar manualmente o arquivo
.chatcli_session_<nome>.json para o mesmo diretório na outra máquina.Existe limite de tamanho para as sessões?
Existe limite de tamanho para as sessões?
Tecnicamente, o limite é definido pela variável
HISTORY_MAX_SIZE (padrão: 100MB), mas na prática as sessões raramente passam de alguns megabytes. Se o histórico estiver muito grande, use /compact antes de salvar para reduzir significativamente o tamanho.Posso editar o arquivo JSON da sessão manualmente?
Posso editar o arquivo JSON da sessão manualmente?
Sim, mas com cuidado. O arquivo segue o formato v2 descrito acima. Você pode remover mensagens, editar conteúdos ou ajustar metadados. Certifique-se de manter o JSON válido e a estrutura intacta (especialmente o campo
version).O que acontece se eu carregar uma sessão de uma versão antiga?
O que acontece se eu carregar uma sessão de uma versão antiga?
O ChatCLI detecta automaticamente sessões no formato v1 (com históricos separados por modo) e faz a migração automática para v2, mesclando todas as mensagens em ordem cronológica no histórico unificado. O processo é transparente e não requer ação do usuário.
Posso ter sessões com o mesmo nome em diretórios diferentes?
Posso ter sessões com o mesmo nome em diretórios diferentes?
Sim. Como os arquivos são salvos no CWD, cada diretório tem seu próprio namespace de sessões. Uma sessão chamada
debug em /projeto-a é completamente independente de uma sessão debug em /projeto-b.Próximos Passos
Controle de Conversa
Use /compact e /rewind para gerenciar o tamanho e estado do histórico.
Contexto Persistente
Salve, anexe e reutilize snapshots de projetos com o comando /context.
Bootstrap e Memória
Personalize a IA e mantenha contexto de longo prazo.
Modo One-Shot
Use o ChatCLI em scripts, automações e pipelines de CI/CD.