arch-motion-pageCAUTION
Agent skill: compile a YAML spec into a one-page animated A4 architecture blueprint (live HTML, poster PNG, MP4). EN/中文.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
arch-motion-page
An agent skill that turns a system architecture into a one-page, animated A4 blueprint:live HTML, a poster PNG and an MP4, all from one small YAML spec.
English · 简体中文
The example page explains amp using amp's own pipeline. It was built and rendered by this skill. ▶ Full MP4 (EN, 24 s) · 中文 MP4 · Live HTML · 中文 HTML
What it does
Describe a system: an entry point, the roles or services it dispatches to, and what they share or produce
ff242e213ae2OBSERVED · 2026-10-11Install
Commands as the repository documents them. They are shown, not run.
npx skills add joeeeeey/arch-motion-page # add -g to install for every project
git clone https://github.com/joeeeeey/arch-motion-page ~/.claude/skills/arch-motion-page
npx skills add
npx skills add joeeeeey/arch-motion-page # 加 -g 则所有项目可用
git clone https://github.com/joeeeeey/arch-motion-page ~/.claude/skills/arch-motion-page
npx skills add
Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| codex | mentioned | |
| cursor | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: arch-motion-page
description: Compile a product or technology architecture into a one-page animated A4 blueprint (live HTML, poster PNG, HyperFrames MP4) from a small YAML spec. Use for animated architecture explainers, "A4 architecture page with motion", HyperFrames architecture videos, or turning a system analysis into a motion one-pager.
license: MIT
metadata:
author: Joey (github.com/joeeeeey)
---
# arch-motion-page (amp)
By **Joey** ([@joeeeeey](https://github.com/joeeeeey)) · [live demo](https://joeeeeey.github.io/arch-motion-page/) · [repo](https://github.com/joeeeeey/arch-motion-page) · MIT
[](https://joeeeeey.github.io/arch-motion-page/)
amp turns an architecture analysis into one A4 page. The page has a header, a brand column, a three-tier figure and three columns of academic-style text. It builds itself in about 3 s, then loops a heartbeat story: the root pulses, signal packets travel the edges, each worker card swells as its packet lands, and the hand-off flows into the substrate. Edges march, mascots bob and a neon gradient wordmark breathes. After the build, every frame is a usable poster. The default skin is white paper with black type (`plush-academic`); `blueprint` is the navy alternative. Pages can be English or Chinese (`meta.lang: zh`).
**Division of labour.** The agent writes only `spec.yaml`. Deterministic compilers own every coordinate, colour and keyframe:
```
spec.yaml ─▶ lib/spec.mjs (validate, budgets)
─▶ lib/archetypes/tiered.mjs (boxes, edges, packet routes)
─▶ templates/paper-a4.mjs + themes/<name> (HTML/CSS)
─▶ lib/motion.mjs (JSON op list) ─▶ runtime/amp-runtime.js (ONE paused GSAP timeline)
─▶ out/index.html (also a valid HyperFrames composition)
```
## Hard rules
- Never hand-edit `out/`. Every fix goes into the spec. Fix the compiler, theme or template only when the defect is generic.
- Keep the page deterministic:
- No wall-clock reads.
- No unseeded randomness.
- No network at view time: the build copies GSAP (from npm) and the Latin fonts (`vendor/fonts/`) into `out/`, subsets CJK fonts into `out/fonts/`, and assets live inside the spec folder.
- Run third-party tools in containers. Font subsetting (zh pages and `--single`) runs pyftsubset in Docker with `--network none`; the CJK sources are pinned downloads, verified by sha256 and cached in `~/.cache/arch-motion-page/`.
- Review at the HTML stage with `scripts/review.mjs`.
- Render video only after the HTML passes review **and** the user approves.
- Render only inside Docker (`scripts/render.sh`). Never run `npx hyperframes` on the host.
- Images are optional. Generate them with whatever image tool is available (an installed image-generation skill, or any model that outputs PNG with a transparent background), and keep each prompt next to its asset in `assets/source/*.prompt.txt`.
- Never print API keys or image-tool config.
- Never commit generated assets that contain anything sensitive.
## Workflow
0. **Setup (once):** run `npm install` in this skill dir. It needs Node ≥ 22 and a local Chrome (override with `CHROME=/path`).
1. **Analyse the system into three tiers**, using `references/design-grammar.md`:
- **root**: the entry point or orchestrator, exactly one node.
- **workers**: 3–7 roles or services.
- **substrate/outcome**: 2–6 shared stores, platforms or results. The last node is usually the outcome.
Then pick:
- The **one story** worth looping: which workers, in which order.
- An optional **feedback edge**: outcome → root.
2. **Write the spec.**
- Start a work dir outside the skill, e.g. `/tmp/amp-<slug>/`.
- Copy `examples/self-intro/spec.yaml` there as a template.
- Fill it using `references/spec-schema.md`. Respect the character budgets, because the build warns on every overrun. Budgets count a CJK character as width 2.
- Language variants sit next to it as `spec.<lang>.yaml` (e.g. `spec.zh.yaml` with `meta.lang: zh`) and build into `out-<lang>/`.
3. **Assets (optional):**
- Use node `icon:`s from the built-in set; no images needed.
- Or generate a plush cast and a brand image:
```bash
# any image tool: one 2048x1024 PNG character sheet, transparent background
<image-tool> --prompt-file cast.prompt.txt --size 2048x1024 --background transparent \
--output /tmp/amp-assets/cast.png
uv run --with pillow --with numpy python scripts/slice_cast.py /tmp/amp-assets/cast.png \
<workdir>/assets/mascots --grid 4x2 --names a,b,c,d,e,f,g,h --height 240
```
- The prompt recipe is in `examples/self-intro/assets/source/`.
4. **Build:** `node scripts/build.mjs <workdir>/spec.yaml`. This writes `<workdir>/out/`. Pass `--theme <name>` to try another skin. The first zh build creates the `amp-fonttools` image and downloads the Noto SC fonts once; later builds take seconds.
5. **Review:** `node scripts/review.mjs <workdir>/out`. Then:
- Read `review/contact.png` and the console fit report.
- Zoom into the figure with `--zoom 288,148,752,520`, or into the hero with `--zoom 40,148,1000,520`.
- Score against `references/review-rubric.md`, edit the spec, rebuild, and repeat.
- The page is done when the fit report says OK, columns fill 88–99%, the review prints `loop seam ... OK`, and the rubric passes.
6. **Present or publish as HTML:**
- `out/index.html` autoplays when opened: the build plays once, then the live story loops from `loopFrom` (about 3.4 s) to the end. Both ends of that window are the same frame, so the page never jumps back to blank. `?once` plays everything once and holds the last frame. It sits centred on a desk at 1:1 when the window is wide enough and scales down to the window width otherwise.
- Keys: Space play/pause (at the end it rTrust audit
CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (2 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (9)
const list = await (await fetch(`http://127.0.0.1:${port}/json/list`)).json();const base = `http://127.0.0.1:${server.address().port}`;await c.send('Page.navigate', { url: `http://127.0.0.1:${sheetServer.address().port}/contact.html` });yaml
docs/demo-zh.webp
docs/demo.webp
docs/poster-blueprint.png
docs/poster-en.png
docs/poster-zh.png
Gates applied: no_behavioural_pass.
ff242e213ae2full audit observations/trust-audit/skill/joeeeeey__arch-motion-page.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | ff242e213ae2 | CAUTION | B | 89 | first audit |
Questions
What does the arch-motion-page skill do?
Agent skill: compile a YAML spec into a one-page animated A4 architecture blueprint (live HTML, poster PNG, MP4). EN/中文.
Is arch-motion-page safe to install?
With care. The audit graded it B (89/100) and found 9 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can arch-motion-page access on my machine?
The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does arch-motion-page work with?
Its documentation mentions claude-code, codex and cursor. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (ff242e213ae2), read on 2026-10-11. The repository is watched, and a new audit runs when it changes — this is the first audit.