What is read
| Agent | Folder | Files |
|---|---|---|
| Claude Code | ~/.claude/projects/, or $CLAUDE_CONFIG_DIR/projects/ |
session transcripts (<project>/<session>.jsonl) and subagent runs (<project>/<session>/subagents/*.jsonl) |
| Codex | ~/.codex/sessions/, or $CODEX_HOME/sessions/ |
rollouts (YYYY/MM/DD/rollout-*.jsonl, or .jsonl.zst compressed, which friskme decompresses in memory). A rollout spawned by another session (spawn_agent) is counted as that session’s subagent run. |
| Pi | ~/.pi/agent/sessions/, $PI_CODING_AGENT_DIR/sessions/, or $PI_CODING_AGENT_SESSION_DIR |
session files (--<folder>--/<time>_<id>.jsonl). Every branch in a file counts. A session made with /fork or /clone copies its parent’s history; friskme counts only what was added after the copy. Pi has no subagent files. |
By default friskme reads every agent whose folder exists; --agent narrows it down. Every agent’s sessions go into one report, each tagged with its agent, with sessions, tokens and dollars broken down per agent.
The access is strictly read-only: friskme lists directories and reads files, and never writes, moves or deletes anything there.
To tell which repo a session belongs to, friskme also reads one small file outside these folders: the .git file in the session’s working directory, if there is one. A git worktree’s .git file points at its main repo, so sessions in worktrees count under that repo instead of showing up as projects of their own.
Claude Code deletes transcripts older than cleanupPeriodDays (30 by default), so about a month of history is the most there is.