运行时依赖
安装命令
点击复制技能文档
会话日志 搜索存储在会话JSONL文件中的完整对话历史。 当用户引用较旧的对话或询问之前说了什么时使用此功能。 触发器 当用户询问之前的聊天、父对话或历史上下文(不在内存文件中)时使用此技能。 位置 会话日志位于活动状态目录下:$OPENCLAW_STATE_DIR/agents//sessions/(默认:~/.openclaw/agents//sessions/)。 使用系统提示运行时行中的agent=值。 sessions.json - 会话密钥到会话ID的索引映射 .jsonl - 每个会话的完整对话转录 结构 每个.jsonl文件包含具有以下内容的消息: 类型:“会话”(元数据)或“消息” 时间戳:ISO时间戳 message.role:“用户”、“助手”或“toolResult” message.content[]:文本、思考或工具调用(筛选类型=="text"以获取人类可读的内容) message.usage.cost.total:每个响应的成本 常见查询 按日期和大小列出所有会话 AGENT_ID="" SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions" for f in "$SESSION_DIR"/.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 查找特定日期的会话 AGENT_ID="" SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions" for f in "$SESSION_DIR"/.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' .jsonl 在助手响应中搜索关键字 jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' .jsonl | rg -i "keyword" 获取会话的总成本 jq -s '[.[] | .message.usage.cost.total // 0] | add' .jsonl 每日成本摘要 AGENT_ID="" SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions" for f in "$SESSION_DIR"/.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 计算会话中的消息和令牌数 jq -s '{ messages: length, user: [.[] | select(.message.role == "user")] | length, assistant: [.[] | select(.message.role == "assistant")] | length, first: .[0].timestamp, last: .[-1].timestamp }' .jsonl 工具使用情况统计 jq -r '.message.content[]? | select(.type == "toolCall") | .name' .jsonl | sort | uniq -c | sort -rn 在所有会话中搜索短语 AGENT_ID="" SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions" rg -l "phrase" "$SESSION_DIR"/.jsonl 提示 会话是仅追加的JSONL(每行一个JSON对象) 大型会话可以有几MB - 使用head/tail进行采样 sessions.json索引将聊天提供商(discord、whatsapp等)映射到会话ID 已删除的会话具有.deleted.后缀 快速文本仅提示(低噪音) AGENT_ID="" SESSION_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/agents/$AGENT_ID/sessions" jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' "$SESSION_DIR"/.jsonl | rg 'keyword'