A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Convert Claude Code CLI chat logs (JSONL) to professional HTML visualizations. Interactive dashboard, chat organization,
Convert Claude Code chat logs (JSONL) to professional, browsable HTML visualizations. Export AI conversations, build interactive dashboards, and organize your coding assistant history — with or without Claude Code.


Latest version: Download latest - Always up-to-date
Version 2.4.0: Download v2.4.0.zip - Stable release
Or browse all Releases
Claude Code does everything for you. This skill is designed to work directly with Claude Code CLI (Anthropic's command-line tool for developers, not the web interface). Once installed, Claude Code will:
No manual configuration needed. Just install the skill and ask Claude Code to visualize your chats.
Option A: Per-project (affects only one project)
Copy the skill folder into your project's .claude/skills/ directory:
# From your project root
mkdir -p .claude/skills
cd .claude/skills
git clone https://github.com/oskar-gm/code-chat-viewer.git
Option B: Global (affects all your Claude Code projects)
Copy the skill folder into your user-level .claude/skills/ directory:
# Global installation
mkdir -p ~/.claude/skills
cd ~/.claude/skills
git clone https://github.com/oskar-gm/code-chat-viewer.git
Then ask Claude Code: "Visualize my Claude Code chats" or "Set up the chat visualizer".
SKILL.md, detects your chat files, asks your preferences, creates config.jsonconfig.json and runs the manager — no questions askedThe skill uses two files:
| File | Purpose |
|---|---|
config.example.json | Template with defaults (always present, shareable) |
config.json | Your personalized settings (gitignored, created by Claude Code) |
Configurable options:
| Setting | Default | Description |
|---|---|---|
| Source path | ~/.claude/projects | Where your JSONL chat files are |
| Output folder | ~/Code Chat Viewer | Where HTML files and dashboard are saved |
| Dashboard filename | CCV-Dashboard.html | Name of the interactive index |
| Time format | 12h | Message/timestamp clock: 12h (AM/PM) or 24h |
| Agent chats | Included (>3KB) | Include sub-agent conversations |
| Agent min size | 3 KB | Minimum agent file size to include |
| Shorts | Enabled | Separate small inactive chats into subfolder |
| Shorts max size | 40 KB | Maximum HTML size to classify as short |
| Archive | Enabled | Separate old inactive chats into subfolder |
| Inactive days | 5 | Days without activity before organizing |
Environment variables (take precedence over config.json):
| Variable | Overrides | Description |
|---|---|---|
CODE_CHAT_VIEWER_DIR | Output folder | Alternative output directory for the dashboard and HTML files |
CODE_CHAT_VIEWER_DIR environment variablenew_string side. Shared collapsible structure: the Edits/Writes toggle expands/collapses both at once/btw queries injected inline in each chat (from ~/.claude/history.jsonl): user-style messages with Claude cream styling and a subtle English disclaimer next to [USER] noting that Claude doesn't persist the answer. Counter in the stats barYYYY-MM-DD), with configurable 12h (AM/PM, default) or 24h timeBTW column (optional, off by default, sortable) and UUID column now permanent (was optional)[3] in interactive menu or --btw flag): aggregates every /btw query you've issued from ~/.claude/history.jsonl into a standalone btw.html next to the dashboard. Queries grouped by chat (collapsed by default), single Expand all / Collapse all toggle, real-time filter that auto-expands matching sessions--name, --current, --force for targeted operationsDashboard:
.jsonl — to trash by default, permanent via toggle — inspired by @marccane (#2)General:
CODE_CHAT_VIEWER_DIR environment variable: alternative output folder, takes precedence over config.json — co-authored with @marccane (#2)Chat viewer:
old_string and new_string rendered side-by-side inside the tool-use box, with red/green color coding. Dark theme by default, Light theme toggle in the search barnew_string side. The shared Edits/Writes toggle expands/collapses both at once/btw queries injected inline in each chat (from ~/.claude/history.jsonl): user-style messages with Claude cream styling and a subtle disclaimer noting Claude doesn't persist the answer. Counter in the stats bar[REJECTED] with feedback, coral/red) and inline user comments ([USER COMMENT], amber)YYYY-MM-DD), with configurable 12h (AM/PM, default) or 24h timeDashboard:
UUID promoted to a permanent columnBTW column (optional, off by default, sortable): per-chat /btw count[3] in the interactive menu or --btw flag): aggregates every /btw query from ~/.claude/history.jsonl into a standalone btw.html, grouped by chat, with an Expand/Collapse all toggle and a real-time filterFixes:
[Snapshot saved: ...]) now honor the search filter — previously they stayed visible regardless of the queryChat viewer:
[COMMAND]), compact blocks (collapsible, purple), task notifications (color by status), user responses (amber Q&A with markdown previews)--current (auto-detect session), --name (search by name), --force (regenerate all)Fixes:
\r\n line endings no longer cause extra spacing in HTML outputexcept clauses replaced with specific exception typesChat viewer:
Dashboard:
Fixes:
/rename for all chats, including those not indexed in sessions-index.jsonFeatures:
Fixes:
You do not need Claude Code to use this tool. Both scripts work standalone with Python 3.6+.
Convert a single chat:
python scripts/visualizer.py path/to/chat.jsonl output.html
Batch generation with dashboard (requires config.json):
# 1. Create your config from the template
cp config.example.json config.json
# 2. Edit config.json — set projects_path to your Claude Code projects folder
# 3. Run the manager
python scripts/manager.py
CLI flags:
python scripts/manager.py --name "search terms" # Open a specific chat by name
python scripts/manager.py --current # Open the current session (auto-detect from CWD)
python scripts/manager.py --force # Regenerate ALL chats
python scripts/manager.py --force --name "my chat" # Combine flags
On Windows, you can also double-click the .py files directly. The console prompts for mode selection (normal or force) and stays open until you press Enter.
code-chat-viewer/
├── scripts/
│ ├── visualizer.py # Core: JSONL to HTML converter
│ └── manager.py # Orchestrator: batch generation + dashboard
├── icon.png # Project icon (embedded as base64 in output)
├── config.example.json # Configuration template
├── config.json # Your settings (gitignored, created by setup)
├── SKILL.md # Claude Code skill instructions
├── README.md # This file
├── CONTRIBUTING.md # Contribution guidelines
├── CODE_OF_CONDUCT.md # Code of conduct
└── LICENSE # MIT License
~/Code Chat Viewer/ # Output root (configurable)
├── CCV-Dashboard.html # Interactive dashboard
└── Chats/ # Generated HTML files
├── Chat 2026-01-30 ...html # Active chats
├── Shorts/ # Small inactive chats (if enabled)
└── Archived/ # Old inactive chats (if enabled)
Claude Code stores chat logs in JSONL format at:
%USERPROFILE%\.claude\projects\ or %USERPROFILE%\.claude\chats\~/.claude/projects/ or ~/.claude/chats/Each chat file is named with a UUID (e.g., c5f2a3e1-1234-5678-9abc-def012345678.jsonl)
#0066CC) with light blue background (#F8FBFF)#10893E) with light green background (#FAFFF8)#0066CC) with [COMMAND] label and deeper blue background (#EBF2FF)#D97706) with Q&A layout, markdown previews, and [USER RESPONSE] label#DC2626) with [REJECTED] label and user feedback when provided (#FFF1F2 background)#D97706) with [USER COMMENT] label for inline comments on accepted actions#8B5CF6) collapsible blocks grouping summary + pre-compact output#FF6B00) with gray background (#F8F8F8)#48484A) with light text (#E8E8E8)Contributions are welcome! Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
Attribution Requirements:
Óscar González Martín
If you find this project useful, please:
For questions, suggestions, or bug reports:
Claude Code lo hace todo por ti. Esta skill está diseñada para funcionar directamente con Claude Code CLI (la herramienta de línea de comandos de Anthropic para desarrolladores, no la interfaz web). Una vez instalada, Claude Code:
Sin configuración manual. Solo instala la skill y pide a Claude Code que visualice tus chats.
Opción A: Por proyecto (afecta solo a un proyecto)
Copia la carpeta de la skill en el directorio .claude/skills/ de tu proyecto:
# Desde la raíz de tu proyecto
mkdir -p .claude/skills
cd .claude/skills
git clone https://github.com/oskar-gm/code-chat-viewer.git
Opción B: Global (afecta a todos tus proyectos de Claude Code)
Copia la carpeta de la skill en tu directorio .claude/skills/ a nivel de usuario:
# Instalación global
mkdir -p ~/.claude/skills
cd ~/.claude/skills
git clone https://github.com/oskar-gm/code-chat-viewer.git
Luego pide a Claude Code: "Visualiza mis chats de Claude Code" o "Configura el visualizador de chats".
SKILL.md, detecta tus archivos de chat, pregunta tus preferencias, crea config.jsonconfig.json y ejecuta el manager — sin preguntasLa skill usa dos archivos:
| Archivo | Propósito |
|---|---|
config.example.json | Plantilla con valores por defecto (siempre presente, compartible) |
config.json | Tu configuración personalizada (en gitignore, creada por Claude Code) |
Opciones configurables:
| Ajuste | Por defecto | Descripción |
|---|---|---|
| Ruta origen | ~/.claude/projects | Dónde están tus archivos JSONL |
| Carpeta de salida | ~/Code Chat Viewer | Dónde se guardan los HTML y el panel |
| Nombre del panel | CCV-Dashboard.html | Nombre del archivo índice interactivo |
| Formato de hora | 12h | Reloj de los timestamps: 12h (AM/PM) o 24h |
| Chats de agentes | Incluidos (>3KB) | Incluir conversaciones de sub-agentes |
| Tamaño mín. agente | 3 KB | Tamaño mínimo de agente para incluir |
| Shorts | Activado | Separar chats pequeños inactivos en subcarpeta |
| Tamaño máx. short | 40 KB | Tamaño máximo de HTML para clasificar como short |
| Archivo | Activado | Separar chats inactivos antiguos en subcarpeta |
| Días de inactividad | 5 | Días sin actividad antes de organizar |
Variables de entorno (tienen precedencia sobre config.json):
| Variable | Sobrescribe | Descripción |
|---|---|---|
CODE_CHAT_VIEWER_DIR | Carpeta de salida | Directorio de salida alternativo para el panel y los HTML |
CODE_CHAT_VIEWER_DIRnew_string de Edit. Estructura compartida: el toggle Edits/Writes expande/colapsa ambos a la vez/btw inyectadas inline en cada chat (desde ~/.claude/history.jsonl): pseudo-mensajes de usuario con estética crema Claude y disclaimer sutil en inglés junto a [USER] indicando que Claude no persiste la respuesta. Contador en la barra de estadísticasYYYY-MM-DD), con hora configurable 12h (AM/PM, por defecto) o 24hBTW (opcional, desmarcada por defecto, ordenable) y columna UUID ahora permanente (antes opcional)[3] en el menú interactivo o flag --btw): agrega todas las consultas /btw que has hecho desde ~/.claude/history.jsonl en un btw.html standalone junto al dashboard. Consultas agrupadas por chat (colapsadas por defecto), botón único Expand all / Collapse all, filtro en tiempo real que auto-expande sesiones con matches--name, --current, --force para operaciones dirigidasDashboard:
.jsonl original de cada chat — a papelera por defecto, permanente con el toggle — inspirado en @marccane (#2)General:
CODE_CHAT_VIEWER_DIR: carpeta de salida alternativa, con precedencia sobre config.json — coautoría con @marccane (#2)Visor de chats:
old_string y new_string en dos columnas dentro del recuadro tool-use, con codificación de color rojo/verde. Tema oscuro por defecto y toggle de tema claro en la barra de búsquedanew_string de Edit. El toggle compartido Edits/Writes expande/colapsa ambos a la vez/btw inyectadas inline en cada chat (desde ~/.claude/history.jsonl): pseudo-mensajes de usuario con estética crema Claude y un disclaimer sutil indicando que Claude no persiste la respuesta. Contador en la barra de estadísticas[REJECTED] con feedback, coral/rojo) y comentarios inline ([USER COMMENT], ámbar)YYYY-MM-DD), con hora configurable 12h (AM/PM, por defecto) o 24hDashboard:
UUID ahora permanenteBTW (opcional, desmarcada por defecto, ordenable): conteo de /btw por chat[3] en el menú interactivo o flag --btw): agrega todas las consultas /btw desde ~/.claude/history.jsonl en un btw.html standalone, agrupadas por chat, con botón Expand/Collapse all y filtro en tiempo realCorrecciones:
[Snapshot saved: ...]) ahora respetan el filtro de búsqueda — antes permanecían visibles independientemente de lo buscadoVisor de chats:
[COMMAND]), bloques compact (colapsables, morado), notificaciones de tareas (color por estado), respuestas de usuario (ámbar con Q&A y previews de markdown)--current (auto-detectar sesión), --name (buscar por nombre), --force (regenerar todo)Correcciones:
\r\n de Windows ya no causan espaciado extra en el HTMLexcept genéricas reemplazadas por excepciones específicasVisor de chats:
Dashboard:
Correcciones:
/rename en todos los chats, incluyendo los no indexados en sessions-index.jsonFuncionalidades:
Correcciones:
No necesitas Claude Code para usar esta herramienta. Ambos scripts funcionan de forma independiente con Python 3.6+.
Convertir un chat individual:
python scripts/visualizer.py ruta/al/chat.jsonl salida.html
Generación por lotes con panel (requiere config.json):
# 1. Crear tu configuración desde la plantilla
cp config.example.json config.json
# 2. Editar config.json — configurar projects_path con la carpeta de proyectos de Claude Code
# 3. Ejecutar el manager
python scripts/manager.py
Flags CLI:
python scripts/manager.py --name "términos" # Abrir un chat específico por nombre
python scripts/manager.py --current # Abrir la sesión actual (auto-detecta desde CWD)
python scripts/manager.py --force # Regenerar TODOS los chats
python scripts/manager.py --force --name "mi chat" # Combinar flags
En Windows, también puedes hacer doble clic en los archivos .py directamente. La consola permite elegir modo (normal o force) y permanece abierta hasta que pulses Enter.
code-chat-viewer/
├── scripts/
│ ├── visualizer.py # Core: conversor JSONL a HTML
│ └── manager.py # Orquestador: generación por lotes + panel
├── icon.png # Icono del proyecto (embebido como base64 en la salida)
├── config.example.json # Plantilla de configuración
├── config.json # Tu configuración (en gitignore, creada por setup)
├── SKILL.md # Instrucciones de la skill para Claude Code
├── README.md # Este archivo
├── CONTRIBUTING.md # Guía de contribución
├── CODE_OF_CONDUCT.md # Código de conducta
└── LICENSE # Licencia MIT
~/Code Chat Viewer/ # Raíz de salida (configurable)
├── CCV-Dashboard.html # Panel interactivo
└── Chats/ # Archivos HTML generados
├── Chat 2026-01-30 ...html # Chats activos
├── Shorts/ # Chats pequeños inactivos (si está activado)
└── Archived/ # Chats inactivos antiguos (si está activado)
Claude Code almacena los logs de chat en formato JSONL en:
%USERPROFILE%\.claude\projects\ o %USERPROFILE%\.claude\chats\~/.claude/projects/ o ~/.claude/chats/Cada archivo de chat tiene un nombre UUID (ej: c5f2a3e1-1234-5678-9abc-def012345678.jsonl)
#0066CC) con fondo azul claro (#F8FBFF)#10893E) con fondo verde claro (#FAFFF8)#0066CC) con etiqueta [COMMAND] y fondo azul más marcado (#EBF2FF)#D97706) con layout Q&A, previews de markdown y etiqueta [USER RESPONSE]#DC2626) con etiqueta [REJECTED] y feedback del usuario cuando se proporciona (fondo #FFF1F2)#D97706) con etiqueta [USER COMMENT] para comentarios inline en acciones aceptadas#8B5CF6) colapsables agrupando summary + salida pre-compact#FF6B00) con fondo gris (#F8F8F8)#48484A) con texto claro (#E8E8E8)Las contribuciones son bienvenidas. Por favor lee CONTRIBUTING.md para detalles sobre nuestro código de conducta y el proceso para enviar pull requests.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Requisitos de atribución:
Óscar González Martín
Si este proyecto te resulta útil, por favor:
Para preguntas, sugerencias o reportar bugs:
© 2025-2026 Óscar González Martín. All rights reserved under MIT License.
Human + AI music production workflow for Suno - skills, templates, and tools
Claude Code skill for YouTube creators — channel audits, video SEO, retention scripts, thumbnails, content strategy, Sho
AI image generation skill for Claude Code -- Creative Director powered by Gemini
A Claude Code skill by Hao (駱君昊) that learns your Facebook voice and auto-posts to FB / IG / Threads / X with a 14-day c