1仕組みと動作原理
本 skill は実行可能プログラムではなく、html-anything の「テンプレート」です。loader.ts が実行時にディスクをスキャンして読み込むディレクトリ(SKILL.md + example.html[/example.md])であり、新しいテンプレートの追加はディレクトリの追加のみで完結し、TypeScript の変更は不要です。
Adding a template = adding a folder. No TS code change required; the API
frontmatter はセレクター/API 向けのメタデータ(zh_name/en_name/emoji/description/category/scenario/aspect_hint/featured/recommended/tags)であり、fmToMeta() によって SkillMeta にマッピングされます。frontmatter 以降の本文がモデルに渡される実際の仕様となります。
zhName: fm.zh_name ?? fm.name ?? id,
生成時、このテンプレート本文はプロンプトの body として扱われます。/api/convert は assemblePrompt() を使用して「グローバルデザイン指示 + 本テンプレート本文 + ユーザーコンテンツ」を1つのプロンプトに結合し、ホストのローカル agent CLI に渡して、stdout からストリーミングで HTML をキャプチャします。
prompt = assemblePrompt({ body: skill.body, content, format });
テンプレート本文の前にはグローバル共通指示(SHARED_DESIGN_DIRECTIVES)が付与され、技術的・コンテンツ的な規約がすべてのテンプレートに統一して適用されます。サンプル HTML で一般的に見られる CDN やフォントの外部リンクはこれに由来します(ホストシェルによる注入であり、テンプレート自体の要求ではありません)。
通过 CDN 引入 Tailwind v3 Play (https://cdn.tailwindcss.com) 与所需的 Google Fonts。
生成物は stdout のテキストとして返却されます。グローバル指示により agent によるファイルシステムへのアクセスは明示的に禁止されており、ディスク書き込みはフロントエンドが担当します。したがって、テンプレートディレクトリにはスクリプトもファイル書き込み能力も存在しません。
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
example.html はパッケージに同梱された事前レンダリング済みのサンプルです。/api/templates/<id>/preview は iframe 向けに text/html としてそのまま返却し(セレクター内のインラインプレビュー用)、/api/templates/<id>/example は example.md と example.html をセットで返却します。
return new Response(skill.exampleHtml, {
本文では「フレーム」を機械可読な連続する <section class="frame">(1920×1080)として定義しており、フレーム数は固定値ではなくコンテンツの密度によって決定されます。短いスクリプトでは 6〜10 フレームから開始し、各フレームには1つのショット/コンセプトのみを配置します。
- 输出 N 个连续 `<section class="frame">`, 每个 `w-[1920px] h-[1080px]`; N 由【用户内容】信息密度决定
各フレームの末尾には隠しマーカー `<!-- frame:N duration:3000 transition:fade -->` が埋め込まれ、ファイル末尾には後続の Remotion レンダリングスクリプトが読み取るための `<!-- HYPERFRAMES_META: ... -->` JSON(duration/transition/sceneSummary)が付与されます。
- 每帧底部隐藏标记 `<!-- frame:N duration:3000 transition:fade -->` 供后续 Remotion / Hyperframes 渲染脚本读取。
自動再生はテンプレート本文の必須要件です。最上部の JavaScript が 3 秒ごとにフレームを切り替え、クリックや方向キー操作に対応し、四隅にプログレスバーを表示します。
- 顶部加一段 JavaScript 自动播放: 每 3 秒切换到下一帧, 也支持点击 / 方向键控制; 角落显示进度条。
ナラティブ構造がテンプレートに組み込まれています。第1フレームはフック(データ、常識を覆す事実、または問いかけ)、第2〜Nフレームは論証、最終フレームは結論 + CTA となり、特大フォントの1文で簡潔に提示されます。
- 第 1 帧是 hook (一个数据 / 一个反常识 / 一个问题), 第 2-N 是论证, 最后是结论 + CTA。
アプリケーション側はこの規約を実際に利用しています。export-menu.tsx はフレーム構造を検出すると、追加で Remotion zip のエクスポート機能(parseHyperframes → exportRemotionZip)を提供します。
await exportRemotionZip(hyperframes, hyperframes.title, {
CLI 側にはキーワード直接マッチングルートが用意されています。skills-matcher.ts がユーザーコンテンツ内のキーワードをこのテンプレート id に直接マッピングし、マッチした場合は confidence = マッチ数 × 2 + 3 を付与し、閾値 3 に達した時点でローカルルールが適用され、モデルによるテンプレート選択をスキップします。
[["视频", "video", "帧动画", "hyperframes", "remotion", "mp4", "片头"], "video-hyperframes"],
CLI のフォールバックマッチングで使用される閾値定数:コンテンツ長が 60 文字を超えている場合のみ AI 要約マッチングが有効化され、強シグナルの閾値は 3 です。
const MIN_CONTENT_LENGTH_FOR_AI = 60;
ホストシェルは sandbox="allow-scripts allow-same-origin" の iframe を使用してサンプルや成果物をレンダリングします(スクリプト許可、同一生成元許可)。これはプロダクトシェルの設計上の選択であり、リスクとして記載されていますが、本 skill 自体の格付けには影響しません。
sandbox="allow-scripts allow-same-origin"
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| network | Tailwind CDN(示例 HTML 引用) |
| network | Google Fonts(Inter Tight / Noto Sans SC / JetBrains Mono) |
| network | 上游项目(frontmatter 元数据,非运行依赖) |
4推奨統制措置と判定根拠
- SKILL.md: スクリプト実行や外部への影響を伴わない、純粋なプロンプト指示およびルールテキスト
5二重目の独立検証
- [ok] skill 目录文件清单 — find 得 SKILL.md + example.html + example.md,无 scripts/references。
- [ok] 外部端点只出现在示例/元数据 — SKILL.md 正文无 URL;URL 分别位于 frontmatter example_source_url 与示例的 Tailwind CDN / Google Fonts。
- [ok] HYPERFRAMES_META 是否真实存在 — example.html 含 <!-- HYPERFRAMES_META: {"frames":[ … ]} --> 共 8 条(i/duration/transition/scene),与示例 8 个 section.frame 一一对应。
- [discrepancy] 行内 frame 标记是否在示例中 — grep 'frame:' example.html = 0 命中;SKILL.md 要求的 `<!-- frame:N duration:3000 transition:fade -->` 在示例中未出现,时长改由 data-duration 承载。宿主解析器 parseInlineMarker + 兜底注释表明两条路径都被支持,故为约定演示缺口而非能力缺口。
- [ok] 宿主是否真消费该约定 — next/src/lib/hyperframes.ts 存在 FRAME_RE/META_RE/parseInlineMarker 实现(注释「Pull duration / transition out of the inline …marker the skill plants at the bottom of each section」);export-menu.tsx 提供 hyperframes-remotion-zip 动作;e2e/ui/export-menu.test.ts 以 templateId "video-hyperframes" 造样本。
- [ok] CLI 匹配器路由 — cli/src/skills-matcher.ts 存在 [["视频", "video", "帧动画", "hyperframes", "remotion", "mp4", "片头"], "video-hyperframes"] 行。
- [ok] 判级 green 自证 — 目录零脚本文件(示例内联 JS 属产物示例)、零凭证、零写盘;正文只规定 HTML 结构与注释标记,未点名运行时接口 → green。
- [ok] official_desc 逐字 — meta.official_desc 取自 frontmatter description 原文「Hyperframes / Remotion 兼容的连续帧动画, 可自动播放」。
6結論
f8c23c688123a19b…