GitHub
View as markdown

lets Manual — stats

lets stats

lets stats [OPTIONS]

Scans Claude Code session transcripts (.jsonl files) and reports how much lets and its hook were used — no transcript text, path or content leaves the scan; only counts and verb names reach the report.

Flags

Flag Meaning Default
--dir <DIR> directory to scan for .jsonl transcripts ~/.claude/projects
--since <N d|h> only scan files modified within this window, e.g. 7d or 12h — days or hours only unset (all files)
--json / --jsonl print the raw StatsReport object instead of a text table off
--budget, --max-bytes, --max-file-bytes, --no-ignore, --allow-outside, --no-check, -q/--quiet shared flags; stats has no files to check or bound, so most have no effect see lets stats --help

What it counts

Field Means
sessions number of transcript files scanned
bash_calls total Bash tool calls seen
lets_calls Bash calls whose command was a lets invocation, by verb
hook_blocks Bash tool results that are a hook denial (text starting run: )
blocks_followed of those blocks, how many were followed by a Bash call matching the suggested verb
calls_saved sum of targets - 1 over every multi-target lets call — show a.ts b.ts c.ts saves 2
read_calls / read_bytes Read tool calls and the bytes they returned
skipped malformed or non-UTF-8 lines, shown only when nonzero (malformed_lines, non_utf8_lines, unreadable_files, walk_errors)

Output shape

Text table:

$ lets stats --dir .
sessions          1
bash calls        5
lets calls        3
  edit            2
  show            1
hook blocks       1
blocks followed   1
calls saved       1
read calls        1
read bytes       10

--json prints the StatsReport struct directly, not wrapped in the {"…":…, "omitted":[],"stats":{...}} envelope other verbs use — there is no per-call cost to report, since stats is itself the report:

$ lets stats --dir . --json
{"sessions":1,"bash_calls":1,"lets_calls":{"find":1},"hook_blocks":0,"blocks_followed":0,"calls_saved":0,"read_calls":1,"read_bytes":3}

With skips:

$ lets stats --dir .
sessions         1
bash calls       1
lets calls       1
  show           1
hook blocks      0
blocks followed  0
calls saved      0
read calls       0
read bytes       0
── skipped: 1 non-UTF-8 line

$ lets stats --dir . --json
{"sessions":1,"bash_calls":1,"lets_calls":{"show":1},"hook_blocks":0,"blocks_followed":0,"calls_saved":0,"read_calls":0,"read_bytes":0,"skipped":{"non_utf8_lines":1}}

LETS_NO_STATS and LETS_TOKEN_RATIO

These two env vars govern a different, unrelated field: the per-call stats.tokens_est estimate that show, find, edit, transform and write carry in their own output (bytes ÷ 4, or ÷ LETS_TOKEN_RATIO if set; null under LETS_NO_STATS=1). They do not affect what lets stats itself counts — the name is a coincidence, not a shared mechanism. See –json and –jsonl for stats.tokens_est.

Back to the top of lets stats