Every SKILL.md already declared the new name — name: frames, frames-cli, frames-core, and so on — but the directories were never moved, so the tree carried frames-* in content and hyperframes-* on disk. Everything that resolves a skill by path missed: the core-skill list, the plugin marketplace pin, and the docs the CLI reads at runtime. Eight tests failed on main because the files they open do not exist. The directories now match what the files say they are, and the guide the claude-design contract reads takes the name that contract already used.
Project-local Codex CLI skills
Skills in this directory are auto-discovered by Codex CLI (verified against
Codex 0.144.3) when the frames repo is opened as the working
directory. They are NOT part of the marketplace-distributed plugin (that
set lives under skills/ and is manifested by .codex-plugin/). Two
separate namespaces, on purpose:
.agents/skills/— repo-native, run only against this repo (weekly changelog videos, doctrine-heavy authoring flows). Codex CLI's project-local skill dir.skills/— marketplace-distributable, installed into other projects vianpx @hanzo/frames skillsornpx skills add hanzoai/frames.
Weekly changelog video
The changelog-video skill turns a weekly changelog markdown into a
~45–60s branded 1080×1080 MP4 (motion-doctrine layout, one narrator,
seam-gated cuts, caption rail). It ships pre-configured — fonts,
background pattern, house BGM, lexicon, and the align-captions script
all live inside changelog-video/. Its five dependency skills
(motion-doctrine, cut-the-curve, captions-overlay, seam-craft,
oversized-cursor) sit alongside so the router graph is complete on
clone.
Weekly usage:
- Regenerate the digest markdown for the target range:
bun run changelog:weekly --from YYYY-MM-DD --to YYYY-MM-DD(this only reads git; the--writevariant is what the docs cron uses). - In Codex CLI at the repo root, invoke
/changelog-videowith the generated markdown. The agent will present its script + visualization plan for review before rendering. - Accept, and the agent produces
weekly-changelog-<range>.mp4gated byframes check(0 errors) +seam-gate verify(0 fail/warn).
VO comes from frames tts and its word timings from frames transcribe,
both local models. Runtime dependencies you need on PATH:
- Node ≥ 22
ffmpeg(for VO wav conversion + frame QA)- A headless Chrome for Frames rendering (
frames doctorwill point out the exact ask if it's missing)
The parallel set at .claude/skills/ is a byte-identical copy so
Claude Code users get the same auto-discover behaviour — keep the two
in sync when editing. A scripts/check-skill-mirror.mjs check enforces
this at CI time.