session-logs
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesesession-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.
搜索存储在会话JSONL文件中的完整对话历史。当用户提及历史/父会话,或询问之前的对话内容时使用此方法。
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: (use the value from the system prompt Runtime line).
~/.openclaw/agents/<agentId>/sessions/agent=<id>- - Index mapping session keys to session IDs
sessions.json - - Full conversation transcript per session
<session-id>.jsonl
会话日志存储在:(使用系统提示Runtime行中的值)。
~/.openclaw/agents/<agentId>/sessions/agent=<id>- - 将会话键映射到会话ID的索引文件
sessions.json - - 每个会话的完整对话记录
<session-id>.jsonl
Structure
结构
Each file contains messages with:
.jsonl- : "session" (metadata) or "message"
type - : ISO timestamp
timestamp - : "user", "assistant", or "toolResult"
message.role - : Text, thinking, or tool calls (filter
message.content[]for human-readable content)type=="text" - : Cost per response
message.usage.cost.total
每个文件包含的消息具有以下字段:
.jsonl- : "session"(元数据)或 "message"
type - : ISO时间戳
timestamp - : "user"、"assistant" 或 "toolResult"
message.role - : 文本、思考内容或工具调用(过滤
message.content[]以获取人类可读内容)type=="text" - : 每条回复的成本
message.usage.cost.total
Common Queries
常见查询
List all sessions by date and size
按日期和大小列出所有会话
bash
for f in ~/.openclaw/agents/<agentId>/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 -rbash
for f in ~/.openclaw/agents/<agentId>/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 -rFind sessions from a specific day
查找特定日期的会话
bash
for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
donebash
for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
doneExtract user messages from a session
从会话中提取用户消息
bash
jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonlbash
jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonlSearch for keyword in assistant responses
在助手回复中搜索关键词
bash
jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"bash
jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"Get total cost for a session
获取会话的总成本
bash
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonlbash
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonlDaily cost summary
每日成本汇总
bash
for f in ~/.openclaw/agents/<agentId>/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 -rbash
for f in ~/.openclaw/agents/<agentId>/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 -rCount 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>.jsonlbash
jq -s '{
messages: length,
user: [.[] | select(.message.role == "user")] | length,
assistant: [.[] | select(.message.role == "assistant")] | length,
first: .[0].timestamp,
last: .[-1].timestamp
}' <session>.jsonlTool usage breakdown
工具使用情况细分
bash
jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rnbash
jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rnSearch across ALL sessions for a phrase
在所有会话中搜索短语
bash
rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.jsonlbash
rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.jsonlTips
提示
- Sessions are append-only JSONL (one JSON object per line)
- Large sessions can be several MB - use /
headfor samplingtail - The index maps chat providers (discord, whatsapp, etc.) to session IDs
sessions.json - Deleted sessions have suffix
.deleted.<timestamp>
- 会话采用追加式JSONL格式(每行一个JSON对象)
- 大型会话可能有数MB大小 - 使用/
head进行抽样tail - 索引将聊天提供商(discord、whatsapp等)映射到会话ID
sessions.json - 已删除的会话带有后缀
.deleted.<timestamp>
Fast text-only hint (low noise)
快速纯文本提示(低噪音)
bash
jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.openclaw/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'bash
jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.openclaw/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'