mobile-onboarding
Three mobile phone frames side-by-side: splash / value-prop / sign-in
1How It Works & Mechanism
This skill is not an executable program, but a plain text prompt template: the host parses the YAML frontmatter of SKILL.md with regex and loads the body content as the main prompt body.
const { fm, body } = parseFrontmatter(raw);
The template body is not executed in isolation, but spliced into the final prompt's "template section": shared design directives + template body + user content.
prompt = assemblePrompt({ body: skill.body, content, format });
The global "content-driven quantity" rule overrides any numbers within the template: the template defines layout/style/palette/components, not the output length.
数量**完全由【用户内容】的实际长度和信息结构决定**
Artifact format is strictly constrained globally: single-file HTML, pure HTML without markdown fences, first character must be <, and no writing files directly (stdout captured by frontend).
不要用 markdown 代码围栏包裹, 不要任何解释性文字
Frontmatter metadata drives selector presentation (Chinese name / English name / emoji / description / category / scenario / aspect ratio / tags / example metadata).
zhName: fm.zh_name ?? fm.name ?? id,
Bundled example assets are exposed to the frontend via two read-only APIs: example.html is returned directly into an iframe, and example.md serves as the input content for the "Preview" button.
verbatim so it can be loaded into an
Execution chain (host behavior, not template code): the host spawns a locally authenticated agent CLI, feeds the assembled prompt via stdin, and streams HTML back from stdout.
child.stdin.write(opts.prompt);
The template hardcodes "three screens" into a sequence of roles (Splash / Value-prop / Sign-in), specifying mandatory elements for each screen to reduce variance in model layout generation.
- Phone 1: Splash (logo + tagline)
The frontmatter uses featured: 13 to participate in selector ranking: the template's UI exposure position is determined by metadata, not code.
featured: 13
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| network | Tailwind Play CDN(共享指令对产物的要求) |
| network | jsdelivr CDN(可选:图表/动画脚本) |
| network | Google Fonts(共享指令指定) |
| cli | 本机 coding-agent CLI(宿主检测 PATH 并 spawn) |
4Recommended Governance & Evidence
- 网络端点: Declared external network access: Artifact side (mandated by shared design directives): Generated HTML references cdn.tailwindcss.com (Tailwind Play) and Google Fonts in the browser.
5Second-Pass Verification
- [ok] skill 目录资产面(脚本 / references / 数据 / 模板) — 目录实为 2 个文件:SKILL.md 与 example.html;无 scripts/、无 references 目录、无任何可执行文件(.sh/.py/.js/.mjs/.ts 零命中)。
- [ok] 「无脚本、无网络、无凭证、无写盘」的反例搜索 — 对目录递归 token 扫描(api[_-]?key|token|secret|\.env|process\.env|child_process|fetch\(|curl |wget |npm |npx |exec\(|subprocess|writeFile|fs\.):零命中;SKILL.md 另按 http|CDN|cdn|font|API|api|fetch|Google|script 扫描,仅命中 font-semibold / font-black 这类字重类名,无端点。
- [ok] 官方描述 vs 实际能力(有无夸大) — frontmatter description(三个手机框并排: splash / value-prop / sign-in)与正文一致:描述承诺的版式要素都能在正文找到对应条目,未见正文未支持的越界承诺。
- [ok] 外部资源/工具条目逐条回源 — external_deps 中的仓库级条目(Tailwind Play CDN / jsdelivr / Google Fonts / 本机 agent CLI)逐条回到 shared.ts 与 argv.ts 原文取证;本模板无目录级端点条目。
- [ok] 宿主执行链(供 security.reason / verdict.risks 使用,不参与判级) — prompt 经 stdin 送入被 spawn 的本机 CLI(invoke.ts),HTML 从 stdout 分流捕获;claude 参数含 --permission-mode bypassPermissions、envFor 透传 process.env;预览 iframe sandbox="allow-scripts allow-same-origin"(template-picker.tsx:544 / preview-pane.tsx:297)。
- [ok] 路径与 commit 一致性 — 工作副本 /var/ytdown/skills-portal/spy-repos/html-anything 的 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(与任务表 pin 一致);skill.path=next/src/lib/templates/skills/mobile-onboarding 下确有 SKILL.md,全仓无第二份同名模板。
- [ok] "Apple / Google" 是否意味着 OAuth 接口调用 — SKILL.md 原文是登录屏的 UI 渠道按钮枚举("- Phone 3: Sign-in (email / Apple / Google + 主 CTA)"),属界面布局指令;目录内无 OAuth SDK、无端点、无凭证字段,不构成运行时外发。
- [ok] 随包 example.html 的外链与脚本面 — mobile-onboarding/example.html(8899 字节)无 http(s) 外链、无 <script>:三台手机框与动效均由内联 CSS 绘制。
6Verdict & Scenarios
d1cedb9fd0c6efdd…