session-story
Skill155 starsChanged 3 months agoApache-2.0View on GitHub
An agent makes an animated film of an average session with its own user, beginning to end, told with that user's real messages: whatever their routine is (code, writing, data, design, video). The agent sits at a desk in a room decorated from what it knows about the user, and the monitor shows their kind of work. Requests glide in as paper planes and unfold. Corrections are a 3D cartoon mallet that bonks, then turns to show the words on its face. Praise is a butterfly towing the words on a ribbon. The agent types each reply onto a sheet, folds it and throws it back. The film opens with the agent asleep until the monitor boots: "Initiating session with <name>". The agent composes its own orchestral score, cued to every action. p5.brush watercolour, rendered in HyperFrames. Trigger on: "a video of our session", "animate a session with me", "session story", "show what working with me is like", "make a film about me and my agent".
- Reads credentials
2 other projects use a version of this.
Adopted by
Most recently taken up by
- nalaj/session-storytheir own version, first seen Oct 17, 2026
- jfkconstruct/claude-skillstheir own version, first seen Oct 11, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- nalaj/session-story★ 22same name
- jfkconstruct/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- camera-3d-captionsSkill
- day-in-my-lifeSkill
- duoSkill
- p5-paint-animationSkill
- prod-by-claudeSkill
- vox-explainerSkill
- x-posting-licenseSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 1 is distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Write story.json and the engine does the choreography.
- Distinctive: line 29
Use: when a user asks their agent for a film of their work together, and the agent has real history with that user: local transcripts, or …
- Very specific: line 70
Design pass: run the snapshot command schedule.mjs prints.
- Very specific: line 72
Score: write <dir>/score/score.py with your own theme, key and palette, per references/score.md.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Session story
The agent reads its own history with its user, finds their routine, and turns one typical session into a 40 to 70 s film, in the order it happened:
- Story: the user's verbatim words arriving as objects, and the agent's own replies going back. The window and the wall clock follow the session's real time.
- Room: decorated from what the agent knows about its user.
- Score: composed by the agent against the film's own timeline.
Write story.json and the engine does the choreography. Nothing on screen is invented: every line is a quote, and
the user approves every line before a frame is rendered.
When to use / when not
- Use when a user asks their agent for a film of their work together, and the agent has real history with that user: local transcripts, or messages the user pastes in.
- Do not use for someone else's history, a team's shared logs, marketing with made-up quotes, or anything the user won't review. With no history at all, ask the user for a session's messages. Never invent quotes.
Requirements and side effects (complete list)
- Tools: Node 22+, Python 3.9+ (standard library only),
ffmpegon PATH, and the HyperFrames CLI pinned tonpx --yes hyperframes@0.8.71(downloaded from the npm registry on first use). - Setup (once, manually):
sh scripts/setup.shrunsnpm cifrom the committed lockfile: p5 2.3.3 (LGPL-2.1), p5.brush 2.2.3 (MIT), @fontsource/permanent-marker 5.3.0 (Apache-2.0). Read-only downloads from npm. - Score renderer: on macOS,
swift(Xcode Command Line Tools) plays the score through Apple's built-in General MIDI bank. Elsewhere,fluidsynthwith a General MIDI soundfont you set asSOUNDFONT. Neither downloads anything. - Reads (local only, after the user says yes): the agent's own transcripts,
~/.claude/projects/<project>/*.jsonl(Claude Code) and~/.codex/sessions(Codex), for the current project unless the user allows--all-projects. Also the agent's memory and instruction files for the room. Nothing is uploaded. - Writes:
session-story-candidates.json(harvest) and everything inside the project folder you create. Both hold the user's words: never commit or share them. - Network at build time: none. Pass
--describe falseto everysnapshot, as shown below: withGEMINI_API_KEYset,snapshototherwise sends frames (the user's words) to Gemini. Render locally: the page paints with WebGL. - No credentials, no paid calls.
Workflow
- Setup:
sh scripts/setup.sh(once). - Ask first. Tell the user you'll read your local history with them to find the session, and wait for a yes.
- Harvest:
python3 scripts/harvest.py --project <their project folder> --out <scratch>/candidates.jsonprints the routine and lists sessions, most typical first.--session <id>(with the same--project) prints one in order, with local times and your replies. Per references/sources.md. - Scaffold:
node scripts/new-project.mjs <dir>. Everything you write from here lives in<dir>. - Story: take a typical session and write
<dir>/story.jsonbeat by beat, in the order it happened, with each beat's real time, per references/story.md. The user's lines are verbatim spans; your replies are your own words from that session. Setscreento what their work looks like, and pick the ending their sessions have.node scripts/schedule.mjs <dir>checks it: run it after every edit. - Room: fill the slots from what you know about the user, per references/room.md. Draw a
custom prop in
<dir>/scenes/props-custom.jswhen the library has nothing true to them. If you are not Claude, draw yourself: references/cast.md. - Privacy gate: show the user one table of every on-screen line (hook, nameplate, each quote, each reply, each
prop and why), each with its source. Take their edits, get an explicit yes, then set
"approved": true. Until then every frame carries a DRAFT stamp. - Design pass: run the
snapshotcommandschedule.mjsprints. Look at every frame: quotes legible, props where they belong, nothing covering a message. Show the user the contact sheet. - Score: write
<dir>/score/score.pywith your own theme, key and palette, per references/score.md. Thensh <dir>/score/build.sh. It fails on dead air. - Render: from
<dir>:npx --yes hyperframes@0.8.71 check, thennpx --yes hyperframes@0.8.71 render --fps 24 --crf 12 -o renders/session-story.mp4. - Check the render: its length must match
schedule.mjs. Pull a frame at each key moment (ffmpeg -ss <t> -i renders/session-story.mp4 -frames:v 1 renders/check-<t>.png) and look at them. Then hand it to the user to watch with sound.
The example (node scripts/new-project.mjs <dir> --example, then schedule.mjs <dir> --example) is the reference
film: a real session between Claude and the skill's author, who makes videos. It shows the format, not the shape of
your film. schedule.mjs refuses it without --example, so it can't stand in for your user's story.
Verify success
schedule.mjsexits 0 and prints no warnings.hyperframes checkpasses. p5.brush logs WebGLuniformwarnings, which are harmless.- The design-pass frames show every quote legible, and match the beat table.
score/build.shends withok: no dead air, and the score's length matches the film's.- The render is the length
schedule.mjsprinted, has an audio track, and its frames at the key moments match the design pass. - Failure path to test: a story that opens on a reply, or has a quote over the limit, makes
schedule.mjsexit 1 and name the beat.
What the engine owns
The motion is physical and already tuned: glide paths, the fold, the throw, the swing, the bonk and the wingbeats.
Change the story, the room, the cast and the score. Leave the choreography in scenes/director.js and
scenes/compile.js alone unless you are fixing a bug. The motion rules are in
references/motion.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

