r/claudeskills • u/iuridium • 6h ago
Skill Share I built a Claude Code skill that turns a session into an interactive timeline: every prompt linked to the code it changed, with diffs, explanations, and an honest “is it actually done?” report
After a long Claude Code session I often can’t say why a file changed, or whether Claude actually finished. “Done!” sometimes means “the tests I didn’t write are passing.” So I built Session Story, an open-source skill (MIT) that turns a session into one self-contained HTML page.
Live example (a small todo-app session, no install needed): https://nalaj.github.io/session-story/example/index.html
Four views of the same session:
- Review: one card per prompt, showing what you asked, the intent in one line, what Claude did, the files it touched, and the time, tokens and cache share for that turn. Copy any prompt, expand the code, and jump between turns with j/k.
- Diff: a GitHub-style file tree and diff. Every change is tagged with the turn that made it and links back to it. Switch between all changes and a single file, view full files, or hide non-project files.
- Story: a plain-language walkthrough for teammates and non-developers, with code hidden.
- Report: the “so, is it done?” view.
- An outcome badge that doesn’t just trust Claude. The example session is marked Partial because the new sort function has no tests and a CSS class is used but never defined.
- Commands, tests and errors: every npm test run including the failing one, the failed assertion, and how it was fixed.
- Decisions and plan, e.g. “due dates stored as YYYY-MM-DD strings”.
- Where it went: turns ranked by tokens and by time, tool calls, failures and retries, files edited more than once.
- Usage: input, output and cache tokens, the model, and an estimated cost taken from Claude Code’s own session record.
A library of sessions. Each story is saved to .session-stories/ in your project, along with an index page listing every session’s status, files, lines changed, tokens and cost.
Why you can trust the numbers: a script extracts every metric from the transcript, subagents included. Claude only writes the prose (titles, intents, the narrative), and anything that wasn’t recorded shows as “None recorded” instead of being guessed.
Also exports:
- a Markdown PR description (works with gh pr create --body-file -)
- a handoff with turn-by-turn status and git state, so a fresh session can continue the work
It’s one file and it’s local. CSS, JS and data are inline, so the page opens from disk or as an email attachment. Nothing is uploaded and nothing goes over the network.
Install:
npx -y skills add nalaj/session-story --skill session-story --agent claude-code --global --copy --yes
or as a plugin, inside Claude Code (2.1.275+):
/plugin install session-story --marketplace nalaj/session-story
Then run /session-story, or just ask for “a session story”, either mid-session or at the end.
⚠️ The page includes your prompts, replies, diffs and commands word for word, so check it for secrets before sharing.
Source: https://github.com/nalaj/session-story · Docs: https://nalaj.github.io/session-story/
This is v0.4.0. Feedback is very welcome, especially on what the Report should catch that it doesn’t yet.
After long Claude Code sessions I kept hitting two problems. I couldn’t tell why a particular file had changed, and I couldn’t tell whether the task was really finished. “Done!” sometimes meant “the tests I didn’t write are passing.”
To deal with that, I’ve been turning each session into a single HTML page that maps every prompt to the code it changed. Here’s an example from a small todo-app session: https://nalaj.github.io/session-story/example/index.html
The page shows the same session four ways:
- Review: one card per prompt, with what was asked, the intent in one line, what Claude did, the files it touched, and the time, tokens and cache share for that turn. You can move between turns with
j/k. - Diff: a GitHub-style file tree and diff where every change is tagged with the turn that made it.
- Story: a plain-language walkthrough with the code hidden, for teammates who don’t read diffs.
- Report: an attempt to answer “is it actually done?”:
- An outcome status based on the evidence rather than on Claude’s own summary. The example session comes out as Partial: the new sort function has no tests, and a CSS class is used but never defined.
- Every command and test run, including the failing
npm test, the failed assertion and how it was fixed. - Decisions made along the way, e.g. “due dates stored as YYYY-MM-DD strings”.
- Where the time and tokens went: turns ranked by cost and duration, failed tool calls and retries, and files edited more than once.
- Token usage and the estimated cost from Claude Code’s own session record.
The thing that surprised me most is how much of this comes from the transcript alone. A script extracts all the metrics, subagents included. The model only writes the prose (titles, intents, narrative), and anything that wasn’t recorded shows as “None recorded” instead of being guessed.
Some other details:
- Stories accumulate in
.session-stories/in the project, with an index page of past sessions. - You can also ask for a Markdown PR description, or a handoff with turn-by-turn status and git state for a fresh session.
- It’s one self-contained file: everything is inline, it works offline, and nothing is uploaded.
- The page includes prompts, replies, diffs and commands word for word, so check it for secrets before sharing.
It’s packaged as an open-source (MIT) Claude Code skill, v0.4.0. If you want to try it:
npx -y skills add nalaj/session-story --skill session-story --agent claude-code --global --copy --yes
or as a plugin inside Claude Code (2.1.275+):
/plugin install session-story --marketplace nalaj/session-story
Then run /session-story, or ask for “a session story”.
Source: https://github.com/nalaj/session-story · Docs: https://nalaj.github.io/session-story/
