| name | session-logs |
| description | Search and analyze your own session logs (older/parent conversations) using jq. |
| metadata | {"all_agents":{"emoji":"📜","requires":{"bins":["jq","rg"]}}} |
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 at: ~/.all-agents/sessions/.
<session-id>.jsonl - Full conversation transcript per session
- Channel sessions use IDs like
channel:telegram:main:<chat-id>.jsonl or channel:telegram:main:<chat-id>:<suffix>.jsonl
Structure
Each .jsonl file contains messages with:
ts: ISO timestamp
role: user, assistant, or tool
content: message text or serialized tool result JSON
meta: metadata such as tool_call_id, tool_name, compaction, or followup fields
Common Queries
List all sessions by date and size
for f in ~/.all-agents/sessions/*.jsonl; do
date=$(head -1 "$f" | jq -r '.ts' | cut -dT -f1)
size=$(ls -lh "$f" | awk '{print $5}')
echo "$date $size $(basename $f)"
done | sort -r
Find sessions from a specific day
for f in ~/.all-agents/sessions/*.jsonl; do
head -1 "$f" | jq -r '.ts' | grep -q "2026-01-06" && echo "$f"
done
Extract user messages from a session
jq -r 'select(.role == "user") | .content' <session>.jsonl
Search for keyword in assistant responses
jq -r 'select(.role == "assistant") | .content' <session>.jsonl | rg -i "keyword"
Count tool results in a session
jq -s '[.[] | select(.role == "tool")] | length' <session>.jsonl
Daily assistant-message summary
for f in ~/.all-agents/sessions/*.jsonl; do
date=$(head -1 "$f" | jq -r '.ts' | cut -dT -f1)
count=$(jq -s '[.[] | select(.role == "assistant")] | length' "$f")
echo "$date $count"
done | awk '{a[$1]+=$2} END {for(d in a) print d, a[d] " assistant messages"}' | sort -r
Count messages in a session
jq -s '{
messages: length,
user: [.[] | select(.role == "user")] | length,
assistant: [.[] | select(.role == "assistant")] | length,
tool: [.[] | select(.role == "tool")] | length,
first: .[0].ts,
last: .[-1].ts
}' <session>.jsonl
Tool usage breakdown
jq -r 'select(.role == "tool") | .meta.tool_name // "unknown"' <session>.jsonl | sort | uniq -c | sort -rn
Search across ALL sessions for a phrase
rg -l "phrase" ~/.all-agents/sessions/*.jsonl
Tips
- Sessions are append-only JSONL (one JSON object per line)
- Large sessions can be several MB - use
head/tail for sampling
- Use
all-agents sessions list and all-agents sessions show <session-id> for CLI access
Fast text-only hint (low noise)
jq -r 'select(.role=="user" or .role=="assistant") | .content' ~/.all-agents/sessions/<id>.jsonl | rg 'keyword'