dig
/dig - Session Goldminer
Mine Claude Code session data for timelines, gaps, and repo attribution. No query needed.
Usage
/dig # Current repo, 10 most recent
/dig [N] # Current repo, N most recent
/dig --all # All repos, ALL sessions (auto-detect count)
/dig --all [N] # All repos, N most recent
/dig --timeline # Day-by-day grouped (current repo)
/dig --all --timeline # Day-by-day grouped (all repos, ALL sessions)
Step 0: Timestamp
date "+🕐 %H:%M %Z (%A %d %B %Y)"
Step 1: Discover Project Dirs
Default (current repo only):
PROJECT_BASE=$(ls -d "$HOME/.claude/projects/"*"$(basename "$(pwd)")" 2>/dev/null | head -1)
export PROJECT_DIRS="$PROJECT_BASE"
for wt in "${PROJECT_BASE}"-wt*; do [ -d "$wt" ] && export PROJECT_DIRS="$PROJECT_DIRS:$wt"; done
Uses basename of pwd to match the repo name suffix (avoids github.com vs github-com encoding mismatch). Also picks up worktree dirs (-wt, -wt-1, etc.).
With --all (all repos):
export PROJECT_DIRS=$(ls -d "$HOME/.claude/projects/"*/ | tr '\n' ':')
Step 2: Extract Session Data
Run the dig script. Pass 0 for --all (no limit), or N if user specified a count, default 10:
python3 ~/.claude/skills/dig/scripts/dig.py [N]
# N=10 (default), N=0 (scan all sessions), N=50 (50 most recent)
Step 3: Display Timeline
Read the JSON output and display as a table. Sessions are chronological (oldest first). Gap rows (type: "gap") span the session column with · · · prefix:
## Session Timeline
| # | Date | Session | Min | Repo | Msgs | Focus |
|---|------|---------|-----|------|------|-------|
| | | · · · sleeping / offline | | | | |
| 1 | 02-21 | 08:40–09:08 | 28m | oracle-skills-cli | 5 | Wire /rrr to read pulse data |
| | | · · · 45m gap | | | | |
| 2 | 02-21 | 09:55–10:23 | 28m | homelab | 3 | oracle-pulse birth + CLI flag |
| | | · · · no session yet | | | | |
**Dirs scanned**: [list PROJECT_DIRS]
**Total sessions found**: [count]
Column rendering rules:
- Gap rows:
| | | · · · [label] | | | | |— number + date empty, label in Session col - Date:
MM-DDshort format (strip year) - Session:
HH:MM–HH:MMusingstartGMT7andendGMT7(strip date, keep time only) - Min:
[durationMin]m - Repo: use
repoNamefield from dig.py output (resolved via ghq) - Msgs:
realHumanMessagescount
"Msgs" = real typed human messages (not tool approvals).
With --timeline: Group by Date
When --timeline flag is present, group sessions by date instead of a flat table. Use --all to see all repos (recommended for timeline).
Step 1: Run dig.py with 0 for --all (scans all sessions), or user-specified count
Step 2: Group sessions by date from startGMT7. Render each day as:
## Feb 22 (Sun) — [vibe label]
· · · sleeping / offline
08:48–09:11 23m homelab Update Fleet Runbook + Explore black.local
09:11–11:30 139m homelab Set Up KVM OpenClaw Node on black.local
09:37–12:51 194m Nat-s-Agents /recap → supergateway → CF ZT → arra-oracle dig
· · · 45m gap
12:51–13:03 12m Nat-s-Agents Dig All + Design arra-oracle ← current
· · · no session yet
## Feb 21 (Sat) — Long day: Fleet + Brewing + Skills
06:19–08:38 139m homelab Moltworker Gateway + MBP Node
08:40 (bg) openclaw ClawHub Build Script (idle long)
09:23–16:08 405m homelab Debug MBP Node 401 — Gateway Token Auth
Rendering rules:
- Day header:
## MMM DD (Day) — [vibe label]— infer vibe from session summaries (e.g. "Infrastructure Day", "Brewing + Skills") - Session rows:
HH:MM–HH:MM [N]m REPO Summary— userepoNamefor repo,summaryfor focus - Gap rows:
· · · [label]between sessions when gap > 30 min - Sidechain: prefix
(bg)for sessions withisSidechain: true - Current: append
← currentmarker on the last session of the current day (today only) - Sort: days newest-first, sessions within each day oldest-first (chronological)
- Date format:
startGMT7time portion only (HH:MM),endGMT7time portion (HH:MM) - Repo width: pad repo names to align columns
Step 3: Show summary footer:
**Days**: [count] | **Sessions**: [count] | **Total time**: [sum of durationMin]m
No trace log
/dig does NOT write a trace log file or call oracle_trace. It's a read-only scan. Output goes to screen only.
ARGUMENTS: $ARGUMENTS
More from soul-brews-studio/oracle-skills-cli
philosophy
Display Oracle philosophy — the 5 Principles + Rule 6. Use when user asks about principles, "nothing deleted", "patterns over intentions", Oracle philosophy, or needs alignment check. Do NOT trigger for "who are you" (use /who-are-you), "what is oracle" (use /about-oracle), or session status questions.
50feel
Capture how the system feels — energy, momentum, burnout, breakthrough. Emotional intelligence for Oracle-human collaboration. Use when user says 'feel', 'how are we', 'energy check', 'burnout', 'momentum', or wants emotional awareness of the work.
36worktree
Work in an isolated git worktree — safe parallel editing, experimental branches, throwaway spikes. Use when user says "worktree", "isolate", "safe branch", "spike", "experiment", or wants to work without touching main.
29template
Skill template with Bun Shell pattern. Copy this folder to create new skills.
29schedule
Query schedule via Oracle API (Drizzle DB). Use when user says "schedule", "upcoming events", "what's on today", "calendar".
29forward
Create handoff + enter plan mode for next session. Use when user says "forward", "handoff", "wrap up", or before ending session.
29