Skip to content
Back to skills

Verify

BSecurity

Verify an engine change end-to-end by rendering the bundled fixture (examples/local-demo) and inspecting the output MP4 and intermediates. Use when the user says "verify", "run the smoke test", "e2e this change", "does the fixture still render", or before committing a nontrivial engine change. Knows the gotchas: OPENAI_API_KEY (or a local OPENAI_BASE_URL server) is needed for voice/captions but not probe/record/compose, stage-by-stage re-runs beat full re-renders, AIDEMO_KEEP_TMP=1 keeps .com...

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 22, 2026
ai-agentsgobashnodedebuggingapi

Works with

  • api

Security analysis

B84/100
  • mediumUses curl or wget to download content
  • criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study

Pro shows the line behind each finding and how to fix it

Scanned September 22, 2026

npx -y skills add tandryukha/aidemo --skill verify --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verify?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verify
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/tandryukha-verify/badge)](https://www.skillsdirectory.com/skills/tandryukha-verify)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: verify
description: >
  Verify an engine change end-to-end by rendering the bundled fixture
  (examples/local-demo) and inspecting the output MP4 and intermediates. Use
  when the user says "verify", "run the smoke test", "e2e this change", "does
  the fixture still render", or before committing a nontrivial engine change.
  Knows the gotchas: OPENAI_API_KEY (or a local OPENAI_BASE_URL server) is
  needed for voice/captions but not probe/record/compose, stage-by-stage
  re-runs beat full re-renders,
  AIDEMO_KEEP_TMP=1 keeps .compose-tmp for compose debugging, logs/fail-*.png
  from failed takes. Do NOT use for: recording real product demos (use
  record-demo) or doc-only changes with no runtime surface.
allowed-tools: Bash, Read, Glob, Grep
metadata:
  internal: true
---

# verify — e2e smoke test for engine changes

Your job: prove a change to the engine still renders the self-contained fixture
end-to-end. Be terse; surface only failures + a final status.

## Phases

1. **Typecheck** (always):
   ```bash
   npm run typecheck
   ```

2. **Fixture server** (background; it's a plain static server on :8787):
   ```bash
   node examples/local-demo/serve.mjs &
   curl -sf http://localhost:8787 >/dev/null && echo up
   ```

3. **Full e2e** (needs `OPENAI_API_KEY` in `.env`, or `OPENAI_BASE_URL`
   pointing at a local OpenAI-compatible server — check with
   `node bin/aidemo.mjs doctor` first; it reports the resolved endpoint):
   ```bash
   node bin/aidemo.mjs render examples/local-demo --headless
   ```
   If neither is available, prefer the **offline full e2e** — the bundled mock
   serves both endpoints locally, so every stage still runs, with zero API
   spend (say which path you used in the report):
   ```bash
   node test/mock-openai.mjs &            # mock TTS+STT on :8790
   OPENAI_API_KEY= OPENAI_BASE_URL=http://127.0.0.1:8790/v1 \
     node bin/aidemo.mjs render examples/local-demo --headless
   ```
   (Narration is sine tones and captions are placeholder words — fine for
   verifying the pipeline, useless for judging output quality.) Last resort:
   `probe` (selectors) + `record` + `compose` against previously generated
   `audio/`/`generated/` artifacts if present (`captions --offline` can
   regenerate caption cues from an existing `voice.json` without network).

4. **Inspect the output** — existence is not enough:
   ```bash
   ffprobe -v error -show_entries format=duration -show_entries stream=codec_type \
     -of default=nw=1 examples/local-demo/output/final-demo.mp4
   ```
   Expect one video + one audio stream and a plausible duration (the fixture is
   ~30–60 s). A suspiciously tiny file or missing audio stream is a failure.

5. **Stage-scoped iteration** — if the change touches one stage, re-run just it
   (`voice`, `record`, `captions`, `compose`, or `probe` for selector work)
   instead of a full re-render; each stage is independently re-runnable.

6. **Cleanup**: kill the serve process from phase 2.

## Gotchas

- Logs: `examples/local-demo/logs/<command>.log`; failed takes leave
  `logs/fail-*.png/json` — read those before re-running blind.
- Compose hangs → look for an unbounded `apad` or `-stream_loop -1` in the
  filtergraph (they never EOF; see AGENTS.md ffmpeg gotchas).
- Captions missing from the output with no error → negative-pts stream-copy
  concat; the card assembly concat must re-encode.
- `AIDEMO_KEEP_TMP=1 node bin/aidemo.mjs compose examples/local-demo` keeps
  `.compose-tmp/` so you can ffprobe intermediate segments.
- Don't leave the fixture server running or the port collides on the next run.

## Report

```
verify: PASS|FAIL
typecheck: ok|errors
e2e: full render | offline full render (mock) | keyless fallback (probe+record+compose) | skipped (why)
output: <duration>s, video+audio | anomaly: <what>
failures: <stage → cause → log excerpt>   (omit if none)
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.