agent-wrapped
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAgent Wrapped
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
(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.
wrapped.shagent-wrapped~/.local/share/agent-wrappedOn Windows, works from Git Bash. From PowerShell with no , run
with the same
arguments everywhere below; both share one install.
wrapped.shshpowershell -ExecutionPolicy Bypass -File <skill-dir>/wrapped.ps1Everything is read and rendered locally. Nothing is uploaded.
所有操作均通过本文件旁的 运行。首次使用时,它会从 GitHub 下载与当前 OS 和 CPU 匹配的最新版 到 (下载大小为 40 至 60 MB),并且每天最多检查一次是否有新版,因此不要手动安装任何内容。某台机器首次生成视频时还会下载 Chrome Headless Shell,请预留几分钟。
wrapped.shagent-wrapped~/.local/share/agent-wrapped在 Windows 上, 可从 Git Bash 运行。如果 PowerShell 中没有 ,请运行 ,并在以下所有命令中使用相同的参数;两种方式共用同一份安装。
wrapped.shshpowershell -ExecutionPolicy Bypass -File <skill-dir>/wrapped.ps1所有内容都在本地读取和渲染,不会上传任何内容。
1. Read the history
1. 读取历史记录
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.
--year 2025--name "..."T3 Code is an app that runs these harnesses, not an agent: each T3 thread
counts once, as the harness that ran it.
sh
<skill-dir>/wrapped.sh stats -o "${TMPDIR:-/tmp}/wrapped.json"它会找出所有具有本地历史记录的受支持 Agent,按会话数排序,并打印一行摘要。要查看其他年份,可添加 ;如果用户为第一张卡片提供了名称,可添加 。JSON 包含 prompt 摘录,因此应将其保存在临时目录中,绝不能放进项目。
--year 2025--name "..."T3 Code 是运行这些 harness 的应用,而不是 Agent:每个 T3 thread 只计一次,并归到运行它的 harness 名下。
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.
~当用户希望统计所有机器时,通过 SSH 导出每台机器的会话(脚本会以相同方式在那里安装二进制文件),然后将它们添加进来:
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"仅使用用户明确指定或已能通过 SSH alias 访问的主机。导出会屏蔽敏感信息,并将主目录显示为 。在两台机器上均发现的会话只计一次。
~2. Pick the video
2. 选择视频
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.
previews/<cut>.jpg | 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 | |
| An S to D tier list, agent logos dropping into the rows | Hard trap | |
| 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 | |
| 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 | |
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.
full除非用户已经说明想用哪种格式,否则提供菜单:列出每种格式的效果,并使用 JSON 中该用户自己的数字作为钩子。推荐数据最极端的一种,然后停止操作,等待用户选择一种或多种。除非用户明确指定,否则绝不能代为选择。
当用户指定了格式或要求不要询问时,生成该格式,并在报告中逐行列出其他适合其数据的格式及对应钩子,方便用户继续要求更多。不会重复统计:每增加一种格式,都有独立的笑话(第 5 步)和一次渲染。
本文件旁的 是每种格式的一帧预览图。如果能够显示图片,请展示所有待选格式的预览图。
previews/<cut>.jpg | 外观 | 音乐 | JSON 中的钩子 |
|---|---|---|---|
| 完整年度,约 50 秒,Spotify Wrapped 风格:绿色背景上的醒目数字、带 Agent 标志的柱状图、项目、凌晨 3 点时钟、经验教训和人格 | Future bass | |
| 30 秒,第一人称(“我花了 724 小时”):黑绿背景上的巨型数字、用户自己的文案,以“你的呢?”收尾 | Big room EDM | |
| 一张燃烧的办公桌、脏话计数器、对用户原话打码的排行榜、高峰月份、鸣笛声 | Rage trap | |
| “我对 Agent 说了 16 次‘不行’”:先以聊天气泡展示那次会话中的反复纠正,再展示重试 | Glitch hop | |
| commit 和 pull request,然后是各 Agent 联署情况的柱状图 | Heist jazz | |
| 夜幕下的城市:最长的一天、连续活跃记录、最晚的夜晚 | Dark synthwave | |
| 顶层豪华办公室:用户管理的 Agent、工具调用,以及每位 Agent 的分级绩效评估 | Mafia trap | |
| 像素艺术和速通计时器:各阶段用时、使用的跳过、失败次数 | Chiptune | |
| 喧闹的 brainrot 背景、一次一个词的超大字幕(“低调地说,我的罗马帝国”“气场”) | Phonk | |
| 一则虚假的 LinkedIn 帖子:“本人深感荣幸地宣布”、一张男子与机器人握手的图库照片,以及“同意吗?” | Corporate ukulele | |
| 丛林、一个巨大的褪色数字、关于用户内容的自然纪录片字幕 | Orchestral | |
| 电视演播室:LIVE 角标、方框中的大数字、突发新闻下三分之一字幕、滚动字幕条 | News theme | |
| 日落场景,把 Agent 做成约会资料卡:主角、前任、暧昧聊天阶段、危险信号 | R&B slow jam | |
| S 到 D 的分级榜,Agent 标志落入各行 | Hard trap | |
| 柜台上的打印收据,每项统计一行,人格作为总计,附条形码 | Elevator bossa | |
| 暴风雨中的城市、宽字距衬线体标题卡(“在一个 Agent 编写代码的世界里”),人格作为标题 | Trailer braams | |
| Agent 们围绕用户八卦的群聊,Agent 标志作为头像 | Lofi | |
| 用户与 Agent 的真实消息,每屏一条,类似聊天截图:用户发送的消息类型和内容,随后显示 Agent 的回复。支持任何语言 | Comedy hip hop | |
如果某种格式的数据为零或过少,应将其排除(2 次脏话还算不上开发暴怒)。除 外,所有格式都为发布而设计:不展示项目、工具或模型,屏幕上的脏话也会经过打码。所有短格式时长约为 13 至 30 秒。
full3. Write the lessons
3. 编写经验教训
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:
corrections.sampleslessons- : 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").
rule - : how many of the samples that rule covers. Count honestly; the video prints it.
count
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.
lessonspersona.line读取 JSON 中的 :这些是用户实际反驳 Agent 时使用的 prompt。按照 Agent 反复犯的错误对这些样本进行分组,并编写最多 3 条 ,出现频率最高的排在前面:
corrections.sampleslessons- :用户可以粘贴到 CLAUDE.md 或 AGENTS.md 中的指令,最多 8 个词,使用祈使语气并且具体明确(
rule、Use bun, never npm、Run the tests before saying done)。Ask before deleting files - :该规则覆盖的样本数量。如实计数;视频会打印该数字。
count
跳过一次性抱怨,以及任何包含人员、客户或机密信息的样本。如果没有重复出现的模式,则将 留空。可以润色 ,但其数字必须与计算结果完全一致。
lessonspersona.line4. Pick the quotes
4. 选择引语
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 :
promptSamplesquotes.linesdatetimeagent- 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.--blur-projects
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.
quotes.titlequotes.linesOnly for the formats they picked:
- :
loopholds that session's pushback. Reorder it so the two funniest come first (the video shows two), by the same rules as the quotes.loop.lines - : read
convo, things they typed (exchangeSamples) with the agent's first words back (text), and copy the 3 or 4 funniest pairs intoreply, funniest first, keepingconvo,dateandtime. 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. Leaveagentempty to skip the cut.convo - : write
boss, a performance review for each of the top 4 agents inreviews:agents, aname("A+", "B-", "C") and agradeof at most 6 words, a joke grounded in its real numbers ("969 sessions. Never sleeps."). Leave it empty to skip the card.line
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.
fullfullsocialconvo读取 :其中包含用户全年输入的最多 200 条简短 prompt。先感受用户与 Agent 交谈的方式,例如直接、礼貌、全大写、拼写错误、凌晨 3 点的绝望或小胜利;然后将 3 或 4 条最像用户会说的话复制到 中,并保留每条引语的 、 和 :
promptSamplesquotes.linesdatetimeagent- 选择有趣、异常具体或非常符合用户风格的句子。陌生人无需上下文也应该能理解笑点。混合不同情绪,跳过无聊的任务描述。
- 保留用户原话、拼写错误和大小写。可以将引语截短为最精彩的部分,最多 120 个字符,但绝不能添加词语。
- 跳过任何包含机密信息、、人员或客户姓名,以及用户不愿发布的内容。使用
********时,还要跳过提及项目名称的引语。--blur-projects
编写 :最多 6 个词,使用用户自己的语气来引出这些引语,例如“你在凌晨 3 点说过的话”或“你的 Agent 留下证据了”。如果没有值得发布的内容,将 留空;此时整张卡片会被省略。
quotes.titlequotes.lines仅针对用户选择的格式:
- :
loop保存该次会话中的反复纠正。按照与引语相同的规则重新排序,把最好笑的两条放在最前面(视频会显示这两条)。loop.lines - :读取
convo,其中包含用户输入的内容(exchangeSamples)及 Agent 的第一句回复(text)。将最好笑的 3 或 4 对对话复制到reply中,最好笑的排在前面,并保留convo、date和time。回复才是笑点,例如 Agent 主动认错(“没错,是我把状态格式搞坏了。”)、“你说得完全对”,或对吐槽给出冷淡的回答。可以将回复截短为最有趣的部分,最多 100 个字符;用户输入最多 120 个字符。绝不能添加或翻译原词:Hindi、Hinglish 或任何其他语言都应按用户输入的样子显示。跳过规则与引语相同。对于agent,在boss中为前 4 个 Agent 分别编写agents,内容包括reviews、name(“A+”“B-”“C”)以及最多 6 个词的grade。这些玩笑必须基于 Agent 的真实数据,例如“969 次会话。从不睡觉。”。如果没有值得发布的内容,将line留空,以省略该卡片。reviews
保存编辑后的 JSON。经验教训只会出现在 中,引语只会出现在 和 中, 只出现在自己的 cut 中,因此跳过所选格式不需要的步骤。
fullfullsocialconvo5. Write the jokes
5. 编写笑话
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:
fullsh
<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.
Angle - : their numbers, already worked out: who they cheat on, who they ghosted, their worst hour, the pleases against the swears.
Facts - : 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).
Their words - : each card that takes a joke, what it already shows, and its limit.
Cards
Write one into , keyed by card id ().
A card left out keeps its built-in joke, so skip any you cannot beat. For
, the thread goes in as .
lines"lines": { "rageHook": "..." }chatchat{ "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
Facts.Their words - 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.
除 外,每种格式都是 meme,其中的笑话应围绕当前用户,而不是泛泛而谈。用户不应该需要解释笑点;下面的 brief 已包含必要信息。针对用户选择的每种格式,打印其 brief:
fullsh
<skill-dir>/wrapped.sh lines "${TMPDIR:-/tmp}/wrapped.json" --cut <name>仅根据 brief 编写笑话,无需再次读取 JSON。
- :该格式的喜剧角度。每条内容都必须围绕这一角度展开。
Angle - :用户的数据已经计算完成,例如他们“出轨”或“冷落”了谁、最糟糕的时段,以及“please”与脏话之间的对比。
Facts - :用户最强烈的 prompt,以及 Agent 主动认错的时刻,必须逐字引用。用户亲自输入的内容胜过任何凭空编写的句子,因此应直接引用(可以截短,但绝不能改写)。
Their words - :每张可承载笑话的卡片、它已经展示的内容,以及它的长度限制。
Cards
针对每张卡片,在 中写入一条内容,并以 card id 作为键()。未填写的卡片会保留内置笑话,因此无法胜过内置笑话时直接跳过。对于 ,对话线程要写入 ,格式为 。
lines"lines": { "rageHook": "..." }chatchat{ "from": "<agent id>" | "me", "text": "..." }- 要像 meme 账号一样写作,而不是工作报告:吐槽用户和他们的 Agent,内容要具体、略带失控,并以 punchline 收尾。使用用户自己的俚语和语言(Hinglish 仍使用 Hinglish)。
- 绝不能编造或更改数字;视频会原样打印你写下的内容。
- 称呼用户时使用 “I”、“me” 或 “they”,绝不使用 “he” 或 “she”:历史记录无法说明用户的性别。
- 不包含项目、客户或人员姓名,不包含机密信息,也不包含用户不愿发布的内容。屏幕上的脏话无论如何都会经过打码。
随后检查每一行,并重写所有不合格的内容:
- 它包含 中的数字或
Facts中的原话。Their words - 如果换成另一个用户,这句话就会不成立。
- 它补充了卡片尚未表达的内容:例如,在“350 次”下面添加贴纸时,应带来新事实或 punchline,而不是再次重复 350。
- 陌生人无需上下文也能发笑或感到尴尬。
- 没有两行依赖同一个引语或事实;每张卡片都有自己的笑话。
- 没有超出该卡片的限制。
6. Render
6. 渲染
sh
<skill-dir>/wrapped.sh render "${TMPDIR:-/tmp}/wrapped.json" -o ~/Desktop/agent-wrapped-<year>.mp4Use 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 (); 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.
~/Desktop--format square--blur-projects--cut <name>agent-wrapped-<year>-<cut>.mp4sh
<skill-dir>/wrapped.sh render "${TMPDIR:-/tmp}/wrapped.json" -o ~/Desktop/agent-wrapped-<year>.mp4如果 存在,则使用该目录;否则使用当前目录,除非用户指定了其他位置。对于 X 或 LinkedIn 信息流,使用 (1080x1080);默认使用适合 Stories、Reels 和 TikTok 的竖屏格式(1080x1920)。当用户希望隐藏项目名称和会话标题时,添加 。添加 传入用户选择的格式,并将每个选中的格式分别渲染到独立文件();每次都会重新读取 JSON,不会重复统计。每种格式都有各自的音乐轨,与各 cut 使用同一节拍,并在每次命中节拍时加入音效。
~/Desktop--format square--blur-projects--cut <name>agent-wrapped-<year>-<cut>.mp4Report
报告
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.
full提供视频路径、其他值得制作的格式(参见第 2 步)、核心数据(时长、会话数、排名第一的 Agent)、人格、挑选出的经验教训和引语。主动提出可以把经验教训添加到用户的 CLAUDE.md 或 AGENTS.md 中。提醒用户, 会显示项目名称,除非已进行模糊处理;每种格式都可能显示用户输入过的内容,因此发布前应先观看视频。
full