Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    charleshoskinson

    session-logs

    charleshoskinson/session-logs
    Data & Analytics
    17
    1 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Search and analyze your own session logs (older/parent conversations) using jq.

    SKILL.md

    session-logs

    Search your complete conversation history stored in session JSONL files. Use this when a user references older/parent conversations or asks what was said before.

    Trigger

    Use this skill when the user asks about prior chats, parent conversations, or historical context that isn't in memory files.

    Location

    Session logs live under the active state directory: $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/ (default: ~/.openclaw/agents/<agentId>/sessions/). Use the agent=<id> value from the system prompt Runtime line.

    • sessions.json - Index mapping session keys to session IDs
    • <session-id>.jsonl - Full conversation transcript per session

    Structure

    Each .jsonl file contains messages with:

    • type: "session" (metadata) or "message"
    • timestamp: ISO timestamp
    • message.role: "user", "assistant", or "toolResult"
    • message.content[]: Text, thinking, or tool calls (filter type=="text" for human-readable content)
    • message.usage.cost.total: Cost per response

    Common Queries

    List all sessions by date and size

    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
    

    Find sessions from a specific day

    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
    

    Extract user messages from a session

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

    Search for keyword in assistant responses

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

    Get total cost for a session

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

    Daily cost summary

    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
    

    Count messages and tokens in a session

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

    Tool usage breakdown

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

    Search across ALL sessions for a phrase

    AGENT_ID="<agentId>"
    SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions"
    rg -l "phrase" "$SESSION_DIR"/*.jsonl
    

    Tips

    • Sessions are append-only JSONL (one JSON object per line)
    • Large sessions can be several MB - use head/tail for sampling
    • The sessions.json index maps chat providers (discord, whatsapp, etc.) to session IDs
    • Deleted sessions have .deleted.<timestamp> suffix

    Fast text-only hint (low noise)

    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'
    
    Recommended Servers
    Metaview
    Metaview
    Vercel
    Vercel
    Granola
    Granola
    Repository
    charleshoskinson/danceswithclaws
    Files