{"id":23966,"plugin_id":"plugins_6ab29d7144e88191985ee28372ab8058","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:17:50.951Z","digest":"d003ff744dc34f4242a53c30b37e3994f74d72abe6bc71dfdddd152752cdf465","against":null,"payload":{"name":"ffmpeg-workflow","description":"Translate natural-language media requests into validated FFmpeg Media Toolkit workflows, selecting domain Skills, preflighting inputs and outputs, and reporting only verified artifacts. Use for edit, convert, compose, stream, diagnose, or multi-step requests.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":219},{"relative_path":"references/request-routing.md","size_in_bytes":2840}],"skill_md_contents":"---\nname: ffmpeg-workflow\ndescription: Translate natural-language media requests into validated FFmpeg Media Toolkit workflows, selecting domain Skills, preflighting inputs and outputs, and reporting only verified artifacts. Use for edit, convert, compose, stream, diagnose, or multi-step requests.\n---\n\n# FFmpeg Workflow\n\n## Activation scope\n\nUse this Skill when a user describes a media outcome in natural language and\nthe assistant must classify it, choose one or more domain Skills, order\npreflight and execution, or report a resulting artifact.\n\nUse ffmpeg-onboarding first when the execution context or required runtime\ncapability is unknown.\n\n## Do not use\n\nDo not use this Skill for pure environment installation or capability\ndiscovery, which belongs to ffmpeg-onboarding. Do not use it to invent a\ncapability, hide a shell command inside a pipeline, or claim an artifact that\nwas not verified on the active host.\n\n## Required inputs\n\nResolve or ask for:\n\n- source media paths or an explicit capture source;\n- the desired output and acceptable format/codec constraints;\n- ordered operations and whether the request is a reusable pipeline;\n- overwrite, dry-run, and temporary-artifact policy;\n- execution context and authorization for writes or installation;\n- hardware policy when acceleration is requested.\n\nMake safe assumptions only when they do not change the media contract. State\nthe assumption before execution.\n\n## Preflight\n\n1. Classify the request with references/request-routing.md.\n2. Select the smallest set of domain Skills needed.\n3. Probe inputs when stream, timing, codec, dimensions, or audio layout matter.\n4. Validate output paths, extension/codec compatibility, overwrite policy, and\n   input/output collisions before expensive work.\n5. Use dry-run for pipelines or whenever the user asks for a plan first.\n6. Execute in declared order and preserve structured progress/errors.\n7. Probe the final artifact and report it only after validation succeeds.\n\n## Toolkit surface selection\n\nUse the highest-level surface available:\n\n1. use the associated Skill script when the requested workflow has one;\n2. otherwise use the canonical cecilia-ffmpeg CLI and typed domain runtime;\n3. use the explicit npm package-runner fallback below when the global CLI is\n   unavailable;\n4. use native FFmpeg only when the toolkit cannot represent the operation or\n   the user explicitly requests native syntax.\n\nThe target architecture is script/Skill-first and does not require a network\nservice or an alternate agent protocol to make a workflow run.\n\n## Associated scripts\n\nThis behavioral Skill delegates executable work to the selected domain Skill's\n`scripts/run.mjs` entry point. Use `ffmpeg-onboarding/scripts/check.mjs` first\nwhen the host or required capability is unknown; do not create a generic shell\nrunner in this routing layer.\n\n## Request routing and associated scripts\n\nStart from the user's desired outcome and route to the smallest domain Skill;\nuse this Skill to coordinate multiple domains, not to hide a generic shell\nrunner. The canonical request examples are in\n[`../../docs/skill-request-examples.md`](../../docs/skill-request-examples.md).\n\nWhen execution is available, invoke the selected domain's `scripts/run.mjs`\nwith one JSON request. Use `ffmpeg-onboarding/scripts/check.mjs` and\n`ffmpeg-environment/scripts/inspect.mjs` before routing when the host or\nrequired capability is unknown. Use `ffmpeg-pipelines/scripts/run.mjs` only\nfor ordered/reusable workflows or when the user explicitly asks for a\npipeline.\n\n## Preferred toolkit commands\n\nFor a single operation, use the matching documented cecilia-ffmpeg command,\nfor example:\n\n    cecilia-ffmpeg video trim INPUT --start 00:00:05 --end 00:00:20 --output OUTPUT\n\nFor pipelines, validate, inspect, and execute with:\n\n    cecilia-ffmpeg pipeline pipeline.yaml validate\n    cecilia-ffmpeg pipeline pipeline.yaml print\n    cecilia-ffmpeg pipeline pipeline.yaml run --dry-run\n    cecilia-ffmpeg pipeline pipeline.yaml run\n\nIf the global binary is unavailable:\n\n    npm exec --yes --package=@cecilialabs/ffmpeg -- cecilia-ffmpeg pipeline pipeline.yaml run --dry-run\n\n## Native FFmpeg fallback\n\nUse native syntax only when a required operation is outside the typed toolkit\nor the user explicitly asks for it. Explain the limitation, keep arguments\nexplicit, and preserve the same input/output and overwrite safety.\n\n## Output expectations\n\nReturn:\n\n- the selected domain Skill(s) and why they match;\n- the exact command or associated script used, when execution is available;\n- preflight facts and assumptions;\n- structured execution status and warnings;\n- the verified final path and relevant FFprobe properties;\n- a clear distinction between a plan, a command supplied to the user, and a\n  completed artifact.\n\n## Validation\n\nAfter authoring a workflow, parse and validate it. When practical, run a\ndry-run before mutation. After execution, inspect the final artifact with\nFFprobe and verify the requested codec, streams, timing, dimensions, and\ncontainer contract. For long jobs, report progress and preserve resumable\nstate when the associated script supports it.\n\n## Error recovery\n\n- For an ambiguous request, ask only for the missing media contract.\n- For a missing capability, route to a supported domain or explain the\n  limitation rather than substituting silently.\n- For an output collision or overwrite rejection, ask for an explicit policy.\n- For a failed step, report its structured details and retry only after the\n  specific input, option, or capability is corrected.\n- Preserve source media and temporary artifacts unless cleanup is safe and\n  authorized.\n\n## Safety and determinism\n\nNever overwrite a source or final artifact without explicit policy. Never\nembed arbitrary shell interpolation in declarative workflow files. Preserve\nstep order, resolve relative paths from the workflow file, use transactional\noutputs, and do not report success from a dry-run.\n\n## References\n\nSee references/request-routing.md for request classification and domain-Skill\nselection examples.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}