Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

Queryable analytics for Claude Code session logs, exposed as an MCP server and CLI.

**API Reference**: `session-analytics-cli --help` or `src/session_analytics/guide.md` (MCP resource: `session-analytics://guide`).
**API Reference**: `agent-session-analytics-cli --help` or `src/agent_session_analytics/guide.md` (MCP resource: `agent-session-analytics://guide`).

**Schema Design**: See [docs/SCHEMA.md](docs/SCHEMA.md) for database tables, indexes, and migration history.

---

## ⚠️ DATABASE PROTECTION

**The database at `~/.claude/contrib/analytics/data.db` contains irreplaceable historical data.**
**The database at `~/.claude/contrib/agent-session-analytics/data.db` contains irreplaceable historical data.**

### NEVER:
- Delete the database file
Expand All @@ -19,7 +19,7 @@ Queryable analytics for Claude Code session logs, exposed as an MCP server and C

### Before schema changes:
```bash
cp ~/.claude/contrib/analytics/data.db ~/.claude/contrib/analytics/data.db.backup-$(date +%Y%m%d-%H%M%S)
cp ~/.claude/contrib/agent-session-analytics/data.db ~/.claude/contrib/agent-session-analytics/data.db.backup-$(date +%Y%m%d-%H%M%S)
```

### When adding new columns:
Expand Down
26 changes: 13 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ install: venv
@echo "Adding to Claude Code..."
@CLAUDE_CMD=$$(command -v claude || echo "$$HOME/.local/bin/claude"); \
if [ -x "$$CLAUDE_CMD" ]; then \
$$CLAUDE_CMD mcp add --transport http --scope user session-analytics http://localhost:8081/mcp 2>/dev/null && \
echo "Added session-analytics to Claude Code" || \
echo "session-analytics already configured in Claude Code"; \
$$CLAUDE_CMD mcp add --transport http --scope user agent-session-analytics http://localhost:8081/mcp 2>/dev/null && \
echo "Added agent-session-analytics to Claude Code" || \
echo "agent-session-analytics already configured in Claude Code"; \
else \
echo "Note: claude not found. Run manually:"; \
echo " claude mcp add --transport http --scope user session-analytics http://localhost:8081/mcp"; \
echo " claude mcp add --transport http --scope user agent-session-analytics http://localhost:8081/mcp"; \
fi
@echo ""
@echo "Installation complete!"
Expand All @@ -64,16 +64,16 @@ install: venv
# Restart the service (pick up code changes)
restart:
@if [ "$$(uname)" = "Darwin" ]; then \
PLIST="$$HOME/Library/LaunchAgents/com.evansenter.claude-session-analytics.plist"; \
PLIST="$$HOME/Library/LaunchAgents/com.evansenter.agent-session-analytics.plist"; \
if [ -f "$$PLIST" ]; then \
echo "Restarting session-analytics..."; \
launchctl unload "$$PLIST" 2>/dev/null || true; \
launchctl load "$$PLIST"; \
sleep 1; \
if launchctl list | grep -q "com.evansenter.claude-session-analytics"; then \
if launchctl list | grep -q "com.evansenter.agent-session-analytics"; then \
echo "Service restarted successfully"; \
else \
echo "Error: Service failed to start. Check ~/.claude/session-analytics.err"; \
echo "Error: Service failed to start. Check ~/.claude/contrib/agent-session-analytics/agent-session-analytics.err"; \
exit 1; \
fi; \
else \
Expand All @@ -82,12 +82,12 @@ restart:
fi; \
else \
echo "Restarting session-analytics..."; \
systemctl --user restart claude-session-analytics; \
systemctl --user restart agent-session-analytics; \
sleep 1; \
if systemctl --user is-active claude-session-analytics &>/dev/null; then \
if systemctl --user is-active agent-session-analytics &>/dev/null; then \
echo "Service restarted successfully"; \
else \
echo "Error: Service failed to start. Check ~/.claude/session-analytics.err"; \
echo "Error: Service failed to start. Check ~/.claude/contrib/agent-session-analytics/agent-session-analytics.err"; \
exit 1; \
fi; \
fi
Expand All @@ -110,9 +110,9 @@ uninstall:
@echo "Removing from Claude Code..."
@CLAUDE_CMD=$$(command -v claude || echo "$$HOME/.local/bin/claude"); \
if [ -x "$$CLAUDE_CMD" ]; then \
$$CLAUDE_CMD mcp remove --scope user session-analytics 2>/dev/null && \
echo "Removed session-analytics from Claude Code" || \
echo "session-analytics not found in Claude Code"; \
$$CLAUDE_CMD mcp remove --scope user agent-session-analytics 2>/dev/null && \
echo "Removed agent-session-analytics from Claude Code" || \
echo "agent-session-analytics not found in Claude Code"; \
fi
@echo ""
@echo "Uninstall complete!"
Expand Down
76 changes: 38 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Claude Session Analytics
# Agent Session Analytics

MCP server and CLI for queryable analytics on Claude Code session logs.

**Related**: [claude-event-bus](https://github.com/evansenter/claude-event-bus) shares design patterns with this project.
**Related**: [agent-event-bus](https://github.com/evansenter/agent-event-bus) shares design patterns with this project.

## What It Does

Expand All @@ -14,7 +14,7 @@ Parses your Claude Code session logs (`~/.claude/projects/**/*.jsonl`) and provi
- **Permission gaps** - Commands that should be added to settings.json
- **Token usage** - Usage breakdown by day, session, or model
- **Session timeline** - Events across conversations with filtering
- **Cross-session insights** - Gotchas, patterns, and learnings from [event-bus](https://github.com/evansenter/claude-event-bus)
- **Cross-session insights** - Gotchas, patterns, and learnings from [event-bus](https://github.com/evansenter/agent-event-bus)

Data is stored persistently in SQLite and auto-refreshes when stale (>5 min old).

Expand All @@ -26,66 +26,66 @@ make install

This will:
1. Create a virtual environment and install dependencies
2. Set up a LaunchAgent for auto-start (macOS)
2. Set up a LaunchAgent for auto-start (macOS) or systemd service (Linux)
3. Add the MCP server to Claude Code
4. Install the CLI to your path

## CLI Usage

```bash
# Status & Ingestion
session-analytics-cli status # Database stats
session-analytics-cli ingest --days 7 # Refresh data from logs
agent-session-analytics-cli status # Database stats
agent-session-analytics-cli ingest --days 7 # Refresh data from logs

# Core Analytics
session-analytics-cli frequency # Tool usage (--no-expand to hide breakdowns)
session-analytics-cli commands # Bash command breakdown (--prefix git)
session-analytics-cli sessions # Session metadata and tokens
session-analytics-cli tokens --by day # Token usage (day/session/model)
agent-session-analytics-cli frequency # Tool usage (--no-expand to hide breakdowns)
agent-session-analytics-cli commands # Bash command breakdown (--prefix git)
agent-session-analytics-cli sessions # Session metadata and tokens
agent-session-analytics-cli tokens --by day # Token usage (day/session/model)

# Workflow Analysis
session-analytics-cli sequences # Tool chains (--expand for command-level)
session-analytics-cli permissions # Commands needing settings.json
session-analytics-cli insights # Pre-computed patterns for /improve-workflow
agent-session-analytics-cli sequences # Tool chains (--expand for command-level)
agent-session-analytics-cli permissions # Commands needing settings.json
agent-session-analytics-cli insights # Pre-computed patterns for /improve-workflow

# File & Project Activity
session-analytics-cli file-activity # File reads/edits/writes
session-analytics-cli languages # Language distribution
session-analytics-cli projects # Activity by project
session-analytics-cli mcp-usage # MCP server/tool usage
agent-session-analytics-cli file-activity # File reads/edits/writes
agent-session-analytics-cli languages # Language distribution
agent-session-analytics-cli projects # Activity by project
agent-session-analytics-cli mcp-usage # MCP server/tool usage

# Agent Activity
session-analytics-cli agents # Task subagent activity vs main session
agent-session-analytics-cli agents # Task subagent activity vs main session

# Session Analysis
session-analytics-cli signals # Raw session metrics for LLM interpretation
session-analytics-cli classify # Categorize sessions (debug/dev/research)
session-analytics-cli failures # Error patterns and rework detection
session-analytics-cli error-details # Detailed errors with tool parameters
session-analytics-cli trends # Compare usage across time periods
session-analytics-cli handoff # Context summary for session handoff
agent-session-analytics-cli signals # Raw session metrics for LLM interpretation
agent-session-analytics-cli classify # Categorize sessions (debug/dev/research)
agent-session-analytics-cli failures # Error patterns and rework detection
agent-session-analytics-cli error-details # Detailed errors with tool parameters
agent-session-analytics-cli trends # Compare usage across time periods
agent-session-analytics-cli handoff # Context summary for session handoff

# User Messages
session-analytics-cli journey # User messages across sessions
session-analytics-cli search <query> # Full-text search on messages
agent-session-analytics-cli journey # User messages across sessions
agent-session-analytics-cli search <query> # Full-text search on messages

# Session Relationships
session-analytics-cli parallel # Find simultaneously active sessions
session-analytics-cli related <id> # Find sessions with similar patterns
agent-session-analytics-cli parallel # Find simultaneously active sessions
agent-session-analytics-cli related <id> # Find sessions with similar patterns

# Git Integration
session-analytics-cli git-ingest # Import git commit history
session-analytics-cli git-correlate # Link commits to sessions
session-analytics-cli session-commits # Show commits per session
agent-session-analytics-cli git-ingest # Import git commit history
agent-session-analytics-cli git-correlate # Link commits to sessions
agent-session-analytics-cli session-commits # Show commits per session

# Event-Bus Integration
session-analytics-cli bus-events # Query cross-session events (gotchas, patterns)
agent-session-analytics-cli bus-events # Query cross-session events (gotchas, patterns)

# Pattern Inspection
session-analytics-cli sample-sequences # Sample instances of a pattern with context
agent-session-analytics-cli sample-sequences # Sample instances of a pattern with context

# Performance
session-analytics-cli benchmark # Benchmark all MCP tool response times
agent-session-analytics-cli benchmark # Benchmark all MCP tool response times
```

All commands support:
Expand All @@ -110,7 +110,7 @@ All commands support:
| **Git** | `ingest_git_history`, `correlate_git_with_sessions`, `get_session_commits` |
| **Event-Bus** | `ingest_bus_events`, `get_bus_events` |

For detailed usage, read the MCP resource `session-analytics://guide` or see [guide.md](src/session_analytics/guide.md).
For detailed usage, read the MCP resource `agent-session-analytics://guide` or see [guide.md](src/agent_session_analytics/guide.md).

## Development

Expand All @@ -130,9 +130,9 @@ make check

## Data Location

- **Database**: `~/.claude/contrib/analytics/data.db`
- **Database**: `~/.claude/contrib/agent-session-analytics/data.db`
- **Logs parsed from**: `~/.claude/projects/**/*.jsonl`
- **Event-bus source**: `~/.claude/contrib/event-bus/data.db` (if [claude-event-bus](https://github.com/evansenter/claude-event-bus) is installed)
- **Event-bus source**: `~/.claude/contrib/agent-event-bus/data.db` (if [agent-event-bus](https://github.com/evansenter/agent-event-bus) is installed)

## How It Works

Expand All @@ -156,7 +156,7 @@ See `CLAUDE.md` for more details on contributing.

## Related

- [claude-event-bus](https://github.com/evansenter/claude-event-bus) - Cross-session communication for Claude Code
- [agent-event-bus](https://github.com/evansenter/agent-event-bus) - Cross-session communication for Claude Code

## Uninstall

Expand Down
4 changes: 2 additions & 2 deletions docs/SCHEMA.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Database Schema Design

This document describes the SQLite database schema for session-analytics.
This document describes the SQLite database schema for agent-session-analytics.

**Location**: `~/.claude/contrib/analytics/data.db`
**Location**: `~/.claude/contrib/agent-session-analytics/data.db`

---

Expand Down
8 changes: 4 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "claude-session-analytics"
name = "agent-session-analytics"
version = "0.1.0"
description = "MCP server for queryable analytics on Claude Code session logs"
readme = "README.md"
Expand Down Expand Up @@ -35,11 +35,11 @@ dev = [
]

[project.scripts]
session-analytics = "session_analytics.server:main"
session-analytics-cli = "session_analytics.cli:main"
agent-session-analytics = "agent_session_analytics.server:main"
agent-session-analytics-cli = "agent_session_analytics.cli:main"

[tool.hatch.build.targets.wheel]
packages = ["src/session_analytics"]
packages = ["src/agent_session_analytics"]

[tool.pytest.ini_options]
testpaths = ["tests"]
Expand Down
16 changes: 16 additions & 0 deletions scripts/agent-session-analytics.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=Agent Session Analytics - MCP server for session log analysis
After=network.target

[Service]
Type=simple
WorkingDirectory=__PROJECT_DIR__
Environment=PYTHONPATH=__PROJECT_DIR__/src
ExecStart=__VENV_PYTHON__ -m agent_session_analytics.server
Restart=always
RestartSec=5
StandardOutput=append:__HOME__/.claude/contrib/agent-session-analytics/agent-session-analytics.log
StandardError=append:__HOME__/.claude/contrib/agent-session-analytics/agent-session-analytics.err

[Install]
WantedBy=default.target
16 changes: 0 additions & 16 deletions scripts/claude-session-analytics.service

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.evansenter.claude-session-analytics</string>
<string>com.evansenter.agent-session-analytics</string>

<key>ProgramArguments</key>
<array>
<string>__VENV_PYTHON__</string>
<string>-m</string>
<string>session_analytics.server</string>
<string>agent_session_analytics.server</string>
</array>

<key>WorkingDirectory</key>
Expand All @@ -30,10 +30,10 @@
<true/>

<key>StandardOutPath</key>
<string>__HOME__/.claude/session-analytics.log</string>
<string>__HOME__/.claude/contrib/agent-session-analytics/agent-session-analytics.log</string>

<key>StandardErrorPath</key>
<string>__HOME__/.claude/session-analytics.err</string>
<string>__HOME__/.claude/contrib/agent-session-analytics/agent-session-analytics.err</string>

<key>ProcessType</key>
<string>Background</string>
Expand Down
12 changes: 6 additions & 6 deletions scripts/dev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
LABEL="com.evansenter.claude-session-analytics"
LABEL="com.evansenter.agent-session-analytics"
PLIST="$HOME/Library/LaunchAgents/$LABEL.plist"

cd "$PROJECT_DIR"
Expand All @@ -15,7 +15,7 @@ if launchctl list 2>/dev/null | grep -q "$LABEL"; then
echo "Stopping LaunchAgent for dev mode..."
launchctl unload "$PLIST" 2>/dev/null
LAUNCHAGENT_WAS_RUNNING=true
osascript -e 'display notification "Stopped for dev mode" with title "Session Analytics"' 2>/dev/null
osascript -e 'display notification "Stopped for dev mode" with title "Agent Session Analytics"' 2>/dev/null
fi

# Restart LaunchAgent on exit
Expand All @@ -24,14 +24,14 @@ cleanup() {
echo ""
echo "Restarting LaunchAgent..."
launchctl load "$PLIST"
osascript -e 'display notification "LaunchAgent restarted" with title "Session Analytics"' 2>/dev/null
osascript -e 'display notification "LaunchAgent restarted" with title "Agent Session Analytics"' 2>/dev/null
fi
}
trap cleanup EXIT

echo "Starting session analytics in dev mode (Ctrl+C to stop)..."
echo "Add to Claude Code: claude mcp add --transport http --scope user session-analytics http://127.0.0.1:8081/mcp"
echo "Starting agent-session-analytics in dev mode (Ctrl+C to stop)..."
echo "Add to Claude Code: claude mcp add --transport http --scope user agent-session-analytics http://127.0.0.1:8081/mcp"
echo ""

# DEV_MODE enables verbose logging
DEV_MODE=1 uvicorn session_analytics.server:create_app --host 127.0.0.1 --port 8081 --reload --factory
DEV_MODE=1 uvicorn agent_session_analytics.server:create_app --host 127.0.0.1 --port 8081 --reload --factory
Loading