Claude Code writes every session to a plaintext file under ~/.claude/projects/. By default it keeps them for 30 days, and then a background sweep deletes them without showing a message.
I think those files are the best data I have about my own work. They record what I asked for, how I asked, where I corrected the model and what I gave up on. Nobody writes that down by hand.
At the end of a working session I already have Claude write a short reflection: what I corrected, which rule is worth keeping. That works one session at a time, and it can’t see a pattern that only shows up across sessions.
Reading all the transcripts can. One read found about 21 sessions where I had asked, in different words each time, for the same thing: where does this session stand, what is closed, what is still open. Now it’s a command, /recap. My working rule since: a request you repeat is a skill waiting to be written.
I typed roughly 11,500 messages from March to October. Nearly a quarter went to Alisa.ua, the online store I built, mostly from March to May. Building my own products took about 14%, and Claude Code itself about 13%: settings, skills, the machinery around it. Media and ad creative took about 12%.
I also read the source of five open-source tools that parse these files: cc-transcript, introspect, claude-code-analytics, claude-hindsight and Simon Willison’s claude-code-transcripts. Each is built for its own job: HTML pages, search, dashboards.
None of the five sorts sessions by who started them.
What was said lives in three places, not one. Most of it is in ordinary user lines. Lines marked “meta” hold the messages another session sent this one, which you want, and every skill file Claude loaded, which you didn’t write. Four of the five ignore that mark, so a meta line looks like something you typed. And a prompt you type while Claude is still working is stored as a different kind of line, which only cc-transcript reads.
And none of the five removes secrets.
A scan of mine found dozens of strings shaped like API keys. Almost none were in anything I typed; they came in with the work, through files the model read and commands it ran. Some were keys I still use.
cleanupPeriodDays in settings.json. Setting it to 0 fails validation, and the docs suggest a large value such as 3650. I set 3650./recap came from.CLAUDE.md or a skill, not something to say a fourth time./fewer-permission-prompts skill that does this for the read-only ones.