用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/majiayu000/claude-skill-registry --skill session-list命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | session-list |
| description | List all past development sessions with summaries and timestamps |
| disable-model-invocation | false |
List all development sessions by:
.claude/sessions/ directory exists.md files (excluding hidden files and .current-session).claude/sessions/.current-session exists, highlight which session is currently activePresent in a clean, readable format.
Status: ✅ Fully Optimized (Phase 2 Batch 4A, 2026-01-27) Target: 70-80% reduction Baseline: 2,000-3,500 tokens → Optimized: 500-1,000 tokens
# OPTIMIZED: Use Bash ls/grep for efficient directory listing
ls -lt .claude/sessions/*.md 2>/dev/null | grep -v '.current-session'
# AVOID: Glob + Read pattern (reads all files unnecessarily)
# Glob: .claude/sessions/*.md
# Read: each file to extract metadata
Why this works:
ls -lt provides sorted list with timestamps (no parsing needed)# OPTIMIZED: Parse metadata from filename structure
# Format: YYYY-MM-DD-HH-MM-session-name.md
# Example: 2026-01-27-14-30-feature-auth.md
basename filename .md | sed 's/-/ /g'
# AVOID: Reading file headers for metadata
# Each file read: 100-500 tokens
# Filename parsing: 10-20 tokens
Session metadata from filename:
# OPTIMIZED: Show list view without content
echo "Session: feature-auth"
echo "Date: 2026-01-27 14:30"
echo "Status: completed"
# AVOID: Reading and displaying session content
# Content can be 500-2000 tokens per session
# List view: 20-50 tokens per session
Progressive disclosure approach:
// Cache: .claude/sessions/.session-index.json
{
"last_scan": "2026-01-27T14:30:00Z",
"sessions": [
{
"name": "feature-auth",
"date": "2026-01-27",
"time": "14:30",
"status": "completed",
"file": "2026-01-27-14-30-feature-auth.md"
}
]
}
Cache invalidation:
Cache usage:
# Check if cache exists and is valid
if [ -f .claude/sessions/.session-index.json ]; then
last_scan=$(jq -r '.last_scan' .claude/sessions/.session-index.json)
current_time=$(date -u +%s)
cache_age=$((current_time - $(date -d "$last_scan" +%s)))
if [ $cache_age -lt 3600 ]; then
# Use cached data (no directory scan needed)
jq -r '.sessions[] | "\(.date) \(.time) - \(.name) [\(.status)]"' \
.claude/sessions/.session-index.json
exit 0
fi
fi
# Cache miss or expired: scan directory and rebuild cache
# OPTIMIZED: Check .current-session file once
if [ -f .claude/sessions/.current-session ]; then
current=$(cat .claude/sessions/.current-session)
echo "Active: $current"
fi
# AVOID: Reading all session files to find active one
# Reading all files: 100-500 tokens per file
# Single file check: 10-20 tokens
# Tool: Bash
cache_file=".claude/sessions/.session-index.json"
if [ -f "$cache_file" ]; then
last_scan=$(jq -r '.last_scan' "$cache_file")
current_time=$(date -u +%s)
cache_age=$((current_time - $(date -d "$last_scan" +%s)))
if [ $cache_age -lt 3600 ]; then
echo "CACHE_VALID"
exit 0
fi
fi
echo "CACHE_EXPIRED"
Token cost: 50-100 tokens (cache hit) vs. 500-1000 tokens (full scan)
# Tool: Bash
jq -r '.sessions[] | "\(.date) \(.time) - \(.name) [\(.status)]"' \
.claude/sessions/.session-index.json | \
head -20 # Limit to recent sessions
Output format:
2026-01-27 14:30 - feature-auth [completed]
2026-01-27 10:15 - bugfix-login [completed]
2026-01-26 16:45 - refactor-api [active]
Token cost: 100-200 tokens for cached list
# Tool: Bash
sessions_dir=".claude/sessions"
cache_file="$sessions_dir/.session-index.json"
# Get current active session
current=""
if [ -f "$sessions_dir/.current-session" ]; then
current=$(cat "$sessions_dir/.current-session")
fi
# Build session index
echo "{" > "$cache_file"
echo " \"last_scan\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"," >> "$cache_file"
echo " \"sessions\": [" >> "$cache_file"
first=true
for file in $(ls -t "$sessions_dir"/*.md 2>/dev/null | grep -v '.current-session'); do
filename=$(basename "$file" .md)
# Parse filename: YYYY-MM-DD-HH-MM-session-name
date="${filename:0:10}"
time="${filename:11:5}"
name="${filename:17}"
# Determine status
status="completed"
if [ "" = ];
status=
[ = ];
first=
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
Token cost: 500-800 tokens (one-time rebuild, then cached)
# Tool: Bash (using cached data)
echo "=== Development Sessions ==="
echo ""
# Show active session first
jq -r '.sessions[] | select(.status == "active") |
"🔵 ACTIVE: \(.date) \(.time) - \(.name)"' \
.claude/sessions/.session-index.json
echo ""
# Show completed sessions
jq -r '.sessions[] | select(.status == "completed") |
"\(.date) \(.time) - \(.name)"' \
.claude/sessions/.session-index.json | \
head -20
total=$(jq '.sessions | length' .claude/sessions/.session-index.json)
echo ""
echo "Total sessions: $total"
echo "Showing most recent 20 completed sessions"
echo ""
echo "Use '/session-resume <name>' to view details and resume"
Token cost: 200-300 tokens (display only)
Show only session metadata without content:
Token cost: 500-1,000 tokens
If user requests details for specific session:
# User: "Show details for feature-auth session"
# Tool: Read
Read: .claude/sessions/2026-01-27-14-30-feature-auth.md
Token cost: Additional 500-2,000 tokens (only when requested)
| Operation | Before | After | Savings |
|---|---|---|---|
| Directory scan (Glob+Read) | 2,000-3,000 | 500-800 | 70-75% |
| Session metadata (file reads) | 1,000-2,000 | 100-200 | 85-90% |
| Content display (all files) | 5,000-10,000 | 200-300 | 95-97% |
| Cached list view | 2,000-3,500 | 100-200 | 90-95% |
| Total average | 2,500 | 500 | 80% |
head -20 to avoid overwhelming outputCache location: .claude/sessions/.session-index.json
Cache structure:
{
"last_scan": "ISO 8601 timestamp",
"sessions": [
{
"name": "session-name",
"date": "YYYY-MM-DD",
"time": "HH:MM",
"status": "active|completed",
"file": "filename.md"
}
]
}
Cache validity:
Cache benefits:
# Handle missing sessions directory
if [ ! -d .claude/sessions ]; then
echo "No sessions directory found"
echo "Use '/session-start <name>' to create your first session"
exit 0
fi
# Handle empty sessions directory
session_count=$(ls .claude/sessions/*.md 2>/dev/null | wc -l)
if [ $session_count -eq 0 ]; then
echo "No sessions found"
echo "Use '/session-start <name>' to create your first session"
exit 0
fi
# Handle corrupted cache
if [ -f .claude/sessions/.session-index.json ]; then
if ! jq empty .claude/sessions/.session-index.json 2>/dev/null; then
echo "Cache corrupted, rebuilding..."
rm .claude/sessions/.session-index.json
# Rebuild cache (Step 3)
fi
fi
Typical session list scenario:
Token usage:
Without optimization:
Savings: 85-90%