recording
Recording
When to use
Reach for this skill any time you touch the recorder: the record button, the in-progress toolbar, permission prompts, chunked upload flow, or the camera bubble. If you're adding support for a new source (e.g. tab capture, iPhone continuity camera) or changing how chunks are finalized server-side, this is your map.
Data model touched
recordings— the row gets created as soon as the user presses Record or imports a source. Native/file recordings transitionuploading→processing→ready(orfailed).videoUrl,durationMs,videoSizeBytes,width,height,hasAudio,hasCameraare populated as the upload streams in. Loom imports useimport-loom-recordingand create areadyrow whosevideoUrlis a Loom embed URL.application_state.record-intent— the agent writes this when it wants to start a recording. The UI reads and clears it, then prompts for permission.application_state.navigation— set to{ view: "record" }while the recorder is active.
Binary uploads hit the custom API routes (/api/uploads/:id/chunk and /api/uploads/:id/abort) rather than actions, because actions aren't the right tool for binary streaming bodies. The final chunk calls finalize-recording. Loom URL imports are metadata-only and should go through the import-loom-recording action.
Some recordings are linked to a meeting — when meeting_id is non-null on the recording row, it was created via start-meeting-recording and both the recording and meetings skills apply. See the meetings skill for the bidirectional link.