session-logs

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

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.
搜索存储在会话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:
~/.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
会话日志存储在:
~/.openclaw/agents/<agentId>/sessions/
(使用系统提示Runtime行中的
agent=<id>
值)。
  • sessions.json
    - 将会话键映射到会话ID的索引文件
  • <session-id>.jsonl
    - 每个会话的完整对话记录

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
每个
.jsonl
文件包含的消息具有以下字段:
  • type
    : "session"(元数据)或 "message"
  • timestamp
    : ISO时间戳
  • message.role
    : "user"、"assistant" 或 "toolResult"
  • 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 -r
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 -r

Find 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"
done
bash
for f in ~/.openclaw/agents/<agentId>/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[]? | select(.type == "text") | .text' <session>.jsonl
bash
jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl

Search 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>.jsonl
bash
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl

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

Search across ALL sessions for a phrase

在所有会话中搜索短语

bash
rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.jsonl
bash
rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.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
  • 会话采用追加式JSONL格式(每行一个JSON对象)
  • 大型会话可能有数MB大小 - 使用
    head
    /
    tail
    进行抽样
  • sessions.json
    索引将聊天提供商(discord、whatsapp等)映射到会话ID
  • 已删除的会话带有
    .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'