# Business Promo

> >

- **Type:** Skill
- **Install:** `agentstack add skill-roeea2-hyperframes-skill-hyperframes-skill`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [roeea2](https://agentstack.voostack.com/s/roeea2)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [roeea2](https://github.com/roeea2)
- **Source:** https://github.com/roeea2/hyperframes_skill

## Install

```sh
agentstack add skill-roeea2-hyperframes-skill-hyperframes-skill
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Business promo - the master workflow

One business, one interview, one finished post. This skill turns a customer's
business into a social-ready animation plus the caption that ships with it.

It does not re-implement authoring, animation, media, or rendering. It **owns the
brief and the sequencing**, and delegates every craft decision to the skill that
owns it. Read this file top to bottom before the first question.

## Deliverables

Every run produces all four, inside `videos//`:

| Artifact       | What it is                                                             |
| -------------- | ---------------------------------------------------------------------- |
| `BRIEF.md`     | The confirmed interview answers. Written once, never re-asked.         |
| `renders/*.mp4`| The animation at the chosen aspect, correct duration, last frame held. |
| `CAPTION.md`   | Post copy, CTA, and hashtags in the video language, per network.       |
| `DELIVERY.md`  | What to post where, plus what the client still owes (logo, real photos).|

Never end a run with only the MP4. The caption is half the deliverable.

## Hard rules

These override generic guidance from any downstream skill. They exist because
this is **client work**: a wrong phone number or an invented opening hour is a
real business harm, not a rendering bug.

1. **One question per message.** Use `AskUserQuestion`, one field per call, max
   four options, recommended option first with a one-line reason. Never batch the
   interview into a single wall of questions. Full protocol:
   `hyperframes-core` -> `references/brief-contract.md` section 3.
2. **Never invent a business fact.** Opening hours, phone, address, prices,
   years in business, ratings, and claims come from the user only. If a detail is
   missing, ask once; if still missing, **omit it from the video** and record the
   gap in `DELIVERY.md`. Do not guess, do not use a plausible placeholder, and
   never ship `555` or `03-000-0000` as if it were real.
3. **Contact details are DOM text, never generated pixels.** Phone numbers,
   hours, addresses, and the business name are rendered as HyperFrames text
   elements. Image and video models garble digits and mangle Hebrew glyphs.
   Generated imagery is background and b-roll only; it never carries copy.
4. **No unverifiable claims.** "Best in the city", "number 1", "cheapest",
   medical or legal outcome promises: only if the user supplies them and confirms
   they can stand behind them. Otherwise rewrite to something concrete the
   business controls ("open until midnight", "same-day appointments").
5. **Hebrew is a gate, not a translation.** If the video language is Hebrew or
   any RTL language, load `/hyperframes-hebrew` **before writing a single line of
   composition HTML**. Ship the `hebrew` font subset, set direction per element,
   and never put `dir="rtl"` on `` (it renders black frames).
6. **Vertical fills the frame.** For 9:16, use the full height: scale type up,
   spread beats across the whole canvas, run backgrounds edge to edge. Never
   center a square layout in a tall frame. Keep only *text* out of the platform
   keep-out zones (see `references/formats.md`).
7. **Motion doctrine first.** Load `/motion-doctrine` before composing anything.
   The film is one continuous camera move, not a stack of slides.
8. **Render is user-gated.** After checks pass, ask "render now, or changes?"
   Render only after the answer.

## Step 1 - orient before asking

Do this silently, in one pass, before the first question:

- **Detect the chat language** from the user's message and conduct the whole
  interview in it. This is separate from the video language (asked in step 4).
- **Resume, do not restart.** If `videos//BRIEF.md` exists, read it, show a
  one-line summary, and ask only what changed. A returning client is an edit run.
- **Harvest answers already given.** Skip any interview step the user's opening
  message already answered. Inference is not an answer; an explicit statement is.
- **Catch an autonomous signal** ("surprise me", "just build it", "decide for
  me"). It does not skip steps 1 to 6 - those are facts only the user has. It
  does absorb steps 7 to 11: decide, state each choice with a one-line reason,
  and build.

## Step 2 - run the interview

Eleven steps, in order, one message each. The exact question copy, the option
sets, and the English and Hebrew phrasings are in
`references/interview.md`. Read that file before asking question 1.

| #  | Field                | Asks for                                                    |
| -- | -------------------- | ----------------------------------------------------------- |
| 1  | `business`           | Name and what it actually sells                             |
| 2  | `goal`               | The one thing the video must make a viewer do               |
| 3  | `platform` `aspect`  | Network -> 1:1, 9:16, or 16:9                               |
| 4  | `language`           | On-screen and voice language (English / Hebrew / mixed)     |
| 5  | `details`            | Which of hours, phone, address, web to show, then the exact strings |
| 6  | `assets`             | Logo, photos, brand colors, website URL the client already has |
| 7  | `model`              | Generation engine and model, with plain-language trade-offs |
| 8  | `look`               | Look and feel preset                                        |
| 9  | `shapes`             | Shape language                                              |
| 10 | `sound` `length`     | Voiceover, music only, or silent-with-captions, plus duration |
| 11 | `storyboard` `flow`  | Review on the board? Collaborative or automated?            |

Supporting catalogs, loaded when that step comes up:

- Step 7 model options and what each is good at: `references/models.md`
- Steps 8 and 9 presets, palettes, fonts, shape vocabulary: `references/looks.md`
- Step 3 aspect, safe zones, per-network caption specs: `references/formats.md`

**Before the hand-off summary**, run one integration check: look for a
consequence the combined answers create that no single answer showed, and raise
it with a proposed fix. Common ones:

- Hebrew copy plus a look whose font has no Hebrew subset -> propose the
  Hebrew-capable equivalent from `references/looks.md`.
- 9:16 plus a dense contact block -> propose splitting details across two beats.
- 15 seconds plus voiceover plus five facts -> propose 22 seconds or fewer facts.
- Photoreal AI model plus "must show my actual storefront" -> propose real photos
  for the hero and generated imagery for texture only.
- No logo plus a premium look -> propose a type-only lockup rather than a fake mark.

Then present the summary, splitting **stated** fields from **inferred** ones, and
confirm. A correction means present the updated summary and confirm again.

## Step 3 - write the brief

Scaffold the project and freeze the answers:

```bash
mkdir -p videos/
npx hyperframes init videos/
```

Copy `assets/BRIEF.template.md` to `videos//BRIEF.md` and fill
every field. Validate before building:

```bash
node .claude/skills/business-promo/scripts/check-brief.mjs videos//BRIEF.md
```

It exits non-zero and names the missing fields. Do not start building on an
incomplete brief; go back and ask the specific field.

## Step 4 - route to the owning workflow

The brief now decides the route. Install it before reading it:

```bash
npx hyperframes skills update 
```

| Situation                                                        | Workflow                 |
| ---------------------------------------------------------------- | ------------------------ |
| Business has a real website URL worth crawling for brand + assets | `/product-launch-video`  |
| No website: logo, photos, and facts only (the common local case)  | `/general-video`         |
| Single idea under about 10s (logo sting, "now open", one offer)   | `/motion-graphics`       |
| A music track drives the whole piece                              | `/music-to-video`        |
| The client supplied talking-head footage of themselves            | `/embedded-captions` or `/talking-head-recut` |

Pass the confirmed `BRIEF.md` into the workflow. It must not re-ask anything the
interview already settled.

**Always load, in this order, before composing:**

1. `/motion-doctrine` - the gateway, first, always
2. `/hyperframes-core` - the composition contract
3. `/hyperframes-animation` - motion rules and scene blueprints
4. `/cut-the-curve` - seams, velocity matching, kinetic text entry
5. `/seam-craft` - render-correct scene seams, white-flash guard
6. `/media-use` - logo, photos, music, SFX, voiceover, color grade
7. `/hyperframes-hebrew` - if and only if the video language is RTL

Optional by choice: `/oversized-cursor` when a beat shows a website or app UI,
`/hyperframes-keyframes` for bespoke keyframe work, `/dataviz` for a stat beat.

## Step 5 - build

The beat skeleton, the per-aspect layout rules, and the asset generation recipes
are in `references/build.md`. The short version: hook, identity, proof, details,
call to action, with a velocity-matched seam between every beat and the last
frame held.

## Step 6 - gate before render

Run the checks and fix everything they report:

```bash
cd videos/ && npm run check
```

Then walk the client-work checklist in `references/build.md` section 5. The two
that catch the most real damage: **every digit on screen matches the string the
user typed**, and **the Hebrew font subset is actually loading** rather than
silently falling back.

Ask "render now, or changes?" Render only after the answer.

```bash
npm run render
```

## Step 7 - caption and deliver

Write `CAPTION.md` from `assets/CAPTION.template.md`, in the **video** language,
using the per-network rules in `references/formats.md` (hook line, body, CTA,
contact line, hashtag count). Write `DELIVERY.md`: where to post, the aspect, the
duration, and any detail the client still owes.

Report the render path, the duration, and the aspect. Show frames from the beat
midpoints so the user has a review surface without opening the file.

## Publishing this workspace

This skill ships no customer data. Client facts live in `videos//`, which
is where real phone numbers and addresses land. Before pushing this workspace
anywhere public, run `/security-audit` and confirm the client project folders are
either scrubbed or ignored.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [roeea2](https://github.com/roeea2)
- **Source:** [roeea2/hyperframes_skill](https://github.com/roeea2/hyperframes_skill)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-roeea2-hyperframes-skill-hyperframes-skill
- Seller: https://agentstack.voostack.com/s/roeea2
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
