Story Studio Agent Skill
Use Story Studio middleware tools as the project system of record.
- Search existing projects before creating a duplicate.
- Create a project only after the user has supplied or approved its title and basic production format.
- For the first mutation, use the trusted revision from Workbench context,
project creation/search, or a content read such as
story_get_production. If no trusted revision exists, callstory_get_project_revision, which returns only the project id and revision. Do not read the full project summary only to obtain a revision number. - Every successful mutation returns
revision. Use that revision for the next update to an existing entity. For a new character, episode, asset, scene, or shot id, omitbaseRevision; the server serializes independent creates on the authoritative project revision, so distinct creates may run in parallel. Never guess or pre-compute future revisions. On conflict, usecurrentRevisionfrom the error or callstory_get_project_revisiononce if that field is unavailable. Re-read only affected content when retrying could overwrite concurrent edits. - Keep
changeSummaryconcise and describe the visible business change. - Never invent tenant, organization, workspace, user, Assistant, or conversation identifiers; the middleware resolves them from trusted runtime context.
- Start production writing with
story_get_production_context. Whenexists=false, callstory_initialize_productionwith only the production brief. Initialization automatically createsepisode-1from the project title and synopsis. Update that exact id for the first full script; do not create another order-1 episode. Never call the legacystory_save_productionorstory_start_productionwhole-document contracts. - Add exactly one character, episode, asset, scene header, or shot per
mutation. A character is a
kind=characterasset aggregate containing its identity, role, visual description, voice reference, generation prompt, and media candidates; there is no separate character collection. Create and update it only withstory_upsert_production_character, and use that asset id asdialogue.speakerId. Independent new ids may be submitted together with nobaseRevision; existing-id updates must use the exact latest revision.story_upsert_production_scenenever accepts shots; create the scene header, then callstory_upsert_production_shotonce per shot. Give every shot a stable id, composition, action, camera direction, and bounded duration. Usedialogue: { text, speakerId, type }only when the shot has spoken text. For silent or action-only shots, omitdialogueor passdialogue=null; never use a speaker id to mean the visible character. - Pass every
targetDurationSecondsas an integer number of seconds, never a string, clock value, or localized duration. Validate the completed draft withstory_validate_production; validation is not human approval. On a schema type error, correct only the named field and retry once. On malformed args, return to production context and continue with one bounded mutation instead of reconstructing a whole document.episode.scriptis a JSON string: never place raw ASCII double quotation marks inside the script text. Use typographic quotation marks such as“…”or「…」for dialogue and keep line breaks as valid JSON string escapes. - For an asset-bible reference set, use
seedream_text_to_imageonce per requested continuity view or expression with the asset prompt plus the production visual style. Use 3:4 for characters, 16:9 for locations, and 1:1 for props or style references. Callstory_attach_generated_asset_imagesequentially for each completed Workspace image with the exact asset id, Workspace path, provider receipt, currentbaseRevision, and the exactassetReferencerequested by the Workbench. Useselect=trueonly for the primary continuity view and never for an expression. Use each successful attachment receipt revision as the nextbaseRevision; do not read a project summary between attachments. Never attach base64 or a provider URL. - The user starts paid video generation only through Generate Take in the Story Studio Workbench. Never call Seedance, Veo, Kling, or any provider video submission tool directly from the Agent.
- Treat durable Story Studio video tasks as the only source of status. Use
story_list_shot_video_tasksorstory_get_video_taskwithout relying on chat history. Usestory_refresh_video_taskonly to refresh an existing task; it must never create paid work. - A Take exists only when its task reports
completedand includes a candidate id. Until then, do not claim success. Do not expose provider task ids, provider URLs, Toolset ids, credentials, or raw provider responses. - Use
story_cancel_video_taskonly after explicit user instruction. Usestory_retry_video_taskonly after an explicit retry request and never as an automatic response to failure. Usestory_select_shot_videoonly after the user chooses a completed Take. Do not directly attach managed task results withstory_attach_generated_video. - For professional assembly or export, prepare the versioned
StoryCutHandoff v1, deliver its exact contract to Cut, and record Cut's authoritative receipt. - Use
story_report_failurewhen a requested project operation cannot be completed, including a stable failure code and a recoverable flag. - Treat moving a project into review, completed, failed, or archived as an explicit human-review decision.