1仕組みと動作原理
本skillは実行可能プログラムではなく、html-anythingの「テンプレート」です。SKILL.md + example.html[/example.md]で構成されるディレクトリであり、実行時にloader.tsによってディスクから走査・読み込まれます。テンプレートの追加はディレクトリの追加を意味し、TypeScriptの変更は不要です。
Adding a template = adding a folder. No TS code change required; the API
フロントマターはセレクター/API向けのメタデータ(zh_name/en_name/emoji/description/category/scenario/aspect_hint/featured/recommended/tags)であり、fmToMeta()によってSkillMetaへとマッピングされます。フロントマター以降の本文のみがモデルへの指示仕様となります。
zhName: fm.zh_name ?? fm.name ?? id,
生成時、このテンプレート本文はプロンプト本文として扱われます。/api/convertはassemblePrompt()を用いて「グローバルデザイン指示 + 本テンプレート本文 + ユーザーコンテンツ」を1つのプロンプトに結合し、ホストのローカルagent CLIに渡し、HTMLをstdoutストリーミング経由でキャプチャします。
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はtext/htmlとしてそのままiframe(セレクター内のインラインプレビュー用)に返却し、/api/templates/<id>/exampleはexample.mdとexample.htmlをあわせて返却します。
return new Response(skill.exampleHtml, {
本文仕様では、週報をCover / Shipped / In flight / Blocked / Metrics / Asks / Thanksという固定構造の横スクロールデッキとして定義しており、各スライドが固有のステータス情報を担当します。
- Blocked (红色 callout)
横スクロールはCSSのscroll-snapによって実現されています。コンテナにはoverflow-x: auto + scroll-snap-type: x mandatoryが、各スライドにはflex: 0 0 100vw + scroll-snap-align: startが適用されています。
scroll-snap-type: x mandatory;
キーボードによる左右切り替えとインジケータードットはインラインスクリプトによって実装されています。ArrowRight/PageDownで進み、ArrowLeft/PageUpで戻り、スクロール時にドットのactiveクラスが同期されます。
document.addEventListener('keydown', (e) => {
本文で宣言されている「hash同期」はサンプル内では実装されていません。サンプルにはlocation.hashやhistoryに関連するコードは含まれていません。
- 键盘左右切换, hash 同步
各スライドがトップレベルの<section class="slide">であるため、ホストはこれをデッキとして認識し、エクスポート機能(PDF / PNG zip / PPTX)を追加します。
Cheap test — true if the document looks like a deck (has ≥1
CLI側にはキーワードによる直接マッチング経路が存在します。skills-matcher.tsはユーザーコンテンツ内のキーワードをこのテンプレートidに直接マッピングし、一致した場合はconfidence = 一致数 × 2 + 3を付与します。閾値3に達するとローカルルールが適用され、モデルによるテンプレート選択はスキップされます。
[["周报", "weekly", "本周", "下周计划", "本周完成"], "weekly-update"],
CLIのフォールバックマッチングで使用される閾値定数:AI要約マッチングを有効化するにはコンテンツ長が60文字を超えている必要があり、強シグナルの閾値は3です。
const MIN_CONTENT_LENGTH_FOR_AI = 60;
ホストシェルはsandbox="allow-scripts allow-same-origin"(スクリプト実行許可、同一オリジン許可)を指定したiframeを用いてサンプルや生成物をレンダリングします。これは製品シェル側の設計判断であり、リスクとして記載されていますが、本skill自体のセキュリティ格付けには影響しません。
sandbox="allow-scripts allow-same-origin"
2コア機能
4推奨統制措置と判定根拠
- SKILL.md: スクリプト実行や外部への副作用を含まない、純粋なプロンプト指示およびルールテキスト
5二重目の独立検証
- [ok] skill 目录文件清单 — find 得 SKILL.md + example.html,无 scripts/references。
- [ok] 外部端点为空 — 对两文件 grep 'https?://' 零命中;head 无 <link>/<script src>,字体走 Inter 系统栈。
- [discrepancy] 「hash 同步」是否实现 — SKILL.md 要求「键盘左右切换, hash 同步」,但 example.html 对 hash/location/history grep 零命中;只实现了 keydown(ArrowRight/PageDown/ArrowLeft/PageUp)与 dot 同步。
- [ok] 键盘翻页是否实现 — 示例脚本含 ArrowRight/PageDown → deck.scrollTo({left: window.innerWidth * next}) 与 ArrowLeft/PageUp 反向分支。
- [ok] 页型与示例页数是否对应 — 示例 8 个 <section class="slide">,覆盖 Cover/Shipped/In flight/Blocked/Metrics/Asks/Thanks 七型 + 收尾,与正文清单一致。
- [ok] 宿主 deck 识别与导出 — next/src/lib/deck.ts 注释「Cheap test — true if the document looks like a deck」并按 section.slide 切页;export-menu.tsx 提供 deck-pdf/deck-png-zip/deck-pptx 三个动作。
- [ok] CLI 匹配器路由 — cli/src/skills-matcher.ts 存在 [["周报", "weekly", "本周", "下周计划", "本周完成"], "weekly-update"] 行。
- [ok] 判级 green 自证 — 目录零脚本文件(示例内联导航脚本属产物示例)、零凭证、零写盘、零端点 → green。
6結論
89e6eddaef5be64f…