CommunityCodierung & Entwicklunggithub.com

session-logs

Durchsucht und analysiert deine eigenen Sitzungsprotokolle (ältere/übergeordnete Konversationen) mit jq.

Was ist session-logs?

Diese Fähigkeit ermöglicht es einem KI-Agenten, den vollständigen Konversationsverlauf zu durchsuchen und zu analysieren, der in session-JSONL-Dateien gespeichert ist. Sie ist besonders nützlich, wenn Benutzer sich auf frühere Chats, übergeordnete Konversationen oder historischen Kontext beziehen, der nicht in Speicherdateien vorhanden ist. Die Fähigkeit unterstützt mehrere Plattformen, die das OpenClaw-Agenten-Framework verwenden, und arbeitet mit dem aktiven Zustandsverzeichnis ($OPENCLAW_STATE_DIR). Sie enthält detaillierte Abfragebeispiele mit jq für häufige Aufgaben wie das Auflisten von Sitzungen nach Datum und Größe, das Extrahieren von Benutzernachrichten, das Suchen nach Schlüsselwörtern in Assistentenantworten, die Kostenverfolgung und die Aufschlüsselung der Werkzeugnutzung. Die Dokumentation erklärt auch die Dateistruktur, einschließlich aktiver Sitzungstranskripte (.jsonl), archivierter Reset-Transkripte (.jsonl.reset.<timestamp>Z) und gelöschter Sitzungstranskripte (.jsonl.deleted.<timestamp>Z), die alle durchsuchbar sind. Es werden Tipps zur effizienten Abfrage großer Sitzungen, zur Einbeziehung archivierter Transkripte und zur Verwendung der schnellen Text-only-Herangehensweise mit geringerem Rauschen gegeben.

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

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Sitzungsprotokolle

Durchsuche deinen vollständigen Konversationsverlauf, der in Sitzungs-JSONL-Dateien gespeichert ist. Verwende diese Fähigkeit, wenn ein Benutzer sich auf ältere/übergeordnete Konversationen bezieht oder fragt, was zuvor gesagt wurde.

Auslöser

Verwende diese Fähigkeit, wenn der Benutzer nach früheren Chats, übergeordneten Konversationen oder historischem Kontext fragt, der nicht in Speicherdateien vorhanden ist.

Speicherort

Sitzungsprotokolle befinden sich im aktiven Zustandsverzeichnis: $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/ (Standard: ~/.openclaw/agents/<agentId>/sessions/). Verwende den Wert agent=<id> aus der Runtime-Zeile des System-Prompts.

  • sessions.json – Index, der Sitzungsschlüssel auf Sitzungs-IDs abbildet
  • <session-id>.jsonl – Vollständiges Gesprächstranskript pro Sitzung
  • <session-id>.jsonl.reset.<timestamp>Z – Transkript, das durch /new oder /reset archiviert wurde
  • <session-id>.jsonl.deleted.<timestamp>Z – Transkript, das archiviert wurde, als eine Sitzung gelöscht wurde

Wenn du im Verlauf suchst, beziehe auch die archivierten Varianten (.reset.*, .deleted.*) mit ein – sie enthalten immer noch echten Gesprächsinhalt. Die unten gezeigten einfachen Glob-Beispiele erfassen nur die aktiven *.jsonl-Dateien; verwende das Code-Snippet „Archivierte Transkripte einbeziehen“, wenn du eine vollständige Rückverfolgung benötigst.

Struktur

Jede .jsonl-Datei enthält Nachrichten mit:

  • type: „session“ (Metadaten) oder „message“
  • timestamp: ISO-Zeitstempel
  • message.role: „user“, „assistant“ oder „toolResult“
  • message.content[]: Text, Gedanken oder Tool-Aufrufe (filtere type=="text" für menschenlesbaren Inhalt)
  • message.usage.cost.total: Kosten pro Antwort

Häufige Abfragen

Archivierte Transkripte einbeziehen (.reset.*, .deleted.*)

# Bash-Helfer, der jeden durchsuchbaren Transkriptpfad ausgibt – aktiv und archiviert.
# Speichert und stellt `nullglob` lokal wieder her, damit die Shell-Optionen des Aufrufers nicht beeinträchtigt werden.
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"
}

Verwende list_session_transcripts (oder einen entsprechenden find-Aufruf) anstelle des einfachen *.jsonl-Globs, der unten gezeigt wird, wenn du archivierte Sitzungen einbeziehen möchtest:

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

Alle Sitzungen nach Datum und Größe auflisten

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

Tipp: Ersetze die for f in ...-Zeile durch eine while-read-Schleife über list_session_transcripts (siehe Code-Snippet oben), wenn du auch archivierte .reset- / .deleted-Dateien in der Auflistung haben möchtest. Das while-read-Muster ist sicher für Pfade mit Leerzeichen oder anderen IFS-Zeichen:

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

Sitzungen von einem bestimmten Tag finden

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

Benutzernachrichten aus einer Sitzung extrahieren

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

Nach Schlüsselwort in Assistentenantworten suchen

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

Gesamtkosten für eine Sitzung abrufen

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

Tägliche Kostenübersicht

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

Nachrichten und Token in einer Sitzung zählen

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

Aufschlüsselung der Tool-Nutzung

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

Suche in ALLEN Sitzungen nach einem Begriff

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

# Nur aktive Sitzungen:
rg -l "begriff" "$SESSION_DIR"/*.jsonl

# Aktive + archivierte (`.reset.*`, `.deleted.*`) – verwende dies, wenn du nach
# Inhalten suchst, die möglicherweise komprimiert/zurückgesetzt/gelöscht wurden:
rg -l "begriff" "$SESSION_DIR"/*.jsonl \
               "$SESSION_DIR"/*.jsonl.reset.*Z \
               "$SESSION_DIR"/*.jsonl.deleted.*Z 2>/dev/null

Tipps

  • Sitzungen sind Append-Only-JSONL (ein JSON-Objekt pro Zeile)
  • Große Sitzungen können mehrere MB groß sein – verwende head/tail zum Stichprobenziehen
  • Der Index sessions.json bildet Chat-Anbieter (discord, whatsapp usw.) auf Sitzungs-IDs ab
  • Zurückgesetzte/komprimierte Sitzungen haben das Suffix .jsonl.reset.<timestamp>Z – enthalten immer noch vollständige Transkripte und sind durchsuchbar.
  • Gelöschte Sitzungen haben das Suffix .jsonl.deleted.<timestamp>Z – ebenfalls noch durchsuchbar.
  • Ein einfacher *.jsonl-Glob übersieht beide archivierten Formen. Beziehe sie explizit ein (siehe Code-Snippet „Archivierte Transkripte einbeziehen“ oben), wenn du die vollständige Historie benötigst.

Schneller Text-only-Hinweis (weniger Rauschen)

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 'schlüsselwort'

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 and agent Templates when requested; add Templates; install, verify, update, uninstall, publish, or sync skills.

Verwandte Skills