コンテンツ制作 · heygen-com/hyperframes-community-skills

day-in-my-life

> エージェントとユーザーの1日を描いた60〜75秒の手描きインク調ショートフィルム(「<name>のエージェントとしての私の1日」):ローカルのClaude Code履歴から、始まりから終わりまでの平均的な1セッションを再現します。ストーリーは実際の作業内容(コーディング、テスト、ドキュメント、リリース、動画など、履歴に記録されたすべて)を忠実になぞり、ユーザー自身の言葉(最初のメッセージ、進捗確認、修正指示、称賛、メモリタイトル)で語られます。8 fpsで沸き立つ(boil)2色のp5.brushストロークで描画され、フィルムのクロックに1音1音同期して作曲された弦楽アンサンブル(入力された「claude」がテーマ音)の劇伴がつけられます。トリガーワード:「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」。ルーティンと「レシート」の収集、プライバシーゲート、チャプターツールボックス、インクキット、劇伴、レンダリングおよびQCをカバーします。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author heygen-comGitHub heygen-com/hyperframes-community-skills ↗Stars 156License Apache-2.0(仓库根 LICENSE)Commit ba7a0bb6d3
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

「すべての行がレシートである」:作中のすべてのテキストは創作されたものではなく、ユーザー自身のClaude Codeセッション履歴から抽出された逐語的な引用であり、レンダリング前にユーザーが1行ずつ確認・承認する必要があります。

skills/day-in-my-life/SKILL.md
Every line on screen is a receipt. The user approves each one before anything renders.
ここで行われていること:「AIが人間の1日をでっち上げる」というリスクの高い手法を逆転させ、素材が事前に存在することを前提とします。ローカルの文字起こしがない場合(claude.aiのみなど)、SKILL.mdは即座に停止するよう定めています。スキル側でレシートを捏造することはありません。

「普通の一日」はモデルの想像ではなく統計から導出される:harvest.pyがセッション内のツール呼び出しからアクティビティを分類し(読込/編集/テスト/ビルド/実行/インストール/コミット/PR/デプロイ/取得/レンダリング/ウェブ閲覧/委譲)、各活動の出現率と中央値の位置を統計化し、「最もセッションが多かった週 + その週の中央値となる最初のメッセージ時刻」を基準としてその一日を定義します。

skills/day-in-my-life/scripts/harvest.py
# the day: the weekday with the most sessions, and its usual start time (mornings preferred)
同一ファイルのアクティビティ定義テーブル ACTS は (activity, tool names, Bashコマンド正規表現) の三つ組であり、コメントには 'What the agent did, from its own tool calls: the user's routine, whatever their work is.' と記されています。

ユーザーの生の言葉はタイプごとにチャプター化される:CATSは正規表現を用いてメッセージをbuilding(承認/進行)、restart、knock(進捗確認)、notes(修正)、side-by-side(惜しい)、good-part(褒め言葉)、frames、watching、kept(記憶/次回)などのチャプター種別に分類し、それぞれに「引用可能な最大長」を設定します。

skills/day-in-my-life/scripts/harvest.py
CATS = { # chapter type → pattern over the lowercased message (+ max length for short quotable lines)
付随する統計には、同一の短いメッセージが繰り返された回数(check-ins)、短く逐語的な行を抽出するための文単位分割(SENT正規表現)、タイムライン上に配置するための各発話の通常出現位置(said_at)が含まれます。

素材の読み込み範囲は限定され、完全ローカルと宣言されている:~/.claude/projects/*/*.jsonl、その配下のmemory/*.md、および関連プロジェクトのCLAUDE.mdのみを読み込み、書き込み・変更・アップロードは一切行いません。

skills/day-in-my-life/scripts/harvest.py
Reads (never writes, never uploads):
SKILL.mdのRequirementsでも同一の範囲が記載され、'Nothing is uploaded.' と明記されています。また、harvest.pyは意図的に直近30分以内に書き込まれたログ(現在のセッション自身)をスキップします。

プライバシーゲートは口約束ではなく実行可能な構造バリデーションである:new-film.mjsはstory.js生成前に各フィールドを正規表現で走査し、クレデンシャル形式(sk-/ghp_/github_pat_/xox?-/AKIA/BEGIN秘密鍵)、メールアドレス、ファイルパスに合致した場合はエラーを出し、URLの場合は警告を発します。また、story.approvedがtrueでない場合、全行を事前にユーザーへ提示するよう促します。

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`);
対応する2つの仕様:同関数内で7つの正規表現を持つ const SECRET = [...] が定義されていること、および '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');'。また、story.js生成時にreceiptsフィールドは削除され('// provenance stays in story.json, never on the page')、出典はローカルのstory.jsonのみに残されます。

タイムラインはarchetypes.jsonに**完全に固定**されている:各チャプターには小節数(bars)と複数のイベント発生秒数が設定されており、すべて96 BPMのグリッド上に配置されます。映像(scenes.js)と劇伴(score.py)の双方がこの単一テーブルから時間を参照するため、チャプター順を入れ替えてもタイミングが狂いません。

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.
同一ファイル内の定量基準:'Times are seconds from the chapter start; every one sits on the 96 BPM grid (beat = 0.625 s, bar = 2.5 s).'。また、各章の「ペイロード時刻」を指定するcheckフィールドがあり、絵コンテ抽出に利用されます。SKILL.mdのルールには 'Never retime one without the other.' と定められています。

映像はフレーム単位で描画される(DOM/CSSアニメーションではない):kitは非表示のp5/WEBGL canvas上に各フレームを描画し、表示用の#outに合成します。「boil」=約8枚/秒、3フレームごとに1枚切り替え、いかなる静止も3フレームを超えない仕様であり、これらはqc.pyがレンダリング済みの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 */
qc.pyにおけるQCの3つのステップアサーション:'check(7.5 <= rate <= 8.5, ...)'、'check(((idx % 3) == 0).mean() > .98, ...)'、'check(best + 1 <= 3, ...)'。レンダリングコマンドには --browser-gpu が使用されます。

劇伴は映像と同一ソースから完全ローカルで合成される:score.pyは同一のstory.json + archetypes.jsonを読み込み、章ごとに2小節を作曲します(96 BPM、Dメジャー、テーマはキー入力音のclaude = D E F# A B A)。加算合成ストリングス/Karplus-Strong撥弦/シンセリバーブを用いてローカルでレンダリングおよびマスタリングされ、ネットワーク接続や認証情報は一切不要です。

skills/day-in-my-life/scripts/score.py
No network, no credentials. Needs numpy, scipy, ffmpeg.
テーマ音は同一ファイル内に記載:"THEME = ['D', 'E', 'F#', 'A', 'B', 'A'] # c l a u d e"。出力は film/music/ 配下(strings.mid/wav、strings-mix.wav、keys.wav)に行われ、ラウドネスはqc.pyによって 'loudness: -19 to -15 LUFS, true peak ≤ -1 dBTP' に厳密に制限されます。

2コア機能

01ローカルのClaude Codeセッション履歴から「レシート」を収集:最初のメッセージ、承認/催促、修正指示、称賛、メモリタイトル、実行されたコマンドと成功/失敗結果、コミットおよびPRタイトル
02ルーティンを8〜13章のチャプターシーケンスに編成(introで始まりtagで締めくくり、keptはtagの直前に配置。章タイプはCATSに準拠)
03プライバシーゲート:バリデータがクレデンシャル/メールアドレス/ファイルパスを構造的に拒否し、「ユーザー承認済み」をレンダリングの必須関門として設定
04絵コンテのフレーム抽出:HyperFramesに依存せず、ヘッドレスChromiumでローカルのindex.htmlを開いてフレームを抽出し、タイムスタンプ付きのコンタクトシートを生成(chaptersモードで各章1フレーム)
052色インクの筆跡によるビジュアル(p5.brushによるフレーム描画、非表示canvasによる合成、約8 drawings/sのboil効果、ピリオドなしの小文字字幕)
06ローカルでの作曲とマスタリング:同一のチャプターテーブルに基づいて5トラックのストリングス(vln1/vln2/vla/vc/cb)を作曲し、サンプラー音源への差し替えが容易なMIDIを出力、さらにstrings-mix.wavと打鍵音keys.wavへ合成・マスタリング
07レンダリング後QC:ステッピング(約8枚/秒、3フレームグリッド準拠、過度な静止の排除)、シーム(wipe/swallow箇所に必ずインク全塗りフレームが存在すること)、lamp(暗転と劇伴ミュートの完全同期)、ラウドネス(-19〜-15 LUFS、トゥルーピーク ≤ -1 dBTP)
08ローカル動画出力:[email protected]を用い、24 fps / crf 12 / --browser-gpu でレンダリング(WebGLによる描画ページ)

3外部依存関係

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;不上传

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: python3 scripts/harvest.py --out <film>/receipts.json(ローカルの書き起こしのみを読み込み、--root のデフォルトは ~/.c
  • 网络端点: 外部ネットワークアクセスの宣言: registry.npmjs.org:setup時のnpm ciで固定バージョンのp5/p5.brush/puppeteerをインストール、および毎回のnpx --ye実行
  • 本地工作目录: ファイル読み書きと成果物出力: filmディレクトリ内:receipts.json、story.json、story.js、index.html(data-durationの書き換え)、mus
監査ノート: BlueではなくYellowと判定した理由は、実行時に予期されるネットワーク通信とサードパーティ依存関係が存在するためです:セットアップ時にnpmレジストリから固定バージョンのp5/p5.brush/puppeteerをインストール(およびChrome for Testingのダウンロードをトリガー)、チェック/レンダリングのたびにnpx経由で[email protected]を取得、レンダリング用ページ表示時にfonts.googleapis.comからGochi Handフォントを取得します(完全オフラインではありません)。Orangeに達しない根拠:リポジトリ全体で**クレデンシャルの読み取りが一切存在しない**こと(環境変数キー/トークン/クッキー/キーチェーンの読み込みなし。new-film.mjsのSECRETは遮断用の正規表現であり読み取りではありません)、ログは読み取り専用でアップロードされず、SKILL.mdにも認証情報不要・課金呼び出しなしと明記されています。ユーザーが把握すべき点は、**ローカルに存在するClaude Codeの全履歴(機微な引用を含む可能性あり)を読み取り**、正規表現でプライバシーを遮断する点です(堅牢ですがホワイトリスト形式ではないため、最終防壁はユーザーによるstory.approvedの目視承認となります)。TLSダウングレード、スクレイピング回避、任意コード実行の余地は見当たりません(サブプロセスはffmpegと同梱スクリプトのみを呼び出します)。

5二重目の独立検証

  • [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』一致。

6結論

  • プライバシー設計が3層にわたりコードレベルで徹底:ローカル限定読み込み・アップロードなし、正規表現によるクレデンシャル/メール/パスの強制遮断、レンダリング前の明示的なユーザー承認必須化
  • 厳格な素材規律:すべての台詞が逐語的引用であり、統計に基づいて算出され、履歴にないステップを勝手に追加しない。ローカルログが存在しない場合は即座に停止
  • 単一のクロックテーブルにより映像と劇伴のズレが原理的に発生せず、章の順序を入れ替えても同期と調性を維持
  • QCはすべて完成動画から測定可能かつ定量化(ステッピンググリッド/シーム全塗りフレーム/lamp音画同期/ラウドネス)されており、主観的な判断を排除
  • エンジニアリングの再現性:依存関係はlockfileで固定、CLIバージョンも固定、章の追加・拡張はarchetypes/REQUIREDへの追記のみ(順序はバリデータが担保)
  • 最適な用途: 推奨対象:ローカル環境で長期的にClaude Codeを使って作業しており、「私とエージェントの普通の一日」を1〜2分の水墨調アニメーションフィルムにしたい方——素材は実際のセッション履歴(最初のメッセージ、催促、修正、称賛、コミットメッセージなど)から自動取得され、劇伴は映像の拍に完全同期し、書き出し前にはコンタクトシートと1行ずつの承認チェックが可能です。また、「構造的バリデーションによっていかにプライバシーを保護するか」を研究したい開発者にも適しています(正規表現による遮断+単一クロックテーブル+定量化QCは再利用可能な優れたエンジニアリングプラクティスです)。
    不向きな用途: 非推奨対象:① 他人の履歴、チーム共有ログ、製品プロモーション動画を作りたい場合(SKILL.mdで明確に対象外と規定);② ローカルのセッションログがないユーザー(claude.aiのみの場合は即座に処理停止);③ 自身の実際の対話内容を動画に描画したくない方;④ 完全オフラインでのレンダリングが必須な環境(フォントやCLIツールにネットワークアクセスが必要);⑤ 実写やフォトリアルな質感を求めるプロジェクト(2色の手描きインクアニメーションであるため);⑥ 手作業での1行ずつの確認を省きたい方(レシート規律により、全行の確認が必須)。
    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
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit ba7a0bb6d3.