Skip to content

Session Analysis ​

Comprehensive analysis of Claude Code usage across the rhi ecosystem, generated January 2026 using normalize sessions stats --all-projects --by-repo and normalize sessions show --analyze.

2329 sessions | 119,146 tool calls | ~$4,177 estimated cost (Sonnet)

Aggregate Overview ​

MetricValue
Sessions2,329
Total turns129,193
Tool calls119,146
API calls109,371
Total tokens33.7B (incl. cache)
Avg context per call81,881 tokens
Cache savings85.3%

Tool Distribution ​

ToolCallsShare
Bash48,05040.3%
Edit23,36919.6%
Read21,81818.3%
Glob8,2126.9%
Grep6,0765.1%
TodoWrite4,7704.0%
Write3,7913.2%
Task8950.8%
Other2,1651.8%

Bash dominates at 40%. This is partially inherent (Rust repos need cargo for build/test/clippy/fmt), but the sequential chaining patterns suggest significant waste.

Per-Repo Breakdown ​

Cost and Volume ​

RepoSessionsCost$/sessionTurnsAvg ctx
unshape295$683$2.3119,93183,255
normalize162$678$4.1818,50289,228
hologram434$369$0.8512,63576,997
io321$332$1.0312,12371,438
sketchpad41$319$7.787,76996,781
ooxml58$291$5.017,93391,974
wick117$225$1.926,27884,418
parents237$201$0.858,92062,981
server-less59$181$3.075,55384,800
zone124$150$1.214,52578,821
lotus62$148$2.394,03692,050
rescribe30$137$4.583,79089,516
paraphase32$135$4.224,38181,849
moonlet79$78$0.992,55673,457
aspect60$75$1.253,56565,724
pad24$43$1.811,74175,665
hub32$36$1.131,08987,971
portals47$28$0.591,14664,596
myenv13$20$1.5554176,797
playmate22$10$0.4534161,565
keybinds15$9$0.6057847,928
herbarium11$7$0.6021368,174
concord9$11$1.2636280,709
pteraworld6$5$0.8032948,936

Key observations:

  • sketchpad ($7.78/session) and ooxml ($5.01/session) are the most expensive per-session. Both have high avg context (97K, 92K) suggesting large codebases that inflate every API call.
  • normalize and rescribe are also expensive per-session ($4.18, $4.58) with high context (89K each).
  • hologram and parents are cheap per-session but have the most sessions (434, 237), so their total spend adds up.

Pain Point 1: Sequential Bash Chains ​

The dominant tool pattern in nearly every repo is long Bash -> Bash -> Bash -> Bash -> Bash chains. These represent the agent running commands one-at-a-time when many could be parallelized.

Repo5+ Bash chains% of all tool patterns
unshape4,548dominant
parents4,228dominant
server-less2,234dominant
paraphase1,873dominant
io1,583dominant
normalize1,358dominant
zone1,013dominant
wick1,002dominant
moonlet959dominant
ooxml1,105dominant

What's happening: The agent runs cargo build, waits, runs cargo test, waits, runs cargo clippy, waits, runs cargo fmt --check, waits. Each is a separate API round-trip. In the normalize session analyzed, this pattern accounted for 217 parallelizable API calls in a single session.

Fix: CLAUDE.md guidance to batch cargo commands: cargo fmt -- --check && cargo clippy -- -D warnings && cargo test in a single Bash call.

Pain Point 2: Glob Spam ​

Several repos show chains of 5+ consecutive Glob calls as a top pattern:

Repo5+ Glob chains
normalize1,012
pad982
paraphase969
hologram893
wick767
io699
rescribe681

What's happening: The agent is doing file discovery one glob pattern at a time. For example, searching for *.rs, then *.toml, then *.md, then *.ts, etc., each as a separate tool call.

Fix: Use the Task/Explore agent for broad file discovery. When doing targeted searches, batch multiple globs into a single call or use normalize view <dir> for structural overview.

Pain Point 3: Repeated File Thrashing ​

Individual session analysis reveals excessive re-reading and re-editing of the same files. The worst example from a wick session:

FileReadsEditsTotal touches
dew-linalg/Cargo.toml61420
dew-cond/Cargo.toml61117
dew-quaternion/Cargo.toml51217
dew-complex/Cargo.toml51217
dew-scalar/Cargo.toml51116
dew-linalg/src/lib.rs6814
dew-scalar/src/lib.rs7714

What's happening: Incremental edits that break the build, leading to read-edit-build-fail-read-fix cycles. The agent makes a change to one Cargo.toml, finds the build broken, fixes it, but then needs to make the same change to 5 other Cargo.toml files -- one at a time.

Fix: CLAUDE.md guidance to plan multi-file changes upfront. When making the same change across crate Cargo.toml files, do all edits before building.

Pain Point 4: Context Pressure ​

Sessions regularly approach the ~155K token context limit:

SessionRepoPeak contextEffect
28d418c3wick141.7KApproaching limit
6b847726normalize131.0KApproaching limit
(aggregate)sketchpadavg 96.8KConsistently high
(aggregate)ooxmlavg 92.0KConsistently high
(aggregate)lotusavg 92.1KConsistently high

What's happening: Long sessions accumulate context from tool results (especially cargo build output, large file reads). The normalize session showed context growth from 10K to 131K over 283 turns.

Fix: Use normalize view to get structural outlines instead of reading entire files. Use offset/limit for targeted reads. In long sessions, prefer the Task agent to offload exploration.

Pain Point 5: Error-Driven Rework ​

"Corrections & Apologies" (the agent saying "Let me fix") correlate with wasted cycles:

SessionRepoCorrectionsBuild errors
28d418c3wick68 command failures
6b847726normalize417 command failures
b70ecf3dunshape1file-not-found, token limit

Common error patterns across all sessions:

  • cargo fmt failures after edits - agent doesn't run fmt proactively
  • Compilation errors from incremental changes - untested assumptions
  • "File does not exist" - agent guessing at file paths
  • "File has not been read yet" - agent trying to write without reading first
  • Token limit exceeded - reading large files without offset/limit

Pain Point 6: Underused Tools ​

ToolCallsShareNote
Task (subagents)8950.8%Drastically underused for exploration
AskUserQuestion1390.1%Agent rarely asks for clarification
EnterPlanMode1580.1%Rarely plans before acting
Grep6,0765.1%Often Bash grep/rg used instead

The agent defaults to sequential Bash commands for exploration when Task/Explore agents would be more efficient and context-friendly.

Actionable Changes ​

Based on this analysis, the following changes have been rolled out across ecosystem repos:

1. Auto-Format Pre-Commit Hook ​

Changed: Pre-commit hooks across all Rust repos now run cargo fmt --all (apply) instead of cargo fmt --all -- --check (check-only). The hook also stages the formatted changes with git add -u.

Why: A huge portion of the Bash chains were cargo fmt --check → fail → cargo fmt → re-stage → retry. The agent no longer needs to think about formatting at all — it's handled at commit time.

Affected repos: All Rust repos in the ecosystem (normalize, unshape, wick, moonlet, paraphase, rescribe, concord, reincarnate, server-less, playmate, portals, zone, myenv, interconnect, ooxml). Scaffolding template updated.

2. Cargo Command Batching ​

Added ## Workflow section to all Rust repo CLAUDE.md files:

Batch cargo commands to minimize round-trips:
  cargo clippy --all-targets --all-features -- -D warnings && cargo test
After editing multiple files, run the full check once — not after each edit.

3. Multi-File Edit Discipline ​

Added to all multi-crate workspace CLAUDE.md files:

When making the same change across multiple crates, edit all files first, then build once.

4. Structural Exploration ​

Added normalize view availability note to all repo CLAUDE.md files. Not prescriptive — just making it known as an option for structural outlines of files and directories.

5. Scaffolding Template ​

Updated scaffolding/CLAUDE.md and scaffolding/.githooks/pre-commit to include all the above for new repos.


Analysis performed with normalize sessions across ~/.claude/projects/. Data covers all sessions through January 2026.