Metadata-Version: 2.4
Name: rewatch
Version: 0.1.0
Summary: analytics over your claude code session transcripts
Author-email: zzstoatzz <thrast36@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: analytics,claude,claude-code,cli,transcripts
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: cyclopts>=4.17.0
Description-Content-Type: text/markdown

# rewatch

analytics over your claude code session transcripts.

claude code keeps a jsonl transcript of every session under `~/.claude/projects/`.
rewatch separates what you actually typed from harness noise (tool results,
slash-command expansions, subagent sidechains) and tells you things like:

- your most-repeated literal prompts (everyone has a "make the PR description not suck")
- how often you open with `no` / `wait` / `stop` / `actually`
- where your prompts, interrupts, and output tokens go, per project
- which tools claude leans on, and what hours you really work

## install

```bash
uv tool install rewatch
```

## usage

```bash
rewatch report            # the whole picture, human-formatted
rewatch prompts --pretty  # most-repeated literal prompts
rewatch hours --pretty    # prompts by local hour of day
rewatch overview --days 7 # recent only
```

machine-readable by default — lists are ndjson, single results are one json
object — so output pipes straight into jq or an agent:

```bash
rewatch projects | jq -r '.project'
```

note: claude code prunes local transcripts (30 days by default, see
`cleanupPeriodDays`), so rewatch sees a rolling window, not all time.

## library

```python
from rewatch import load_sessions, repeated_prompts

sessions = load_sessions(days=30)
for text, count in repeated_prompts(sessions, top=10):
    print(count, text)
```
