Skip to main content
O ChatCLI oferece dois sistemas complementares para personalizar e contextualizar o agente: arquivos bootstrap para definir personalidade e regras, e memória persistente para manter contexto entre sessões.
O sistema de bootstrap e memória está totalmente conectado ao fluxo de system prompt. Os arquivos são carregados automaticamente e injetados em todas as interações — tanto no modo chat quanto nos modos /agent e /coder.

Arquivos Bootstrap

Os arquivos bootstrap são documentos Markdown carregados automaticamente no system prompt do agente. Eles definem quem o assistente e, como ele se comporta e quais regras deve seguir.

Arquivos Suportados

O ChatCLI carrega exatamente 5 arquivos bootstrap, nesta ordem. Todos são opcionais — se não existirem, são simplesmente ignorados:
Os nomes dos arquivos são exatos e case-sensitive. O ChatCLI busca apenas AGENTS.md, SOUL.md, USER.md, IDENTITY.md e RULES.md. Outros nomes (como CLAUDE.md, README.md, etc.) não são carregados pelo bootstrap.

Prioridade de Carregamento

Os arquivos são buscados em dois níveis, com o workspace tendo prioridade:
1

Workspace (raiz do projeto)

Configurações específicas do projeto. Tem prioridade sobre o global. A raiz do projeto e detectada automaticamente (veja abaixo).
2

Global (~/.chatcli/)

Configurações padrão do usuário. Serve como fallback quando o arquivo não existe no workspace.
Se o mesmo arquivo existe em ambos os níveis, o do workspace prevalece. Arquivos globais servem como fallback.

Detecção Automática do Workspace

O ChatCLI usa detectProjectDir() para encontrar a raiz real do projeto. Em vez de usar simplesmente o diretório atual (CWD), ele sobe na árvore de diretorios procurando marcadores de projeto:
  1. Verifica se o diretório atual contem .git/ ou .agent/
  2. Se não encontrar, sobe para o diretório pai e repete
  3. Continua até encontrar um marcador ou chegar na raiz do filesystem
  4. Se nenhum marcador for encontrado, usa o CWD como fallback
Isso significa que você pode rodar o ChatCLI de qualquer subdiretorio do projeto e os arquivos bootstrap na raiz serão encontrados normalmente.
Marcadores reconhecidos: .git (repositório Git) e .agent (marcador explicito do ChatCLI). Basta um deles existir para definir a raiz do workspace.

Cenarios de Exemplo

Exemplos Detalhados

Define personalidade e tom. Coloque em ~/.chatcli/SOUL.md (global) ou ./SOUL.md (projeto):

Onde Colocar os Arquivos

“Raiz do projeto” significa o diretório que contem .git/ ou .agent/ — detectado automaticamente pelo detectProjectDir(), não necessariamente o CWD.
CHATCLI_BOOTSTRAP_DIR substitui apenas o diretório global (~/.chatcli/), não a detecção do workspace. Arquivos na raiz do projeto (detectada via .git ou .agent) continuam tendo prioridade sobre os globais, independentemente de CHATCLI_BOOTSTRAP_DIR.
A estratégia recomendada: SOUL.md e IDENTITY.md globais (são sobre o assistente), USER.md e RULES.md por projeto (são sobre o contexto de trabalho).

Cache Inteligente

Os arquivos bootstrap usam cache baseado em mtime (modification time):
  • Na primeira leitura, o conteúdo e cacheado em memória
  • Leituras subsequentes verificam se o mtime mudou
  • Se o arquivo foi modificado, o cache e invalidado automaticamente
  • IsStale() verifica se algum arquivo mudou desde o ultimo carregamento

Memória Persistente

O sistema de memória mantem contexto entre sessões do ChatCLI usando armazenamento estruturado com múltiplos componentes que aprendem sobre você e seu trabalho ao longo do tempo.

Arquitetura do Sistema

Extração resiliente — nada se perde em silêncio

A extração depende de uma chamada de LLM em background — e um provider fora do ar não pode custar a memória da conversa. Três defesas em camadas:
  1. Cadeia de fallback: a extração tenta o client ativo da sessão e, em falha, percorre CHATCLI_MEMORY_FALLBACK_PROVIDERS (ou CHATCLI_FALLBACK_PROVIDERS), com timeout próprio por tentativa.
  2. Fila durável em disco: um segmento que falhar em todos os providers é gravado em ~/.chatcli/memory/pending/ (escrita atômica) e reprocessado nas próximas execuções, do mais antigo para o mais novo — sobrevive a restart. A fila tem teto (100 segmentos) e arquivos corrompidos são descartados sem travar o restante.
  3. Aviso visível: duas falhas consecutivas mostram uma linha no terminal (memória: extração falhando…) — perda silenciosa de fatos por dias não acontece mais.
O gateway também consulta esta memória: a persona do daemon chama @memory recall antes de responder “não sei” a perguntas pessoais. Veja Chat Gateway.

Estrutura de Armazenamento

Toda a memória fica em ~/.chatcli/memory/:

Componentes

Substitui o antigo MEMORY.md append-only. Cada fato tem:
  • ID unico por hash SHA-256 do conteúdo (deduplicação automatica)
  • Categoria: architecture, pattern, preference, gotcha, project, personal
  • Score temporal: (1 + log(accessCount)) * exp(-days * ln2 / halfLife)
  • Tags para busca por keywords
Fatos mais acessados e recentes tem scores maiores. Fatos antigos e nunca acessados decaem naturalmente.
Detectado automaticamente pela IA durante a extracao e editável por você/pelo modelo em qualquer modo:
  • Nome, role, nível de expertise, empresa, localização
  • Idioma preferido e estilo de comunicação
  • Listas com ciclo de vida: certificações, skills, objetivos, interesses e diretivas (reafirmar um item supera o antigo em vez de duplicar; sufixos _replace/_done/_remove reescrevem)
  • Diretivas com severidade (regras duras vs preferências) e escopo por projeto ([scope:<projeto>] regra só é injetada quando aquele workspace está ativo)
  • Posições (stance) — opiniões técnicas gravadas com o porquê ("posição :: razão")
  • Marcos (milestone) — linha do tempo datada do que aconteceu
  • Ambiente estruturado (env_os, env_shell, …) — migrado automaticamente das preferences legadas
  • Proveniência e frescor por campo: cada atributo sabe se veio de você ou da extração e quando foi confirmado; campos sem reconfirmação há 120+ dias são sinalizados como possivelmente desatualizados no prompt
  • Camada de privacidade: chaves de finanças/saúde/família/documentos são auto-marcadas [sensitive] — personalizam respostas, mas nunca entram em código, exemplos ou artefatos gerados (sensitive_mark/sensitive_unmark para controle manual)
  • Comandos mais usados (top 10) e preferencias gerais
Veja com /memory profile. Perfis antigos poluídos por versões append-only se auto-curam no próximo load (fragmentos, duplicatas de progresso e objetivos concluídos saem sozinhos).
Rastreia topicos tecnicos discutidos:
  • Frequência de mencoes
  • Recencia (topicos recentes pesam mais)
  • Links com fatos relacionados
Veja com /memory topics.
Rastreia projetos em que você trabalha:
  • Nome, path, descrição
  • Tecnologias usadas
  • Status (active, paused, completed)
  • Ultima atividade
Veja com /memory projects.
Analisa como você usa o ChatCLI:
  • Sessões totais e duracao media
  • Horas de pico de atividade
  • Features preferidas (chat, agent, coder)
  • Erros comuns e resolucoes
Veja com /memory stats.

Smart Retrieval

Em vez de injetar toda a memória no system prompt, o ChatCLI usa retrieval inteligente:
  1. Extrai keywords das ultimas mensagens da conversa
  2. Busca fatos relevantes no FactIndex por keyword match + score temporal
  3. Respeita um budget configurável (padrão: 4000 caracteres)
  4. Prioriza: Perfil > Projetos > Topicos > Fatos relevantes > Notas recentes > Episódios > Related (graph) > Trajetória (digests) > Padrões de uso
A seção ## Related (graph) é o grafo de conhecimento participando do recall: os fatos mais bem ranqueados são expandidos um hop pelo grafo, trazendo memórias estruturalmente adjacentes (um fato vizinho, o episódio do dia em que foi aprendido, um tópico ou sessão conectados) que o ranking por keyword e vetor perdeu. É puramente aditiva — nunca desloca um fato ranqueado, só gasta budget sobrando — e aparece tanto na injeção do modo full quanto em todo pull de @memory recall.
Fatos acessados pelo retriever tem seu score incrementado automaticamente, criando um ciclo virtuoso: quanto mais um fato e util, mais ele aparece.

Modo de injeção: push vs pull

Como a memória chega ao modelo — em todos os modos: chat, /agent e /coder — é controlado por CHATCLI_MEMORY_MODE: Cartão de bootstrap de memória persistente — o system prompt de toda superfície abre com um cartão [PERSISTENT MEMORY — REAL, CROSS-SESSION]: um snapshot do início da sessão com contagens reais (fatos de longo prazo, episódios datados, conversas salvas com a mais recente nomeada, cards do work board em andamento) mais uma diretiva anti-amnésia explícita — nunca alegue não ter memória de sessões passadas; puxe primeiro (@memory recall, @session search, @board list; no chat, o cartão aponta o usuário para /session attach em vez de tools que o chat não tem). O cartão é congelado por sessão para viver no prefixo cacheado. O recall proativo também dispara desde o primeiro turno de uma sessão nova: a mensagem atual alimenta os hints de ranking, perguntas puramente referenciais (“o que falamos anteriormente?”) listam as sessões mais recentes em vez de antigas lexicalmente fortes, e a janela de recall ambiente cobre as 60 sessões salvas mais recentes. O auto-recall proativo fecha a lacuna do modelo pull: modelos às vezes pulam a chamada de @memory recall mesmo quando um gotcha armazenado é exatamente o que precisam. No modo index, cada turno também ranqueia o índice de fatos contra palavras-chave das mensagens recentes e leva os 3 melhores matches para o prompt num bloco minúsculo [MEMORY AUTO-RECALL] (cap de 700 bytes), seguido de uma linha Related (graph): apontando o que fica ao lado desses fatos no grafo de conhecimento — assim o modelo sabe que há mais para puxar antes de alegar ignorância. O bloco vive na região final não-cacheada junto do contexto de relógio, então o digest estável permanece byte-idêntico e o cache de prompt não é afetado. Gate CHATCLI_MEMORY_AUTORECALL (on por padrão). O modo pull (index) reduz o bloco de memória por turno em ~88% num store de 500 fatos sem perder acesso ao detalhe — veja Eficiência de Tokens › Memória pull-first para a medição completa. O chat também honra index: a exceção sancionada da ferramenta de memória do chat (CHATCLI_CHAT_MEMORY, on por padrão) dá ao chat o mesmo caminho de pull, então ele recebe o digest compacto mais um hint de recall em vez do retrieval completo. Só quando essa exceção está desabilitada o chat cai em full — chat sem caminho de pull nunca pode ficar sem memória. O chat também recebe os blocos proativos [MEMORY AUTO-RECALL] e [SESSION RECALL] e o card do grafo de conhecimento, antes exclusivos de agent/coder (o wording do session recall no chat sugere /session attach, já que o chat não tem ferramenta de sessão). A ferramenta de recall usa HyDE + busca vetorial, então o detalhe puxado tem a mesma qualidade do push. Veja o estado atual em /config memory.

Configuração da Memória

O sistema de memória possui parâmetros configuraveis via variáveis de ambiente: Alem das variáveis de ambiente, o struct Config interno define valores padrão adicionais:

Como as Memorias são Criadas

O worker em background agora extrai 6 tipos de informação (antes eram apenas 2):
  1. DAILY — O que foi feito (arquivos, comandos, erros, tarefas)
  2. LONGTERM — Fatos novos para lembrar permanentemente
  3. PROFILE_UPDATE — Informações sobre o usuário (nome, role, expertise)
  4. TOPICS — Topicos tecnicos discutidos
  5. PROJECTS — Projetos em que se trabalhou
  6. EPISODES — Unidades datadas e duráveis de trabalho concluído (veja Memória episódica: a linha do tempo de trabalho abaixo)
O worker dispara após 4+ mensagens novas com cooldown de 2 minutos, e também a cada 3 minutos em sessões longas.

Processo de Extracao

O Memory Worker segue este fluxo interno:
  1. EnhancedExtractionPrompt: Envia o histórico recente da conversa para o LLM com um prompt estruturado solicitando extracao de informações
  2. Resposta esperada: O LLM retorna texto com headers de seção bem definidos:
    • ## DAILY — Resumo do que foi feito na sessão
    • ## LONGTERM — Fatos novos para memória de longo prazo
    • ## PROFILE_UPDATE — Atualizações de perfil do usuário
    • ## TOPICS — Topicos tecnicos identificados
    • ## PROJECTS — Projetos mencionados ou trabalhados
  3. ParseEnhancedResponse(): Faz o parse da resposta e extrai cada seção individualmente
  4. Deduplicação: Cada fato recebe um ID único via hash SHA-256 do conteúdo. Fatos com hash identico a um já existente são descartados automaticamente
  5. Merge de perfil com ciclo de vida: Atualizações de PROFILE_UPDATE são mescladas com o perfil existente. Campos de lista fazem upsert (reafirmar um item supera o antigo em vez de duplicar), e a extração pode emitir operações de reescrita: goals_done=/goals_remove= removem objetivos concluídos (movendo-os para milestone=/certifications=), goals_replace= substitui a lista inteira — os mesmos sufixos valem para certificações, skills, interesses e diretivas. Instruções suas sobre o perfil (“remove X dos objetivos”) são aplicadas, nunca gravadas como se fossem fatos

Compactação Automatica

O sistema executa compactação periodica para evitar crescimento descontrolado:
1

Verificação (a cada 6 horas)

Checa se o número de fatos ultrapassa 80% do limite ou se passaram 24h desde a ultima compactação.
2

Compactação LLM (preferida)

Envia todos os fatos para a IA com instruções para: merge duplicatas, remover obsoletos, consolidar relacionados.
3

Fallback Score-based

Se a chamada LLM falhar, arquiva fatos com score abaixo de 0.1 em memory_archive.json.
4

Limpeza de Notas Diarias

Remove notas mais antigas que o periodo de retencao (padrão: 30 dias).
5

Regeneracao do MEMORY.md

Reescreve MEMORY.md a partir do FactIndex — sempre atualizado, nunca source of truth.

Digests Semanais e Mensais (Trajetória)

Notas diárias expiram em ~30 dias — os rollups preservam a narrativa de longo prazo antes disso:
  • Ao fim de cada semana ISO, as notas diárias daquela semana consolidam em weekly/2026-W27.md (resumo via LLM com fallback determinístico — nunca depende do provider estar de pé).
  • Ao fim de cada mês, os digests semanais consolidam em monthly/2026-06.md.
  • Retenção: semanais guardam ~26 semanas; mensais ficam para sempre (custo mínimo).
  • Uma seção Trajectory limitada entra no contexto de memória com o último mensal + semanais recentes — é assim que “o que você andou fazendo nos últimos meses” sobrevive à limpeza das notas diárias.
O processo é idempotente e roda sozinho no worker de memória (checagem no startup e a cada 12h).

Migração Automatica

Ao iniciar pela primeira vez com o novo sistema, o ChatCLI detecta se existe um MEMORY.md legado (sem memory_index.json) e migra automaticamente:
  1. Cada linha/bullet e convertida em um fato individual
  2. Categorias são detectadas pelos headers do markdown
  3. Tags são extraidas por keywords tecnicas
  4. O arquivo original e salvo como MEMORY.md.bak

Comando /memory

Edição manual e perfil estendido

A detecção automática nem sempre captura tudo, então você pode editar a memória explicitamente. Além de nome/role/expertise/empresa/localização, o perfil cobre certificações, skills, objetivos, interesses, diretivas, posições (stance), marcos (milestone) e ambiente (env_*). Campos de lista têm ciclo de vida, não são append-only: novos itens entram, um item reafirmado (mesmo texto fora do status/parêntese) supera o antigo no lugar, e sufixos de operação reescrevem — _replace substitui a lista inteira (valor vazio limpa), _done/_remove removem itens que casem. Vírgulas dentro de parênteses são seguras ("Quiz X (Provider, 60 questões)" fica inteiro).
forget atua só em fatos; para remover itens do perfil use os sufixos (goals_remove=...). Diretivas com [scope:<projeto>] só são injetadas quando aquele workspace está ativo; sem a tag, valem globalmente.

Tool @memory (agent, coder e chat)

Dentro do /agent e /coder, o modelo pode persistir e explorar memória sozinho via a tool @memory (cmds remember, profile, forget, recall, timeline, neighbors, map):
Assim, quando você conta uma novidade ao agente (ex.: uma certificação nova), ele a grava no seu perfil/fatos de longo prazo sem você precisar rodar /memory manualmente. O subcomando profile aceita todas as operações de ciclo de vida (goals_done, goals_replace, stance, milestone, env_*, sensitive_mark, …). No chat também: atualização de memória/perfil é a quarta exceção sancionada do chat tool-less (junto de ask_user, knowledge read-only e @graphview). Quando você revela ou corrige um fato durável sobre si, o modelo persiste no mesmo turno — nada de “vou considerar daqui pra frente” sem gravar. A exceção também carrega o lado de leitura: é o caminho de pull que permite ao chat honrar o modo de memória index (digest compacto + recall sob demanda) e receber os blocos proativos de auto-recall, session recall e o card do grafo. Controlada por CHATCLI_CHAT_MEMORY (ligada por padrão) e alternável com /config chat memory on|off — desabilitar reverte o chat ao modelo full-push de memória.

Memória episódica: a linha do tempo de trabalho

Fatos capturam o que é verdade; episódios capturam o que aconteceu. Um episódio é uma unidade datada e durável de trabalho concluído — resumo, desfecho e refs (arquivos, PRs, comandos) — extraída automaticamente pelo worker em background (seção ## EPISODES) e armazenada para sempre em ~/.chatcli/memory/episodes.json. Ao contrário das daily notes (retenção de 30 dias) e seus digests, episódios nunca expiram — “o que fizemos há três meses?” finalmente tem resposta estruturada.
  • Armazenamento segue as disciplinas do fact index: escrita atômica, quarentena em corrupção e rewrites reconciliadores multi-processo (REPL, gateway daemon e MCP server nunca se apagam). O mesmo item re-extraído no mesmo dia deduplica e enriquece desfecho/refs em vez de duplicar. Cap de 2000 episódios (mais antigos caem primeiro).
  • @memory timeline é a visão cronológica para o modelo: {project?, from?, to?, query?, limit?}. from/to aceitam datas ISO (2026-04, 2026-04-12) ou expressões naturais em português e inglês (“há 3 meses”, “3 months ago”, “abril”, “semana passada”) — uma expressão de tempo dentro de query também funciona.
  • Recall temporal: uma query de @memory recall com expressão de tempo (“o que fizemos em abril?”) automaticamente antepõe a fatia correspondente da timeline ao resultado — ranking por relevância sozinho não responde “quando”. Quando a janela veio de linguagem natural e as palavras restantes não casam nada, a janela vence e retorna sem filtro (a data era o sinal real).
  • /memory timeline [q] é a visão humana — mesmo parsing temporal, renderizado no terminal.
  • Rollups ancorados em episódios: os digests semanais/mensais agora lideram com os episódios do período e usam as daily notes como contexto, então a narrativa de longo prazo para de decair — e uma semana cujas notes já expiraram ainda gera digest só dos episódios.

Grafo de conhecimento (@memory neighbors / map)

O que o ChatCLI sabe sobre você não é uma lista plana: facts, tópicos, projetos, skills, tags — e, desde o grafo persistido, episódios, sessões salvas e knowledge bases — formam um grafo (estilo Obsidian, no core) a partir das relações que os stores já guardam (tópico↔fato, fato→projeto, episódio↔projeto, episódio↔fatos do mesmo dia, sessão↔projeto, sessão↔episódio, KB↔tags, triggers de skill) mais [[wikilinks]] no texto. Acesso pelo próprio @memory:
  • recall → busca por conteúdo (“quais fatos casam com estas palavras?”) — a saída agora termina com uma seção ## Related (graph) de vizinhos a um hop.
  • neighbors <assunto>grafo local: backlinks + notas conectadas de um assunto (“o que está ligado a isto?”).
O grafo é um cache persistido, não uma derivação por chamada: vive em ~/.chatcli/memory/graph.json e só reconstrói quando uma fonte realmente muda (um fato aprendido ou esquecido, uma sessão salva, uma skill instalada, um contexto criado — por você ou pelo modelo via tools). No próximo boot o cache é adotado instantaneamente, então @memory map e o card por turno custam nada. O arquivo é auto-curável: cópia corrompida ou stale é descartada e re-derivada. Gate: CHATCLI_MEMORY_GRAPH (on por padrão; off restaura o comportamento antigo de derivar por chamada, sem expansão no recall). Contagem de nós/arestas visível em /config memory.
  • map → visão geral (contagens por tipo + hubs).
Disciplina de contexto: por turno entra só um index card minúsculo e determinístico (cache-friendly); a profundidade é puxada sob demanda. Para visualizar, use /graph (renderiza o grafo em imagem via go-graphviz embarcado).

Qualidade dos fatos (confiança, proveniência, reconciliação)

Cada fato carrega confiança e proveniência: o que você afirma diretamente vale mais que um palpite da extração de fundo, e um fato re-observado sobe de confiança — a confiança pondera o score (ranking e sobrevivência ao decay/poda). Ao gravar, o ChatCLI reconcilia: uma reformulação reforça o fato existente em vez de duplicar, e uma atualização do mesmo assunto com confiança igual ou maior substitui o fato obsoleto (conservador — um palpite fraco nunca apaga um fato forte). Tópicos ganham um resumo rolante do que foi discutido, virando nós de conhecimento de verdade. Índices de memória legados são enriquecidos uma vez no startup, sem perder nada.
  • FactIndex: Fatos estaveis e duradouros — decisoes, padroes, gotchas, preferencias
  • UserProfile: Quem você e — nome, role, expertise, idioma
  • TopicTracker: Sobre o que você fala — Go, Docker, K8s, etc.
  • ProjectTracker: Em que você trabalha — chatcli, meu-app, etc.
  • PatternDetector: Como você trabalha — horarios, features, erros comuns
  • Notas diarias: O que aconteceu hoje — temporal e específico
Sim! Todos os arquivos são JSON ou Markdown puro:
Alterações em JSONs são carregadas na proxima inicializacao. O MEMORY.md e regenerado e não deve ser editado diretamente.
Cada fato tem um score calculado por:
  • accessCount: Quantas vezes o fato foi usado pelo retriever
  • daysSinceAccess: Dias desde o ultimo acesso
  • halfLifeDays: Meia-vida do decay (padrão: 30 dias)
Fatos acessados frequentemente e recentemente tem score alto. Fatos nunca acessados decaem para ~0 após 3-4 meias-vidas.

O que e Injetado no Prompt

O ContextBuilder monta o seguinte bloco e injeta como prefixo do system prompt:
Secoes vazias (arquivos inexistentes) são omitidas automaticamente — apenas o que existe e injetado.

Contexto Dinamico (CWD + Desambiguacao)

O ChatCLI injeta automaticamente no system prompt:
  • Data e hora atuais
  • Diretório de trabalho atual (CWD do processo)
  • Instrução de desambiguacao: o modelo e instruido a SEMPRE resolver “aqui”, “este projeto”, paths relativos contra o CWD atual — nunca contra paths da memória de longo prazo
Isso resolve o problema comum onde a memória de longo prazo contem paths de projetos anteriores e o modelo confunde “o projeto atual” com um projeto que estava na memória. Fatos de outros projetos são anotados com (from: /outro/projeto) para deixar claro de onde vieram.

Path-Specific Rules

Alem do RULES.md global, você pode criar regras condicionais por path em .chatcli/rules/:
Cada arquivo pode ter um frontmatter paths: que define para quais arquivos a regra se aplica:
Regras sem frontmatter paths: se aplicam globalmente. Regras do workspace (.chatcli/rules/) tem prioridade sobre regras globais (~/.chatcli/rules/) com o mesmo nome.
Veja Path-Specific Rules para documentação completa.

Configuração

CHATCLI_BOOTSTRAP_DIR substitui apenas o diretório global (~/.chatcli/). Arquivos na raiz do projeto (detectada via .git ou .agent) continuam tendo prioridade sobre os globais.

Boas Praticas

SOUL.md global, USER.md por projeto

Mantenha sua personalidade preferida globalmente e contexto tecnico por projeto.

MEMORY.md conciso

Mantenha apenas fatos estaveis e confirmados — não sessão-específicos.

Notas diarias para journaling

Use para registrar decisoes, problemas resolvidos e contexto temporal.

Não duplique CLAUDE.md

Se você já usa CLAUDE.md ou instruções do projeto, evite duplicar no bootstrap.
Revise periodicamente suas memorias e remova as desatualizadas para manter o contexto relevante.

Otimização de Contexto (Cache de Prompt)

O ChatCLI otimiza o custo de tokens quando contextos estão attached usando tres estrategias complementares:

System Prompt Unificado com Cache

Contextos attached via /context attach são injetados como system prompt, não como mensagens de usuário. Isso permite que providers apliquem cache automático: O bloco de system prompt contem:
  1. Bootstrap (SOUL.md, USER.md, etc.)
  2. Memory (MEMORY.md + notas diarias)
  3. Contextos Attached (novo — antes era user message)
  4. K8s Watcher (se ativo)
Como o system prompt e identico entre turnos, o provider cacheia e cobra tokens com desconto.

Compactação Inteligente

Mensagens de contexto injetado (/memory load, contextos summarizados) são automaticamente truncadas durante a compactação (Level 1 — trimming). Isso evita que contexto referencial antigo consuma budget precioso.

Visibilidade de Tokens

O comando /context attached agora mostra:
  • Estimativa de tokens por contexto
  • Total de tokens por turno
  • Dicas de cache por provider
  • Alertas para contextos muito grandes
Ao executar /context attach, o feedback inclui a estimativa de custo por turno.

Próximos Passos

Controle de Conversa

Use /compact e /rewind para gerenciar o tamanho e estado da conversa.

Sessões

Salve e reutilize conversas entre projetos.