{
  "schemaVersion": 2,
  "id": "assistant",
  "title": "Optional browser assistant tools",
  "video": "assistant.mp4",
  "poster": "assistant-poster.jpg",
  "captions": "assistant.vtt",
  "srt": "assistant.srt",
  "subtitleLog": "assistant.json",
  "sourceMaster": "output/video-masters-narrated/assistant.mp4",
  "fps": 30,
  "frameIndexConvention": "zero-based; start inclusive, end exclusive",
  "width": 1280,
  "height": 1040,
  "screenHeight": 800,
  "frameCount": 1192,
  "durationSeconds": 39.733333333333334,
  "captionsBurnedIn": true,
  "audioTracks": 1,
  "exampleDate": "2026-09-24",
  "capture": "Live Chromium Page.startScreencast frames; resampled to constant frame rate without cutting or speeding up actions.",
  "nativeDialogs": "OS file pickers are not captured. Cues explicitly identify file-selection steps.",
  "demoNote": "Recording of an explicitly labeled integration harness calling the actual app handlers; not a native browser-assistant interface.",
  "cues": [
    {
      "id": "assistant-01",
      "helpStep": 1,
      "stepTitle": "Use a compatible browser assistant",
      "text": "Integration demo: this labeled test panel calls the real app handlers, not a native assistant UI.",
      "narrationText": "Integration demo: this labeled test panel calls the real app handlers, not a native assistant UI.",
      "startFrame": 0,
      "endFrameExclusive": 188,
      "startSeconds": 0.0,
      "endSeconds": 6.266666666666667,
      "actions": [],
      "originalStartFrame": 0,
      "originalEndFrameExclusive": 184,
      "addedHoldFrames": 4,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-01.mp3",
        "taskId": "3045ef62-eb8f-4ca0-bd80-aa078b724324",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 4800,
        "endSampleExclusive": 292356,
        "startSeconds": 0.1,
        "endSeconds": 6.09075,
        "startFrame": 3,
        "endFrameExclusive": 183,
        "sourceSha256": "57681507d1511153845101c795a0a57d110a088a8cdd90f9b5014f62172fe68c"
      }
    },
    {
      "id": "assistant-02",
      "helpStep": 1,
      "stepTitle": "Use a compatible browser assistant",
      "text": "In normal use, a compatible browser assistant must expose these optional tools.",
      "narrationText": "In normal use, a compatible browser assistant must expose these optional tools.",
      "startFrame": 188,
      "endFrameExclusive": 343,
      "startSeconds": 6.266666666666667,
      "endSeconds": 11.433333333333334,
      "actions": [
        {
          "action": "highlight",
          "target": "#demo-label"
        }
      ],
      "originalStartFrame": 184,
      "originalEndFrameExclusive": 339,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-02.mp3",
        "taskId": "714048d5-4e65-45ee-9192-4aa78ac19e96",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 305600,
        "endSampleExclusive": 537428,
        "startSeconds": 6.366666666666666,
        "endSeconds": 11.196416666666666,
        "startFrame": 191,
        "endFrameExclusive": 336,
        "sourceSha256": "f67bc3f918cc4bf84c10dacdd5831fb29b9803f8edeca56f4d23c24590271273"
      }
    },
    {
      "id": "assistant-03",
      "helpStep": 2,
      "stepTitle": "Read tasks with list_tasks",
      "text": "list_tasks reads saved task details and IDs without changing them.",
      "narrationText": "list_tasks reads saved task details and IDs without changing them.",
      "startFrame": 343,
      "endFrameExclusive": 494,
      "startSeconds": 11.433333333333334,
      "endSeconds": 16.466666666666665,
      "actions": [
        {
          "action": "click",
          "target": "#list-tool"
        },
        {
          "action": "highlight",
          "target": "#result"
        }
      ],
      "originalStartFrame": 339,
      "originalEndFrameExclusive": 473,
      "addedHoldFrames": 17,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-03.mp3",
        "taskId": "ef96cd95-e458-4fa9-8992-8708b3277bf9",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 553600,
        "endSampleExclusive": 783199,
        "startSeconds": 11.533333333333333,
        "endSeconds": 16.316645833333332,
        "startFrame": 346,
        "endFrameExclusive": 490,
        "sourceSha256": "6356c3b913d43c5cd11718905e3eed624bf58ac8a737c8595f33ff94b23c0a2f"
      }
    },
    {
      "id": "assistant-04",
      "helpStep": 3,
      "stepTitle": "Create a task with create_task",
      "text": "create_task accepts a title plus optional notes, list, priority, and due date.",
      "narrationText": "create_task accepts a title plus optional notes, list, priority, and due date.",
      "startFrame": 494,
      "endFrameExclusive": 668,
      "startSeconds": 16.466666666666665,
      "endSeconds": 22.266666666666666,
      "actions": [
        {
          "action": "highlight",
          "target": "#create-input"
        }
      ],
      "originalStartFrame": 473,
      "originalEndFrameExclusive": 626,
      "addedHoldFrames": 21,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-04.mp3",
        "taskId": "26f313e7-ad60-4f6b-89a3-8700e88d9081",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 795200,
        "endSampleExclusive": 1060465,
        "startSeconds": 16.566666666666666,
        "endSeconds": 22.093020833333334,
        "startFrame": 497,
        "endFrameExclusive": 663,
        "sourceSha256": "885097883761cc0f64843e17a0943034137b94c18c34576dc0617e35944ba594"
      }
    },
    {
      "id": "assistant-05",
      "helpStep": 3,
      "stepTitle": "Create a task with create_task",
      "text": "Run create_task. The actual app saves the new task and shows All tasks.",
      "narrationText": "Run create_task. The actual app saves the new task and shows All tasks.",
      "startFrame": 668,
      "endFrameExclusive": 826,
      "startSeconds": 22.266666666666666,
      "endSeconds": 27.533333333333335,
      "actions": [
        {
          "action": "click",
          "target": "#create-tool"
        },
        {
          "action": "highlight",
          "target": "#result"
        }
      ],
      "originalStartFrame": 626,
      "originalEndFrameExclusive": 768,
      "addedHoldFrames": 16,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-05.mp3",
        "taskId": "4ea4c168-380b-4645-be66-14926011a2fb",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 1073600,
        "endSampleExclusive": 1314345,
        "startSeconds": 22.366666666666667,
        "endSeconds": 27.3821875,
        "startFrame": 671,
        "endFrameExclusive": 822,
        "sourceSha256": "1bc23082bc3be887e7b7a598c68d58ddc090c44f7e70531e448383202d36d364"
      }
    },
    {
      "id": "assistant-06",
      "helpStep": 4,
      "stepTitle": "Change status with set_task_completed",
      "text": "set_task_completed uses a task ID and true or false to complete or reopen it.",
      "narrationText": "set_task_completed uses a task ID and true or false to complete or reopen it.",
      "startFrame": 826,
      "endFrameExclusive": 1015,
      "startSeconds": 27.533333333333335,
      "endSeconds": 33.833333333333336,
      "actions": [
        {
          "action": "click",
          "target": "#complete-tool"
        },
        {
          "action": "highlight",
          "target": "#result"
        }
      ],
      "originalStartFrame": 768,
      "originalEndFrameExclusive": 920,
      "addedHoldFrames": 37,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-06.mp3",
        "taskId": "c2b1b1a5-3bbf-4ed1-a714-d954a03722cb",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 1326400,
        "endSampleExclusive": 1616185,
        "startSeconds": 27.633333333333333,
        "endSeconds": 33.670520833333335,
        "startFrame": 829,
        "endFrameExclusive": 1011,
        "sourceSha256": "93c3413b0c13ce43b440922cf2145a97a281e04e18a6c2c0a9dc92e0386d8cd7"
      }
    },
    {
      "id": "assistant-07",
      "helpStep": 5,
      "stepTitle": "Verify the result in the app",
      "text": "Verify the checked task in the app. Without tool support, use the normal task interface.",
      "narrationText": "Verify the checked task in the app. Without tool support, use the normal task interface.",
      "startFrame": 1015,
      "endFrameExclusive": 1192,
      "startSeconds": 33.833333333333336,
      "endSeconds": 39.733333333333334,
      "actions": [
        {
          "action": "highlight",
          "target": "iframe"
        }
      ],
      "originalStartFrame": 920,
      "originalEndFrameExclusive": 1089,
      "addedHoldFrames": 8,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/assistant-07.mp3",
        "taskId": "350d0ade-95c8-441c-8611-51df771bfbe7",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 1628800,
        "endSampleExclusive": 1898523,
        "startSeconds": 33.93333333333333,
        "endSeconds": 39.5525625,
        "startFrame": 1018,
        "endFrameExclusive": 1187,
        "sourceSha256": "363e8171b05e601309d276f923768e224da93d18b7ff9df66023a0f1e62cc597"
      }
    }
  ],
  "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
  "videoSha256": "8506b902371a02e4f3d5890a2adf7a88274cb94c3c4bc80177b0678f3d976f21",
  "masterSha256": "7f1c0b44210d464112cbaf068b065951343bdcbd1294c8d984bc33bfa9f4854a",
  "controlsClearancePixels": 128,
  "originalSourceMaster": "output/video-masters/assistant.mp4",
  "originalMasterSha256": "7e149290a4a1c7d0f72aa2b46b6a540428ab8d5275adf2730e806c53f744c0e4",
  "originalFrameCount": 1089,
  "addedNarrationHoldFrames": 103,
  "narration": {
    "voice": "Niki",
    "language": "en",
    "description": "Friendly American narration",
    "generatedSpeech": true,
    "model": "eleven_multilingual_v2",
    "generationSpeed": 1.05,
    "sampleRate": 48000,
    "codec": "AAC",
    "audioFile": "assistant-narration.m4a",
    "trackMaster": "output/narration/tracks/assistant.wav",
    "alignment": "Each original cue plays at its original pace. End-frame holds extend cues when needed for natural speech, with 100 ms lead-in and at least 150 ms end clearance. Audio is never truncated or sped up.",
    "timingConvention": "Audio sample indices at 48000 Hz are exact; covering video frame ranges are rounded outward."
  }
}
