{
  "product" : "incisa",
  "schema_version" : 1,
  "tools" : [
    {
      "description" : "List the timeline: video/audio tracks in order, each with its clips (id, source path, in/out, timeline position, aggregate speed, optional authored speed-ramp shape, and outgoing transition when present). Use the clip ids with select_clip/replace_clip_source.",
      "name" : "list_timeline",
      "tier" : "read"
    },
    {
      "description" : "Get the timeline selection: every selected clip id in timeline order (selectedClipIDs), the anchor clip id (selectedClipID) and its full summary (including aggregate speed, optional authored ramp shape, and outgoing transition when present), and the playhead in seconds.",
      "name" : "get_selection",
      "tier" : "read"
    },
    {
      "description" : "Get the project header: name, render size, frame rate (ntsc-aware), delivery target, total duration in seconds, and whether it is empty / has renderable content.",
      "name" : "get_project",
      "tier" : "read"
    },
    {
      "description" : "Poll the export job: whether one is running, what kind (movie/frame), its progress (0…1), ETA, last output path, and the last failure reason.",
      "name" : "export_status",
      "tier" : "read"
    },
    {
      "description" : "Poll auto-caption generation: whether one is running, whether captions exist, segment count, and the last rejection or terminal reason (e.g. an unavailable source or speech failure).",
      "name" : "caption_status",
      "tier" : "read"
    },
    {
      "description" : "List the built-in auto-reel styles (names) you can pass to generate_reel.",
      "name" : "list_styles",
      "tier" : "read"
    },
    {
      "description" : "List the built-in reel templates (names) you can pass to apply_template.",
      "name" : "list_templates",
      "tier" : "read"
    },
    {
      "description" : "List built-in creative looks (catalog filename and English name) you can pass to apply_look.",
      "name" : "list_looks",
      "tier" : "read"
    },
    {
      "description" : "Replace the timeline selection with the given clips (ids from list_timeline). Pass one id to select one clip, several to select several; the last id named becomes the anchor. The clip-scoped tools act on this selection. Undoable only through the edits it enables.",
      "name" : "select_clip",
      "tier" : "write"
    },
    {
      "description" : "Move the playhead to a position in seconds (clamped to the timeline).",
      "name" : "seek",
      "tier" : "write"
    },
    {
      "description" : "Split the clip under the playhead into two at the playhead, on every lane that holds a selected clip — or on every lane when nothing is selected. Lanes where the playhead sits on a boundary or in a gap are skipped; if no lane can be split it returns skipped without changing project or selection. However many lanes are cut, it is one undo step.",
      "name" : "split_at_playhead",
      "tier" : "write"
    },
    {
      "description" : "Delete the given clip, or every clip in the current selection when clipID is omitted. Ripple by default. Reports how many clips it deleted, and which. Undoable.",
      "name" : "delete_selected",
      "tier" : "write"
    },
    {
      "description" : "Set the project tempo (beat grid) in BPM, for beat-snapped editing. Undoable.",
      "name" : "set_bpm",
      "tier" : "write"
    },
    {
      "description" : "Remove the project's beat grid. Undoable.",
      "name" : "clear_beat_grid",
      "tier" : "write"
    },
    {
      "description" : "Remove all auto-captions from the project. Undoable.",
      "name" : "clear_captions",
      "tier" : "write"
    },
    {
      "description" : "Start on-device speech-to-text auto-captioning of the timeline (async). Returns started only after reserving a live job; an unavailable source or existing job returns skipped. poll caption_status for running/lastError (privacy refusals and recognition failures). Needs a clip with speech.",
      "name" : "generate_captions",
      "tier" : "write"
    },
    {
      "description" : "Add a timeline marker at the playhead (or at a given time). Undoable.",
      "name" : "add_marker",
      "tier" : "write"
    },
    {
      "description" : "Remove the marker at the playhead (or at a given time). Returns skipped without moving the playhead when no marker is within one frame. Undoable.",
      "name" : "remove_marker",
      "tier" : "write"
    },
    {
      "description" : "Remove all timeline markers. Undoable.",
      "name" : "clear_markers",
      "tier" : "write"
    },
    {
      "description" : "Undo the most recent editing change.",
      "name" : "undo",
      "tier" : "write"
    },
    {
      "description" : "Redo the last undone change.",
      "name" : "redo",
      "tier" : "write"
    },
    {
      "description" : "Cancel the in-flight export, if any (deletes the partial file). Safe no-op otherwise.",
      "name" : "export_cancel",
      "tier" : "write"
    },
    {
      "description" : "Apply a built-in creative look to every selected video clip (or to clipID alone). Address the look by catalog filename or English name (see list_looks). Identity is the filename, never a bundle path. Undoable. Skipped on HDR projects.",
      "name" : "apply_look",
      "tier" : "write"
    },
    {
      "description" : "Set the outgoing transition on the selected video cuts (kind and optional duration in seconds). Omit seconds to keep each cut's current duration, or use the kind's default on a hard cut. Reports which cuts now carry the kind. Does not author the punch pivot or motion-match alignment — those stay on their existing surfaces. Undoable. Kinds: dissolve, dipToBlack, dipToWhite, flash, pushLeft, pushRight, pushUp, pushDown, wipeLeft, wipeRight, wipeUp, wipeDown, zoomIn, zoomOut, spin, whipPanLeft, whipPanRight, zoomPunch, lumaCut, irisPunch, shapeWipe.",
      "name" : "set_transition",
      "tier" : "write"
    },
    {
      "description" : "Apply one transition kind to every butted cut on the first video lane (the Inspector ‘Apply to all’ action). Uses that kind's default duration. Undoable. Kinds: dissolve, dipToBlack, dipToWhite, flash, pushLeft, pushRight, pushUp, pushDown, wipeLeft, wipeRight, wipeUp, wipeDown, zoomIn, zoomOut, spin, whipPanLeft, whipPanRight, zoomPunch, lumaCut, irisPunch, shapeWipe.",
      "name" : "apply_transition_to_all_cuts",
      "tier" : "write"
    },
    {
      "description" : "Clear the outgoing transition on the selected video cuts, back to a hard cut. Reports which cuts it cleared. Undoable.",
      "name" : "clear_transition",
      "tier" : "write"
    },
    {
      "description" : "Crop the selected video clips (or clipID alone): cut away part of each SOURCE frame before the clip's fit places what is left. The four edges are fractions of the source width (left/right) or height (top/bottom), 0 = nothing cut, and they are ABSOLUTE — pass only the edges you want to change. Opposite edges must leave at least 2% of the axis standing. crop_aspect snaps the crop to the largest centred rectangle of that shape and keeps the ratio locked for later edits; pass free to release the lock and keep the rectangle. Cropping needs the clip's source size, which is measured on first use — a shape asked for before that measurement lands returns skipped, and the same call then works. A call that names no edge and no shape changes nothing and returns skipped. Undoable. Shapes: free, portrait9x16, square1x1, portrait4x5, landscape16x9.",
      "name" : "set_clip_crop",
      "tier" : "write"
    },
    {
      "description" : "Start a new, empty project. DISCARDS the current timeline AND its undo history — this cannot be undone. Source files are untouched.",
      "name" : "new_project",
      "tier" : "destructive"
    },
    {
      "description" : "Open a saved project document (.incisa, or the legacy .incisa.json). REPLACES the current timeline and clears the undo history — this cannot be undone. Source files are untouched.",
      "name" : "open_project",
      "tier" : "destructive"
    },
    {
      "description" : "Auto-generate a reel from the current clips using a built-in style (see list_styles). REBUILDS the whole base video lane. Runs asynchronously; returns immediately. One undo step. Source files untouched.",
      "name" : "generate_reel",
      "tier" : "destructive"
    },
    {
      "description" : "Apply a built-in reel template (see list_templates), REBUILDING the first video track from the template's slots. One undo step. Source files untouched.",
      "name" : "apply_template",
      "tier" : "destructive"
    },
    {
      "description" : "Re-point a video clip at a different source file (keeps its timeline edits). Async; returns immediately. The old media is untouched; only a regenerable preview cache is dropped. Video clips only.",
      "name" : "replace_clip_source",
      "tier" : "destructive"
    },
    {
      "description" : "Render the timeline to a NEW movie file (async hardware encode; returns immediately — poll export_status). Pick a preset OR a codec. For SDR, standard/reels/youtube/square write MP4; ProRes Master and Custom write MOV. HDR always uses HEVC Main10/MOV. Existing files require overwrite=true; sources stay untouched.",
      "name" : "export",
      "tier" : "destructive"
    },
    {
      "description" : "Export the composited frame at the playhead (or a given time) as a PNG (a cover still). Async.",
      "name" : "export_frame",
      "tier" : "destructive"
    },
    {
      "description" : "Import media files onto the base video lane (async probe; returns immediately). Paths must stay inside the open project folder. One undo step after the clips land. Source files are read, never modified.",
      "name" : "import_media",
      "tier" : "destructive"
    },
    {
      "description" : "Write the open project document to a path inside the project folder (.incisa preferred). Never overwrites an existing file unless overwrite=true, except the currently open document which is an ordinary save. Refuses source clips, music, and stickers. The file write is not an undo step.",
      "name" : "save_project",
      "tier" : "destructive"
    }
  ]
}
