| Crates.io | cc-log-viewer |
| lib.rs | cc-log-viewer |
| version | 0.3.0 |
| created_at | 2025-07-23 20:55:02.591864+00 |
| updated_at | 2025-07-24 02:19:04.334373+00 |
| description | A beautiful, feature-rich web interface for viewing and auditing Claude Code conversation logs |
| homepage | https://github.com/2389-research/cc-log-viewer |
| repository | https://github.com/2389-research/cc-log-viewer |
| max_upload_size | |
| id | 1765254 |
| size | 345,823 |
A beautiful, feature-rich web interface for viewing and auditing Claude Code conversation logs. Transform your raw JSONL log files into an intuitive, searchable, and visually appealing conversation browser.
The log viewer includes specialized handlers for all major Claude Code tools:
$ prefix, descriptions, and formatted outputClone the repository:
git clone https://github.com/your-repo/cc-log-viewer.git
cd cc-log-viewer
Build the project:
cargo build --release
Run the viewer:
cargo run
Or with custom options:
# Custom port
cargo run -- --port 3000
# Custom projects directory
cargo run -- /path/to/your/claude/projects
# Both options
cargo run -- --port 3000 /path/to/your/claude/projects
Open your browser:
Navigate to http://localhost:2006 (or your custom port)
cc-log-viewer [OPTIONS] [PROJECTS_DIR]
Arguments:
[PROJECTS_DIR] Path to projects directory containing log files
(defaults to ~/.claude/projects/)
Options:
-p, --port <PORT> Port to serve on [default: 2006]
-h, --help Print help information
The viewer automatically looks for Claude Code logs in:
~/.claude/projects/ (default).jsonl files representing conversation sessionsThe log viewer features a sophisticated tool handler system that provides specialized rendering for different tool types:
// Base handler provides common functionality
class ToolHandler {
renderToolCall(toolCall) // Renders tool input
renderToolResult(result) // Renders tool output
renderInput(input) // Custom input formatting
renderOutput(result) // Custom output formatting
}
// Specialized handlers extend base functionality
class BashHandler extends ToolHandler {
// Custom bash command rendering with $ prefix
}
| Tool | Icon | Description | Special Features |
|---|---|---|---|
| TodoWrite | 📝 | Task management | Status indicators, priority colors |
| Bash | 💻 | Shell commands | Command highlighting, monospace output |
| Read | 📖 | File reading | Line numbers, syntax awareness |
| Edit | ✏️ | File editing | Diff visualization, change highlighting |
| MultiEdit | 🔄 | Multiple edits | Numbered changes, scrollable diffs |
| Glob | 🗂️ | File patterns | File type icons, smart grouping |
| Task | 🎯 | Agent tasks | Structured prompts, result formatting |
| WebFetch | 🌐 | Web requests | Clickable URLs, analysis display |
| Journal | 🧠 | Private notes | Color-coded sections, organized layout |
The viewer properly associates tool results with their corresponding tool calls, fixing the common issue where tool outputs appear as user messages.
All JSON content is automatically formatted with proper indentation and syntax highlighting.
cc-log-viewer/
├── src/
│ └── main.rs # Rust backend server
├── static/
│ └── index.html # Frontend web interface
├── Cargo.toml # Rust dependencies
└── README.md # This file
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Run with hot reload during development
cargo run
# Run tests
cargo test
# Check code quality
cargo clippy
The project maintains high code quality standards:
Create a new handler class:
class MyToolHandler extends ToolHandler {
constructor() {
super('MyTool');
}
renderInput(input) {
// Custom input rendering
}
renderOutput(result, toolCall) {
// Custom output rendering
}
getIcon() {
return '🔥'; // Your tool's emoji
}
}
Register the handler:
const toolHandlers = {
// ... existing handlers
'MyTool': new MyToolHandler()
};
We welcome contributions! Here's how to get started:
git checkout -b feature/amazing-featurecargo clippy # Check for warnings
cargo test # Run tests
cargo build # Ensure it builds
git commit -m 'Add amazing feature'git push origin feature/amazing-featureThis project is licensed under the MIT License - see the LICENSE file for details.
Found a bug or have a feature request? Please:
Future improvements planned:
Made with ❤️ for the Claude Code community