agent-wrapped

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Agent Wrapped

Agent Wrapped

Run everything through
wrapped.sh
next to this file. On first use it downloads the latest
agent-wrapped
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,
wrapped.sh
works from Git Bash. From PowerShell with no
sh
, 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.
所有操作均通过本文件旁的
wrapped.sh
运行。首次使用时,它会从 GitHub 下载与当前 OS 和 CPU 匹配的最新版
agent-wrapped
到
~/.local/share/agent-wrapped
(下载大小为 40 至 60 MB),并且每天最多检查一次是否有新版,因此不要手动安装任何内容。某台机器首次生成视频时还会下载 Chrome Headless Shell,请预留几分钟。
在 Windows 上,
wrapped.sh
可从 Git Bash 运行。如果 PowerShell 中没有
sh
,请运行
powershell -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
--year 2025
for another year and
--name "..."
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.
sh
<skill-dir>/wrapped.sh stats -o "${TMPDIR:-/tmp}/wrapped.json"
它会找出所有具有本地历史记录的受支持 Agent,按会话数排序,并打印一行摘要。要查看其他年份,可添加
--year 2025
;如果用户为第一张卡片提供了名称,可添加
--name "..."
。JSON 包含 prompt 摘录,因此应将其保存在临时目录中,绝不能放进项目。
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
next to this file is a frame of each format. If you can show images, show the previews of the formats you offer.
--cut
What it looks likeMusicHook from the JSON
full
The whole year, about 50s, Spotify Wrapped style: big numbers on green, agent bars with their logos, projects, a 3am clock, lessons, personaFuture bass
totals.hours
,
agents[0].name
social
30s, first person ("I spent 724 hours"): giant numbers on black and green, their own lines, ends on "What's yours?"Big room EDM
totals.hours
,
persona.title
rage
A desk on fire, a swear counter, a censored leaderboard of their words, the peak month, air hornsRage trap
swears.total
,
swears.words
loop
"I told my agent no 16 times": their pushback from that session as chat bubbles, then the retriesGlitch hop
loop.corrections
,
loop.retries
credit
Commits and pull requests, then bars of which agents co-signed themHeist jazz
git.commits
,
git.coAuthors
grind
A city at night: the longest day, the streak, the latest nightDark synthwave
busiestDay.hours
,
streak.days
boss
A penthouse office: the agents they manage, the tool calls, a graded performance review per agentMafia trap
agents.length
,
totals.toolCalls
speedrun
Pixel art and a speedrun timer: splits, skips used, deathsChiptune
totals.hours
,
totals.failedCommands
genz
A loud brainrot backdrop, huge captions one word at a time ("lowkey my roman empire", "aura")Phonk
swears.please
,
corrections.total
linkedin
A fake LinkedIn post: "I'm humbled to announce", a stock photo of a man shaking a robot's hand, "Agree?"Corporate ukulele
totals.sessions
,
corrections.total
docu
A jungle, a giant faded number, nature documentary subtitles about themOrchestral
lateNight
,
swears.words
news
A TV studio: LIVE bug, a big number in a box, breaking news chyron, scrolling tickerNews theme
swears.total
,
loop.retries
dating
A sunset, their agents as dating profile cards: the main one, the ex, the talking stage, red flagsR&B slow jam
agents
(needs 2 or more)
tier
An S to D tier list, agent logos dropping into the rowsHard trap
agents
(needs 3 or more)
receipt
A printed receipt on a counter, a line per stat, the persona as the total, a barcodeElevator bossa
totals
trailer
A stormy city, spaced serif title cards ("In a world where agents write the code"), the persona as the titleTrailer braams
totals.hours
,
persona.title
chat
Their agents' group chat gossiping about them, logos as avatarsLofi
agents
(needs 2 or more),
swears.please
convo
Their real messages with their agents, one per screen like a chat screenshot: their line types and sends, the agent's reply lands. Any languageComedy hip hop
exchangeSamples
(pick
convo
),
totals.prompts
Leave out a format whose numbers are zero or tiny (2 swears is not dev rage). Every format but
full
is made to post: no projects, tools or models, and swears are censored on screen. All are about 13 to 30 seconds.
除非用户已经说明想用哪种格式,否则提供菜单:列出每种格式的效果,并使用 JSON 中该用户自己的数字作为钩子。推荐数据最极端的一种,然后停止操作,等待用户选择一种或多种。除非用户明确指定,否则绝不能代为选择。
当用户指定了格式或要求不要询问时,生成该格式,并在报告中逐行列出其他适合其数据的格式及对应钩子,方便用户继续要求更多。不会重复统计:每增加一种格式,都有独立的笑话(第 5 步)和一次渲染。
本文件旁的
previews/<cut>.jpg
是每种格式的一帧预览图。如果能够显示图片,请展示所有待选格式的预览图。
--cut
外观音乐JSON 中的钩子
full
完整年度,约 50 秒,Spotify Wrapped 风格:绿色背景上的醒目数字、带 Agent 标志的柱状图、项目、凌晨 3 点时钟、经验教训和人格Future bass
totals.hours
、
agents[0].name
social
30 秒,第一人称(“我花了 724 小时”):黑绿背景上的巨型数字、用户自己的文案,以“你的呢?”收尾Big room EDM
totals.hours
、
persona.title
rage
一张燃烧的办公桌、脏话计数器、对用户原话打码的排行榜、高峰月份、鸣笛声Rage trap
swears.total
、
swears.words
loop
“我对 Agent 说了 16 次‘不行’”:先以聊天气泡展示那次会话中的反复纠正,再展示重试Glitch hop
loop.corrections
、
loop.retries
credit
commit 和 pull request,然后是各 Agent 联署情况的柱状图Heist jazz
git.commits
、
git.coAuthors
grind
夜幕下的城市:最长的一天、连续活跃记录、最晚的夜晚Dark synthwave
busiestDay.hours
、
streak.days
boss
顶层豪华办公室:用户管理的 Agent、工具调用,以及每位 Agent 的分级绩效评估Mafia trap
agents.length
、
totals.toolCalls
speedrun
像素艺术和速通计时器:各阶段用时、使用的跳过、失败次数Chiptune
totals.hours
、
totals.failedCommands
genz
喧闹的 brainrot 背景、一次一个词的超大字幕(“低调地说,我的罗马帝国”“气场”)Phonk
swears.please
、
corrections.total
linkedin
一则虚假的 LinkedIn 帖子:“本人深感荣幸地宣布”、一张男子与机器人握手的图库照片,以及“同意吗?”Corporate ukulele
totals.sessions
、
corrections.total
docu
丛林、一个巨大的褪色数字、关于用户内容的自然纪录片字幕Orchestral
lateNight
、
swears.words
news
电视演播室:LIVE 角标、方框中的大数字、突发新闻下三分之一字幕、滚动字幕条News theme
swears.total
、
loop.retries
dating
日落场景,把 Agent 做成约会资料卡:主角、前任、暧昧聊天阶段、危险信号R&B slow jam
agents
(需要至少 2 个)
tier
S 到 D 的分级榜,Agent 标志落入各行Hard trap
agents
(需要至少 3 个)
receipt
柜台上的打印收据,每项统计一行,人格作为总计,附条形码Elevator bossa
totals
trailer
暴风雨中的城市、宽字距衬线体标题卡(“在一个 Agent 编写代码的世界里”),人格作为标题Trailer braams
totals.hours
、
persona.title
chat
Agent 们围绕用户八卦的群聊,Agent 标志作为头像Lofi
agents
(需要至少 2 个)、
swears.please
convo
用户与 Agent 的真实消息,每屏一条,类似聊天截图:用户发送的消息类型和内容,随后显示 Agent 的回复。支持任何语言Comedy hip hop
exchangeSamples
(选择
convo
)、
totals.prompts
如果某种格式的数据为零或过少,应将其排除(2 次脏话还算不上开发暴怒)。除
full
外,所有格式都为发布而设计:不展示项目、工具或模型,屏幕上的脏话也会经过打码。所有短格式时长约为 13 至 30 秒。

3. Write the lessons

3. 编写经验教训

Read
corrections.samples
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
lessons
, most frequent first:
  • rule
    : 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").
  • count
    : 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
lessons
empty if no pattern repeats. You may sharpen
persona.line
, but keep its number exactly as computed.
读取 JSON 中的
corrections.samples
:这些是用户实际反驳 Agent 时使用的 prompt。按照 Agent 反复犯的错误对这些样本进行分组,并编写最多 3 条
lessons
,出现频率最高的排在前面:
  • rule
    :用户可以粘贴到 CLAUDE.md 或 AGENTS.md 中的指令,最多 8 个词,使用祈使语气并且具体明确(
    Use bun, never npm
    、
    Run the tests before saying done
    、
    Ask before deleting files
    )。
  • count
    :该规则覆盖的样本数量。如实计数;视频会打印该数字。
跳过一次性抱怨,以及任何包含人员、客户或机密信息的样本。如果没有重复出现的模式,则将
lessons
留空。可以润色
persona.line
,但其数字必须与计算结果完全一致。

4. Pick the quotes

4. 选择引语

Read
promptSamples
: 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
quotes.lines
, keeping each one's
date
,
time
and
agent
:
  • 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
    --blur-projects
    , also skip quotes that name a project.
Write
quotes.title
: at most 6 words, in the user's own tone, introducing the quotes ("Things you said at 3am", "Your agent has receipts"). Leave
quotes.lines
empty if nothing is worth posting; the card is then left out.
Only for the formats they picked:
  • loop
    :
    loop.lines
    holds that session's pushback. Reorder it so the two funniest come first (the video shows two), by the same rules as the quotes.
  • convo
    : read
    exchangeSamples
    , things they typed (
    text
    ) with the agent's first words back (
    reply
    ), and copy the 3 or 4 funniest pairs into
    convo
    , funniest first, keeping
    date
    ,
    time
    and
    agent
    . 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
    convo
    empty to skip the cut.
  • boss
    : write
    reviews
    , a performance review for each of the top 4 agents in
    agents
    :
    name
    , a
    grade
    ("A+", "B-", "C") and a
    line
    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
full
, quotes in
full
and
social
, and
convo
in its own cut, so skip the steps a picked format does not use.
读取
promptSamples
:其中包含用户全年输入的最多 200 条简短 prompt。先感受用户与 Agent 交谈的方式,例如直接、礼貌、全大写、拼写错误、凌晨 3 点的绝望或小胜利;然后将 3 或 4 条最像用户会说的话复制到
quotes.lines
中,并保留每条引语的
date
、
time
和
agent
:
  • 选择有趣、异常具体或非常符合用户风格的句子。陌生人无需上下文也应该能理解笑点。混合不同情绪,跳过无聊的任务描述。
  • 保留用户原话、拼写错误和大小写。可以将引语截短为最精彩的部分,最多 120 个字符,但绝不能添加词语。
  • 跳过任何包含机密信息、
    ********
    、人员或客户姓名,以及用户不愿发布的内容。使用
    --blur-projects
    时,还要跳过提及项目名称的引语。
编写
quotes.title
:最多 6 个词,使用用户自己的语气来引出这些引语,例如“你在凌晨 3 点说过的话”或“你的 Agent 留下证据了”。如果没有值得发布的内容,将
quotes.lines
留空;此时整张卡片会被省略。
仅针对用户选择的格式:
  • loop
    :
    loop.lines
    保存该次会话中的反复纠正。按照与引语相同的规则重新排序,把最好笑的两条放在最前面(视频会显示这两条)。
  • convo
    :读取
    exchangeSamples
    ,其中包含用户输入的内容(
    text
    )及 Agent 的第一句回复(
    reply
    )。将最好笑的 3 或 4 对对话复制到
    convo
    中,最好笑的排在前面,并保留
    date
    、
    time
    和
    agent
    。回复才是笑点,例如 Agent 主动认错(“没错,是我把状态格式搞坏了。”)、“你说得完全对”,或对吐槽给出冷淡的回答。可以将回复截短为最有趣的部分,最多 100 个字符;用户输入最多 120 个字符。绝不能添加或翻译原词:Hindi、Hinglish 或任何其他语言都应按用户输入的样子显示。跳过规则与引语相同。对于
    boss
    ,在
    agents
    中为前 4 个 Agent 分别编写
    reviews
    ,内容包括
    name
    、
    grade
    (“A+”“B-”“C”)以及最多 6 个词的
    line
    。这些玩笑必须基于 Agent 的真实数据,例如“969 次会话。从不睡觉。”。如果没有值得发布的内容,将
    reviews
    留空,以省略该卡片。
保存编辑后的 JSON。经验教训只会出现在
full
中,引语只会出现在
full
和
social
中,
convo
只出现在自己的 cut 中,因此跳过所选格式不需要的步骤。

5. Write the jokes

5. 编写笑话

Every format but
full
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.
  • Angle
    : the format's comedy. Every line plays it.
  • Facts
    : their numbers, already worked out: who they cheat on, who they ghosted, their worst hour, the pleases against the swears.
  • Their words
    : 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).
  • Cards
    : each card that takes a joke, what it already shows, and its limit.
Write one into
lines
, keyed by card id (
"lines": { "rageHook": "..." }
). A card left out keeps its built-in joke, so skip any you cannot beat. For
chat
, the thread goes in
chat
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:
  1. It holds a number from
    Facts
    or words from
    Their words
    .
  2. It would be wrong about any other user. A line that fits everyone is a miss.
  3. 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.
  4. A stranger would laugh, or wince, without context.
  5. No two lines lean on the same quote or fact; each card gets its own joke.
  6. It is within its limit.
除
full
外,每种格式都是 meme,其中的笑话应围绕当前用户,而不是泛泛而谈。用户不应该需要解释笑点;下面的 brief 已包含必要信息。针对用户选择的每种格式,打印其 brief:
sh
<skill-dir>/wrapped.sh lines "${TMPDIR:-/tmp}/wrapped.json" --cut <name>
仅根据 brief 编写笑话,无需再次读取 JSON。
  • Angle
    :该格式的喜剧角度。每条内容都必须围绕这一角度展开。
  • Facts
    :用户的数据已经计算完成,例如他们“出轨”或“冷落”了谁、最糟糕的时段,以及“please”与脏话之间的对比。
  • Their words
    :用户最强烈的 prompt,以及 Agent 主动认错的时刻,必须逐字引用。用户亲自输入的内容胜过任何凭空编写的句子,因此应直接引用(可以截短,但绝不能改写)。
  • Cards
    :每张可承载笑话的卡片、它已经展示的内容,以及它的长度限制。
针对每张卡片,在
lines
中写入一条内容,并以 card id 作为键(
"lines": { "rageHook": "..." }
)。未填写的卡片会保留内置笑话,因此无法胜过内置笑话时直接跳过。对于
chat
,对话线程要写入
chat
,格式为
{ "from": "<agent id>" | "me", "text": "..." }
。
  • 要像 meme 账号一样写作,而不是工作报告:吐槽用户和他们的 Agent,内容要具体、略带失控,并以 punchline 收尾。使用用户自己的俚语和语言(Hinglish 仍使用 Hinglish)。
  • 绝不能编造或更改数字;视频会原样打印你写下的内容。
  • 称呼用户时使用 “I”、“me” 或 “they”,绝不使用 “he” 或 “she”:历史记录无法说明用户的性别。
  • 不包含项目、客户或人员姓名,不包含机密信息,也不包含用户不愿发布的内容。屏幕上的脏话无论如何都会经过打码。
随后检查每一行,并重写所有不合格的内容:
  1. 它包含
    Facts
    中的数字或
    Their words
    中的原话。
  2. 如果换成另一个用户,这句话就会不成立。
  3. 它补充了卡片尚未表达的内容:例如,在“350 次”下面添加贴纸时,应带来新事实或 punchline,而不是再次重复 350。
  4. 陌生人无需上下文也能发笑或感到尴尬。
  5. 没有两行依赖同一个引语或事实;每张卡片都有自己的笑话。
  6. 没有超出该卡片的限制。

6. Render

6. 渲染

sh
<skill-dir>/wrapped.sh render "${TMPDIR:-/tmp}/wrapped.json" -o ~/Desktop/agent-wrapped-<year>.mp4
Use
~/Desktop
when it exists, otherwise the current directory, unless the user names a place.
--format square
(1080x1080) for the X or LinkedIn feed; the default is vertical (1080x1920) for Stories, Reels and TikTok. Add
--blur-projects
when the user wants project names and session titles hidden. Add
--cut <name>
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.
sh
<skill-dir>/wrapped.sh render "${TMPDIR:-/tmp}/wrapped.json" -o ~/Desktop/agent-wrapped-<year>.mp4
如果
~/Desktop
存在,则使用该目录;否则使用当前目录,除非用户指定了其他位置。对于 X 或 LinkedIn 信息流,使用
--format square
(1080x1080);默认使用适合 Stories、Reels 和 TikTok 的竖屏格式(1080x1920)。当用户希望隐藏项目名称和会话标题时,添加
--blur-projects
。添加
--cut <name>
传入用户选择的格式,并将每个选中的格式分别渲染到独立文件(
agent-wrapped-<year>-<cut>.mp4
);每次都会重新读取 JSON,不会重复统计。每种格式都有各自的音乐轨,与各 cut 使用同一节拍,并在每次命中节拍时加入音效。

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
full
shows project names (unless blurred), and every format can show lines they typed, so they should watch it before posting.
提供视频路径、其他值得制作的格式(参见第 2 步)、核心数据(时长、会话数、排名第一的 Agent)、人格、挑选出的经验教训和引语。主动提出可以把经验教训添加到用户的 CLAUDE.md 或 AGENTS.md 中。提醒用户,
full
会显示项目名称,除非已进行模糊处理;每种格式都可能显示用户输入过的内容,因此发布前应先观看视频。