‹ 首页

session-logs

@zavianx · 收录于 5 天前 · 上游提交 2 个月前

Search and analyze your own session logs (older/parent conversations) using jq.

适合你,如果需要从大量历史对话中快速查找和提取信息

/ 通过 npx 安装 校验哈希
npx oh-my-skill add zavianx/vela/session-logs
/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- zavianx/vela/session-logs
/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify zavianx/vela/session-logs
安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
122GitHub stars
~981上下文体积 · 单文件
索引托管

怎么用

商店整理自技能原文 · 版本 bd323cc · 表述以原文为准
它做什么

安装后,Claude 能够使用 jq 和 ripgrep 工具搜索和分析本地存储的完整对话历史记录(JSONL 格式),例如列出所有会话、按日期查找、提取特定角色的消息、搜索关键词、计算成本等。

什么时候触发

当用户询问之前的聊天记录、父对话或不在内存文件中的历史上下文时触发。

装好后可以这样说
Claude 会在所有会话文件中搜索关键词并返回结果。
Claude 会遍历会话目录,输出每个会话的日期和大小。
Claude 会计算该会话中所有消息的成本之和。
技能原文 SKILL.md作者撰写 · MIT · bd323cc

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 under the active state directory: $VELACLAW_STATE_DIR/agents/<agentId>/sessions/ (default: ~/.velaclaw/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
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
Common Queries
List all sessions by date and size
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/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
Find sessions from a specific day
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/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
Extract user messages from a session
jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl
Search for keyword in assistant responses
jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"
Get total cost for a session
jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl
Daily cost summary
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/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
Count messages and tokens in a session
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
jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn
Search across ALL sessions for a phrase
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/agents/$AGENT_ID/sessions"
rg -l "phrase" "$SESSION_DIR"/*.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
Fast text-only hint (low noise)
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/agents/$AGENT_ID/sessions"
jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' "$SESSION_DIR"/<id>.jsonl | rg 'keyword'
按 MIT 许可原样转载,未经改动 · 在 GitHub 查看 →

评论

登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。