Agent Wrapped
Run everything through
next to this file. On first use it downloads
the latest
release for this OS and CPU from GitHub into
~/.local/share/agent-wrapped
(a 40 to 60 MB download), and it checks for a newer
release at most once a day, so never install anything by hand. The first video on
a machine also downloads Chrome Headless Shell, so allow a few minutes for it.
On Windows,
works from Git Bash. From PowerShell with no
, run
powershell -ExecutionPolicy Bypass -File <skill-dir>/wrapped.ps1
with the same
arguments everywhere below; both share one install.
Everything is read and rendered locally. Nothing is uploaded.
1. Read the history
sh
<skill-dir>/wrapped.sh stats -o "${TMPDIR:-/tmp}/wrapped.json"
It finds every supported agent with local history, ranks them by session count,
and prints a one-line summary. Add
for another year and
if the user gives a name for the first card. The JSON holds
prompt excerpts, so keep it in the temp directory, never in a project.
T3 Code is an app that runs these harnesses, not an agent: each T3 thread
counts once, as the harness that ran it.
Other machines
When the user wants every machine counted, export each one's sessions over SSH
(it installs the binary there the same way) and add them:
sh
ssh <host> 'curl -fsSL https://raw.githubusercontent.com/vkpdeveloper/agent-wrapped/main/skill/agent-wrapped/wrapped.sh | sh -s -- sessions --year <year>' > "${TMPDIR:-/tmp}/wrapped-<host>.json"
<skill-dir>/wrapped.sh stats --add "${TMPDIR:-/tmp}/wrapped-<host>.json" --add ... -o "${TMPDIR:-/tmp}/wrapped.json"
Use only hosts the user named or already reaches by SSH alias. Exports mask
secrets and show the home directory as
. A session found on two machines
counts once.
2. Pick the video
Unless the user already said which one, offer the menu: for each format, what
it looks like, with their own numbers from the JSON as the hook. Recommend the
one whose numbers are most extreme, then stop and wait for them to pick one or
several. Never pick for them unless they told you to.
When they named a format, or told you not to ask, make that one, and in the
report list the other formats their numbers suit, a line each with its hook,
so they can ask for more. Nothing is recounted: each extra format is its own
jokes (step 5) and one render.
next to this file is a frame of each format. If you can
show images, show the previews of the formats you offer.
| What it looks like | Music | Hook from the JSON |
|---|
| The whole year, about 50s, Spotify Wrapped style: big numbers on green, agent bars with their logos, projects, a 3am clock, lessons, persona | Future bass | , |
| 30s, first person ("I spent 724 hours"): giant numbers on black and green, their own lines, ends on "What's yours?" | Big room EDM | , |
| A desk on fire, a swear counter, a censored leaderboard of their words, the peak month, air horns | Rage trap | , |
| "I told my agent no 16 times": their pushback from that session as chat bubbles, then the retries | Glitch hop | , |
| Commits and pull requests, then bars of which agents co-signed them | Heist jazz | , |
| A city at night: the longest day, the streak, the latest night | Dark synthwave | , |
| A penthouse office: the agents they manage, the tool calls, a graded performance review per agent | Mafia trap | , |
| Pixel art and a speedrun timer: splits, skips used, deaths | Chiptune | , |
| A loud brainrot backdrop, huge captions one word at a time ("lowkey my roman empire", "aura") | Phonk | , |
| A fake LinkedIn post: "I'm humbled to announce", a stock photo of a man shaking a robot's hand, "Agree?" | Corporate ukulele | , |
| A jungle, a giant faded number, nature documentary subtitles about them | Orchestral | , |
| A TV studio: LIVE bug, a big number in a box, breaking news chyron, scrolling ticker | News theme | , |
| A sunset, their agents as dating profile cards: the main one, the ex, the talking stage, red flags | R&B slow jam | (needs 2 or more) |
| An S to D tier list, agent logos dropping into the rows | Hard trap | (needs 3 or more) |
| A printed receipt on a counter, a line per stat, the persona as the total, a barcode | Elevator bossa | |
| A stormy city, spaced serif title cards ("In a world where agents write the code"), the persona as the title | Trailer braams | , |
| Their agents' group chat gossiping about them, logos as avatars | Lofi | (needs 2 or more), |
| Their real messages with their agents, one per screen like a chat screenshot: their line types and sends, the agent's reply lands. Any language | Comedy hip hop | (pick ), |
Leave out a format whose numbers are zero or tiny (2 swears is not dev rage).
Every format but
is made to post: no projects, tools or models, and
swears are censored on screen. All are about 13 to 30 seconds.
3. Write the lessons
Read
in the JSON: real prompts where the user pushed back
on their agent. Group them by what the agent kept getting wrong and write up to
3
, most frequent first:
- : an instruction the user could paste into CLAUDE.md or AGENTS.md, at
most 8 words, imperative and concrete ("Use bun, never npm", "Run the tests
before saying done", "Ask before deleting files").
- : how many of the samples that rule covers. Count honestly; the
video prints it.
Skip one-off complaints and anything that names a person, client or secret.
Leave
empty if no pattern repeats. You may sharpen
, but
keep its number exactly as computed.
4. Pick the quotes
Read
: up to 200 short prompts the user typed, spread over the
year. Get a feel for how they talk to agents (blunt, polite, all caps, typos,
3am despair, tiny wins), then copy 3 or 4 that sound most like them into
, keeping each one's
,
and
:
- Pick lines that are funny, oddly specific or very them. A stranger should
get the joke without context. Mix moods; skip boring task descriptions.
- Keep their words, typos and casing. You may cut a quote down to its best
part, at most 120 characters, but never add words.
- Skip anything with a secret, a , a person's or client's name, or
anything they would not want posted. With , also skip
quotes that name a project.
Write
: at most 6 words, in the user's own tone, introducing
the quotes ("Things you said at 3am", "Your agent has receipts"). Leave
empty if nothing is worth posting; the card is then left out.
Only for the formats they picked:
- : holds that session's pushback. Reorder it so the two
funniest come first (the video shows two), by the same rules as the quotes.
- : read , things they typed () with the
agent's first words back (), and copy the 3 or 4 funniest pairs
into , funniest first, keeping , and . The
reply is the joke: an agent owning up ("Yes, I broke the status format."),
"You're absolutely right", a deadpan answer to a rant. Cut the reply down to
its funny part, at most 100 characters, and the text to at most 120, but
never add or translate words: Hindi, Hinglish or any other language shows
as typed. Same skips as the quotes. Leave empty to skip the cut.
- : write , a performance review for each of the top 4 agents
in : , a ("A+", "B-", "C") and a of at most 6
words, a joke grounded in its real numbers ("969 sessions. Never sleeps.").
Leave it empty to skip the card.
Save the edited JSON. Lessons only show in
, quotes in
and
, and
in its own cut, so skip the steps a picked format does not use.
5. Write the jokes
Every format but
is a meme, and the jokes on it should be about this
user, not anyone's. The user should not have to explain the joke: the brief
below carries it. For each format they picked, print its brief:
sh
<skill-dir>/wrapped.sh lines "${TMPDIR:-/tmp}/wrapped.json" --cut <name>
Write the jokes from the brief alone; there is no need to read the JSON again.
- : the format's comedy. Every line plays it.
- : their numbers, already worked out: who they cheat on, who they
ghosted, their worst hour, the pleases against the swears.
- : their loudest prompts and the times an agent owned up,
verbatim. A line they really typed beats any line you can write, so quote
them (you may cut one down, never reword it).
- : each card that takes a joke, what it already shows, and its limit.
Write one into
, keyed by card id (
"lines": { "rageHook": "..." }
).
A card left out keeps its built-in joke, so skip any you cannot beat. For
, the thread goes in
as
{ "from": "<agent id>" | "me", "text": "..." }
.
- Write like a meme page, not a report: roast them and their agents, be
specific and a little unhinged, end on the punch. Use their own slang and
language (Hinglish stays Hinglish).
- Never invent or change a number; the video prints what you write.
- Call the user "I", "me" or "they", never "he" or "she": the
history does not say who they are.
- No project, client or person names, no secrets, nothing they would not
post. Swears are censored on screen anyway.
Then check every line and rewrite each one that fails:
- It holds a number from or words from .
- It would be wrong about any other user. A line that fits everyone is a miss.
- It adds what the card does not already say: a sticker under "350 times"
brings a new fact or the punch, not the 350 again.
- A stranger would laugh, or wince, without context.
- No two lines lean on the same quote or fact; each card gets its own joke.
- It is within its limit.
6. Render
sh
<skill-dir>/wrapped.sh render "${TMPDIR:-/tmp}/wrapped.json" -o ~/Desktop/agent-wrapped-<year>.mp4
Use
when it exists, otherwise the current directory, unless the user
names a place.
(1080x1080) for the X or LinkedIn feed; the
default is vertical (1080x1920) for Stories, Reels and TikTok. Add
when the user wants project names and session titles hidden.
Add
for the format they picked, and render each one they
picked to its own file (
agent-wrapped-<year>-<cut>.mp4
); the JSON is read
again each time, nothing is recounted. Every format has its own music track,
on the same beat as the cuts, with sound effects on every hit.
Report
Give the video paths, the other formats worth making (see step 2), the headline
numbers (hours, sessions, the #1 agent), the persona, the lessons and the quotes
you picked. Offer to add the lessons to their CLAUDE.md or AGENTS.md. Remind
them that
shows project names (unless blurred), and every format can show
lines they typed, so they should watch it before posting.