GitHub - saranyan/builder-lens: See how you actually build with AI agents: a local builder profile from your Claude Code and Codex transcripts, inspired by Paxe
**See how you actually build with AI agents, on your own machine, with the AI you already use.**
[](https://github.com/saranyan/builder-lens/blob/main/docs/images/builder-lens.gif)
_The GIF and screenshots use the made-up builder from `--demo`. Regenerate them with `python3 scripts/demo\_gif.py` (needs Chrome and ffmpeg)._
Why
[](https://github.com/saranyan/builder-lens#why)
You spend hours a day in Claude Code and Codex. Those transcripts say a lot about how you work: what you ship, how you steer, when you plan and when you skip it. YC's Paxel turns them into a builder report, but you upload them to get it (terms).
Builder Lens takes a different stance: **use your data, and keep the privacy you already have.** Your transcripts already live with the company whose agent wrote them. Builder Lens reads them locally and runs its analysis through that same CLI (`claude` or `codex`), so the data goes nowhere it hasn't already been. There's no account, no server and no upload.
It's a local version inspired by Paxel, worked out backwards from published Paxel reports.
Try it
[](https://github.com/saranyan/builder-lens#try-it)
git clone https://github.com/saranyan/builder-lens.git && cd builder-lens python3 builder_lens.py --demo # a made-up builder: reads nothing, sends nothing python3 builder_lens.py # your own projects → out/report.html
Python 3.9+, macOS or Linux, no dependencies.
By default it uses your `claude` CLI (Haiku). To use Codex instead, pass `--llm codex`. Both have been tested. Run with `--no-llm` for stats only, which sends nothing anywhere.
What you get
[](https://github.com/saranyan/builder-lens#what-you-get)
An agent skill, written from your own sessions
[](https://github.com/saranyan/builder-lens#an-agent-skill-written-from-your-own-sessions)
The report ends with instructions for your coding agents, based on how you actually work. For example: "before any sync or schema change, write a short plan with a stop point and wait for approval", or "'ship it' is their usual approval". Each instruction lists the measured facts behind it.
python3 builder_lens.py --install-skill # also installs it to ~/.claude/skills/builder-lens-working-style/
You get `out/skill/builder-lens-working-style/SKILL.md` for Claude Code and `out/skill/AGENTS.md` to paste into Codex's `AGENTS.md`. The report also has Copy and Download buttons. Re-run it whenever you want the skill to catch up with how you work.
How it's different from Paxel
[](https://github.com/saranyan/builder-lens#how-its-different-from-paxel)
- **Your data stays where it already is.** Nothing is uploaded. The only model call goes through your own CLI, and excerpts are redacted first.
- **You see every score.** Paxel scores you on five axes (execution leverage, steering, engineering quality, product thinking, planning) and doesn't show them on your report. Builder Lens charts all five.
- **Claims come with evidence.** Every statement about you has a **why** you can hover, listing the measured facts behind it. If a claim can't cite a fact, or quotes a number the facts don't contain, it's dropped.
- **It reads meaning, not just words.** Decisions are classified from what you said _and_ what the agent had just proposed: a redirect, a caught mistake, a product call, or a pick between options.
- **Cards flip.** Click any stat card to see exactly how it's measured, with your raw numbers.
- **Advice you can act on.** Each growth area ends with something concrete to try in your next session.
- **It feeds back into your agents.** The report becomes a skill file your agents load, so what it learns changes how they work with you.
- **Honest outcomes.** A decision only counts as having worked when there's proof, such as a passing check, a matching commit or you confirming it. "Unproven" isn't treated as failure.
- **Automated runs don't count.** Headless `claude -p`, SDK, `codex exec` and sub-agent runs are left out, so the report is about you.
Options
[](https://github.com/saranyan/builder-lens#options)
python3 builder_lens.py --project my-app # one repo python3 builder_lens.py --llm codex --workers 6 # Codex, 6 calls at a time python3 builder_lens.py --model sonnet # a bigger Claude model python3 builder_lens.py --include-automated # count headless runs too
Good to know
[](https://github.com/saranyan/builder-lens#good-to-know)
- It reads `~/.claude/projects` and `~/.codex/sessions` and runs read-only `git` in the repos those sessions touched.
- Before anything reaches the model, keys, tokens, emails, phone numbers and your home path are scrubbed. The CLI runs with no tools and doesn't save a session.
- Results are cached in `~/.cache/builder-lens`. The first run on about 50 sessions takes about 4 minutes with Haiku. Later runs take seconds.
- The report is a single HTML file with no web fonts, images or scripts from anywhere else. Opening it makes no network requests.
- Cards marked _estimate_ use thresholds that are still guesses. REPORT_SPEC.md shows what was reverse-engineered and how confident we are.
- `out/` holds your data. It's gitignored, so don't commit it.
- Not affiliated with Y Combinator or Paxel.
Tests
[](https://github.com/saranyan/builder-lens#tests)
python3 -m unittest discover -s tests