Before taking any action for this skill, read Shared workflow rules.
Read it again after context recovery when doing media work.
Do not rely on automatic loading of plugin-root AGENTS.md.
Resolve this installed skill's plugin root by going up two directories from its containing
skill directory, then validate .mcp.json and the plugin manifest. Environment variables
are optional; use the installed skill path, never a guessed marketplace checkout.
Fulfill the requested media operation without adding a video production workflow or a local animation project.
Scope and shared rules
- Resolve the plugin root from a valid
AO_HARNESS_ROOT, otherwise from this file's<harness-root>/skills/media-tools/SKILL.mdpath. Readdocs/shared-rules.mdfor the public allowlist, updates, identity, approvals, idempotency, storage, and recovery rules. - Audio, images/keyframes, transcription, import, and existing-job queries belong here. A request to generate any new video clip belongs to
skills/video-director/SKILL.md, regardless of model, clip count, or whether the user supplied a prompt. A video status query does not require Director planning again. - Use only the live
opus-video-toolsschema and available model metadata. Honor the requested model if exposed and compatible. Do not invent model names or fields, use private provider scripts, or silently substitute an unavailable model. - Do not load the Seedance skillpack for independent audio or images, require a video storyboard, add camera directions to speech, or create a Remotion project for an assets-only request.
Execute the requested operation
- Identify the desired output and input/reference roles. Use
generate_audiofor speech, music, or sound effects;generate_keyframesfor images;transcribe_audiofor timing/text; andimport_assetsfor asset registration, according to the live schema. Useget_status,list_jobs, andresolve_jobfor existing work. - Verify
opus_video_tools_whoamibefore new project creation, complete host sign-in if needed, and resolve an unexpected organization. Bind new generation/storage work to an explicit backend project. Status and recovery use the original job/project context instead of creating another project. Never reuse a previous organization's assets after switching organizations. - Prepare a review artifact appropriate to the medium: exact text, language, and voice for speech; a brief and duration for music/SFX; prompt, dimensions/aspect, and reference usage for images; input and desired operation for transcription/import. State requested outputs and the paid request count where relevant. Do not fabricate prices or require absent video layers. Follow shared paid approval rules; preserve the scope of an already approved request.
- Save each exposed
requestKeyas a UUID together with the exact arguments before submitting project creation or generation/transcription. Preserve the key for an identical retry only. Changed work needs a new key and, when paid, a new bound approval. Finish any returned asset upload/finalization steps before using its durable reference. - Submit only the requested operations. Poll asynchronous jobs with
get_status, using watch windows of at most 45 seconds or ordinary polling, until completed, failed, or submission_unknown. Continue across timed-out watch windows without resubmitting paid work. Resolve unknown submissions only under the shared explicit duplicate-spend-risk procedure. - Deliver the actual completed audio, image, transcript, or asset reference using the host's supported media presentation. Save durable project/job/asset IDs and exact request records. Do not claim a mix, preview, or export that was not produced and verified. Further editing or local assembly occurs only when requested.