Skip to main content
/dash abre no navegador um grafo ao vivo do runtime. Cada agent, cada requisição de LLM, cada chamada de tool, cada skill que ativa, cada servidor MCP, cada padrão do harness que dispara, cada job em background e cada conexão de saída é um nó; uma aresta pulsa toda vez que algo acontece nela. É telemetria de ponta a ponta sem configuração: sem collector, sem agente, sem conta. Vem desligada por padrão e não custa nada enquanto está desligada.
Dash ao vivo do ChatCLI: grafo de agents, LLM, tools, skills, servidores MCP, padrões do harness, trabalho em background e conexões

Uma faixa por processo. Os agents formam uma árvore pelo pai real; tudo o que eles usam é um hub com contadores, latência e estado. (Dados sintéticos.)


Como abrir

/dash funciona com um turno rodando (digite no meio da execução) e via ACP, onde o endereço volta para o chat da IDE.
O navegador só abre a partir de um terminal interativo. De um daemon, de um pipe ou de uma IDE, o endereço é impresso.

Ela enxerga todos os processos, não só este

Abrir a dash faz todo processo chatcli da máquina começar a reportar: o REPL onde você digitou /dash, um segundo terminal, o daemon do gateway, o agent ACP dentro da sua IDE, o servidor MCP que outro cliente está dirigindo, o daemon do scheduler. Cada um é uma faixa na página. É para isso que existe o chatcli dash: o agent ACP, o servidor MCP e os daemons não têm prompt onde digitar /dash, e o stdout deles é um stream de protocolo. Uma dash em outro terminal é a única janela para dentro deles.

Como a gravação liga e desliga

  1. Quem serve uma dash mantém renovado um pequeno arquivo de lease em ~/.chatcli/pulse/.
  2. Todo processo chatcli confere esse lease a cada dois segundos. Enquanto ele não expira, o processo grava no próprio spool.
  3. O lease só é renovado enquanto um navegador está de fato consultando. Feche a aba e, cerca de 30 segundos depois, todos os processos voltam ao silêncio sozinhos. Nada fica ligado por acidente.
Para gravar desde o boot sem esperar uma dash (útil nas superfícies sem prompt), defina:
Ela é lida ao vivo: mudar no .env passa a valer no /reload.

O que você vê

Sessões e agents são um nó cada, ligados pelo pai real, então um dispatch multi-agent aparece como árvore. Todo o resto é um hub agregado por nome (a tool @coder, o servidor MCP github, o padrão self-refine) mostrando chamadas, quantas estão ativas agora, erros e latência média. O grafo fica estável e dispara, em vez de explodir em um nó por chamada.

Os sete padrões, com desfecho

Self-Refine, CoVe e Reflexion rodam em silêncio: reescrevem a saída de um worker, marcam uma discrepância ou enfileiram uma lição sem imprimir uma linha. A dash mostra não só que o padrão disparou, mas o que ele concluiu. Um padrão desligado, ou cujos guards rejeitam o resultado, não fez nada e fica apagado.
Os rótulos de desfecho são fixos e em inglês: são escolhidos pelo código, nunca são saída do modelo.

Coisas fáceis de não perceber sem ela

  • Uma compaction parece um travamento. A compaction do histórico resume a conversa com uma chamada de LLM própria e segura o turno pelo tempo que isso levar. Na dash ela é um span compaction que termina com applied ou skipped.
  • Um diálogo de permissão que ninguém respondeu. Via ACP/MCP ele aparece como uma chamada client:session/request_permission que não termina.
  • O dev server que você subiu há uma hora. Os processos do @proc são reapresentados quando a dash abre, então aparecem mesmo tendo começado muito antes.
  • Qual worker gastou as requisições. Cada requisição de LLM fica pendurada no agent que a fez.

Usando a página

Arraste para mover, role para dar zoom, 0 ou Ajustar para enquadrar, Espaço ou Pausar para congelar, clique num nó para ver detalhes. Os chips no topo mostram e escondem processos; a legenda embaixo mostra e esconde tipos de nó. A página segue o tema e o idioma do seu terminal. Uma dash aberta no meio de uma execução começa pelo que está vivo agora (agents rodando, servidores MCP conectados, processos em background), e não do vazio.

Privacidade e segurança

Os eventos levam só metadados: nomes, tamanhos, durações, status, contagens de tokens. O que segue nunca sai do processo, e há teste garantindo cada item:
  • texto de prompt, a task dada a um agent, saída do modelo, texto de erro
  • argumentos e saída de tool, argumentos e resultados de chamada MCP
  • caminhos de arquivo tocados por uma tool
  • caminho e query string de URL (onde viajam chaves de API e tokens de bot): só o hostname é mostrado
  • a linha de comando de um processo: só o nome do programa, e só quando a primeira palavra é um programa e não uma atribuição VAR=valor
  • a URL do browser ou qualquer coisa de uma página; o payload, a mensagem ou a saída de um job agendado
O servidor é local, mas não é aberto. Ele sobe em 127.0.0.1 numa porta efêmera e, além disso:
  • toda chamada de API exige um token aleatório gerado no start. Ele chega à página pelo endereço uma única vez, vai para a memória e some da barra de endereço;
  • toda requisição precisa trazer o Host exato em que o servidor subiu, o que fecha DNS rebinding a partir de uma página web;
  • GET, Content-Security-Policy estrita, sem CDN, sem chamadas de rede.
A dash é um observador somente leitura: lê o spool do disco e não guarda estado. Fechar, recarregar ou abrir uma segunda aba nunca afeta uma sessão em andamento.

Custo

Com a dash desligada, cada ponto instrumentado custa um load atômico, e o processo faz um stat a cada dois segundos para conferir o lease. Nenhum span é montado, nenhum corpo é embrulhado. Gravando, emitir nunca bloqueia: fila cheia descarta o evento e conta o descarte, e um consumidor lento perde eventos em vez de atrasar os outros. /dash status e /config dash mostram publicados e descartados.

Armazenamento

Cada processo grava em ~/.chatcli/pulse/<instância>/ em segmentos rotacionados por tamanho, limitados a cerca de 16 MB por processo, com um heartbeat que separa processos vivos de mortos. Spools de processos mortos são removidos após 24 horas, no boot e sob demanda:
Um processo que ainda está gravando nunca é candidato. Veja /storage na referência de comandos.

Configuração

/config dash mostra a variável, se este processo está gravando, o diretório do spool e os contadores de eventos.

Relação com o resto da observabilidade