Never Lose a Claude Code Conversation Again
Claude Code stores your sessions in temporary files. When they terminate, that context is gone forever.
I built a system to auto-save every conversation and make them searchable.
Two flavors:
The Problem
Claude Code stores sessions in ~/.claude/projects/. When a session terminates, that context is gone. If you use “resume session” constantly (as you should), sessions last for days. When they end, you lose all that debugging history and architectural context.
The Solution: Hybrid Architecture
The Skill (Core Logic)
The conversation-logger skill contains the actual functionality:
- Save script: JSONL → readable markdown
- Search script: Full-text search with context
- Parse script: Formats conversation transcripts
Works in Claude apps, Claude Code, and the API. Ask Claude: “save this conversation” or “search conversations about docker.”
The Plugin (Automation)
The plugin adds automatic triggers:
- Stop hook: Auto-saves after every response
- Slash commands:
/convo-search,/convo-list,/convo-recent - Install script: Ensures skill is present
The hook is ~10 lines - just extracts the transcript path and calls the skill:
#!/bin/bash
HOOK_DATA=$(cat)
TRANSCRIPT_PATH=$(echo "$HOOK_DATA" | jq -r '.transcript_path // empty')
SESSION_ID=$(echo "$HOOK_DATA" | jq -r '.session_id // "unknown"')
SKILL_SCRIPT="$HOME/.claude/skills/conversation-logger/scripts/save-conversation.sh"
[ -f "$SKILL_SCRIPT" ] && bash "$SKILL_SCRIPT" "$TRANSCRIPT_PATH" "$SESSION_ID"
All logic lives in the skill. Update the skill, plugin benefits automatically.
Installation
Plugin (Automatic)
/plugin marketplace add https://github.com/sirkitree/claude-conversation-saver
Restart Claude Code. Done.
Prerequisites: git, jq, python3
Skill Only (Manual)
cd ~/.claude/skills
git clone https://github.com/sirkitree/conversation-logger.git
Then ask Claude naturally or use scripts directly:
~/.claude/skills/conversation-logger/scripts/search-conversations.sh "hooks"
What You Get
Conversations saved to ~/.claude/conversation-logs/:
conversation_YYYY-MM-DD_HH-MM-SS.jsonl- Raw dataconversation_YYYY-MM-DD_HH-MM-SS.md- Readable transcriptsession_YYYY-MM-DD_HH-MM-SS.json- Metadataconversation_latest.md- Symlink to current
Search anything:
~/.claude/skills/conversation-logger/scripts/search-conversations.sh "that bug"
With plugin: /convo-search that bug
Why Hybrid?
Version 1 had all logic in the plugin. Every update meant redeploying everything.
Now:
- Core logic in skill (update once, benefits everywhere)
- Plugin as thin wrapper (just automation)
- Single source of truth (no duplication)
- Cross-platform (skill works everywhere)
The Meta
I built the original plugin with Claude Code. That conversation was auto-saved.
Then I refactored to hybrid architecture with Claude Code. That conversation was also auto-saved.
I can now search both to see the evolution from monolithic to separation of concerns. Auto-save inception + architecture evolution.
Update History:
- Oct 14, 2025: Initial plugin release
- Oct 16, 2025: Hybrid architecture - skill + plugin, real-time saving
Issues/ideas: GitHub