1仕組みと動作原理
本スキルは html-anything の「テンプレートパッケージ」である:frontmatter はセレクターがメタデータを取得するために用いられ、SKILL.md 本文(frontmatter 以降の body)は loader によってそのまま読み出され、モデルへの指示として扱われる。
const { fm, body } = parseFrontmatter(raw);
実際にモデルへ送られるプロンプト = 共有デザイン指示 + 本テンプレート本文 + 【入力フォーマット】+【ユーザーコンテンツ】。共有指示には上書きルールも含まれ、テンプレート内のページ数やレイアウト数値が上限ではないことを明記している。
return `${SHARED_DESIGN_DIRECTIVES} ${opts.body.trim()}
成果物の規律は共有指示によって厳格に制約される:エージェントによるファイルシステムツールの使用は一切禁止され、HTML は必ず stdout テキストストリームとして出力され、フロントエンド側でディスクに保存されなければならない。
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何
横スクロール切り替えは CSS scroll-snap で実装:example.html の body は scroll-snap-type: x mandatory を使用し、サードパーティ製ライブラリには一切依存しない。
scroll-snap-type: x mandatory;
ページ数は自己決定:表紙(cover)+ N 枚のコンテンツページ + まとめ。短いコンテンツなら 6〜10 枚から、長いコンテンツならそれ以上となり、1 ページにつき 1 つのコア情報 + 1 枚の画像/グラフのみとする。
- 每页一个核心信息 + 1 张图 / 1 个图表
キーボードナビゲーションと hash の同期は本文で規定:← / → による切り替え + hash 同期により、特定のページを共有しやすくする。
- 键盘 ← / → 切换 + hash 同步
ページコンテナはリポジトリ全体の deck 規約に準拠:example.html の 6 つの section はすべて slide を含む class を持つ(data-slide-id ではなく data-od-id を使用)。
const dataId = extractAttr(openTag, "data-slide-id");
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | 宿主本机 agent CLI(应用侧 spawn;非本 skill 指令) |
| package | 无第三方包/字体依赖(产物样例自包含) |
4推奨統制措置と判定根拠
- 网络端点: 外部ネットワークアクセスの宣言:ディレクトリ内に外部エンドポイントなし:example.html に http(s) URL なし、リモート <script> なし、@import なし。インライン <script>(ナビゲーション)のみ
5二重目の独立検証
- [ok] 文件清单(2 个文件,无脚本文件) — SKILL.md(651B) + example.html(7489B);无 .sh/.py/.js/.ts。
- [ok] 正文零端点复核 — SKILL.md 内 http/CDN/fetch/script 零命中。
- [ok] 目录内端点自证(零命中) — example.html 全文件无 http(s)://、无 @import、无远程 <script>;仅有内联 <script> 与系统字体栈。
- [ok] 无凭证读取 — key/secret/token/.env 零命中。
- [ok] 无写盘指令 — SKILL.md 无 write/save 类指令;shared.ts 明令禁文件工具。
- [ok] 产物的横向翻页为纯 CSS — example.html「scroll-snap-type: x mandatory;」与 .slide 的 scroll-snap-align 定义,无需第三方库。
- [ok] official_desc 逐字命中 — 与第 6 行 description 引号内文本一致。
- [ok] CLI 路由行存在 — cli/src/skills-matcher.ts 第 62 行 simple 行逐字命中。
6結論
eb7207bfa03a44b8…