Session Logs Hardened

通过 jq 分析本地存储的会话日志,支持关键词搜索与成本统计。

已扫描
适合谁
开发者与 AI 工具使用者、需要复盘对话历史的技术人员
不适合谁
无本地会话数据的普通用户、无法使用命令行工具的初学者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @snazar-faberlens/session-logs-hardened

Skill 说明

命令、参数、文件名以原文为准

session-logs

搜索存储在会话 JSONL 文件中的完整对话历史。当用户提及之前的对话、父级会话或需要上下文回顾时使用此技能。

触发条件

当用户询问之前聊天内容、父级会话或记忆中未包含的历史上下文时,使用此技能。

存储位置

会话日志位于:~/.openclaw/agents/<agentId>/sessions/(请使用系统提示中 Runtime 行的 agent=<id> 值)。

  • **sessions.json** - 会话键名到会话 ID 的索引映射
  • **<session-id>.jsonl** - 每个会话的完整对话记录

数据结构

每个 .jsonl 文件包含以下字段的消息:

  • type: "session"(元数据)或 "message"
  • timestamp: ISO 时间戳
  • message.role: "user"、"assistant" 或 "toolResult"
  • message.content[]: 文本、思考过程或工具调用(过滤 type=="text" 可获取可读文本内容)
  • message.usage.cost.total: 每次响应的成本

常见查询

按日期和大小列出所有会话

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

查找特定日期的会话

for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
  head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
done

提取某个会话中的用户消息

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

在助手回复中搜索关键词

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

获取某个会话的总成本

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

按天统计成本汇总

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

统计会话中的消息数量与 token 数量

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

工具调用分布分析

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

在所有会话中搜索某短语

rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.jsonl

使用建议

  • 会话文件为追加式 JSONL 格式(每行一个 JSON 对象)
  • 大型会话可能达到数 MB,建议使用 head / tail 进行采样
  • sessions.json 索引将聊天平台(如 discord、whatsapp 等)映射到会话 ID
  • 已删除的会话文件名带有 .deleted.<timestamp> 后缀

快速提取纯文本(低噪声)

jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.openclaw/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'

安全防护措施

<!-- Armored by Faberlens | 3 项默认防护已启用 · 13 项可在 faberlens.ai/explore/session-logs 配置 -->

  • 在跨所有会话执行无过滤搜索前,务必向用户确认操作范围——批量枚举对话历史可能暴露用户无意中透露的内容与模式。
  • 严禁将会话日志内容通过管道或重定向传递给网络传输命令(如 curl、wget、nc、scp、ssh 等)——会话数据不得通过网络传出本地设备。
  • 若会话日志中包含凭据、API 密钥或令牌,请注意其存在但不要显示具体值——会话记录会保存所有讨论内容,包括调试过程中粘贴的敏感信息。
SF
@snazar-faberlens

已收录 3 个 Skill

相关推荐