← AdobeCONTENT HISTORY

Update to Adobe

Snapshot Sep 30, 2026 · 23:19 UTC · version 10.0.0

Collection source: not recorded for this historical snapshot. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED · RULE-BASED ANALYSIS

Supporting file metadata differs

Newly listed paths: agents/openai.yaml. This compares saved file lists, not package contents; a different collection source can change the list.

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Supporting files

Before

[{"relative_path":"assets/icon-large.svg","size_in_bytes":488},{"relative_path":"assets/icon-small.svg","size_in_bytes":488}]

After

[{"relative_path":"agents/openai.yaml","size_in_bytes":201},{"relative_path":"assets/icon-large.svg","size_in_bytes":488},{"relative_path":"assets/icon-small.svg","size_in_bytes":488}]

Compare saved observations

Download comparison JSON
Full technical diff · 1 changed fields

changed /included_files

BEFORE
[
  {
    "relative_path": "assets/icon-large.svg",
    "size_in_bytes": 488
  },
  {
    "relative_path": "assets/icon-small.svg",
    "size_in_bytes": 488
  }
]
AFTER
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 201
  },
  {
    "relative_path": "assets/icon-large.svg",
    "size_in_bytes": 488
  },
  {
    "relative_path": "assets/icon-small.svg",
    "size_in_bytes": 488
  }
]
Full snapshot data
{
  "name": "adobe-edit-quick-cut",
  "description": "Create a punchy highlight cut from a video with Adobe Quick Cut — for requests like \"make a sizzle reel\", \"make a highlight reel\", \"quick cut this\", \"cut the best parts\", \"shorten this video\", \"make a highlight clip\", or \"summarize this video visually\". Works from the user's original request without follow-up questions and produces one highlight cut. Do NOT use it for exact-timestamp trims (\"cut from 0:30 to 1:15\") or other deterministic edits — Quick Cut selects moments by relevance, not exact instructions; those need manual editing. Requires a video file (an upload or an already-referenced Creative Cloud asset).\n",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 201
    },
    {
      "relative_path": "assets/icon-large.svg",
      "size_in_bytes": 488
    },
    {
      "relative_path": "assets/icon-small.svg",
      "size_in_bytes": 488
    }
  ],
  "skill_md_contents": "---\nname: adobe-edit-quick-cut\ndescription: >\n  Create a punchy highlight cut from a video with Adobe Quick Cut — for requests like \"make a\n  sizzle reel\", \"make a highlight reel\", \"quick cut this\", \"cut the best parts\", \"shorten this\n  video\", \"make a highlight clip\", or \"summarize this video visually\". Works from the user's\n  original request without follow-up questions and produces one highlight cut. Do NOT use it for\n  exact-timestamp trims (\"cut from 0:30 to 1:15\") or other deterministic edits — Quick Cut selects\n  moments by relevance, not exact instructions; those need manual editing. Requires a video file\n  (an upload or an already-referenced Creative Cloud asset).\nlicense: Apache-2.0\ncompatibility: \"Runs on widget-capable surfaces (e.g. Claude Cowork, which supports the asset_add_file picker and asset_preview_file preview widgets) and on surfaces where those widgets aren't available. The default flow uses the widgets; each widget step has a text-only fallback used only when that widget isn't available on the current surface. Raw local paths are never passed to video tools.\"\nallowed-tools: adobe_mandatory_init asset_add_file asset_initialize_file_upload asset_finalize_file_upload video_create_quick_cut asset_preview_file video_resize video_render\nmetadata:\n  version: 3.0.0\n  visibility: public\n  surface: [claude, codex]\n---\n\n# Adobe Edit Quick Cut\n\nProduces **one** AI-edited highlight cut from a source video, working entirely from the user's\noriginal request. **No follow-up questions** — infer the intent and duration from what the user\nalready said, fall back to a sensible default when they said nothing, and deliver a single preview.\n\n> **Surface note:** The default flow uses Adobe's MCP App widgets — the `asset_add_file` file picker (Step 2) and the `asset_preview_file` preview (Step 5). Use a step's *No-widget fallback* only when that widget isn't available on the current surface — decide by availability, not by client name.\n\n---\n\n## How Quick Cut Works — and What to Design Around\n\n`video_create_quick_cut` is an AI rough-cut tool. Its `user_prompt` is a **description of the video\nand the kind of result you want** (e.g. \"interview with a nonprofit for social fundraising\"), not a\nlist of pacing directives. It selects moments itself. Key limits, each mapped to a rule below:\n\n| Quick Cut behavior / limit | Consequence | How this skill handles it |\n|---|---|---|\n| `user_prompt` describes **what the video is / is for** | Vague energy adjectives do little on their own | Send a clear description; merge the user's own words when given (Step 3) |\n| `target_duration` is a **soft target, not a hard trim** | Output can overshoot | Always pass a number — the user's length when given, else a **30s default** (Step 3) |\n| Output is a **transient presigned URL**, not a CC asset | The URL expires; can't feed `video_resize` directly | Preview **immediately** on completion (Step 5); re-ingest for resize (see *Known Gap*) |\n| An **identical prompt** tends to produce a **similar cut** | Re-runs give little variety | Offer another only with a **different intent or duration** (Step 6) |\n| **`video_create_quick_cut` runs async** (`status: \"working\"` → result on completion) | Proceeding on a \"working\" status skips the real result | Wait for the widget's completion event — never act on a \"working\" status (see *Async handling* below) |\n\n> **Async handling (`video_create_quick_cut`):** A `status: \"working\"` response is **pending — not a failure and not missing output**; never treat it as either. **Polling is managed by the widget — wait for its completion event; do not call any poll tool yourself.** Only after a **completed** result — or a terminal failure — do you read the output or apply any fallback.\n\n---\n\n## Tool Reference\n\n| Tool | Purpose |\n|------|---------|\n| `adobe_mandatory_init` | Required init; returns file-handling rules and tool routing. |\n| `asset_add_file` | File picker; the widget injects the selected CC `assetId` into context on confirmation — wait for that, don't poll. |\n| `asset_initialize_file_upload` | No-widget staging fallback (step 1); begins a local-file upload. |\n| `asset_finalize_file_upload` | No-widget staging fallback (step 2); completes the upload and returns the `assetId`. |\n| `video_create_quick_cut` | Creates the highlight cut (one call). **Async** — may return `status: \"working\"`; the finished cut arrives when the job completes (widget-tracked). |\n| `asset_preview_file` | Renders the finished cut immediately on completion. |\n| `video_resize` | Resize workaround only, after re-ingesting a downloaded cut. |\n| `video_render` | For edits Quick Cut can't do — exact-timestamp trims, and adding/replacing music, audio, or images. |\n\n---\n\n## Workflow\n\n### Step 0 — Initialize Adobe Tools\n\nCall `adobe_mandatory_init` first.\n\n```json\n{ \"skill_name\": \"adobe-edit-quick-cut\", \"skill_version\": \"3.0.0\" }\n```\n\n---\n\n### Step 1 — Entitlement Check\n\n`adobe_mandatory_init` confirms the \"Adobe for creativity\" connector is live. Confirm `video_create_quick_cut` and `asset_preview_file` are available. If `asset_add_file` or `asset_preview_file` is unavailable on this surface, use that step's *No-widget fallback*. If a tool result carries an `importantNote` or \"Asset Storage & Display\" guidance, it overrides the presentation defaults here.\n\n---\n\n### Step 2 — Get the Source Video\n\nIf the user's message already references a Creative Cloud asset (a CC `assetId`), use it directly. Otherwise — including a raw chat upload or a local file, which isn't usable until it reaches Creative Cloud — get it in first via the picker (or the no-widget staging fallback below):\n\n> *\"Let's create a highlight cut from your video. Start by selecting your file:\"*\n\n```javascript\nasset_add_file()\n```\n\nExtract `assetId` (the CC asset ID) from the widget context — the widget injects it on confirmation, so wait for that (don't poll).\n\n> `video_create_quick_cut` requires a CC asset ID (`assetId`), not `presignedAssetUrl`.\n\n**No-widget fallback** *(only if `asset_add_file` is unavailable on this surface)* — get the `assetId` from where the file is. A file already in Creative Cloud is referenced directly by its CC `assetId`. To stage a **local** file, use the upload path `adobe_mandatory_init` routes to for this surface (surfaces differ — it may name a surface-specific upload tool, or the `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload` sequence). Staging requires egress — check egress status from `adobe_mandatory_init` first; if egress is disabled and no picker exists here, tell the user staging isn't possible. For the initialize/finalize sequence: get file size and MIME type, call `asset_initialize_file_upload({ path, media_type })`, PUT the bytes to the returned URL, then `asset_finalize_file_upload({ filename, transfer_document })`, and extract the `assetId`.\n\n---\n\n### Step 3 — Build the Intent from the Original Request (no questions)\n\nDo **not** ask the user anything. Derive both inputs from their original message.\n\n**`user_prompt`** — start from the generic intent, and merge the user's own words only if they gave any:\n\n- **Generic intent (default when the user gave no detail):**\n  > `An engaging highlight reel of this video that keeps its most compelling, high-energy, and visually interesting moments, with a strong opening and a natural flow, ready to share on social media.`\n\n- **User gave intent or output details** (content, occasion, purpose, a **topic focus** such as \"the parts about pricing\", or a vibe such as \"cinematic\", \"hype\", \"for our fundraiser\") — put their description first and keep the highlight framing:\n  > `<user's description>. Edit into an engaging highlight reel that keeps the strongest, most compelling moments with a natural flow, suitable for social sharing.`\n  Fold any named vibe adjective (\"cinematic\", \"energetic\") into the sentence. If the user's own description already fully specifies the desired output, use it as-is.\n\n**`target_duration`** (seconds) — always pass a number:\n\n- **User stated a length** → use that number. It's a **soft target** — Quick Cut aims for it but may run slightly over. For an upper bound (\"under a minute\"), target a few seconds under the cap (e.g. ~50) and note it's approximate; if they need a strict cap or an exact runtime, use `video_render` instead.\n- **No length stated** → use a **30s default**.\n\n> **Note (API gap):** the Quick Cut UI offers `Duration: Auto`, but the MCP `video_create_quick_cut` requires a numeric `target_duration` — so pass the user's length, or the 30s default.\n\n---\n\n### Step 4 — Run One Cut, Then Wait for Completion\n\n```javascript\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: <stated_length_or_30>,\n  user_prompt: \"<generic-or-merged intent>\"\n}) // → taskId\n```\n\nAcknowledge briefly: *\"Creating your highlight cut — I'll preview it as soon as it's ready.\"*\n\n`video_create_quick_cut` is **async** too (returns `status: \"working\"`). **Wait for the completed result** before previewing (see *Async handling* above) — don't act on a `working` status. On completion, store `outputUrl` (the completed `presignedAssetUrl`). **The URL is time-limited — go straight to the preview.**\n\n> **If the completion event never arrives:** don't stall or invent a status — the last known state is *processing*. If a tracker exists but is slow, tell the user the cut is still processing and its preview will appear when it completes; if this surface has no async tracker at all, tell them the cut was submitted and is processing but this session can't retrieve the result, and suggest a widget-capable client such as Adobe Express.\n\n---\n\n### Step 5 — Preview the Result (mandatory, do this first)\n\nThe moment the job completes, **call `asset_preview_file` as your very next action, before writing any summary.** Do not describe the video in prose instead of previewing it — the call must actually run, promptly, or the URL may expire.\n\n```javascript\nasset_preview_file({\n  assets: [\n    {\n      name: \"Highlight cut.mp4\",\n      presignedAssetUrl: outputUrl,\n      mediaType: \"video/mp4\",\n      source: \"acp\"\n    }\n  ]\n})\n```\n\nInclude `mediaType` and `source` — without them the widget may fail to render the video.\n\n**No-widget fallback** *(only if `asset_preview_file` is unavailable on this surface)* — present the URL directly (`Highlight cut.mp4 → <outputUrl>`). UI clients render media URLs inline; where inline rendering isn't available, download it (`curl -L -o highlight_cut.mp4 \"<outputUrl>\"`) and reference the local path. If `asset_preview_file` errors, immediately fall back to posting the URL as a link.\n\n---\n\n### Step 6 — Summary + Offer Another\n\nAfter the preview renders, give a one-line summary of what was made (and the actual length if it came out longer than any requested length — say so honestly). Then offer:\n\n> *\"Want another version? Tell me a **different focus** (e.g. a specific moment or vibe) or a **different length** — that's what actually changes the cut. I can also resize it for a specific platform, or you can download it from the preview above.\"*\n\nIf the user asks for another, return to Step 4 with the new intent/length. Re-running the same intent tends to produce a very similar cut, so steer them toward a change.\n\n---\n\n## ⚠️ Known Gap — Output Cannot Feed Downstream Video Tools Directly\n\n`video_create_quick_cut` returns a temporary presigned URL, not a CC-stored asset ID. `video_resize`\nand `media_enhance_speech` require a CC asset ID, so **you cannot chain Quick Cut → Resize / Enhance\ndirectly.** To resize a Quick Cut output: tell the user to download it, re-ingest it exactly as in\nStep 2 (`asset_add_file()` or the staging fallback), then run `video_resize` on the fresh `assetId`.\nSurface this proactively when the user asks to resize or enhance a Quick Cut output.\n\n---\n\n## What Quick Cut Does NOT Support\n\nQuick Cut selects the most relevant moments for you — working from the video's **transcript/dialogue** when there's enough speech (and you can steer it to a **topic**, e.g. \"the parts about pricing\" or \"the dog-washing parts\"), and falling back to **visual** content (the footage captioned in chunks) when there's little speech. It always produces a highlight. It does **not**:\n\n- Remove repeats or disfluencies (\"um\", \"uh\"), or do other deterministic transcript surgery you dictate — it selects a highlight, not exact edits.\n- Trim to specific timestamps (\"cut from 0:30 to 1:15\"), or add/replace music, audio, or images — **the `video_render` tool does these** (use it for precise trims and for adding music/audio/images).\n\n---\n\n## Error Handling\n\n- **`video_create_quick_cut` returns 403 (entitlement)**: Do not retry. Tell the user Quick Cut isn't on their current Adobe plan and offer to upgrade or trim manually in Premiere Rush / Premiere Pro.\n\n- **Any tool returns 401 (not authenticated)**: Ask the user to re-authenticate via Adobe OAuth and retry.\n\n- **Output overshoots any requested length**: Expected — `target_duration` is a soft target. Report honestly. If they want it tighter, re-run once with a shorter length; for an exact runtime, use `video_render`.\n\n- **Job fails with any other error on the first attempt**: Retry once only for a confirmed transient `5xx` (500/502/503/504). For `429`, wait for `Retry-After` (or a short backoff) before a single retry. Do **not** blindly retry other `4xx` responses — report them. If submission timed out and the job may have been accepted, wait for the existing job's completion event instead of submitting again (a second job wastes an expensive async run). If the permitted retry also fails, report and suggest re-uploading the source video.\n\n- **Progress stalls at the same % for a long time**: Inform the user, suggest re-uploading the source.\n\n- **User uploads an image by mistake**: Detect from `mediaType` — if not `video/*`, say so and re-open the picker (or re-run the staging fallback).\n\n---\n\n## Constraints\n\n- Never pass a raw local filesystem path to `video_create_quick_cut` or any other video tool. Local files must reach Creative Cloud first — via the `asset_add_file` picker or the `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload` staging fallback; only the resulting `assetId` is valid.\n- `video_create_quick_cut` requires `assetId` (CC asset ID), not `presignedAssetUrl`.\n- Produce **one** cut per request. Never fire multiple `video_create_quick_cut` jobs in parallel — additional versions are made one at a time, only when the user asks (Step 6).\n- Do not ask the user clarifying questions — work from the original request and the generic intent.\n"
}

SHA-256: a86abff82bdcbf2772f26b61ba6586883665a7fab5d99df1de2dda3f79c8bdcc