From tchen-skills
Extracts user inputs from Claude Code session history and organizes them into date-based markdown files in a project's .chats directory for documentation and reference.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tchen-skills:chat-historyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Extract user inputs from Claude Code session history (`~/.claude/projects/`) and organize them into a project's `.chats` directory with daily markdown files.
Extract user inputs from Claude Code session history (~/.claude/projects/) and organize them into a project's .chats directory with daily markdown files.
Use this skill when the user wants to:
.jsonl session filesClaude Code stores session data in ~/.claude/projects/{project-path-encoded}/ as .jsonl files. Each file contains messages with:
type: "user" - User messagesuserType: "external" - External user (not system/agent)message.content - The actual message contentThis skill extracts meaningful user instructions (filtering out system commands, tool results, and session continuations) and organizes them by date into .chats/{YYYYMMDD}.md files.
The session directory is derived from the current working directory path:
/ with - in the path-~/.claude/projects/{encoded-path}/# Example: /Users/tchen/projects/tubi/titc
# Becomes: -Users-tchen-projects-tubi-titc
# Full path: ~/.claude/projects/-Users-tchen-projects-tubi-titc/
List session files and filter by modification date:
# List all main session files (excluding agent-* files) for a specific date
ls -la ~/.claude/projects/{project-dir}/*.jsonl | grep "Dec 25" | grep -v agent-
Extract user messages from jsonl files using jq:
cat {session-file}.jsonl | jq -r '
select(.type == "user" and .userType == "external" and (.isMeta | not)) |
.message.content |
if type == "string" then . else empty end
' | grep -v "^Caveat:" \
| grep -v "^<command" \
| grep -v "^<local-command" \
| grep -v "^This session is being continued" \
| grep -v "^<user-prompt-submit-hook>" \
| grep -v "^Analysis:" \
| grep -v "^$"
Create markdown files in .chats/ directory with format:
# Instructions
## {task title}
{user instruction}
## {another task title}
{another user instruction}
After creating/updating chat files, commit with:
git add .chats/*.md
git commit -m "docs(chats): add session history for {date range}"
Each .chats/{YYYYMMDD}.md file should:
# Instructions header## for each major task/instruction.chats/20251225.md:
# Instructions
## implement feature X
based on @specs/feature-x.md implement all phases entirely
commit the code and test
## fix bug Y
investigate why component Z is not working
use sub agents to analyze the issue in parallel
Include:
Exclude:
<command-name>, <local-command-stdout>)<user-prompt-submit-hook>)~/.claude/projects/{encoded-path}/.chats/{YYYYMMDD}.md.chats/ directory if it doesn't existYou can use this bash snippet to quickly find the project session directory:
# Get encoded project path
PROJECT_PATH=$(pwd | sed 's|/|-|g' | sed 's|^|/|' | sed 's|^/|-|')
SESSION_DIR="$HOME/.claude/projects/$PROJECT_PATH"
# Check if exists
if [ -d "$SESSION_DIR" ]; then
echo "Session directory: $SESSION_DIR"
echo "Sessions by date:"
ls -la "$SESSION_DIR"/*.jsonl 2>/dev/null | grep -v agent- | awk '{print $6, $7}' | sort -u
else
echo "No session directory found for this project"
fi
agent-*.jsonl are sub-agent sessions and typically don't contain direct user input01e78099-de0e-4424-845c-518638c8241e.jsonl).message.content field can be either a string (user text) or an array (tool results)npx claudepluginhub tyrchen/claude-skillsAnalyzes Claude Code session history JSONL files to extract insights, summaries, and patterns from conversations. Processes current project or all sessions with bash, jq, and subagents.
Searches, analyzes, and recovers content from Claude Code session history files in ~/.claude/projects/. Recovers deleted files, tracks changes across sessions, and finds conversations by keyword.
Searches and recalls previous Claude Code conversation sessions to find past discussions, decisions, and solutions.