SkillsSkill for Claude

Webinar Q&A answer sheet

Give Claude the questions sales and support hear most and the replays where people asked them. Claude cuts the Q&A part of each replay, prices it against your Vivu plan, indexes it in a private project, runs one precise search per question, reads the transcript inside every window to tell an answer from a neighbouring answer or a promise to follow up, checks whether the speaker showed the product, and writes a sheet with replay times, a checked excerpt, the screen title and an empty owner column. The Q&A log says what was asked; only the replay says whether it was answered, deferred or demoed.

Maintained by Vivu. Updated 2026-10-07.

Download

webinar-qa-answer-sheet.zip

11 KB. Unzips to webinar-qa-answer-sheet/SKILL.md. Upload the zip as it is in the Claude app, or unzip it into your skills folder for Claude Code.

SHA-256 90b54ee472308216ceeebe52de8e87c5fab2680bff5f8ffc421fd50b295a81ad

At a glance

What the Webinar Q&A answer sheet skill does, where it runs, what it needs, and when it asks
Looks forThe moment the host reads each audience question and the speaker answers it, promises to follow up, or switches to the product. The Q&A log has none of this. Every window is checked against the transcript before it reaches the sheet, because neighbouring answers mention the same topics.
Runs onClaude Code on your computer (terminal or the Code tab of Claude Desktop), because it reads local replay files and runs ffmpeg. No residential IP, nothing downloaded from the internet, and no scheduler: run it again after the next batch of webinars.
Needs
  • The Vivu connector with write access, to create a private project, upload and search.
  • Your webinar replays as local video files, because the Q&A cut, frames and checks run on them.
  • The Q&A log export for each webinar, to pick the questions and find where the Q&A starts.
  • A caption file or a local speech to text tool, because answers and follow ups are judged from the transcript.
  • ffmpeg and ffprobe, to cut the Q&A sections, measure them and read frames.
  • A browser to open the Vivu upload page, or a browser tool that can attach local files.
  • A Slack or Notion connector, only if you want the sheet posted there.
Your Vivu planIndexing uses minutes for the Q&A sections only, not whole replays; each question is one precise search. The skill measures the sections and shows needed minutes and credits against your plan before uploading. In our test run two Q&A sections were 31.47 minutes.
Asks you firstThe question list and queries, the Q&A sections and their index minutes before upload, the rights and consent checks before upload, one sample row before writing the sheet, and the full post and destination before anything goes to Slack or Notion.

The skill does its video work through the Vivu connector. If the connector is not in your Claude yet, add it first; the skill checks that it is connected before it does anything else.

Before you run it

  • Index only webinars your company produced and may reuse internally; outside speakers must have agreed to the recording and its reuse.
  • Attendees' names often appear on question cards in the replay; the sheet and the post leave out who asked.
  • Search results are candidates: neighbouring answers come back for the wrong question, and the reason text can call a deferred answer an answer. Every window is checked against the transcript.
  • Finding follow up promises by search alone missed some in our test run, so the status column comes from the transcript.
  • The demo screen check had a single screen share to find in our test run; the contact sheet of each kept window stays the check.
  • Posting to Slack or Notion happens only after you approve the full post and the destination.
  • Claude in Chrome uploads at most 10 MB per call; larger replays go through your own browser or the Vivu web app.
  • Q&A sections stay in your Vivu project until you delete them; the skill creates the project as private.

Start it

Once the skill is installed, ask for the task in your own words. Naming the skill is the most reliable way to have Claude use it. For example:

Here are the Q&A exports and replays from our last two webinars. Which of these customer questions did we answer on air, which did we promise to follow up on, and where did we demo the answer?

In Claude Code you can also type /webinar-qa-answer-sheet. Claude asks for anything the request leaves out, most important first.

What is inside

  1. When to use
  2. Working principles
  3. What you need before starting
  4. Inputs to collect
  5. Files and state
  6. Step 1: Check the Vivu connector and the setup
  7. Step 2: Pick the questions and write one query each
  8. Step 3: Cut the Q&A sections and price them
  9. Step 4: Confirm rights, upload and index
  10. Step 5: Search each question and the demo
  11. Step 6: Check every window against the transcript and set the status
  12. Step 7: Check the screen during the answer
  13. Step 8: Write the sheet, the follow ups and the post
  14. Compliance
  15. Known failure modes

The full skill

This is webinar-qa-answer-sheet/SKILL.md from the download, as Claude reads it: the frontmatter first, then the instructions.

---
name: webinar-qa-answer-sheet
description: "Turn webinar Q&A logs and replays into an answer sheet with Vivu: answered or promised a follow up, answer times, checked excerpt, demo screen. Use when sales asks what was answered."
---

Webinar Q&A answer sheet for sales and support

This skill takes the questions sales and support hear most (five to eight, picked from the Q&A logs your webinar platform exports) and the replays of the webinars where people asked them, and returns an answer sheet a rep can work from: for each question, the webinar file, the start and end of the answer, whether the speaker answered it or promised to follow up after the webinar, a short excerpt of what the speaker said (checked against the replay's captions or a local transcript), the title of the product screen the speaker showed while answering, a link into your own replay at that time, and an empty column for who owns the follow up. Claude cuts only the Q&A part of each replay, prices it against the user's Vivu plan, uploads it to a private Vivu project, runs one precise search per question, reads the transcript inside every returned window to tell an answer from a neighbouring mention or a promise to follow up, checks whether the speaker switched to the product while answering, and writes the sheet. Nothing is posted to Slack or Notion until the user approves a sample.

The value is in what only the replay holds. The Q&A log has the question text and when it was typed, not whether anyone answered it on air: hosts read questions minutes later, merge two into one, and mark questions "answered live" in the panel when the reply was "we'll get back to you". Whether the answer included a product demo is only on screen. The hard part is that questions in one Q&A talk about the same product: an answer about one feature mentions another, and closing remarks promise to "answer the rest by email". So every window Vivu returns stays a candidate until the transcript inside it shows the speaker answering that question, and the sheet reports how many windows were set aside.

When to use

Use when someone asks "which of these customer questions did we actually answer in our webinars, and where?", "build a sheet of webinar answers our reps can send", "find every question from the Q&A we promised to follow up on", or "did the speaker demo the answer to this question?".

Not for these:

  1. A one off question about one replay ("where did she answer the pricing question in last week's webinar?"): search Vivu directly and read the transcript around the hit.
  2. A transcript, captions or a recap of the whole webinar. The sheet quotes one or two sentences per answer so a rep can judge it; it is not a transcript.
  3. Cutting promo clips from the webinar. The sheet points to times in your own replay.
  4. Replying to attendees, scoring leads or deciding who asked what. The sheet leaves out who asked each question.
  5. Webinars you do not own, such as a competitor's. Use a competitive intelligence workflow instead.

Working principles

  1. Report measured numbers, not estimates. When a number is an estimate, say so.
  2. Nothing is verified until it has been checked against the source. Every Vivu window is a candidate until the transcript inside it shows the speaker answering that question; the screen title comes from a full frame, never from Vivu's reason text, which paraphrases and can invent words.
  3. Stop and tell the user when a required capability or tool is missing. Do not guess around it.
  4. Ask the user before anything that is expensive to redo (the replay list and its index minutes, before upload) and before anything that acts on their behalf (posting the sheet to Slack or Notion, after one approved sample).
  5. A missing row is not proof that a question was never answered. Say "not found in the indexed Q&A sections", never "not answered".

What you need before starting

Check each item at the start of the run and tell the user plainly what is missing before doing anything else.

Requirement Why How to check
Vivu connector with write access create a private project, open its upload page, search vivu_get_account shows can_create_projects: true (tool names may carry a server prefix). A write call failing with "has not granted vivu.write" means the user reconnects Vivu and allows write access
The webinar replays as local video files (exported from Zoom Webinars, ON24, Livestorm or your webinar platform) Vivu indexes files it is given; the Q&A cut, frames and transcript checks run on the local file ffprobe -v error -show_entries format=duration -of csv=p=0 "FILE" prints a length for each file
The Q&A log for each webinar (the platform's question export as CSV or text) picking the questions costs nothing when done from the log; the log also says roughly when the Q&A started the user pastes or attaches one export
A transcript for each replay: the caption file the platform exports (.vtt or .srt), or a local speech to text tool such as whisper.cpp the transcript inside each window is how an answer is told apart from a mention or a promise to follow up, and the excerpt is quoted from it, never from Vivu's reason text open the caption file, or run the ASR tool's version command
A shell with ffmpeg and ffprobe cut the Q&A sections, measure them, cut frames and contact sheets ffmpeg -version, ffprobe -version
An upload path move the files into Vivu vivu_open_upload_page plus the user's own browser, or a browser tool that can attach local files
Slack or Notion connector (only if the sheet is posted there) the destination the user names read the target channel or page once

This skill needs Claude Code on the user's computer (the terminal or the Code tab of Claude Desktop), because it reads local files and runs ffmpeg. Claude on the web and cloud sessions cannot reach the files. It downloads nothing from the internet, so no residential IP is needed. Nothing recurs, so no scheduler is involved; run it again after the next batch of webinars.

Inputs to collect

Ask for anything missing, most important first.

  1. QUESTIONS: the five to eight questions sales and support care about, picked from the Q&A logs. Required. Rewrite each without the asker's name.
  2. REPLAYS_DIR, the folder with the replay files, and the Q&A log for each. Required.
  3. The replay link pattern for a time (for example https://REPLAY_HOST/WEBINAR_ID?t=SECONDS), or one working link per replay. Required for the link column; without it the column says the file and time only.
  4. TRANSCRIPTS: where the caption files are, or which local ASR tool to run. Default: caption files with the same name as the video in REPLAYS_DIR.
  5. DESTINATION: a Slack channel or a Notion page for the finished sheet. Default: none; the sheet stays a local CSV.
  6. WORK_NAME: a short name for the working folder and the Vivu project. Default: "webinar-qa" plus the month.

Files and state

Keep everything in one working folder next to REPLAYS_DIR:

qa-WORK_NAME/
  config.json               questions with their query, replay list, Q&A cut points, Vivu project id, link pattern
  replays.csv               file, qa_file, listed_name, offset_s, duration_s, video_id, transcript_file
  qa/                       the cut Q&A sections that get uploaded
  results/                  one JSON per search, without the result page link
  sheets/                   contact sheets for windows that were checked on screen
  frames/                   full frames the screen titles were read from
  candidates.csv            every window Vivu returned, with the transcript verdict and the reason
  webinar_qa_answer_sheet.csv   one row per question
  follow_ups.txt            questions with a promised follow up, for an owner to pick up
  slack_message.txt         the rendered Slack post, before approval
  notion_page.md            the rendered Notion page, before approval
  state.json                steps done, files uploaded, searches run with job ids, windows checked, posted or not

Run the commands in Steps 3, 6 and 7 from the folder that holds both REPLAYS_DIR and qa-WORK_NAME/, so their relative paths resolve.

A rerun reads state.json first and skips finished steps: a file marked uploaded is not uploaded again, a question with a saved result is not searched again, a window with a recorded verdict is not checked again, and a sheet marked posted is not posted again. When new webinars arrive, add their Q&A sections to the same project and run Steps 5 to 8 for the questions again.

Step 1: Check the Vivu connector and the setup

Goal: confirm every requirement before spending anything.

  1. Call vivu_get_account. If the tool does not exist, tell the user to add the Vivu connector in Claude (https://mcp.vivu.ai/mcp) and stop. If the account does not show can_create_projects: true, or a later write call fails with "has not granted vivu.write", ask the user to reconnect Vivu and allow write access, then stop until they have.
  2. Run ffmpeg -version and ffprobe -version.
  3. List REPLAYS_DIR, run the ffprobe length command on one file, and open its caption file (or run the ASR tool's version command).
  4. If the user named a DESTINATION, read that Slack channel or Notion page once to confirm access.

In our test run vivu_get_account returned can_create_projects: true and each replay had a caption file. Running a local speech to text tool and reading a Slack or Notion destination were not exercised in our test run.

Done when vivu_get_account shows can_create_projects: true, ffmpeg and ffprobe print their versions, ffprobe prints a length for a replay, and a transcript source is confirmed for it.

Step 2: Pick the questions and write one query each

Goal: five to eight questions, each with a search query, approved by the user.

  1. From the Q&A logs, pick the questions sales and support hear most, or take the user's list. Merge duplicates across webinars and drop the asker's name and company.
  2. Rewrite each as a moment in the Q&A, in the product's own words. Template: "the host reads an audience question about TOPIC, and the speaker answers it". Keep TOPIC short and specific ("whether a club owner can deactivate, remove or ban members"), because the search matches what is said in the replay, and a broad topic ("security") also matches every answer that mentions it in passing.
  3. Show the question to query table to the user.

In our test run the eight questions were chosen by us from the webinars' own Q&A, not from a real sales team's list. Confirming the list with a sales or support lead was not exercised in our test run.

Done when the user approves the questions and their queries, and both are saved in config.json.

Step 3: Cut the Q&A sections and price them

Goal: only the Q&A part of each replay, measured and approved before upload.

  1. Find where the Q&A starts in each replay: the first question in the Q&A log minus a few minutes, the platform's chapter marker, or the line in the transcript where the host says they will take questions. Read the transcript to confirm.
  2. Cut it with an exact start (re-encoding keeps the cut on the right second, so file time plus OFFSET is replay time):
ffmpeg -v error -ss OFFSET -to END -i "REPLAYS_DIR/FILE" -c:v libx264 -preset veryfast -crf 23 -c:a aac "qa-WORK_NAME/qa/NAME_qa_OFFSET.mp4"

OFFSET and END are seconds in the replay; NAME is the replay's file name without the extension. Record OFFSET in replays.csv: every time in the sheet is file time plus OFFSET. 3. Run the ffprobe length command on every cut file and write duration_s. 4. Call vivu_get_usage and show one table:

These Q&A sections Plan allowance Remaining this month
Index minutes sum of duration_s / 60 from vivu_get_usage from vivu_get_usage
Search credits 5 per question, plus 5 for the demo search and 5 for each rewording (estimate) from vivu_get_usage from vivu_get_usage

Plan facts: Free is $0 a month with 20 index minutes a month and 50 search credits a month; Premium is $30 a month with 180 index minutes and 500 search credits. A precise search uses 5 credits in total. Five Q&A sections of about 18 minutes are about 90 index minutes and eight questions plus the demo search about 45 credits (estimate), which fits Premium in one month; whole replays of five 45 minute webinars would not.

  1. If the sections do not fit, offer levers in this order: index only the webinars where the most questions were asked, split the batch across two months, and only then move to a larger plan. Never drop a webinar the user asked for without saying which one, and never recompress a file to save minutes.

In our test run the two Q&A sections measured 31.47 minutes. The account used in our test run returns no allowance figures, so the comparison with a real plan and the user's approval were not exercised in our test run.

Done when the user approves the Q&A sections and their index minutes, and replays.csv has OFFSET and duration_s for each.

Step 4: Confirm rights, upload and index

Goal: every approved Q&A section indexed in a private Vivu project.

  1. Confirm the Compliance items with the user before the first upload.
  2. Call vivu_list_projects and reuse a project named "Webinar QA WORK_NAME" if one exists. Otherwise call vivu_create_project with that name and visibility "private". The default visibility is organization, which shows the project to everyone in the user's Vivu organization; Q&A sections carry attendees' questions and sometimes their names on screen.
  3. Call vivu_open_upload_page with the project ID immediately before uploading. The link expires in 180 seconds and works once, so never post or store it. Give it to the user to open in their own browser and select the files in qa/, or open it in a browser tool that can attach local files. Claude in Chrome accepts at most 10 MB per upload call and a Q&A section is usually larger, so the files normally go through the user's own browser or the Vivu web app. Never split or recompress a file to fit.
  4. Poll vivu_list_videos until every file shows ready. Vivu replaces spaces and punctuation in file names with underscores, so match each listed name to replays.csv by listed_name (the qa file name with that replacement); when a name does not match, match by length (duration_ms against duration_s in milliseconds). Record each video_id in replays.csv and state.json.

In our test run the two Q&A sections (31.47 minutes) were all ready 633 seconds after the upload link was requested; the second file waited in the queue until the first was ready. Each duration_ms equaled the ffprobe length and every name matched listed_name, so the length fallback was not exercised in our test run. The files went through the upload page with an automated browser, so opening the link in the user's own browser was not exercised in our test run.

Done when every file in replays.csv shows ready and has a video_id.

Step 5: Search each question and the demo

Goal: a saved list of candidate windows for every question, plus the windows where the speaker showed the product.

One precise search per question, because each question is its own row. Every search is precise: only precise returns a time window, and fast returns whole files with an empty reason, which tells you nothing the Q&A cut has not already told you. The chain behind each row: the question search suggests windows, the transcript inside each window decides whether it is this question's answer and whether the speaker answered or promised a follow up (Step 6), and the demo search plus a frame inside the kept window tell whether the answer was shown on screen (Step 7). The demo search is the flip from what is said to what is shown: a transcript says "let me go back to the screen", only the picture says which screen.

  1. Run vivu_search_videos (project_id, query, mode "precise", maximum_results 5) for each question. A question is usually asked once per webinar; five leaves room for the same question in other webinars and still shows you neighbouring answers that mention the topic, which is what Step 6 has to reject. It is also the recall ceiling, so a question asked in more than five webinars needs a higher value.
  2. Run one more search with mode "precise" and maximum_results 10: "while answering an audience question, the speaker switches to sharing their screen and shows the product's own admin interface". Ten covers several demos per Q&A section.
  3. vivu_search_videos returns a job ID; call vivu_get_search_results until complete is true. Each status call can wait up to 45 seconds, so a pending search is not a stalled one. Save the results to results/FIELD.json without the result page link, and show the result page link only in the live reply: it expires after four hours, so it never goes into the sheet, the follow up list or a post.

The queries from our test run, on two B2B software webinars, show the pattern: the first template for most questions, and for a question where a neighbouring answer got in, a version that names what the answer covers or which neighbour does not count. Adapt the topics to your product.

Field Query Mode maximum_results
hris_integration (after 2 rewordings on the same corpus) the host reads an audience question about how the product connects to a company's existing HR system (HRIS), and the speaker answers how the integration works; a later question about data privacy or security that also mentions HR systems does not count precise 5
calendar_scheduling the host reads an audience question about booking a meeting or seeing a colleague's calendar from inside the product, and the speaker answers it precise 5
data_privacy the host reads an audience question about how employee data is kept private and secure, and the speaker answers it precise 5
culture_customization the host reads an audience question about customizing recognition to fit a company's own values and culture, and the speaker answers it precise 5
points_donation the host reads an audience question about letting members give their loyalty points to a charity or donation, and the speaker answers it precise 5
multiple_club_types (after 1 rewording on the same corpus) the speaker answers an audience question about club types: how hard it is to switch from one type of club to another, and whether several club templates can be active at the same time; an answer about business or master accounts does not count precise 5
move_existing_members (after 1 rewording on the same corpus) the speaker answers an audience question about taking members who already exist and grouping them into a newly created club so that their points and spending follow them; a comment about customers collecting points in local hobby clubs does not count precise 5
remove_ban_members the host reads an audience question about whether a club owner can deactivate, remove or ban members, and the speaker answers it precise 5
demo_screen while answering an audience question, the speaker switches to sharing their screen and shows the product's own admin interface precise 10

In our test run three of the eight questions were reworded on the same corpus: one after 2 rewordings and two after 1 rewording each. Their final wordings named what the answer covers or the neighbouring question that does not count; the other five kept the first template. A search for a question nobody asked (single sign-on) returned 0 windows. We also tried a search for follow up promises ("a speaker says they will look into a question or send information to the person who asked after the webinar"); it found 3 real promises and missed 2, so the status column comes from the transcript in Step 6, not from that search.

Done when every question and the demo search have a saved result file and their job ids are in state.json.

Step 6: Check every window against the transcript and set the status

Goal: each window labeled answer, follow up, or other, before anything reaches the sheet.

This is the step that keeps wrong answers out of reps' hands.

  1. For each window, convert start_ms and end_ms to seconds, add OFFSET to get replay time, and read the transcript lines whose times fall inside it. In a .vtt or .srt file the times are on the line above the text, so grep -n "^00:MM:" TRANSCRIPT finds the line numbers for minute MM of the replay (TRANSCRIPT is the replay's caption file from replays.csv); read from the window's start line to its end line. Auto captions repeat each line twice; read it once.
  2. Label the window:
    • answer: for most of the window the host reads this question or the speaker answers it;
    • follow up: the same, and the speaker says they will send something or get back to the asker after the webinar instead of answering, or as well as answering ("we'll send you", "get back to you after", "we'll follow up by email");
    • other: a different question, an audience comment, or closing remarks, even when the topic is mentioned.
  3. Where the replay shows the question on screen (a question card or a banner under the speakers), look at one frame from the middle of the window. It names the question being answered and is a quick second check. It often shows the asker's name too; never copy it.
  4. Write every window, with its label and a one line reason, into candidates.csv, and count "other" as false positives for the question. Vivu's reason text is a paraphrase and can describe a different question as the asked one, so it never decides the label.
  5. When a question has several answer windows, keep the one that starts earliest. A question with no answer or follow up window gets the status not_found and goes back to the user, who can add a webinar or reword the query (one rerun costs 5 credits).
Worked example from our test run

The corpus was the Q&A sections of two public webinars from two B2B software vendors, 31.47 minutes in all: a three-person webcam gallery, and a studio with question cards and one screen share. We picked eight audience questions (most answered on air, two where the speaker promised to follow up) and one question nobody asked, and marked each answer in the captions before searching.

The first wordings returned 11 windows: 8 real and 3 false. All three false windows were other questions in the same Q&A: the data privacy answer, which says the product uses read-only permissions on the HR system, came back for the HR integration question; a business account answer that mentions running different schemes side by side came back for running several club types; and an audience comment about members collecting points came back for moving members into a new club. For two of them the reason text framed the window in the asked question's terms (the privacy answer as an HR integration explanation, the audience comment as a question about club members and points); for the third it named the other question correctly, and the window still came back. After rewording those three questions on the same corpus (2, 1 and 1 rewordings), the final wordings returned 8 windows: 8 real, 0 false, and 0 missed questions. The first wording of the HR question was reworded to describe the answer content, and that version returned a window that started in the last seconds of the HR answer and covered the next question being read; the version kept is the first wording plus "a later question about data privacy or security that also mentions HR systems does not count".

The two follow ups were found by the transcript, not by the search: for both, the window was right, and the reason text said the speaker "confirms the upcoming calendar integration feature" and "explains their current setup and plans". The captions said "we'll send you that product updates newsletter" and "we can look into it and get back to you after the" webinar. The rewordings were tuned on this small corpus, so on your webinars expect neighbouring answers again and keep this step.

Done when every window in results/ has a label and a reason in candidates.csv, and each question has a status: answered, follow_up or not_found.

Step 7: Check the screen during the answer

Goal: for each kept window, whether the speaker showed the product, and the screen title read from the picture.

  1. Cut a contact sheet across the kept window, one frame every five seconds:
ffmpeg -v error -y -ss START -to END -i "qa-WORK_NAME/qa/QA_FILE" -vf "fps=1/5,scale=320:-1,tile=4x4" -frames:v 1 qa-WORK_NAME/sheets/QUESTION_KEY.png

QA_FILE is the cut file from replays.csv and QUESTION_KEY the question's field name. START and END are the window in file seconds (not replay time); a window longer than 80 seconds needs a second sheet from START plus 80. Tile k is at START plus 5 times k seconds, counting from 0 at the top left. 2. If any tile shows the product (an app screen, not the speakers, slides or a question card), or a demo search window from Step 5 overlaps the kept window, extract the clearest moment as a full frame and read the screen title:

ffmpeg -v error -y -ss SECONDS -i "qa-WORK_NAME/qa/QA_FILE" -frames:v 1 -q:v 3 qa-WORK_NAME/frames/QUESTION_KEY.png

SECONDS is START plus 5 times the tile number. 3. Write the page or screen title as it appears; small text in a shared screen at replay resolution can be hard to read, so write only what is legible and mark the rest UNCERTAIN. No product on screen: demo_screen is none.

In our test run the demo search returned 1 window, and it was real: the only screen share in either Q&A section, during the club types answer. The title tiles of the shared admin screen were readable on full frames ("List of Club Templates", then "Create new Club Template"); question cards and closing slides were not returned. One screen share is a single sample, so the contact sheet of every kept window stays the check, not the search.

Done when every kept window has a contact sheet in sheets/ and a demo_screen value (a title, UNCERTAIN, or none).

Step 8: Write the sheet, the follow ups and the post

Goal: a sheet reps can work from, approved before it goes anywhere.

  1. Show the user one sample row and the field mapping, and wait for a yes before writing the rest:
question,webinar_file,answer_start,answer_end,status,answer_excerpt,demo_screen,frame,replay_link,transcript_checked,owner
"Can existing members be moved into a new club with their points?",WEBINAR_FILE,37:38,38:21,follow_up,"we haven't really evaluated that yet but we can look into it and get back to you after the",none,frames/move_existing_members.png,https://REPLAY_HOST/WEBINAR_ID?t=2258,yes,
Field Source If unavailable
question the rewritten question from config.json, without the asker none
webinar_file replays.csv none
answer_start, answer_end the kept window plus OFFSET, as MM:SS of the replay none
status Step 6 not_found
answer_excerpt one or two sentences copied from the transcript inside the window NOT VERIFIED when there is no transcript
demo_screen Step 7 UNCERTAIN or none
frame path of the sheet or frame used blank
replay_link the user's replay link pattern with answer_start in seconds file and time only
transcript_checked yes when Step 6 labeled the window from the transcript no
owner left empty for sales or support stays empty
  1. Write webinar_qa_answer_sheet.csv and follow_ups.txt (every follow_up row, with the time, what was said on air and an empty owner line). Add any general promise from the closing remarks ("we'll answer the rest by email") as a note, because those questions have no row.
  2. Tell the user the counts: answered, follow up, not found, and windows set aside as other.
  3. If the user named a DESTINATION, render the post to slack_message.txt (a short summary with replay links and the follow ups that need an owner) or notion_page.md (a page with a follow up table and an answered table), show it in full, name the channel or page, and post only after an explicit yes. Record "posted" in state.json so a rerun does not post twice. The post uses replay links, never Vivu result page links.

A window often covers only the first minute of a longer answer; the sheet points to where the answer starts, which is what a rep needs.

In our test run the sheet has one row per question: the two follow ups, the rest answered, and the question nobody asked as not_found. Our files were cut from public replays, so the links point to the public video at the replay time. The sample row approval and the post were not exercised in our test run; slack_message.txt and notion_page.md were rendered and not sent.

Done when webinar_qa_answer_sheet.csv has one row per question, follow_ups.txt lists every follow_up row, the user has approved the sample row, and, if a destination was named, the post was approved and state.json records it.

Compliance

  1. Index only webinars your company produced and has the right to reuse internally, under the webinar platform's terms. Confirm this before Step 4.
  2. Attendees' questions are their data. The sheet leaves out who asked; many replays show the asker's name on a question card or in a banner, and that name is never copied into the sheet, the follow up list or a post. Follow your privacy notice for webinar registrants.
  3. Speakers who are not your employees (customers, partners, guests) need to have agreed to the recording and to internal reuse. Confirm before Step 4.
  4. Keep the project private. The videos stay in the user's Vivu project until the user deletes them. Delete a project or video only when the user asks, and confirm first.
  5. The sheet goes to sales and support, not to prospects as is. A rep checks the answer against current product facts before quoting it, because a webinar answer can be out of date ("coming in a few weeks").
  6. The skill identifies no one: no face or voice recognition, no naming of attendees.

Known failure modes

Symptom Cause Fix
(observed) a window for one question is the answer to another question in the same Q&A answers about one product mention each other's topics; the privacy answer mentions read-only HR permissions and came back for the HR integration question label it other in Step 6 and count it; reword once to name the neighbouring question that does not count
(observed) a window starts at the tail of the right answer and covers the next question being read the window edge sits on "maintenance is like near zero" and runs into the next question read the transcript; keep the window only when most of it is this question
(observed) an audience comment comes back for a question, with a reason that calls it "an audience question about club members, reward points, and clubs" the reason paraphrases the topic, not whether a question was asked; the banner on screen shows a comment, not a question read the transcript, and the question banner where the replay has one, before labeling the window
(observed) the reason says the speaker answered when the speaker promised to follow up the reason summarizes, here "explains their current setup and plans" over "get back to you after the" webinar set status from the transcript only (Step 6)
(observed) a search for follow up promises returns a window where the speakers only say thanks, with a reason that says they "will respond to them via email after the webinar" the window landed after the sentence it describes read the transcript; do not use a follow up search as the status column
the same question is asked twice, or two questions are read together hosts merge similar questions keep one row per question and note in the excerpt that both were answered together
a question has no answer window it was not answered on air, it was asked in another webinar, or the wording does not match how it was read write not_found; check the Q&A log; reword once; an empty result does not prove it was never answered
the excerpt in the sheet does not match what was said it was copied from the reason text, which paraphrases quote only from the transcript
the asker's name shows up in the sheet or the post it was copied from a question card or banner on screen rewrite the question without names before Step 2 and never copy on-screen names
upload page asks to sign in or shows an error the one time upload link expires after 180 seconds request a new link right before opening it
a replay file is rejected by the browser upload tool Claude in Chrome accepts at most 10 MB per upload call the user opens the upload link in their own browser or adds the file in the Vivu web app
"has not granted vivu.write" Vivu connected read only the user reconnects Vivu with write access

Connect Vivu, then add the skill.

The skill runs through the Vivu connector. Add it to Claude from the connector directory, then install the skill.