Skip to main content
Glama

record

Record a storyboard-driven demo video in Chrome, capturing raw footage and timeline data. Returns a job ID for polling status; rejects if another recording is active.

Instructions

Drive the storyboard in Chrome and record raw video + timeline.json. Returns a jobId immediately — poll job_status. Rejects if another job is running.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dirYesdemo project directory — pass an absolute path
freshNorun against a WIPED throwaway profile — use for any demo whose story starts at a first-run gate, onboarding, an empty state or a one-shot flow, since carried-over cookies/localStorage silently record the wrong story. Not for logged-in demos (a fresh profile has no login).
paramsNostoryboard template params (name → value); each must be declared in the storyboard's params block. Substitutes {{name}} across all stages.
captureNo
cookiesNocookies to seed before the first action (name, value, domain[, path, secure, httpOnly, sameSite, expires]). Also storyboard setup.cookies.
profileNoChrome user-data dir (logged-in profile)
headlessNorun Chrome headless (default false — headed, like the CLI)
fromSceneNoresume: keep the previous take's scenes before this scene id (footage + timeline, verified unchanged by hash) and record from it — after a late-scene failure or a change to the tail of the storyboard
storageStateNoabsolute path to a Playwright storageState JSON (cookies + per-origin localStorage) to seed into the profile before the first action — for cookie-gated sites. Also available as storyboard setup.storageState.
profileSeededNothe profile is seeded on purpose (login / cookie gate): silence the carried-over-state warning. Implied by storageState/cookies.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindYes
jobIdYes
statusYes
demoDirYesresolved absolute demo directory
logFileYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.14.1
    • addedInput schema / properties / cookies
      Added value: +{
      +  "description": "cookies to seed before the first action (name, value, domain[, path, secure, httpOnly, sameSite, expires]). Also storyboard setup.cookies.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "domain": {
      +        "type": "string"
      +      },
      +      "expires": {
      +        "type": "number"
      +      },
      +      "httpOnly": {
      +        "type": "boolean"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "path": {
      +        "type": "string"
      +      },
      +      "sameSite": {
      +        "enum": [
      +          "Strict",
      +          "Lax",
      +          "None"
      +        ],
      +        "type": "string"
      +      },
      +      "secure": {
      +        "type": "boolean"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / fresh
      Added value: +{
      +  "description": "run against a WIPED throwaway profile — use for any demo whose story starts at a first-run gate, onboarding, an empty state or a one-shot flow, since carried-over cookies/localStorage silently record the wrong story. Not for logged-in demos (a fresh profile has no login).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / fromScene
      Added value: +{
      +  "description": "resume: keep the previous take's scenes before this scene id (footage + timeline, verified unchanged by hash) and record from it — after a late-scene failure or a change to the tail of the storyboard",
      +  "type": "string"
      +}
    • addedInput schema / properties / profileSeeded
      Added value: +{
      +  "description": "the profile is seeded on purpose (login / cookie gate): silence the carried-over-state warning. Implied by storageState/cookies.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / storageState
      Added value: +{
      +  "description": "absolute path to a Playwright storageState JSON (cookies + per-origin localStorage) to seed into the profile before the first action — for cookie-gated sites. Also available as storyboard setup.storageState.",
      +  "type": "string"
      +}
  2. First observedv0.9.0

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It reveals the async nature (jobId + polling) and a concurrency restriction (rejects if another job is running), which are valuable. However, it does not mention file side-effects beyond 'record raw video + timeline.json' or any profile-wiping behavior, though the parameter descriptions cover the 'fresh' option.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero redundancy. The primary purpose is front-loaded, followed by the critical async and concurrency behaviors. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 10-parameter schema with detailed descriptions and an output schema, the tool description covers the essential operational facts (what it produces, how to track it, concurrency limit). It omits explicit alternatives, but the schema and output schema fill most contextual gaps, making it adequate for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already documents most parameters (e.g., 'fresh' explains when to use a wiped profile). The tool description adds no additional parameter meaning beyond what the schema provides, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Drive the storyboard in Chrome and record raw video + timeline.json') and clarifies the async workflow ('Returns a jobId immediately — poll job_status'). This clearly distinguishes it from siblings like render, frames, or gif, which produce different outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool's purpose but does not explicitly mention when to choose it over alternatives. It does note a constraint ('Rejects if another job is running'), but lacks explicit 'use this when...' or 'not for...' guidance, leaving the agent to infer from the name and output type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.