session-logs
Search your complete conversation history stored in session JSONL files. Use this when you need to recall something not in your memory files.
Location
Session logs live at: ~/.surprisebot/agents/main/sessions/
- •
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 - •
message.usage.cost.total: Cost per response
Common Queries
List all sessions by date and size
bash
for f in ~/.surprisebot/agents/main/sessions/*.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
bash
for f in ~/.surprisebot/agents/main/sessions/*.jsonl; do head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f" done
Extract user messages from a session
bash
jq -r 'select(.message.role == "user") | .message.content[0].text' <session>.jsonl
Search for keyword in assistant responses
bash
jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | grep -i "keyword"
Get total cost for a session
bash
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl
Daily cost summary
bash
for f in ~/.surprisebot/agents/main/sessions/*.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
bash
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
bash
jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn
Search across ALL sessions for a phrase
bash
grep -l "phrase" ~/.surprisebot/agents/main/sessions/*.jsonl
Tips
- •Sessions are append-only JSONL (one JSON object per line)
- •Large sessions can be several MB - use
head/tailfor sampling - •The
sessions.jsonindex maps chat providers (discord, whatsapp, etc.) to session IDs - •Deleted sessions have
.deleted.<timestamp>suffix