diffs
Use the diffs tool to produce real, shareable diffs (viewer URL, file artifact, or both) instead of manual edit summaries.
Search and analyze your own session logs (older/parent conversations) using jq.
$ npx -y skills add evanwangz/vela --skill session-logs --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/session-logsContext preview
The summary Claude sees to decide when to auto-load this skill.
Search and analyze your own session logs (older/parent conversations) using jq.
name: session-logs
description: Search and analyze your own session logs (older/parent conversations) using jq.
metadata:
{
"velaclaw":
{
"emoji": "📜",
"requires": { "bins": ["jq", "rg"] },
"install":
[
{
"id": "brew-jq",
"kind": "brew",
"formula": "jq",
"bins": ["jq"],
"label": "Install jq (brew)",
},
{
"id": "brew-rg",
"kind": "brew",
"formula": "ripgrep",
"bins": ["rg"],
"label": "Install ripgrep (brew)",
},
],
},
}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.
Use this skill when the user asks about prior chats, parent conversations, or historical context that isn't in memory files.
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.
Each `.jsonl` file contains messages with:
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 -rAGENT_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"
donejq -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
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 -rjq -s '{
messages: length,
user: [.[] | select(.message.role == "user")] | length,
assistant: [.[] | select(.message.role == "assistant")] | length,
first: .[0].timestamp,
last: .[-1].timestamp
}' <session>.jsonljq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn
AGENT_ID="<agentId>"
SESSION_DIR="${VELACLAW_STATE_DIR:-$HOME/.velaclaw}/agents/$AGENT_ID/sessions"
rg -l "phrase" "$SESSION_DIR"/*.jsonlAGENT_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'Use the diffs tool to produce real, shareable diffs (viewer URL, file artifact, or both) instead of manual edit summaries.
Maintain an Obsidian-friendly memory wiki vault with wikilinks, frontmatter, and official Obsidian CLI awareness.
Maintain the Velaclaw memory wiki vault with deterministic pages, managed blocks, and source-backed updates.
Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or…
Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage:…