Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Repository files navigation

🚗 How Am I Driving Claude?

A Claude Code skill that grades your prompting — an evidence-backed report card on how well you steer Claude Code, and where you're costing yourself rework. Credibility comes from concrete measures and your own quoted prompts, not vibes.

image

Features

  • 🧾 Three views of one read — a Markdown Full Report, a standalone HTML report, and a shareable Scorecard card (1200×630, scores only).
  • 📏 Measured measures (deterministic) — prompt length, prompts per session, and context front-loading. Same sessions in → same numbers out.
  • 🧭 Judged measures (Claude, against a fixed rubric) — rework rate (the headline), clarification, steering, and five 1–5 grades (specificity, context quality, decomposition, goal clarity, correction style) — each backed by a real quoted prompt of yours.
  • 🔒 Privacy-first — the shareable Scorecard shows scores and grades only, never a quoted prompt; your quotes stay in the private report.
  • 🧮 Honest by design — every number is labelled measured vs judged, and the report always states the actual prompt count, so a thin sample reads as a soft signal, not a verdict.

Install

Three ways in, in order of convenience.

1. Plugin (recommended — handles updates)

This repo doubles as a Claude Code plugin marketplace. From inside Claude Code:

/plugin marketplace add brunodantas/how-am-i-driving
/plugin install how-am-i-driving@how-am-i-driving

Then ask Claude Code something like "how am I driving" to trigger it, or invoke the namespaced skill /how-am-i-driving:how-am-i-driving. Re-run /plugin marketplace update to pull new versions.

2. curl … | bash (quick, no plugin)

Drops the skill straight into ~/.claude/skills/how-am-i-driving/:

curl -fsSL https://raw.githubusercontent.com/brunodantas/how-am-i-driving/main/install.sh | bash

Then invoke it with /how-am-i-driving. Re-running the installer updates in place. (Needs git to fetch and Python 3.11+ to run.)

3. Manual clone (fallback)

git clone https://github.com/brunodantas/how-am-i-driving.git
cp -R how-am-i-driving/skills/how-am-i-driving ~/.claude/skills/

Invoke it with /how-am-i-driving.

Usage

Invoke it in Claude Code with /how-am-i-driving [count] (or just ask "how am I driving"). By default it reads your most recent 10 sessions across all projects, computes the analysis once, judges your prompts against the rubric, and renders the Full Report. Pass a number to widen the corpus (/how-am-i-driving 50); add --fast for a lighter pass on large corpora.

Want the shareable image? Ask for a Scorecard — a self-contained 1200×630 HTML card (zero external assets, no quoted prompts) you open in a browser and screenshot.

Driving the scripts directly (from a clone)

The skill lives under skills/how-am-i-driving/:

cd skills/how-am-i-driving

# Mechanical-only report (no judging):
python3 scripts/report.py            # most recent 10 sessions
python3 scripts/report.py 50         # widen the corpus to 50 sessions

# Deep read (two phases — compute once, judge, render):
python3 scripts/report.py --depth deep --emit-analysis > analysis.json
#   …Claude judges analysis.json's prompts and writes judgment.json…
python3 scripts/report.py --render analysis.json --judgment judgment.json

# Render the same analysis pass in other formats (compute once, render twice):
python3 scripts/report.py --render analysis.json --judgment judgment.json --scorecard > scorecard.html
python3 scripts/report.py --render analysis.json --judgment judgment.json --html > report.html

How it works

It reads the JSONL transcripts under ~/.claude/projects/ and filters them down to your genuine, human-typed prompts — excluding tool results, slash-command wrappers, injected skill instructions, task-notifications, and re-logged replays from resumed sessions. Then it computes the deterministic measures and Claude judges the semantic ones. "Compute once, render twice": the Full Report and the Scorecard are two renders of a single analysis pass, so the card can never disagree with the report.

Each measure ships with inline help text (what it is, why it matters, what good looks like), and every number is labelled measured (deterministic) or judged (Claude's call against the rubric) — so a judged score shifting by a point on a re-run reads as expected, not as a bug.

Development

python3 -m venv .venv && ./.venv/bin/pip install -e '.[dev]'
./.venv/bin/python -m pytest

The deterministic core is fixture-driven: analyze() is tested against small hand-crafted JSONL transcripts, and the renderers against a canned AnalysisResult (mechanical) and Judgment (judged) — including that the Scorecard renders the grades but leaks no quoted prompt text. The LLM judgment itself is deliberately not unit-tested — it's non-deterministic by design and validated by example. See CONTEXT.md and docs/adr/ for the design decisions and the AnalysisResult seam.

License

GPLv3 (GPL-3.0-or-later).

Contributors

Languages