While you wait·terminal·MIT
Storytime
A 260K-parameter transformer inside the mod writes a story about what Claude is doing.

Storytime writes a short story above the Claude Code prompt about whatever Claude is doing right now. The writer is a 260K-parameter transformer that runs inside the mod’s own TypeScript, so every word is generated on your machine and a story costs zero API tokens. The story follows Claude’s work: each prompt you send and each tool call can reseed it.
What it does
- Hero by tool. Each tool has its hero: a pencil for Edit, a pen for Write, a notebook for NotebookEdit, a book for Read, a robot for Bash and PowerShell, a dog for Grep, a bird for Glob, a fish for WebFetch, an owl for WebSearch, a bear for Agent, a wizard for Skill and a cat for AskUserQuestion. Your own prompt gets a girl, and any other tool a mouse.
- Name by file or command. The stem of the path Claude touched becomes the name, so
auth-service.tsgives Auth. A shell command lends its program, sogit statusgives Git. With neither, the mod cycles through six stock names such as Lily and Ben. - Thing by prompt. Developer jargon is translated first: an error or a crash becomes a bug, a test a puzzle, a merge a bridge, a commit a gift, a server a castle, a password a lock. Failing that, the first word of your prompt that appears on a list of about ninety everyday things (ball, cake, kite, dragon) is used. The opening then reads “Once upon a time, there was a little pencil named Auth. One day, Auth found a puzzle.” and the model continues from there. Without a match, the opening stops after the hero’s name.
- Reseeding. A new story starts with each prompt you send and with each tool call, at most once every twelve seconds.
- Commands.
/storywrites a new story,/story <name>writes one about a hero with that name,/story offhides the band and remembers that across sessions, and/story onbrings it back.
Install
Needs Claude Code 2.1.287 or later and an interactive terminal.
claude plugin marketplace add maddiedreese/cc-storytime
claude plugin install storytime@cc-storytime
Start claude and the first story begins above the prompt. Work as usual, or run /story whenever you want a fresh one.
How it works
The model is Andrej Karpathy’s stories260K checkpoint from karpathy/tinyllamas, trained on the TinyStories dataset: 64 dimensions, five layers, eight attention heads with four key-value heads and a 512-piece vocabulary. The same checkpoint powers the author’s gbc-transformer on a Game Boy Color, where a single token takes 2 minutes 49 seconds. Here it manages a few thousand tokens a second.
hooks/model.ts is a port of llama2.c’s run.c to TypeScript: RMSNorm, rotary position embeddings, grouped-query attention with a key-value cache, SwiGLU and tied embeddings, all as float32 math on typed arrays. A hooks module gets web globals only, neither Node nor the DOM, and the mod uses no WebAssembly. The weights, quantized to int8 by rows (276 KB), and the tokenizer live inside hooks/weights.ts as base64 strings, because a hooks module cannot open binary files on its own. They are decoded and dequantized once, when the first story starts. A tools/verify.ts script confirms that the port produces the same greedy output as the C original.
Generation runs on a $.clock.every timer rather than inside a hook: two tokens every 80 ms, so the text appears at typing speed and no single hook call runs long. At the author’s few thousand tokens a second, a tick spends under a millisecond in the model. A story ends at the model’s end token, at 60 generated tokens, or at the first sentence end after 24 tokens.
The band takes the AbovePrompt component and stacks itself under whatever other mods draw there: a dim title row, the story with a cursor while it types, and a dim footer naming what seeded it (seeded by Edit auth-service.ts), the measured tokens per second and /story. With fewer than three rows of space only the story shows. The author credits cc-arcade for the idea of drawing above the prompt.
Privacy: the tool.call hook sees every tool call, including the file path and the text of each shell command, and the turn.start hook sees each prompt you send. From these it keeps only the file’s base name or the command’s first word for the current story and its footer, and one matched word from the prompt. The only thing written to Claude Code’s plugin store is the on/off flag behind /story off. The story itself lives in memory and is gone when the session ends. Nothing is sent anywhere: the weights are inside the module and the code makes no network calls.
Limitations
- Draws only in interactive sessions: nothing appears in
claude -por the VS Code extension’s chat panel. The author documents the terminal only; the Desktop app’s Code tab is untested. - The model knows few words. Its 512-piece vocabulary holds almost no whole words, which is why the thing from your prompt comes from a fixed list rather than from the prompt itself. Any file stem works as a name, because any token does.
Similar Claude Mods
mindful-claude
Guided breathing above the prompt while Claude works. Four techniques, zero tokens.
plushie
A plush Clawd above the prompt that reacts to what Claude is doing. Pat it or drag it.
clawd-madenci
A pixel Clawd mines, builds and blows up TNT above the prompt while Claude works.
claude-pokemon
A pixel Pokémon above the prompt that follows Claude's tools, levels up and evolves.
Popular Claude Mods
The whole directory →filetree
Sidebar file tree with git status that lights up what Claude reads, edits and commits.
secret-redactor
Swaps secrets, emails and IPs for placeholders before the model sees them.
cache-keeper
Prompt-cache timer, keep-warm pings, cold-send guard, a board of chats and a handoff.
shared-session
Share a session by link: teammates join from their Claude Code and prompt it live.




