{
  "version": 3,
  "exitCodes": {
    "0": "success",
    "1": "generic error",
    "2": "invalid flag or argument",
    "3": "not authenticated, or the credential lacks a required scope (error code insufficient_scope)",
    "4": "not found; do not retry",
    "5": "validation failure; fix arguments from valid_values",
    "6": "server error; retry with backoff",
    "7": "rate limited; wait before retrying"
  },
  "globalFlags": [
    {
      "name": "json",
      "type": "boolean",
      "description": "Force JSON success/error output before or after the command, before --. Doctor remains human-readable. Piped output is already JSON."
    }
  ],
  "errorShape": {
    "error": {
      "code": "string",
      "message": "string",
      "valid_values": "string[], when the failure was an unknown enum value"
    }
  },
  "commands": [
    {
      "path": "version",
      "summary": "Report package/build version, OS and installation manager; also --version.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "Version, source revision, dirty build flag, platform, architecture, Node version and installation ownership."
    },
    {
      "path": "install",
      "summary": "Install a verified release into a new dedicated user-local prefix (macOS/Linux).",
      "args": [],
      "flags": [
        {
          "name": "manifest",
          "type": "string",
          "description": "HTTPS release manifest, or explicit local manifest path. Defaults to the official feed on install and the saved source on upgrade."
        },
        {
          "name": "target",
          "type": "string",
          "description": "Require this exact version in the supplied manifest; no historical release endpoint is assumed."
        },
        {
          "name": "prefix",
          "type": "string",
          "description": "New dedicated directory; defaults to ~/.local/share/tekma-cli. No shell startup files are edited."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "Installed version, build, SHA256, prefix, executable and PATH directory. Requires Node 22.17+ and npm."
    },
    {
      "path": "upgrade",
      "summary": "Verify, stage and atomically activate a release in this managed installation.",
      "args": [],
      "flags": [
        {
          "name": "manifest",
          "type": "string",
          "description": "HTTPS release manifest, or explicit local manifest path. Defaults to the official feed on install and the saved source on upgrade."
        },
        {
          "name": "target",
          "type": "string",
          "description": "Require this exact version in the supplied manifest; no historical release endpoint is assumed."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "Upgraded/unchanged receipt. npm-managed executables refuse self-update with npm guidance."
    },
    {
      "path": "uninstall",
      "summary": "Remove only this owned user-local installation, preserving credentials, recordings and skills.",
      "args": [],
      "flags": [
        {
          "name": "yes",
          "type": "boolean",
          "description": "Required confirmation. npm-managed executables refuse self-removal."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "Removed prefix and retained data categories. Refuses changed launchers, foreign files and symlinks."
    },
    {
      "path": "list integrations",
      "summary": "List workspace integration provider IDs and connection status.",
      "args": [],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "listIntegrations",
      "scopes": [
        "captures:read"
      ],
      "output": "Paginated integration id, provider, status and accountLabel."
    },
    {
      "path": "list integration-resources",
      "summary": "Look up valid issue destinations and metadata for GitHub, GitLab, Linear, Jira, Asana, ClickUp, Slack, Notion or Azure DevOps.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "provider",
          "required": true,
          "description": "github, gitlab, linear, jira, asana, clickup, slack, notion or azure_devops"
        },
        {
          "name": "resource",
          "required": true,
          "description": "destinations, labels, assignees, milestones (GitHub/GitLab), projects/states/cycles/estimates (Linear), issueTypes/fields (Jira), workspaces/projects/assignees/tags/sections/fields (Asana), workspaces/spaces/folders/lists/assignees/tags/types/fields (ClickUp), channels/users (Slack), dataSources/search/fields (Notion), projects/types/teams/assignees/areas/fields (Azure DevOps)"
        }
      ],
      "flags": [
        {
          "name": "work-item-type",
          "type": "string",
          "description": "Required for Azure fields; select from types."
        },
        {
          "name": "team-id",
          "type": "string",
          "description": "Required for Azure assignees and areas; select from teams."
        },
        {
          "name": "data-source-id",
          "type": "string",
          "description": "Required for Notion fields; select from dataSources or search."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Notion title search only."
        },
        {
          "name": "parent-id",
          "type": "string",
          "description": "ClickUp workspace ID for spaces; space ID for folders/lists (owner only)."
        },
        {
          "name": "folder-id",
          "type": "string",
          "description": "ClickUp folder ID for lists; omit for folderless lists (owner only)."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Asana workspace GID, or ClickUp workspaceId returned by types when requesting custom-type fields."
        },
        {
          "name": "issue-type-id",
          "type": "string",
          "description": "Jira issue type for fields; for ClickUp fields use the types result ID with --workspace-id."
        },
        {
          "name": "cursor",
          "type": "string",
          "description": "Linear/Jira/Asana/Slack/Notion/Azure nextCursor; not numeric page pagination."
        },
        {
          "name": "destination",
          "type": "string",
          "description": "Repository, project ID/path, Linear team UUID, Jira project key, Asana project GID or ClickUp list ID Notion database UUID or Azure project name/UUID; defaults to configured destination."
        },
        {
          "name": "page",
          "type": "number",
          "description": "Page1–100; use returned nextPage."
        }
      ],
      "tool": "listIntegrationResources",
      "scopes": [
        "captures:write"
      ],
      "output": "{ items: [{value,label}], nextPage, nextCursor, canChooseDestination, destination, fields?, blockedFields?, asanaFields?, workspaceId?, notionFields?, dataSourceId?, azureFields?, clickupFields?, statuses?, spaceId? }"
    },
    {
      "path": "send capture",
      "summary": "Create an external item through an already-connected workspace integration.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "provider",
          "required": true,
          "description": "Connected provider ID, such as github, linear, jira or slack."
        }
      ],
      "flags": [
        {
          "name": "azure-fields",
          "type": "string",
          "description": "JSON Azure project, workItemType, teamId, assigneeId and values by field reference name. Requires azure_devops."
        },
        {
          "name": "notion-fields",
          "type": "string",
          "description": "JSON Notion databaseId, dataSourceId and values keyed by property ID."
        },
        {
          "name": "slack-destination",
          "type": "string",
          "description": "JSON Slack {\"kind\":\"channel\"|\"user\",\"id\":\"...\"}; alternate channels/DM require the connecting owner."
        },
        {
          "name": "clickup-fields",
          "type": "string",
          "description": "JSON ClickUp listId, status, priority, assigneeIds, tags and customFields; standard tasks only."
        },
        {
          "name": "asana-fields",
          "type": "string",
          "description": "JSON object with workspaceId, projectId, assigneeId, sectionId, tagIds, dueDate and customFields. Asana only; discover fields first."
        },
        {
          "name": "jira-fields",
          "type": "string",
          "description": "JSON object with projectKey, issueTypeId and values keyed by field ID. Discover Jira fields first; unsupported required fields block sending."
        },
        {
          "name": "linear-fields",
          "type": "string",
          "description": "JSON object with teamId, projectId, assigneeId, labelIds, priority0–4 and optional stateId/cycleId/estimate. Linear only; alternate teams require workspace ownership."
        },
        {
          "name": "gitlab-fields",
          "type": "string",
          "description": "JSON object with projectId, labels, assigneeId or assigneeIds, milestoneId and dueDate. GitLab only; alternate projects require workspace ownership."
        },
        {
          "name": "github-fields",
          "type": "string",
          "description": "JSON object with repository, labels, assignees and milestone. GitHub only; alternate repositories require workspace ownership."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Optional destination title override, up to 200 characters."
        },
        {
          "name": "additional-context",
          "type": "string",
          "description": "Extra item context, up to 2000 characters."
        }
      ],
      "tool": "sendCaptureToIntegration",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, provider, externalId, externalUrl }"
    },
    {
      "path": "move capture",
      "summary": "Move a capture to a workspace folder or return it to Unfiled.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "folder-id",
          "type": "string",
          "description": "Destination folder UUID, exact name or short ID in the capture workspace."
        },
        {
          "name": "unfiled",
          "type": "boolean",
          "description": "Remove the capture from its current folder."
        }
      ],
      "tool": "moveCapture",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, folderId }"
    },
    {
      "path": "set status",
      "summary": "Archive a capture or reopen an archived capture.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "status",
          "required": true,
          "description": "ready or archived; ready reopens an archived capture."
        }
      ],
      "flags": [],
      "tool": "setCaptureStatus",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, status }"
    },
    {
      "path": "attach finding",
      "summary": "Attach a structured finding to a capture discussion.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "title",
          "required": true,
          "description": "Finding title, up to 200 characters."
        },
        {
          "name": "summary",
          "required": true,
          "description": "Explanation; complete formatted finding must fit 5000 characters."
        }
      ],
      "flags": [
        {
          "name": "severity",
          "type": "string",
          "enum": [
            "info",
            "low",
            "medium",
            "high",
            "critical"
          ],
          "default": "info",
          "description": "Finding severity."
        },
        {
          "name": "at",
          "type": "number",
          "description": "Source-video timestamp in milliseconds."
        },
        {
          "name": "idempotency-key",
          "type": "string",
          "description": "Reuse the same 8–200 character key on retry."
        }
      ],
      "tool": "attachFinding",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, created }"
    },
    {
      "path": "list comments",
      "summary": "Read a capture discussion, including IDs needed for editing and deletion.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "listComments",
      "scopes": [
        "captures:read"
      ],
      "output": "Paginated comment IDs, author IDs, body, parentId, timestampMs and dates."
    },
    {
      "path": "inspect trace",
      "summary": "Inspect local Playwright page IDs and screencast timing without uploading or authenticating.",
      "args": [
        {
          "name": "file",
          "required": true,
          "description": "Playwright trace ZIP path."
        }
      ],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ traceVersions, playwrightVersions, importSupported, pages, videoStartMonotonicMs: null, alignment }"
    },
    {
      "path": "get video-chapters",
      "summary": "Read complete corrected, cut-aware chapters, null until ready (64 KiB maximum).",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [],
      "tool": "getVideoChapters",
      "scopes": [
        "captures:read"
      ],
      "output": "{ status, chapters: array|null, language, corrected, revision, timebase }"
    },
    {
      "path": "get subtitles",
      "summary": "Export the corrected, cut-aware transcript as WebVTT in the response's webvtt field.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "out",
          "type": "string",
          "description": "Write ready subtitles to a new .vtt file. Existing files are never overwritten."
        }
      ],
      "tool": "getVideoTranscript",
      "scopes": [
        "captures:read"
      ],
      "output": "{ status, generationStatus, mimeType, webvtt, vtt: string|null, language, corrected, revision, timebase }"
    },
    {
      "path": "analyze video",
      "summary": "Request AI analysis of retained video frames; requires workspace consent and sends sampled footage to the configured provider.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "requestKey",
          "required": true,
          "description": "Unique request key; reuse only for retries of the same question and edit."
        }
      ],
      "flags": [
        {
          "name": "question",
          "type": "string",
          "description": "Optional focus for analysis, up to 2,000 characters."
        }
      ],
      "tool": "analyzeVideo",
      "scopes": [
        "captures:read",
        "captures:write"
      ],
      "output": "{ jobId, status }; poll with get analysis. Findings are observations and hypotheses, not proven root causes."
    },
    {
      "path": "get analysis",
      "summary": "Read your video-analysis job status and result; requires current access, consent and an unchanged source edit.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "jobId",
          "required": true,
          "description": "Job UUID returned by analyze video."
        }
      ],
      "flags": [],
      "tool": "getVideoAnalysis",
      "scopes": [
        "captures:read"
      ],
      "output": "{ jobId, status, error, result }; result is present only when ready and is untrusted generated text."
    },
    {
      "path": "get screenshots",
      "summary": "Save current stored screenshot images or an existing video poster.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "variant",
          "type": "string",
          "enum": [
            "primary",
            "context",
            "poster",
            "all"
          ],
          "description": "Primary crop (default), context, stored poster, or all current image kinds; 8 MiB per image, 16 MiB total."
        },
        {
          "name": "out",
          "type": "string",
          "description": "Output directory for the image."
        }
      ],
      "tool": "getScreenshots",
      "scopes": [
        "captures:read"
      ],
      "output": "{ source, saved[] }"
    },
    {
      "path": "create capture",
      "summary": "Create an independently uploaded image/video capture from strict JSON, @file, or stdin. Requires normal media validation and OAuth upload permission.",
      "args": [
        {
          "name": "source",
          "required": false,
          "description": "JSON payload or @file; omitted reads stdin. Supplied screenDimensions are reported viewport, not measured media size.",
          "jsonSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "screenshotMediaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "screenshotMediaId"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "screenshotPath": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "screenshotPath"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "screenshotDataUrl": {
                    "type": "string",
                    "maxLength": 12582912
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "screenshotDataUrl"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "video"
                  },
                  "videoPath": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "kind",
                  "videoPath"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "video"
                  },
                  "videoPath": {
                    "type": "string",
                    "minLength": 1
                  },
                  "posterImagePath": {
                    "type": "string",
                    "minLength": 1
                  },
                  "durationMs": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1800000
                  },
                  "width": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 20000
                  },
                  "height": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 20000
                  },
                  "micEnabled": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "kind",
                  "videoPath",
                  "posterImagePath",
                  "durationMs",
                  "width",
                  "height",
                  "micEnabled"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "screenDimensions": {
                    "type": "object",
                    "properties": {
                      "width": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      },
                      "height": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 20000
                      }
                    },
                    "required": [
                      "width",
                      "height"
                    ],
                    "additionalProperties": false
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "kind": {
                    "type": "string",
                    "const": "video"
                  },
                  "videoPath": {
                    "type": "string",
                    "minLength": 1
                  },
                  "playwrightTracePath": {
                    "type": "string",
                    "minLength": 1
                  },
                  "videoStartMonotonicMs": {
                    "type": "number",
                    "minimum": 0
                  },
                  "tracePageId": {
                    "type": "string",
                    "minLength": 1
                  },
                  "idleThresholdMs": {
                    "type": "integer",
                    "minimum": 2000,
                    "maximum": 3600000
                  }
                },
                "required": [
                  "url",
                  "screenDimensions",
                  "kind",
                  "videoPath",
                  "playwrightTracePath"
                ],
                "additionalProperties": false
              }
            ]
          }
        }
      ],
      "flags": [],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "Normal import receipt with durable checkpoint. screenshotMediaId copies a current same-workspace screenshot and additionally requires captures:read. Video input may supply posterImagePath, durationMs, width, height and micEnabled together to bypass local FFmpeg; server media validation still applies."
    },
    {
      "path": "import resume",
      "summary": "Resume a retained image or video import checkpoint.",
      "args": [
        {
          "name": "directory",
          "required": true,
          "description": "Checkpoint directory printed by the import."
        }
      ],
      "flags": [],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status, captureId, shareUrl?, checkpoint, imported, hint }"
    },
    {
      "path": "import video",
      "summary": "Upload an existing video; preserves dimensions and audio, without inventing diagnostics.",
      "args": [
        {
          "name": "file",
          "required": true,
          "description": "Local video file."
        }
      ],
      "flags": [
        {
          "name": "trace",
          "type": "string",
          "description": "Playwright trace.zip (version 8 or 9); format 8 requires --video-start-ms; format 9 can align an embedded byte-identical video record. --trace-page selects the page."
        },
        {
          "name": "trace-page",
          "type": "string",
          "description": "Page ID belonging to the imported video."
        },
        {
          "name": "idle-threshold-ms",
          "type": "number",
          "description": "Opt in to cutting diagnostic gaps longer than this many milliseconds (2000–3600000), retaining 500ms at each edge. May remove visual activity absent from the trace."
        },
        {
          "name": "video-start-ms",
          "type": "number",
          "description": "Video zero in the trace monotonic clock; must be measured, not inferred from context start."
        },
        {
          "name": "url",
          "type": "string",
          "description": "Required original page URL."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Capture title; defaults to filename."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Destination workspace UUID; defaults to the recorder workspace."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status, captureId, captureUrl?, shareUrl?, durationMs, imported, diagnosticsAvailable, hint }"
    },
    {
      "path": "import image",
      "summary": "Upload a PNG, JPEG, or WebP image without inventing diagnostics.",
      "args": [
        {
          "name": "file",
          "required": true,
          "description": "Local PNG, JPEG, or WebP file."
        }
      ],
      "flags": [
        {
          "name": "url",
          "type": "string",
          "description": "Required original page URL."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Capture title; defaults to filename."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Destination workspace UUID; defaults to the recorder workspace."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status, captureId, captureUrl?, shareUrl?, imageBytes, mimeType, imported, diagnosticsAvailable, hint }"
    },
    {
      "path": "skills list",
      "summary": "List skills bundled with this CLI; no login required.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ skills[] }"
    },
    {
      "path": "skills show",
      "summary": "Read a bundled skill and its supporting references.",
      "args": [
        {
          "name": "name",
          "required": true,
          "description": "Skill name."
        }
      ],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ name, description, files[] }"
    },
    {
      "path": "skills path",
      "summary": "Preview the skill installation directory without writing files.",
      "args": [],
      "flags": [
        {
          "name": "agent",
          "type": "string",
          "enum": [
            "codex",
            "claude"
          ],
          "description": "Agent skills directory. skills install defaults to every agent found; other commands default to codex."
        },
        {
          "name": "directory",
          "type": "string",
          "description": "Custom parent skills directory; overrides --agent."
        },
        {
          "name": "project",
          "type": "boolean",
          "description": "Use this project's agent skills directory instead of your home directory."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "{ path }"
    },
    {
      "path": "skills source",
      "summary": "Locate a bundled SKILL.md; defaults to tekma-recorder.",
      "args": [
        {
          "name": "name",
          "required": false,
          "description": "Skill name."
        }
      ],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ name, path }"
    },
    {
      "path": "skills install",
      "summary": "Install a bundled skill without overwriting an existing skill. Defaults to tekma-recorder and to every agent directory found in your home (~/.codex, ~/.claude).",
      "args": [
        {
          "name": "name",
          "required": false,
          "description": "Skill name; defaults to tekma-recorder."
        }
      ],
      "flags": [
        {
          "name": "agent",
          "type": "string",
          "enum": [
            "codex",
            "claude"
          ],
          "description": "Agent skills directory. skills install defaults to every agent found; other commands default to codex."
        },
        {
          "name": "directory",
          "type": "string",
          "description": "Custom parent skills directory; overrides --agent."
        },
        {
          "name": "project",
          "type": "boolean",
          "description": "Use this project's agent skills directory instead of your home directory."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "{ name, path, status, hint } or an array, one per agent"
    },
    {
      "path": "list members",
      "summary": "List workspace members as an owner, including their roles.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Case-insensitive literal substring of member name or email."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "listMembers",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "invite folder-member",
      "summary": "Email a selected-folder invitation as an owner; recipient must verify their email and accept in the browser.",
      "args": [
        {
          "name": "folderId",
          "required": true,
          "description": "Folder UUID, exact name or short ID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "email",
          "type": "string",
          "description": "Required recipient email."
        },
        {
          "name": "role",
          "type": "string",
          "enum": [
            "member",
            "viewer"
          ],
          "default": "viewer",
          "description": "New workspace member role; existing member roles are preserved."
        }
      ],
      "tool": "inviteFolderMember",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, folderId, expiresAt, url, emailStatus }"
    },
    {
      "path": "set folder-members",
      "summary": "Replace private folder membership as an owner, or explicitly restore workspace visibility.",
      "args": [
        {
          "name": "folderId",
          "required": true,
          "description": "Folder UUID, exact name or short ID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "visibility",
          "type": "string",
          "enum": [
            "selected",
            "workspace"
          ],
          "description": "Required visibility. Owners always retain access."
        },
        {
          "name": "member-ids",
          "type": "string",
          "description": "Comma-separated current workspace user IDs; omit for no grants."
        }
      ],
      "tool": "setFolderMembers",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, visibility, memberIds[] }"
    },
    {
      "path": "create folder",
      "summary": "create a workspace folder.",
      "args": [],
      "flags": [
        {
          "name": "visibility",
          "type": "string",
          "enum": [
            "workspace",
            "selected"
          ],
          "description": "Workspace visibility by default; selected grants the creator initial access."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Required folder name, up to 80 characters."
        }
      ],
      "tool": "createFolder",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, name? }"
    },
    {
      "path": "rename folder",
      "summary": "rename a workspace folder.",
      "args": [
        {
          "name": "folderId",
          "required": true,
          "description": "Folder UUID, exact name or eight-character short ID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Required folder name, up to 80 characters."
        }
      ],
      "tool": "renameFolder",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, name? }"
    },
    {
      "path": "delete folder",
      "summary": "Delete a folder; optionally permanently delete its captures with --delete-contents.",
      "args": [
        {
          "name": "folderId",
          "required": true,
          "description": "Folder UUID, exact name or eight-character short ID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "delete-contents",
          "type": "boolean",
          "description": "Permanently delete all contained captures, including trash. Cannot be restored."
        }
      ],
      "tool": "deleteFolder",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, name? }"
    },
    {
      "path": "add reaction",
      "summary": "Add your emoji reaction on a comment (retry-safe).",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "commentId",
          "required": true,
          "description": "Comment UUID."
        },
        {
          "name": "emoji",
          "required": true,
          "description": "One Unicode emoji."
        }
      ],
      "flags": [],
      "tool": "addCommentReaction",
      "scopes": [
        "comments:write"
      ],
      "output": "{ commentId, emoji, active }"
    },
    {
      "path": "remove reaction",
      "summary": "Remove your emoji reaction on a comment (retry-safe).",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "commentId",
          "required": true,
          "description": "Comment UUID."
        },
        {
          "name": "emoji",
          "required": true,
          "description": "One Unicode emoji."
        }
      ],
      "flags": [],
      "tool": "removeCommentReaction",
      "scopes": [
        "comments:write"
      ],
      "output": "{ commentId, emoji, active }"
    },
    {
      "path": "delete comment",
      "summary": "Delete your own comment, or moderate as a workspace owner.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "commentId",
          "required": true,
          "description": "Comment UUID."
        }
      ],
      "flags": [],
      "tool": "deleteComment",
      "scopes": [
        "comments:write"
      ],
      "output": "{ id, deleted }"
    },
    {
      "path": "update comment",
      "summary": "Edit your own comment without changing its timestamp or attachments.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "commentId",
          "required": true,
          "description": "Comment UUID."
        },
        {
          "name": "body",
          "required": true,
          "description": "Replacement comment text."
        }
      ],
      "flags": [],
      "tool": "updateComment",
      "scopes": [
        "comments:write"
      ],
      "output": "{ id, body, timestampMs }"
    },
    {
      "path": "delete capture",
      "summary": "Move to trash for 30 days; stops share access and retains media.",
      "args": [
        {
          "name": "workspaceId",
          "required": true,
          "description": "Workspace UUID."
        },
        {
          "name": "captureId",
          "required": true,
          "description": "Capture UUID."
        }
      ],
      "flags": [],
      "tool": "deleteCapture",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, workspaceId, state, changedAt }"
    },
    {
      "path": "restore capture",
      "summary": "Restore a trashed capture and cancel cleanup.",
      "args": [
        {
          "name": "workspaceId",
          "required": true,
          "description": "Workspace UUID."
        },
        {
          "name": "captureId",
          "required": true,
          "description": "Capture UUID."
        }
      ],
      "flags": [],
      "tool": "restoreCapture",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, workspaceId, state, changedAt }"
    },
    {
      "path": "purge capture",
      "summary": "Schedule permanent deletion of a trashed capture.",
      "args": [
        {
          "name": "workspaceId",
          "required": true,
          "description": "Workspace UUID."
        },
        {
          "name": "captureId",
          "required": true,
          "description": "Capture UUID."
        }
      ],
      "flags": [],
      "tool": "purgeCapture",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, workspaceId, state, changedAt }"
    },
    {
      "path": "update capture",
      "summary": "Edit a capture title or description; omitted fields stay unchanged.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "title",
          "type": "string",
          "description": "New title, up to 200 characters."
        },
        {
          "name": "description",
          "type": "string",
          "description": "New description, up to 5000 characters; use an empty string to clear it."
        }
      ],
      "tool": "updateCapture",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, title, description }"
    },
    {
      "path": "connect recording-domain",
      "summary": "Get a human owner-sign-in setup link; optionally wait for actual ownership and installation verification.",
      "args": [
        {
          "name": "url",
          "required": true,
          "description": "Public HTTPS site URL; its origin is registered."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "wait",
          "type": "boolean",
          "description": "Poll actual installation status; never marks a domain verified itself."
        },
        {
          "name": "timeout-seconds",
          "type": "number",
          "default": 60,
          "description": "Total command deadline, 1–300 seconds. Timeout returns a pending receipt and exits nonzero."
        }
      ],
      "tool": "getRecordingUrlVerifyLink",
      "scopes": [
        "captures:write"
      ],
      "output": "{ domainId, origin, setupUrl, requiresOwnerSignIn, verified, humanActionRequired, installationStatus, timedOut }"
    },
    {
      "path": "verify recording-domain",
      "summary": "Check a domain's public ownership proof as an owner; does not verify recorder installation.",
      "args": [
        {
          "name": "domainId",
          "required": true,
          "description": "Registered domain UUID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "verifyRecordingDomain",
      "scopes": [
        "captures:write"
      ],
      "output": "{ domain, verified, installationStatus }"
    },
    {
      "path": "delete recording-domain",
      "summary": "Remove a domain ownership registration as an owner; captures and recording links remain.",
      "args": [
        {
          "name": "domainId",
          "required": true,
          "description": "Registered domain UUID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "deleteRecordingDomain",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, deleted, changed }"
    },
    {
      "path": "create recording-domain",
      "summary": "Register a public HTTPS recording origin as an owner; returns public ownership instructions.",
      "args": [],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "origin",
          "type": "string",
          "description": "Required public HTTPS origin, without path, query or custom port."
        }
      ],
      "tool": "createRecordingDomain",
      "scopes": [
        "captures:write"
      ],
      "output": "{ domain, ownershipProof, installationStatus }"
    },
    {
      "path": "get recording-domain-setup",
      "summary": "Get the owner sign-in page for a registered domain's ownership setup.",
      "args": [
        {
          "name": "domainId",
          "required": true,
          "description": "Registered domain UUID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "getRecordingDomainSetup",
      "scopes": [
        "captures:read"
      ],
      "output": "{ domain, setupUrl, requiresOwnerSignIn, installationStatus }"
    },
    {
      "path": "list recording-domains",
      "summary": "List domain ownership status as a workspace owner; recorder installation is not yet checked.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "listRecordingDomains",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], domains[], next_cursor, truncated, truncation_reason, hint }; domains aliases the current page."
    },
    {
      "path": "list recording-links",
      "summary": "List workspace recording links newest first, without revealing secrets.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "include-revoked",
          "type": "boolean",
          "description": "Include revoked links (excluded by default)."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "listRecordingLinks",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get recording-link",
      "summary": "Get recording-link metadata without revealing its secret.",
      "args": [
        {
          "name": "recordingLinkId",
          "required": true,
          "description": "Recording-link UUID from list recording-links."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "getRecordingLink",
      "scopes": [
        "captures:read"
      ],
      "output": "Recording-link metadata and status, without credentials."
    },
    {
      "path": "list recording-link-captures",
      "summary": "List captures submitted through one recording link, newest first.",
      "args": [
        {
          "name": "recordingLinkId",
          "required": true,
          "description": "Recording-link UUID from list recording-links."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "listRecordingLinkCaptures",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "create recording-link",
      "summary": "Create a recording link as a workspace owner; returns its URL once.",
      "args": [],
      "flags": [
        {
          "name": "recording-domain-id",
          "type": "string",
          "description": "Current verified and installed domain UUID in this workspace; mutually exclusive with --recording-origin."
        },
        {
          "name": "default-metadata",
          "type": "string",
          "description": "JSON object copied into new captures; use {} to clear. Sensitive values are redacted."
        },
        {
          "name": "default-title",
          "type": "string",
          "description": "Default capture title; per-submission titles take precedence."
        },
        {
          "name": "never-expires",
          "type": "boolean",
          "description": "Keep the link active until revoked."
        },
        {
          "name": "reference",
          "type": "string",
          "description": "Default ticket URL or customer email."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        },
        {
          "name": "name",
          "type": "string",
          "description": "Optional link name; defaults to Recording request."
        },
        {
          "name": "recording-origin",
          "type": "string",
          "description": "URL of the page to record; use this or --recording-domain-id."
        },
        {
          "name": "folder-id",
          "type": "string",
          "description": "Destination folder UUID, exact name or eight-character short ID."
        },
        {
          "name": "expires-at",
          "type": "string",
          "description": "Absolute ISO timestamp with timezone, within the next 90 days. Conflicts with relative or never-expiring modes."
        },
        {
          "name": "expires-in-days",
          "type": "number",
          "description": "Lifetime in days, 1–90; defaults to 30."
        }
      ],
      "tool": "createRecordingLink",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, expiresAt, url }"
    },
    {
      "path": "update recording-link",
      "summary": "Update an active recording link as a workspace owner without changing its secret URL.",
      "args": [
        {
          "name": "workspaceId",
          "required": true,
          "description": "Workspace UUID."
        },
        {
          "name": "recordingLinkId",
          "required": true,
          "description": "Recording-link UUID."
        }
      ],
      "flags": [
        {
          "name": "default-metadata",
          "type": "string",
          "description": "JSON object copied into new captures; use {} to clear. Sensitive values are redacted."
        },
        {
          "name": "clear-default-title",
          "type": "boolean",
          "description": "Remove the saved capture title and use the link name fallback."
        },
        {
          "name": "default-title",
          "type": "string",
          "description": "Default capture title; per-submission titles take precedence."
        },
        {
          "name": "never-expires",
          "type": "boolean",
          "description": "Keep the link active until revoked."
        },
        {
          "name": "clear-reference",
          "type": "boolean",
          "description": "Remove the default reference."
        },
        {
          "name": "reference",
          "type": "string",
          "description": "Default ticket URL or customer email."
        },
        {
          "name": "name",
          "type": "string",
          "description": "New display name."
        },
        {
          "name": "folder-id",
          "type": "string",
          "description": "Destination folder UUID, exact name or eight-character short ID."
        },
        {
          "name": "clear-folder",
          "type": "boolean",
          "description": "Remove the destination folder."
        },
        {
          "name": "recording-origin",
          "type": "string",
          "description": "Allowed HTTP(S) recording origin."
        },
        {
          "name": "expires-at",
          "type": "string",
          "description": "Absolute ISO timestamp with timezone, within the next 90 days. Conflicts with relative or never-expiring modes."
        },
        {
          "name": "expires-in-days",
          "type": "number",
          "description": "Reset expiry to 1–90 days from now."
        }
      ],
      "tool": "updateRecordingLink",
      "scopes": [
        "captures:write"
      ],
      "output": "Updated metadata only; no secret URL."
    },
    {
      "path": "revoke recording-link",
      "summary": "Revoke a recording link as a workspace owner; keep existing recordings.",
      "args": [
        {
          "name": "recordingLinkId",
          "required": true,
          "description": "Recording link UUID."
        }
      ],
      "flags": [
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Required workspace UUID."
        }
      ],
      "tool": "revokeRecordingLink",
      "scopes": [
        "captures:write"
      ],
      "output": "{ id, revoked, changed }"
    },
    {
      "path": "list workspaces",
      "summary": "List accessible workspaces.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Workspace UUID; required for folders."
        }
      ],
      "tool": "listWorkspaces",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "list folders",
      "summary": "List accessible folders.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Case-insensitive literal substring of the folder name."
        },
        {
          "name": "order-by",
          "type": "string",
          "enum": [
            "name",
            "createdAt",
            "updatedAt"
          ],
          "description": "Name ascending (default), or timestamps newest first."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Workspace UUID; required for folders."
        }
      ],
      "tool": "listFolders",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "list captures",
      "summary": "Find accessible captures, newest first, across your workspaces.",
      "args": [],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "order-by",
          "type": "string",
          "enum": [
            "capturedAt",
            "createdAt",
            "updatedAt"
          ],
          "description": "Newest first by recording time (default), creation time or update time."
        },
        {
          "name": "author-id",
          "type": "string",
          "description": "Exact creator user ID from list members."
        },
        {
          "name": "source-url",
          "type": "string",
          "description": "Case-insensitive literal substring of the recorded page URL only."
        },
        {
          "name": "folder-id",
          "type": "string",
          "description": "Only captures in this folder UUID, exact name or short ID; names/short IDs need --workspace-id with multiple workspaces."
        },
        {
          "name": "type",
          "type": "string",
          "enum": [
            "screenshot",
            "video",
            "replay"
          ],
          "description": "Media family; video includes tab and desktop recordings; replay selects Instant Replay. Combine only with a compatible --kind."
        },
        {
          "name": "kind",
          "type": "string",
          "enum": [
            "screenshot",
            "tab_video",
            "desktop_video",
            "instant_replay"
          ],
          "description": "Capture media type."
        },
        {
          "name": "captured-from",
          "type": "string",
          "description": "Inclusive ISO 8601 date/time with timezone."
        },
        {
          "name": "captured-before",
          "type": "string",
          "description": "Exclusive ISO 8601 date/time with timezone."
        },
        {
          "name": "state",
          "type": "string",
          "enum": [
            "active",
            "trash"
          ],
          "description": "Defaults to active; trash lists deleted captures for restoration."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Words in the capture title or page URL."
        },
        {
          "name": "workspace-id",
          "type": "string",
          "description": "Limit to one workspace UUID."
        }
      ],
      "tool": "findCaptures",
      "scopes": [
        "captures:read"
      ],
      "output": "{ items[], workspaces[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "auth login",
      "summary": "Sign in and store a token for later commands.",
      "args": [],
      "flags": [
        {
          "name": "token-stdin",
          "type": "boolean",
          "description": "Read a personal access token from stdin instead of opening a browser. Use this in CI; never pass a token as an argument, where it lands in shell history and process listings."
        },
        {
          "name": "no-browser",
          "type": "boolean",
          "description": "Print the sign-in URL instead of opening a browser. The command still waits for the sign-in to finish."
        },
        {
          "name": "scope",
          "type": "string",
          "description": "Extra scopes to request, separated by spaces or commas. Sign-in asks only for captures:read; add captures:record to upload recordings or comments:write to post comments."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "{ status, storedIn, refreshable, scopes[] }"
    },
    {
      "path": "auth status",
      "summary": "Verify your user, authentication method, scopes and accessible workspaces online.",
      "args": [],
      "flags": [
        {
          "name": "offline",
          "type": "boolean",
          "description": "Report local credential presence without verifying identity or contacting the server."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "{ authenticated: true|false|null, credentialPresent, verification, source, endpoint, user?, authMethod?, scopes?, workspaceId?, workspaces?, workspacesTruncated? }"
    },
    {
      "path": "auth logout",
      "summary": "Revoke a stored OAuth refresh token where supported, then forget the local credential. PAT removal is local only.",
      "args": [],
      "flags": [
        {
          "name": "local",
          "type": "boolean",
          "description": "Explicitly forget the stored credential without attempting server revocation."
        }
      ],
      "tool": null,
      "scopes": [],
      "output": "{ status, localCredential, refreshTokenRevocation, accessTokenRevocation, message? }"
    },
    {
      "path": "get capture",
      "summary": "Summary details for one capture. Start here.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [],
      "tool": "getDetails",
      "scopes": [],
      "output": "{ id, title, description, descriptionTruncated, sourceUrl, kind, status, browser, operatingSystem, durationMs, capturedAt, access, devtoolsAvailable, createdAt?, updatedAt?, author?, folder? }. Author/folder and creation/update dates are member-only."
    },
    {
      "path": "get transcript",
      "summary": "Read corrected transcript with cut footage excluded. Timestamps use source-video milliseconds.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Case-insensitive text search."
        },
        {
          "name": "from",
          "type": "number",
          "description": "Start of source-video time range in milliseconds."
        },
        {
          "name": "to",
          "type": "number",
          "description": "End of source-video time range in milliseconds (exclusive)."
        }
      ],
      "tool": "getTranscript",
      "scopes": [
        "captures:read"
      ],
      "output": "{ status, timebase, language, revision, corrected, items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get chapters",
      "summary": "Read corrected chapters with cut footage excluded. Timestamps use source-video milliseconds.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Case-insensitive text search."
        },
        {
          "name": "from",
          "type": "number",
          "description": "Start of source-video time range in milliseconds."
        },
        {
          "name": "to",
          "type": "number",
          "description": "End of source-video time range in milliseconds (exclusive)."
        }
      ],
      "tool": "getChapters",
      "scopes": [
        "captures:read"
      ],
      "output": "{ status, timebase, language, revision, corrected, items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get diagnosis",
      "summary": "Clustered errors with the request and action associated with each, the evidence, and the alternatives.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [],
      "tool": "getDiagnosis",
      "scopes": [],
      "output": "{ algorithm_version, clusters[] }"
    },
    {
      "path": "get console",
      "summary": "Console messages, filterable by level.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "log-level",
          "type": "string",
          "description": "Alias for --level; use only one spelling."
        },
        {
          "name": "level",
          "type": "string",
          "description": "Comma-separated levels; matches any selected level.",
          "commaSeparated": true,
          "enum": [
            "error",
            "warn",
            "info",
            "debug",
            "log",
            "trace"
          ]
        },
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "getConsoleLogs",
      "scopes": [],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get network",
      "summary": "Network requests as compact rows.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "status-code",
          "type": "string",
          "description": "Alias for --status; use only one spelling."
        },
        {
          "name": "bodies",
          "type": "string",
          "enum": [
            "none",
            "errors",
            "all"
          ],
          "description": "Include bounded sanitized body previews for failed requests (default), no requests, or all requests."
        },
        {
          "name": "status",
          "type": "string",
          "description": "Comma-separated exact codes (500), classes (5xx), or ranges (400-499)."
        },
        {
          "name": "method",
          "type": "string",
          "description": "Comma-separated HTTP methods."
        },
        {
          "name": "host",
          "type": "string",
          "description": "Comma-separated hostname substrings."
        },
        {
          "name": "content-type",
          "type": "string",
          "description": "Comma-separated response content-type substrings."
        },
        {
          "name": "failed-only",
          "type": "boolean",
          "description": "Only transport failures, 4xx, 5xx and GraphQL errors."
        },
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "getNetworkRequests",
      "scopes": [],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get request",
      "summary": "One request's headers and body as a bounded, sanitized preview. Secrets are removed and truncation is reported.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "requestId",
          "required": true,
          "description": "From get network."
        }
      ],
      "flags": [],
      "tool": "getNetworkRequest",
      "scopes": [],
      "output": "{ requestId, method, url, status, requestHeaders, responseBody, … }"
    },
    {
      "path": "get events",
      "summary": "All recorded event types, with bounded sanitized JSON previews.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "getEvents",
      "scopes": [],
      "output": "{ items[], next_cursor, truncated, truncation_reason, hint }"
    },
    {
      "path": "get user-events",
      "summary": "Recorded clicks, typing and navigation in chronological order. Requires diagnostic access.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        }
      ],
      "tool": "getUserEvents",
      "scopes": [
        "captures:read"
      ],
      "output": "{ note, items: [{ at, atMs?, kind, target, selector?, pageUrl? }], next_cursor, truncated, truncation_reason, hint }; atMs is source-video milliseconds and omitted when the recording clock is unavailable."
    },
    {
      "path": "get environment",
      "summary": "Browser, operating system, viewport and extension version.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [],
      "tool": "getEnvironment",
      "scopes": [],
      "output": "{ browser, operatingSystem, viewport, extensionVersion, sourceUrl }"
    },
    {
      "path": "get intents",
      "summary": "Read your cached, evidence-cited inferred objective, observed issue and impact.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "job-id",
          "type": "string",
          "description": "Specific request job; defaults to your latest request."
        }
      ],
      "tool": "getIntents",
      "scopes": [],
      "output": "{ status: not_requested | queued | running | ready | failed | cancelled | stale, value, jobId? }. No generation on read. Claims are uncertain inferences."
    },
    {
      "path": "analyze intents",
      "summary": "Request AI intent inference from capture excerpts under workspace consent.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "requestKey",
          "required": true,
          "description": "Idempotency key (1–128 characters); use a new key after evidence changes."
        }
      ],
      "flags": [],
      "tool": "requestIntents",
      "scopes": [
        "captures:read",
        "captures:write"
      ],
      "output": "{ jobId, status }. Poll get intents; results belong to the requester."
    },
    {
      "path": "get metadata-entries",
      "summary": "Paginate stored capture-time metadata keys and values, in key order.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "limit",
          "type": "number",
          "description": "Maximum items in one page."
        },
        {
          "name": "after",
          "type": "string",
          "description": "Cursor from a previous result's next_cursor."
        },
        {
          "name": "query",
          "type": "string",
          "description": "Case-insensitive top-level key substring (max 200 characters)."
        }
      ],
      "tool": "getMetadataEntries",
      "scopes": [],
      "output": "{ source: capture_metadata, representation: key_value_entries, items: [{ key, value }], next_cursor, truncated, truncation_reason, hint }. Stored keys, not SDK events."
    },
    {
      "path": "get metadata",
      "summary": "Capture metadata and, for workspace members, guest recording reference.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [],
      "tool": "getMetadata",
      "scopes": [],
      "output": "{ metadata, recordingReference? }"
    },
    {
      "path": "get frames",
      "summary": "Still frames from the recording, saved as JPEG files. Defaults to one contact sheet of the whole timeline.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        }
      ],
      "flags": [
        {
          "name": "from-ms",
          "type": "number",
          "description": "Alias for --from; use only one spelling."
        },
        {
          "name": "to-ms",
          "type": "number",
          "description": "Alias for --to; use only one spelling."
        },
        {
          "name": "size",
          "type": "string",
          "enum": [
            "small",
            "medium",
            "large"
          ],
          "description": "Frame height: 320, 640 (default), or 1280 pixels. Overview ignores size."
        },
        {
          "name": "overview",
          "type": "boolean",
          "description": "One contact sheet spanning the recording. The default."
        },
        {
          "name": "at",
          "type": "string",
          "description": "One millisecond timestamp or a comma-separated list, in requested order."
        },
        {
          "name": "from",
          "type": "number",
          "description": "Window start, in ms."
        },
        {
          "name": "to",
          "type": "number",
          "description": "Window end, in ms."
        },
        {
          "name": "count",
          "type": "number",
          "description": "Frames to sample across the window."
        },
        {
          "name": "out",
          "type": "string",
          "description": "Directory to save frames into. Defaults to ./tekma-frames/<capture-id>/, including when given a capture URL."
        }
      ],
      "tool": "getFrames",
      "scopes": [],
      "output": "Saved frame files; prints their paths."
    },
    {
      "path": "record displays",
      "summary": "List explicit native capture target IDs. No frames captured; no browser diagnostics.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ backend, targets: [{ id, width?, height?, x?, y? }], limitations }"
    },
    {
      "path": "record windows",
      "summary": "List explicit native capture target IDs. No frames captured; no browser diagnostics.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ backend, targets: [{ id, width?, height?, x?, y? }], limitations }"
    },
    {
      "path": "record desktop",
      "summary": "Record a native display/window in the foreground; defaults to the primary display. Stops after duration or Ctrl-C, finalizes silent video, and uploads unless --local. No pixel redaction or browser diagnostics.",
      "args": [
        {
          "name": "command",
          "required": false,
          "variadic": true,
          "description": "Optional child executable and literal arguments after --. Child output goes to stderr; its failure code is preserved after finalization."
        }
      ],
      "flags": [
        {
          "name": "display",
          "type": "string",
          "description": "Exact display ID from record displays; mutually exclusive with --window-id."
        },
        {
          "name": "window-id",
          "type": "string",
          "description": "Exact window ID from record windows. macOS15+ isolates the window; Linux X11 requires it visible and uncovered."
        },
        {
          "name": "app",
          "type": "string",
          "description": "Exact macOS application name or Linux X11 WM_CLASS (instance, class or instance.class), case-insensitive. Requires one matching window; Linux needs wmctrl. Mutually exclusive with other target selectors."
        },
        {
          "name": "pid",
          "type": "number",
          "description": "macOS or Linux X11 process ID with one available window. Linux requires wmctrl. Multiple matches require --window-id; mutually exclusive with other target selectors."
        },
        {
          "name": "description",
          "type": "string",
          "description": "Recording description, up to 5000 characters. Preserved locally and through OAuth upload recovery; not supported with recording-link upload."
        },
        {
          "name": "folder",
          "type": "string",
          "description": "Destination folder UUID in the OAuth workspace. Its audience restrictions apply from creation. Preserved through upload recovery; recording-link folders remain owner-controlled."
        },
        {
          "name": "speedup",
          "type": "boolean",
          "description": "Shorten runs of identical decoded pixels longer than two seconds. Retains the original video and a half-second at each end of each static run; visible changes remain. Off by default."
        },
        {
          "name": "bundle-id",
          "type": "string",
          "description": "Exact macOS application bundle ID with one available window. Requires macOS15+ and Screen Recording permission. Mutually exclusive with other selectors."
        },
        {
          "name": "no-outline",
          "type": "boolean",
          "description": "Hide the macOS isolated-window recording outline. Has no effect on display or Linux capture."
        },
        {
          "name": "until-stopped",
          "type": "boolean",
          "description": "Standalone recording without a duration timer; Ctrl-C finalizes. Overrides --duration-seconds. The 256 MiB media limit still applies; source or size-limit termination retains media locally with a failure receipt."
        },
        {
          "name": "duration-seconds",
          "type": "number",
          "default": 60,
          "description": "Maximum video/child duration, 1–1800 seconds. Ctrl-C finalizes sooner; a second interrupt cancels pending upload."
        },
        {
          "name": "local",
          "type": "boolean",
          "description": "Retain local video without authentication or upload."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Capture title; defaults to Desktop recording."
        },
        {
          "name": "url",
          "type": "string",
          "description": "Required context/project URL for OAuth upload; does not claim a browser visit."
        },
        {
          "name": "record-token",
          "type": "string",
          "description": "Recording-link token; defaults to CAPTURE_RECORD_TOKEN."
        },
        {
          "name": "api",
          "type": "string",
          "description": "API origin for recording links; defaults to CAPTURE_API_URL."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "Recording receipt with local files, backend/target, duration, stopReason and explicit unavailable diagnostics/audio/redaction. Early source failures retain partial media locally and exit nonzero."
    },
    {
      "path": "record run",
      "summary": "Record a browser while a command runs, then finalize even when the command fails. Pass the command after --; child output goes to stderr.",
      "args": [
        {
          "name": "command",
          "required": true,
          "variadic": true,
          "description": "Executable and literal arguments after --. No implicit shell."
        }
      ],
      "flags": [
        {
          "name": "local",
          "type": "boolean",
          "description": "Save locally without login or upload."
        },
        {
          "name": "url",
          "type": "string",
          "description": "Launch and record this URL; otherwise attach to CDP."
        },
        {
          "name": "cdp",
          "type": "string",
          "description": "Existing Chromium endpoint; mutually exclusive with --url."
        },
        {
          "name": "headed",
          "type": "boolean",
          "description": "Show the browser launched with --url."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Title to use when finalizing the recording."
        },
        {
          "name": "timeout-seconds",
          "type": "number",
          "default": 600,
          "description": "Command timeout, 1–3600 seconds. Timed-out commands exit 124 after finalization."
        },
        {
          "name": "record-token",
          "type": "string",
          "description": "Recording-link token; defaults to CAPTURE_RECORD_TOKEN."
        },
        {
          "name": "api",
          "type": "string",
          "description": "API origin for recording-link uploads; defaults to CAPTURE_API_URL."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "Recording receipt plus commandExitCode, commandSignal and timedOut. Nonzero child exits take precedence over finalization errors; stdout remains JSON when piped."
    },
    {
      "path": "record start",
      "summary": "Start recording the browser an agent is driving (attaches over CDP; never disturbs the session).",
      "args": [],
      "flags": [
        {
          "name": "local",
          "type": "boolean",
          "description": "Save footage locally without login or upload. Stop returns local artifact paths; copy them before starting another recording."
        },
        {
          "name": "cdp",
          "type": "string",
          "description": "Chromium DevTools endpoint: a ws:// URL or http://host:port. Defaults to $CAPTURE_CDP_URL, then a running agent-browser session."
        },
        {
          "name": "record-token",
          "type": "string",
          "description": "Recording-link token (or the full /record/ URL) for the account-less path. Defaults to $CAPTURE_RECORD_TOKEN."
        },
        {
          "name": "api",
          "type": "string",
          "description": "API origin for the record-token path. Defaults to $CAPTURE_API_URL."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status, page, title, pid }"
    },
    {
      "path": "record open",
      "summary": "Launch a Chromium on a URL and start recording it, for agents with no browser tooling of their own.",
      "args": [
        {
          "name": "url",
          "required": true,
          "description": "The page to open and record."
        }
      ],
      "flags": [
        {
          "name": "local",
          "type": "boolean",
          "description": "Save locally without login or upload."
        },
        {
          "name": "headed",
          "type": "boolean",
          "description": "Show the browser window instead of running headless."
        },
        {
          "name": "record-token",
          "type": "string",
          "description": "Recording-link token (or the full /record/ URL) for the account-less path. Defaults to $CAPTURE_RECORD_TOKEN."
        },
        {
          "name": "api",
          "type": "string",
          "description": "API origin for the record-token path. Defaults to $CAPTURE_API_URL."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status, page, title, pid }"
    },
    {
      "path": "record stop",
      "summary": "Stop recording, upload the capture (video + console + network + actions), and print the share link, the proof to paste in a report.",
      "args": [],
      "flags": [
        {
          "name": "metadata",
          "type": "string",
          "description": "JSON context for uploads, max 10 KiB. For recording links, replaces saved defaults; {} clears them. Local-only recordings save metadata.json beside the video."
        },
        {
          "name": "title",
          "type": "string",
          "description": "Capture title override. Recording links use their URL title or saved preset when omitted; signed-in uploads use the page title."
        },
        {
          "name": "record-token",
          "type": "string",
          "description": "Recording-link token (or the full /record/ URL) for the account-less path. Defaults to $CAPTURE_RECORD_TOKEN."
        },
        {
          "name": "api",
          "type": "string",
          "description": "API origin for the record-token path. Defaults to $CAPTURE_API_URL."
        }
      ],
      "tool": null,
      "scopes": [
        "captures:record"
      ],
      "output": "{ status: uploaded | saved_locally, captureId, captureUrl, shareUrl, durationMs, eventCount, videoBytes, frameCountRecorded }, plus interrupted when the recording was cut short and shareUnavailableReason when workspace policy withheld the link. --local returns { status, videoFile, eventsFile, metadataFile?, durationMs, frameCountRecorded, eventCount } and no link."
    },
    {
      "path": "record status",
      "summary": "Report whether a recording is running and how much it has.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ recording } alone when nothing is spooled, otherwise { recording, page, startedAt, frames }. Exits 1 when no recording is running."
    },
    {
      "path": "comment",
      "summary": "Post a comment onto a capture.",
      "args": [
        {
          "name": "captureRef",
          "required": true,
          "description": "A capture id, or a link to a capture on this deployment."
        },
        {
          "name": "body",
          "required": true,
          "description": "Comment text."
        }
      ],
      "flags": [
        {
          "name": "mention",
          "type": "string",
          "description": "Comma-separated workspace user IDs from list members, up to 20. Queues mention email for eligible recipients."
        },
        {
          "name": "parent-id",
          "type": "string",
          "description": "Reply to this comment UUID on the same capture."
        },
        {
          "name": "at",
          "type": "number",
          "description": "Position in the recording, in milliseconds."
        },
        {
          "name": "idempotency-key",
          "type": "string",
          "description": "Reuse on retry so the comment is posted once."
        }
      ],
      "tool": "createComment",
      "scopes": [
        "comments:write"
      ],
      "output": "{ id, created }"
    },
    {
      "path": "agent-context",
      "summary": "Emit this catalogue as JSON, so an agent can discover the CLI instead of guessing.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "{ version, exitCodes, commands[] }"
    },
    {
      "path": "doctor",
      "summary": "Check configuration, credentials and reachability.",
      "args": [],
      "flags": [],
      "tool": null,
      "scopes": [],
      "output": "human-readable report"
    }
  ]
}
