Record
The engine films and photographs databayt products as they actually run — signup flows, onboarding wizards, block features — and files every asset into one organized library that mirrors to Google Drive. Say it in prose: "record video for school onboarding", "record admission", "re-record the stale blocks".
This is the product-truth archive. Generated marketing media never lands here — that is higgs + the showroom on the media page. To cut, caption or reframe a take into a reel, hand it to edit.
The library
Raw footage is filed under the same words as every other media asset — the flow name
(<verb>-<entity>) that also names the shoot flow, the files on the CDN and the
product manifest id. Raw takes sit in the flow's raw/ folder, beside its finished media:
~/media/<repo>/<flow>/raw/<flow>[-<part>]-<locale>.<ext>
hogwarts/add-student/raw/add-student-ar.mov
hogwarts/onboarding/raw/onboarding-otp-ar.mov
hogwarts/onboarding/raw/03-verify-ar.png a still needs --part NN-<step>
- Same name = replaced. A re-record overwrites the take and its
manifest.jsonentry (repo, block, flow, url, repo sha at capture, date, note) — no-vNsiblings. - No
--flow: the URL slug stands in (scheme/host, locale prefix and/s/<subdomain>stripped). - The deliverable (ad cut or edit) goes to
~/media/<repo>/<flow>/<flow>-<locale>.mp4and reaches the CDN withshoot/scripts/publish.mjs --flow <flow>as<flow>/video-<locale>, atcdn.databayt.org/hogwarts/<route>/<flow>-<locale>.<hash>.mp4— the CDN mirrors the app's routes. - Mirror: My Drive → databayt → media (
record.sh sync; the local library is the truth, Drive is the mirror)
The machinery
| Piece | Where |
|---|---|
| Skill (the playbook) | .claude/skills/record/SKILL.md |
| Agent (the videographer) | .claude/agents/record.md |
| CLI (capture/file/sync/stale) | .claude/scripts/record.sh |
| Staleness nudge (SessionStart) | .claude/hooks/session-media-stale.sh |
| Spell | record — The Pensieve, keywords |
record.sh start intro # begin a screen-recording segment
record.sh stop # SIGINT + ffprobe verify — never plain kill
record.sh otp # screenshot the Outlook desktop inbox (off camera)
record.sh assemble x # concat segments into one .mov
record.sh file <src> --repo hogwarts --block onboarding --flow onboarding --url <real-url>
record.sh sync # mirror to Google Drive
record.sh stale # what needs a re-recordFlows behind logins and OTPs
Recording real flows means completing them — the engine handles the walls on its own:
- Fresh identity per take:
osmanabdout+<take>@hotmail.com(+aliases deliver to the same inbox; reusing one collides with prod leftovers from prior takes) - Hotmail/Outlook codes: the signed-in Outlook desktop app, read off a screenshot — codes are 4 digits. AppleScript cannot read New Outlook's mailbox and the automation Chrome profile is logged out of web Outlook; the screenshot lane is the one that works
- Gmail codes: the Gmail MCP reads them without any screen work
- Anything else: the
authandcredentialsskills (Keychain identities)
Recording happens in segments — stop, fetch the code off camera, resume — so the inbox never appears in the footage.
Iterate
The library stays honest by construction: every asset records the repo sha it was
captured at. When a block's source gains commits, the session-media-stale hook says
so at session start, and record.sh stale lists exactly what drifted. Re-recording
replaces the same name (no versions); fine-tune a video with an ffmpeg trim,
a screenshot by recapturing the route.
One-time macOS permissions
| Grant | Enables |
|---|---|
| Screen recording (already granted) | screencapture -v |
| Full Disk Access for the terminal app | fast rsync into the Drive folder |
| "Control Finder" automation (or the above) | the Finder copy sync lane |
Sweeps are serial by design — one screen, one recorder — so there is deliberately no multi-agent fan-out here; the skill plans the shot list, then works it in order.