logs-de-sessão

Pesquise e analise seus próprios logs de sessão (conversas anteriores/pais) usando jq.

O que é logs-de-sessão?

Esta habilidade permite que um agente de IA pesquise e analise seu histórico completo de conversas armazenado em arquivos JSONL de sessão. Ela é útil quando um usuário faz referência a conversas mais antigas, pais ou contexto histórico que não está presente nos arquivos de memória. A habilidade é projetada para funcionar com a estrutura de diretórios de estado do OpenClaw, onde as sessões são armazenadas como arquivos JSONL. Ela usa `jq` para consultar e analisar as conversas, fornecendo uma maneira poderosa de extrair informações, calcular custos e encontrar padrões. A habilidade suporta a inclusão de transcrições arquivadas (`.reset.*`, `.deleted.*`) para pesquisa completa do histórico.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/skills/session-logs

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que logs-de-sessão faz?

Pesquise seu histórico completo de conversas armazenado em arquivos JSONL de sessão. Use esta habilidade quando um usuário fizer referência a conversas mais antigas, conversas pai ou contexto histórico que não está em arquivos de memória.

Gatilho

Use esta habilidade quando o usuário perguntar sobre conversas anteriores, conversas pai ou contexto histórico que não está em arquivos de memória.

Localização

Os logs de sessão estão localizados no diretório de estado ativo: $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/ (padrão: ~/.openclaw/agents/<agentId>/sessions/). Use o valor agent=<id> da linha Runtime do prompt do sistema.

  • sessions.json - Índice mapeando chaves de sessão para IDs de sessão
  • <session-id>.jsonl - Transcrição completa da conversa por sessão
  • <session-id>.jsonl.reset.<timestamp>Z - Transcrição arquivada por /new ou /reset
  • <session-id>.jsonl.deleted.<timestamp>Z - Transcrição arquivada quando uma sessão foi deletada

Ao pesquisar o histórico, inclua também as variantes arquivadas (.reset.*, .deleted.*) — elas ainda contêm conteúdo real de conversa. Os exemplos de glob simples abaixo capturam apenas os arquivos *.jsonl ativos; use o trecho "Incluir transcrições arquivadas" quando precisar de recuperação completa.

Estrutura

Cada arquivo .jsonl contém mensagens com:

  • type: "session" (metadados) ou "message" (mensagem)
  • timestamp: timestamp ISO
  • message.role: "user" (usuário), "assistant" (assistente) ou "toolResult" (resultado de ferramenta)
  • message.content[]: Texto, pensamentos ou chamadas de ferramenta (filtre type=="text" para conteúdo legível por humanos)
  • message.usage.cost.total: Custo por resposta

Consultas Comuns

Incluir transcrições arquivadas (.reset.*, .deleted.*)

# Auxiliar Bash que emite cada caminho de transcrição pesquisável — ativa e arquivada.
# Salva e restaura `nullglob` localmente para que as opções do shell do chamador
# não sejam perturbadas.
AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
list_session_transcripts() {
  local _nullglob_state
  _nullglob_state=$(shopt -p nullglob 2>/dev/null)
  shopt -s nullglob
  for f in "$SESSION_DIR"/*.jsonl \
           "$SESSION_DIR"/*.jsonl.reset.*Z \
           "$SESSION_DIR"/*.jsonl.deleted.*Z; do
    [ -f "$f" ] && printf '%s\n' "$f"
  done
  eval "$_nullglob_state"
}

Use list_session_transcripts (ou uma invocação find equivalente) sempre que o glob simples *.jsonl for mostrado abaixo, se você precisar incluir sessões arquivadas:

find "$SESSION_DIR" -maxdepth 1 -type f \
  \( -name '*.jsonl' -o -name '*.jsonl.reset.*Z' -o -name '*.jsonl.deleted.*Z' \) -print

Listar todas as sessões por data e tamanho

AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
for f in "$SESSION_DIR"/*.jsonl; do
  date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
  size=$(ls -lh "$f" | awk '{print $5}')
  echo "$date $size $(basename $f)"
done | sort -r

Dica: troque a linha for f in ... por um while-read sobre list_session_transcripts (veja trecho acima) quando você também quiser arquivos .reset / .deleted arquivados na listagem. O padrão while-read é seguro para caminhos com espaços ou outros caracteres IFS:

while IFS= read -r f; do
  date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
  size=$(ls -lh "$f" | awk '{print $5}')
  echo "$date $size $(basename "$f")"
done < <(list_session_transcripts) | sort -r

Encontrar sessões de um dia específico

AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
for f in "$SESSION_DIR"/*.jsonl; do
  head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
done

Extrair mensagens do usuário de uma sessão

jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl

Pesquisar palavra-chave nas respostas do assistente

jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"

Obter custo total de uma sessão

jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl

Resumo de custo diário

AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
for f in "$SESSION_DIR"/*.jsonl; do
  date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
  cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f")
  echo "$date $cost"
done | awk '{a[$1]+=$2} END {for(d in a) print d, "$"a[d]}' | sort -r

Contar mensagens e tokens em uma sessão

jq -s '{
  messages: length,
  user: [.[] | select(.message.role == "user")] | length,
  assistant: [.[] | select(.message.role == "assistant")] | length,
  first: .[0].timestamp,
  last: .[-1].timestamp
}' <session>.jsonl

Detalhamento de uso de ferramentas

jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn

Pesquisar em TODAS as sessões por uma frase

AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"

# Apenas sessões ativas:
rg -l "phrase" "$SESSION_DIR"/*.jsonl

# Sessões ativas + arquivadas (`.reset.*`, `.deleted.*`) — use isso ao verificar
# conteúdo que pode ter sido compactado/resetado/deletado:
rg -l "phrase" "$SESSION_DIR"/*.jsonl \
               "$SESSION_DIR"/*.jsonl.reset.*Z \
               "$SESSION_DIR"/*.jsonl.deleted.*Z 2>/dev/null

Dicas

  • As sessões são JSONL somente anexo (um objeto JSON por linha)
  • Sessões grandes podem ter vários MB - use head/tail para amostragem
  • O índice sessions.json mapeia provedores de chat (discord, whatsapp, etc.) para IDs de sessão
  • Sessões resetadas/compactadas têm sufixo .jsonl.reset.<timestamp>Z — ainda contêm transcrições completas e são pesquisáveis.
  • Sessões deletadas têm sufixo .jsonl.deleted.<timestamp>Z — também ainda pesquisáveis.
  • Um glob simples *.jsonl vai perder ambas as formas arquivadas. Inclua-as explicitamente (veja o trecho "Incluir transcrições arquivadas" acima) quando precisar do histórico completo.

Dica rápida somente texto (baixo ruído)

AGENT_ID="<agentId>"
SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' "$SESSION_DIR"/<id>.jsonl | rg 'keyword'

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills when explicitly requested; install, verify, update, uninstall, publish, or sync skills.

Habilidades Relacionadas