Home / All Skills / Content & Media Creation / day-in-my-life
Content & Media Creation · heygen-com/hyperframes-community-skills

day-in-my-life

> A 60 to 75 s hand-drawn ink film of the agent's day with its own user ("a day in my life as <name>'s agent"): one average session from the user's local Claude Code history, beginning to end. The story follows what they actually do (coding, tests, docs, shipping, videos, whatever the history shows), told with their real words (first message, check-ins, corrections, praise, memory titles). It is drawn in two-tone p5.brush strokes that boil at 8 fps and scored for strings composed note-for-note on the film's clock (the typed "claude" is the theme). Trigger on: "day in my life as my agent", "a film about me and my agent", "what is it like to be my agent", "animate your day with me", "make a video of our sessions". Covers harvesting the routine and receipts, the privacy gate, the chapter toolbox, the ink kit, the score, render and QC.

L4 High-Privilege · Graded auth & full auditV1 Commit-PinnedExecute CommandNetwork AccessWrite FileDual-pass Audit
Author heygen-comGitHub heygen-com/hyperframes-community-skills ↗Stars 156License Apache-2.0(仓库根 LICENSE)Commit ba7a0bb6d3
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

"Every line is a receipt": None of the text in the film is fabricated; instead, it consists of verbatim quotes extracted directly from the user's own Claude Code session history, and every line must be reviewed and approved by the user prior to rendering.

skills/day-in-my-life/SKILL.md
Every line on screen is a receipt. The user approves each one before anything renders.
What is happening here: Reversing the high-risk approach of "an AI fabricating someone's day"—the material must already exist. If there are no local transcripts (e.g., only claude.ai is used), SKILL.md dictates an immediate stop, as the skill does not invent receipts.

An "ordinary day" is not hallucinated by a model, but statistically derived: harvest.py categorizes activities from tool calls in sessions (read/edit/test/build/run/install/commit/PR/deploy/fetch/render/browse/delegate), counts the occurrence rate and median position of each activity across sessions, and defines this day using "the week with the most sessions + that week's median first message time".

skills/day-in-my-life/scripts/harvest.py
# the day: the weekday with the most sessions, and its usual start time (mornings preferred)
The activity lookup table ACTS in the same file is a triplet of (activity, tool names, Bash command regex), with comments stating 'What the agent did, from its own tool calls: the user's routine, whatever their work is.'

User verbatim quotes are grouped into chapters by type: CATS uses regex to categorize messages into chapter types such as building (agree/proceed), restart, knock (asking progress), notes (corrections), side-by-side (close enough), good-part (praise), frames, watching, kept (remember/next time), and sets a "maximum quotable length" for each type.

skills/day-in-my-life/scripts/harvest.py
CATS = { # chapter type → pattern over the lowercased message (+ max length for short quotable lines)
Supporting statistics include: count of identical short message repetitions (check-ins), sentence-level splitting to capture short, verbatim lines (SENT regex), and typical session appearance offsets for each category of utterance (said_at), used to lay out chapters onto the timeline.

The surface for reading material is strictly scoped and declared as purely local: it only reads ~/.claude/projects/*/*.jsonl, memory/*.md beneath them, and the project's CLAUDE.md, without writing, modifying, or uploading anything.

skills/day-in-my-life/scripts/harvest.py
Reads (never writes, never uploads):
The Requirements in SKILL.md reiterate this exact scope and add 'Nothing is uploaded.'; harvest.py also deliberately skips transcripts written within the last 30 minutes (which would be the current session).

The privacy gate is an executable structural validation rather than a verbal honor system: new-film.mjs scans field-by-field with regex before generating story.js, raising errors on credential patterns (sk-/ghp_/github_pat_/xox?-/AKIA/BEGIN private keys), email addresses, and file paths, while only warning on URLs; furthermore, if story.approved is not set to true, it warns that the user must inspect every line first.

skills/day-in-my-life/scripts/new-film.mjs
if (SECRET.some(r => r.test(t))) errs.push(`${at}.${k}: looks like a credential; remove it`);
Two supporting rules: the same function defines const SECRET = [...] with seven regexes; and 'if (!story.approved) warns.push('story.approved is not true: show the user every on-screen line (with its receipt) and get a yes before rendering');'. When story.js is generated, the receipts field is stripped ('// provenance stays in story.json, never on the page'), keeping provenance only in local story.json.

The timeline is **strictly locked** to archetypes.json: Each chapter defines bars and seconds for various events, all aligned to a 96 BPM grid; both the visual scenes (scenes.js) and the score (score.py) derive timing from this single table, ensuring no drift even if chapter order changes.

skills/day-in-my-life/assets/template/archetypes.json
Single source of truth for the film clock. scenes.js draws every event at these times and scripts/score.py composes on them, so picture and music cannot drift.
Quantization reference in the same file: 'Times are seconds from the chapter start; every one sits on the 96 BPM grid (beat = 0.625 s, bar = 2.5 s).' Additionally, a check field specifies the "payload instant" for each chapter to sample design frames; the rule in SKILL.md states: 'Never retime one without the other.'

Visuals are rendered frame-by-frame (not DOM/CSS animations): the kit draws each frame on a hidden p5/WEBGL canvas, then composites it to visible #out; the "boil" effect = ~8 drawings/s, changing every 3 frames, with no hold exceeding 3 frames, all verified by qc.py directly measured from the rendered MP4.

skills/day-in-my-life/assets/template/index.html
/* the kit paints in a hidden p5/WEBGL canvas and composites each drawing into #out */
The three stepping assertions for QC in qc.py are: 'check(7.5 <= rate <= 8.5, ...)', 'check(((idx % 3) == 0).mean() > .98, ...)', 'check(best + 1 <= 3, ...)'; rendering command uses --browser-gpu.

The musical score shares the exact timeline source with the visuals and is synthesized entirely locally: score.py reads the identical story.json + archetypes.json, composing two bars per chapter (96 BPM, D major, with the typed claude = D E F# A B A as the theme), synthesized and mastered locally via additive strings/Karplus-Strong plucking/synthetic reverb, with no network or credentials required.

skills/day-in-my-life/scripts/score.py
No network, no credentials. Needs numpy, scipy, ffmpeg.
Theme notes defined in the file: "THEME = ['D', 'E', 'F#', 'A', 'B', 'A'] # c l a u d e"; outputs reside under film/music/ (strings.mid/wav, strings-mix.wav, keys.wav), with loudness clamped by qc.py to 'loudness: -19 to -15 LUFS, true peak ≤ -1 dBTP'.

2Core Capabilities

01Harvest "receipts" from local Claude Code session history: initial message, approvals/nudges, corrections, praise, memory titles, executed commands with pass/fail exit codes, commit and PR titles
02Arrange the routine into an 8–13 chapter sequence (starting with intro, ending with tag, kept positioned right before tag; chapter types derived from CATS)
03Privacy gate: validator structurally rejects credentials/emails/file paths, enforcing "user approved" as a hard gating check for rendering
04Design frame extraction: without relying on HyperFrames, opens local index.html via headless Chromium to extract frames and build a contact sheet with timestamps (one frame per chapter in chapters mode)
05Two-tone ink brush stroke visuals (frame-by-frame p5.brush rendering, hidden canvas compositing, ~8 drawings/s boil, lowercase subtitles with no periods)
06Local composition and mastering: composes 5-track strings (vln1/vln2/vla/vc/cb) based on the single chapter table, exports MIDI for soundfont swaps, synthesizes and masters into strings-mix.wav and typing key clicks keys.wav
07Post-render QC: stepping (~8 drawings/s, aligned to a 3-frame grid, no long holds), seams (wipe/swallow must contain a full-ink frame), lamp (sync between fade-to-black and audio mute), loudness (-19..-15 LUFS, true peak ≤ -1 dBTP)
08Local rendering: render using hyperframes@0.8.70 at 24 fps / crf 12 / --browser-gpu (WebGL-rendered pages)

3External Dependencies

KindDependency / Endpoint
cliHyperFrames CLI(钉死 0.8.70,经 npx 从 npm 取;check 与 render)
cliffmpeg(配乐母带、QC 解码与响度量测、渲染链路)
packagep5 2.3.2 (LGPL-2.1) / p5.brush 2.2.1 (MIT) / puppeteer 25.9.0(含其钉死的 Chrome for Testing),由 lockfile 钉住
packagePython3 + numpy + scipy(配乐合成与母带);harvest.py 只用标准库
networkGoogle Fonts:合成页在预览/渲染时加载手写字体 Gochi Hand(SIL OFL)
network素材来源(唯一):用户本机的 Claude Code 转录、memory 文件与相关项目的 CLAUDE.md;不上传

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Graded/per-use authorization, sandbox recommended
For Administrators
Approval workflow, rollback support, full audit
Evidence & Triggers (File Paths & Excerpts)
  • scripts/: Executes local script or command: python3 scripts/harvest.py --out <film>/receipts.json (reads local transcripts only; --root defaults to ~/.c
  • 网络端点: Declares external network access: registry.npmjs.org: setup runs npm ci to install locked p5/p5.brush/puppeteer, plus npx --ye on every run
  • 本地工作目录: File I/O and artifact outputs: within film directory: receipts.json, story.json, story.js, index.html (rewrites data-duration), mus
Audit Notes: Evaluated as Yellow rather than Blue because execution entails expected network access and third-party dependencies: setup installs pinned versions of p5/p5.brush/puppeteer from npm registry (triggering a Chrome for Testing download), each check/render pulls hyperframes@0.8.70 via npx, and the render page fetches Gochi Hand from fonts.googleapis.com (thus not completely offline). Justification for avoiding Orange: there is **no credential reading** across the directory (no env keys/tokens/cookies/keychain; SECRET in new-film.mjs is an interception regex, not an ingest rule), transcripts are read-only and never uploaded, and SKILL.md explicitly specifies no credentials, no paid calls. What users need to be aware of is that it **reads the user's entire local Claude Code history** (including potentially sensitive quotes) and uses regex as a privacy gate—a solid barrier, but not a strict whitelist, ultimately relying on human review via story.approved. No TLS downgrades, scraping bypasses, or arbitrary code execution surfaces were detected (subprocesses only invoke ffmpeg and bundled scripts).

5Second-Pass Verification

  • [ok] 脚本是否读凭证(黄/橙分界的关键) — 全目录 grep process.env / os.environ 零命中;harvest.py 走 argparse 参数(--root/--tz/--project),score.py/qc.py 无环境变量入口。new-film.mjs 的 SECRET 常量是用于**拒绝**凭证形状的正则,不是读取。因此橙档第一条不成立。
  • [ok] 『Nothing is uploaded』声明是否真的成立 — harvest.py(读转录)import 仅 argparse/collections/datetime/glob/json/os/re/statistics,无任何网络模块;score.py 只 subprocess 调 ffmpeg;shoot.mjs 只 page.goto('file://…');qc.py 只跑 ffmpeg 解码。唯一出网行为是 setup 的 npm ci、每次 npx 取 hyperframes 与页面加载 Google Fonts。
  • [ok] Use 门槛(至少 10 个本地会话、跨 5 个活跃日)是否真在代码里 — harvest.py:256 'enough': len(sessions) >= 10 and len(days) >= 5,并在运行摘要里打印 'enough material: {out["enough"]}';与 SKILL.md 的 Use 条件一致,且 SKILL.md 要求 enough 为 false 时停下。
  • [ok] 隐私闸(凭证/邮箱/路径/URL)是否真有拦截面 — new-film.mjs 的 validate() 对每章每个字符串字段:SECRET 命中 → errs('looks like a credential; remove it');EMAIL 命中 → errs;PATH 命中 → errs;URL 命中 → warns。errs 非空即 exit 1,故是硬拦截。
  • [discrepancy] 『故事必须经用户批准』是否被强制 — SKILL.md 的 Rules 写 'Approval before render.',但代码层面 story.approved 未置 true 时只产生一条 warn('story.approved is not true: show the user every on-screen line …'),并不阻断 --sync 或渲染。也就是说这是一道人工程序纪律,不是技术门禁;SKILL.md 的措辞(`story.approved` is set only by the user's yes)容易被读成强制。该出入对 pin commit 有效。
  • [discrepancy] 『8 到 13 章』是否被校验 — SKILL.md Workflow 第 3 步写 '8 to 13 chapters.',但 new-film.mjs 的 validate() 只校验:非空、首章必须是 intro、末章必须是 tag、kept 必须紧邻 tag 之前、各章型必需字段;没有章数上下限检查。故 8–13 是写作纪律而非校验规则。
  • [ok] 单一时间轴声明是否成立(画面与配乐同源) — archetypes.json 的 about 明写 scenes.js 与 scripts/score.py『both read it』;score.py 文档行也声明读 story.json + archetypes.json('the same table scenes.js draws from')。两处一致,未见第二处时钟。
  • [ok] 没有本地转录时的行为 — harvest.py:137 'if not sessions: raise SystemExit(f\'no sessions under {a.root}: nothing to harvest\')',且没有任何兜底造数路径;与 SKILL.md『this skill never invents receipts』一致。

6Verdict & Scenarios

  • Three-layer privacy architecture codified in logic: read-only local access with zero uploads, hard regex rejection for credentials/emails/paths, and mandatory explicit user approval prior to render
  • Rigorous material discipline: all lines are verbatim quotes, derived via statistical counts, never inventing steps absent from history; immediately terminates if no local transcripts exist
  • Single clock table guarantees visual and score alignment without drift, maintaining sync and tonal key even if chapters are reordered
  • Fully quantified QC measured directly from the finished video (stepping grid, seam full-ink frames, lamp A/V sync, loudness), removing subjective guesswork
  • Engineering reproducibility: dependencies pinned via lockfile, CLI version locked, extending chapters requires only adding entries to archetypes/REQUIRED (ordering validated automatically)
  • Best for: Best for: Users who actively work with Claude Code locally and want to turn "an ordinary day with my agent" into a 1–2 minute ink animation film—materials are automatically harvested from real sessions (first messages, nudges, corrections, praise, commit messages), the musical score is beat-synced, and the workflow requires contact-sheet review and line-by-line approval before rendering. Also ideal for developers studying structural privacy validation (regex gating + single clock table + quantifiable QC serve as a solid engineering pattern).
    Not for: Not for: ① Other people's history, team-shared logs, or marketing promo videos (explicitly excluded by SKILL.md); ② Users without local transcripts (aborts immediately if only claude.ai is used); ③ Those who do not want actual chat logs drawn into a video; ④ Environments requiring strictly offline rendering (fonts and CLI require network); ⑤ Projects demanding live-action or photorealistic aesthetics (this is a two-tone stroke animation); ⑥ Those unwilling to perform line-by-line manual reviews (receipt discipline requires users to inspect every line).
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload day-in-my-life.tar.gz
    sha256: 94c054dd0a6d242e…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit ba7a0bb6d3.