Install
openclaw skills install @ydtincle/xyq-short-drama-skill使用小云雀官方 CLI 提交和查询短剧创作任务,支持剧本生成、续写改写、剧情扩展、人物设定、分集草稿、世界观设定及会话产物下载。需安装 pippit-tool-cli 并使用本人小云雀账号登录,生成任务按账号权益消耗积分。
openclaw skills install @ydtincle/xyq-short-drama-skill通过 pippit-tool-cli short-drama 命令提交短剧创作任务、上传参考文件,并行查询任务进展和会话产物文件,及时把重要资产下载到用户本地。
短剧场景面向剧情、人物、分集与画面化叙事创作,用户的原始需求通过 --message 发送给后端 Agent。后端 Agent 负责理解任务、编排流程和生成内容;用户侧 Agent 负责提交任务、并行查询进展与产物、主动下载重要资产并展示结果。
调用 short-drama +submit-run 时,宿主 Agent 根据可信的实际运行环境静默附加可选 --source:豆包办公为 doubao_office,WorkBuddy 为 workbuddy,Codex 为 codex;其它已知宿主使用真实、稳定的产品标识。不附带版本、会话 ID、用户信息或 prompt,不从用户创作内容猜测来源,不向用户询问或增加确认。来源不明时省略;仅用于统计,不影响实际工具效果,不改写 --message。上传、查询和下载命令不附加此参数。旧版 CLI 以 --help 为准,不支持时省略,不因统计字段阻塞任务或重复提交。
thread_id 和可选 run_id 拉取服务端 v2 readable_text,用于展示短剧任务进展、问题和结果。.doc / .docx / .txt 参考文件,得到 asset_id,供后续任务引用。thread_id 拉取会话文件列表,得到 file_path、download_url。这和查询会话进展同等重要。download_url 下载资源,并按 file_path 写入用户本地目标文件路径。重要资产包括但不限于:剧本设计、场景设计、场景图、人物角色设计、人物图、分集草稿、故事板、最终视频产物。只要 list-thread-file 返回了这些资产的 download_url,就要及时调用下载工具落盘,不要只展示文件元信息。
短剧创作按以下主流程推进。用户侧 Agent 在展示后端 Agent 的表单、问卷、选项或确认问题时,必须先参考这个顺序判断当前阶段和合理下一步。
后端 Agent 通过 readable_text 发出表单、问卷、选项、按钮或询问用户时,用户侧 Agent 不要机械原样转述所有选项。先结合短剧主流程顺序清洗选项,再把合理、必要、当前可执行的流程项呈现给用户。
剧本标准化 是可选阶段,只能出现在“短剧风格推荐确认”之后、“场景分析”之前。不要把它包装成任意阶段都可以跳过或补做的通用选项。当后端 Agent 通过 readable_text 要求用户补充信息、选择选项、确认流程或确认创意内容时,优先使用当前宿主提供的 ask-question / confirmation / form 类工具向用户提问,而不是只在普通聊天里输出问题。
按宿主选择准确工具:
request_user_input。仅在工具已暴露且当前模式允许时调用;不可用时退回普通聊天提问。不要在 Codex 中调用 ask_user_question。ask_user_question(Ask User Question);工具未暴露时才退回普通聊天提问。使用宿主提问工具前,先按“表单与问卷选项处理原则”清洗问题和选项:
真实提交将进入消耗 credits 的图片生成、视频生成或编辑阶段时,如果用户本轮尚未明确确认执行,必须使用上述工具征得明确确认。不要设置默认同意、自动选择或超时后继续;纯文本规划和查询进展不需要额外确认。
需要已安装 pippit-tool-cli:
npx @pippit-dev/cli@latest install
首次使用原生 CLI 时运行网页登录;CLI 会自动申请或复用本机专属凭证,并保存到系统安全凭证库,不要求用户复制 Access Key:
pippit-tool-cli login
XYQ_ACCESS_KEY 仅保留给 CI、Agent 等非交互环境作为显式覆盖。若该环境变量已设置但无效,CLI 不会静默改用个人网页登录凭证;应先修正或取消该环境变量。
+submit-run 返回 web_thread_link 后,用户侧 Agent 必须优先把小云雀短剧 WebUI 打开给用户,而不是只展示链接。
按当前宿主适配打开方式:
Codex Desktop
browser:control-in-app-browser skill 可用,先读取并按该 skill 连接 Codex in-app browser。web_thread_link,并让浏览器可见。get-thread、list-thread-file 和 download-result;打开 WebUI 不替代 CLI 轮询和产物下载。WorkBuddy
web_thread_link。browser:control-in-app-browser、node_repl 或 agent.browsers.get("iab") 实现。web_thread_link 交给用户在 WorkBuddy 内置浏览器或普通浏览器中打开。TRAE Work
web_thread_link。web_thread_link 交给用户手动打开。其他宿主或未知环境
如果没有明确的宿主浏览器能力、工具不可用或连接失败:
web_thread_link 展示给用户,作为手动打开入口。打开界面的目的只是让用户能进入小云雀编辑/确认界面做视觉 review、流程确认或手动调整;短剧任务提交、状态查询和重要资产落盘仍以 pippit-tool-cli 为准。
# 创建新会话并提交短剧创作需求
pippit-tool-cli short-drama +submit-run --message "创作一个赛博朋克短剧开头"
# 向已有会话追加新的短剧需求
pippit-tool-cli short-drama +submit-run --message "继续写下一集,重点描写主角的逃亡" --thread-id THREAD_ID
# 携带已上传剧本文件 asset_id 提交任务;同一 thread_id 只允许一个剧本文件
pippit-tool-cli short-drama +submit-run --message "参考这个大纲写第一集" --asset-ids ASSET_ID
# 查询会话可读进展
pippit-tool-cli get-thread --thread-id THREAD_ID --run-id RUN_ID
thread_id和run_id由+submit-run返回。run_id可省略,省略时返回当前thread_id下的所有 Run;传入时只看指定 Run。
当用户提供短剧大纲、人物设定、世界观设定、已有分集或剧本等本地参考文件时,可先上传文件。+upload-file 当前只接收本地文件路径,并且只支持 .doc、.docx 和 .txt 后缀;不要把 .md、.pdf、图片、视频或 URL 传给该命令。
pippit-tool-cli short-drama +upload-file --path /path/to/outline.txt
上传成功后命令只返回 asset_id:
{
"asset_id": "asset_..."
}
后续提交任务时,把该值作为唯一的 --asset-ids 传给 +submit-run。单次创作会话中(相同 thread_id),只支持上传并绑定一个剧本文件;如果用户提供多个剧本文件,先让用户选择一个,或为不同剧本分别开启新的创作会话,不要在同一 thread_id 下重复追加剧本文件。
# 获取会话文件列表
pippit-tool-cli list-thread-file --thread-id THREAD_ID --page-num 1 --page-size 200
list-thread-file 返回的每个文件对象包含:
{
"file_path": "./{thread-id}/路径/文件名", // 文件完整路径,包含文件名
"download_url": "https://...", // URL
"updated_at": 1779716734 // 文件更新时间,Unix 秒级时间戳
}
list-thread-file 只负责获取会话文件列表,不负责下载文件,也不需要判断本地文件是否已存在。
# 下载文件资源到指定文件路径
pippit-tool-cli download-result --url DOWNLOAD_URL --output-path FILE_PATH --updated-at UPDATED_AT
FILE_PATH 必须直接使用 list-thread-file 返回的完整 file_path,包含文件名,不要取父目录。UPDATED_AT 使用同一文件对象返回的 updated_at;如果没有 updated_at,可省略 --updated-at。download-result 负责把会话产生的文件通过 URL 下载到该目标文件路径;如果目标文件已存在且本地修改时间不早于 updated_at,跳过下载;如果本地文件早于 updated_at,覆盖更新。
1. pippit-tool-cli short-drama +submit-run --message "用户的原始短剧需求"
→ 拿到 thread_id、run_id 和 web_thread_link
2. 立即展示 web_thread_link,并按“小云雀界面打开契约”优先用 in-app browser 打开该链接
3. 并行发起,二者同等重要:
a. pippit-tool-cli get-thread --thread-id THREAD_ID --run-id RUN_ID
b. pippit-tool-cli list-thread-file --thread-id THREAD_ID --page-num PAGE_NUM --page-size 200
4. 检查 `get-thread` 返回的 readable_text:
- 如果任务仍在进行中:展示可读进展,继续查询
- 如果后端 Agent 提出问题:从 readable_text 中提取问题并展示,等待用户回复
5. 检查 `list-thread-file` 返回的 files:
- 对每个文件取 file_path、download_url、updated_at
- 将 file_path 作为本地目标文件路径,包含文件名
- 有 download_url 的重要资产:加入本轮下载队列
- 不判断 file_path 在本地是否已存在,是否跳过由 download-result 内部处理
- 如果本轮 total 达到 200:下一轮将 PAGE_NUM 加 1,继续查询新一页文件
6. 对重要资产,立即调用 download-result 并行下载资源:
- 使用第 5 步获取的 download_url 作为 --url
- 使用第 5 步获取的完整 file_path 作为 --output-path
- 如果第 5 步返回 updated_at,作为 --updated-at 传入
- 剧本设计、场景设计、场景图、人物角色设计、人物图、最终视频产物都属于重要资产
7. 查询或下载失败时,不要直接放弃;记录失败项,并在后续轮询中主动重试
8. 只有会话进展已处理,且已发现的重要资产均已下载或明确重试失败后,才向用户汇总最终结果
9. 如用户继续追加需求,使用同一 thread_id 再次 submit-run
1. 检查用户提供的是一个本地 `.doc`、`.docx` 或 `.txt` 剧本文件路径;如果不是,告知当前上传命令只支持这三类文件,不要擅自转换或改写文件。
2. pippit-tool-cli short-drama +upload-file --path /path/to/file.txt
→ 拿到 asset_id
3. pippit-tool-cli short-drama +submit-run --message "用户的原始短剧需求" --asset-ids asset_id
→ 拿到 thread_id、run_id 和 web_thread_link
4. 立即展示 web_thread_link,并按“小云雀界面打开契约”优先用 in-app browser 打开该链接
5. 记录该 thread_id 已绑定这个剧本文件;后续同一 thread_id 的续写或修改只传 --thread-id,不再传新的剧本 asset_id
6. 后续同场景 1 的并行查询、重要资产发现和文件下载流程
1. pippit-tool-cli short-drama +submit-run --message "用户的新需求" --thread-id THREAD_ID
→ 拿到新的 run_id 和 web_thread_link
2. 立即展示 web_thread_link,并按“小云雀界面打开契约”优先用 in-app browser 打开该链接
3. 如果该 THREAD_ID 已经绑定过剧本文件,不要再上传或通过 --asset-ids 追加第二个剧本文件
4. 继续按场景 1 展示进展、处理用户补充问题、获取新增会话文件列表,并及时下载新增重要资产
get-thread 查看 readable_text。优先带上本轮 run_id 聚焦当前任务;需要查看整个会话时可省略 --run-id。+submit-run 返回 thread_id 后,同时发起 get-thread 和 list-thread-file;二者同等重要,不能只查询会话进展而忽略会话文件。list-thread-file 使用 --page-size 200。如果本轮返回的 total 达到 200,下一轮使用 --page-num 加 1 查询新一页结果;如果未达到 200,保持当前页继续轮询新增产物。list-thread-file 返回的文件。剧本设计、场景设计、场景图、人物角色设计、人物图、分集草稿、故事板、最终视频产物都是重要资产。list-thread-file 的结果后,对带 download_url 的重要资产立即调用 download-result 下载资源;不要在 list-thread-file 阶段检查文件是否已存在,存在性检查由下载工具内部处理。file_path,或明确记录该文件在重试后仍下载失败。web_thread_link 查看。get-thread、list-thread-file 或 download-result 任一调用失败时,记录失败原因和参数,在后续轮询中主动重试;重试期间继续处理其他成功返回的消息和文件。连续多轮失败后再向用户说明仍未完成的查询或下载项。一次短剧任务不能只以 get-thread 返回的 readable_text 作为结束条件。完成前必须同时检查:
get-thread 返回的最新 readable_text、用户确认问题和最终消息。web_thread_link,并按当前宿主尝试打开小云雀 WebUI:Codex Desktop 用 in-app browser;WorkBuddy / TRAE Work 用各自宿主提供的内置浏览器或页面打开能力;如果不能自动打开,已说明原因并提供手动链接。--page-size 200 调用 list-thread-file 获取会话文件列表;如果本轮 total 达到 200,已在后续轮询中递增 page-num 查询新一页。download_url 的重要资产,已调用 download-result 下载到本地 file_path。剧本标准化,已明确这是可选阶段。+submit-run 返回:
{
"thread_id": "thread_...",
"run_id": "run_...",
"web_thread_link": "https://xyq.jianying.com/..."
}
get-thread 返回:
Thread: thread_...
标题: ...
状态: ...
-- Run #1 --
[assistant] ...
short-drama +upload-file 返回:
{
"asset_id": "asset_..."
}
+upload-file 通过 multipart/form-data 上传文件,表单文件字段名为 file。本地文件必须存在、不能是目录,后缀必须是 .doc、.docx 或 .txt;不支持的后缀会直接报错。返回的 asset_id 来自服务端 pippit_asset_id,如果没有该字段才回退到 asset_id。
list-thread-file 返回:
{
"files": [
{
"file_path": "./{thread-id}/{file_path}/{file_name}",
"download_url": "https://...",
"updated_at": 1779716734
}
],
"total": 1,
"message": "<system-remind>\n- total reached 200; query the next page with --page-num {page-num} + 1\n</system-remind>"
}
当 total 达到 200 时,message 会用 <system-remind> 提示下一轮将 page-num 加 1 查询新一页。
download-result 返回:
{
"output_path": "./{thread-id}/{file_path}/{file_name}",
"downloaded": ["./{thread-id}/{file_path}/{file_name}"]
}
先用 list-thread-file 获取会话文件列表,再用 download-result 并行下载重要资产。获取文件元信息不是最终目标,重要资产落盘才是核心目标。文件是否已存在由下载工具内部检查,list-thread-file 阶段不要做本地存在性判断。
从 list-thread-file 的 files 中逐个读取文件元信息:file_path、file_name、download_url、updated_at。重点识别剧本设计、场景设计、场景图、人物角色设计、人物图、分集草稿、故事板、最终视频产物等重要资产。
1. 有download_url的重要资产
→ 记录该file_path、URL和updated_at
→ 使用 download-result 将URL资源下载到该file_path;有updated_at时传入--updated-at
2. 本轮total达到200
→ 下一轮page-num加1,继续查询新一页结果
3. 本轮total未达到200
→ 后续轮询保持当前页,继续发现新增产物
4. list-thread-file或download-result失败
→ 记录失败参数和错误
→ 后续轮询主动重试,不要直接结束任务
对带 download_url 的重要资产调用下载工具,可并行。重要资产必须主动下载,不要等用户再次要求,也不要在调用下载工具前先检查本地文件是否存在。
pippit-tool-cli download-result --url DOWNLOAD_URL --output-path FILE_PATH --updated-at UPDATED_AT;如果文件对象没有 updated_at,省略 --updated-at。web_thread_link。web_thread_link,让用户能进入小云雀 WebUI 查看和调整;不同宿主只使用各自提供的浏览器能力,不复用 Codex Desktop 的实现细节。你(用户侧 Agent)的职责是传递用户需求和展示后端结果,不是替后端 Agent 创作短剧。
你要做的只有三件事:
.doc / .docx / .txt 参考文件,先调用 +upload-file。asset_id 通过 +submit-run --asset-ids 发给后端;同一 thread_id 后续续写或修改不再追加新的剧本文件。get-thread 返回的 readable_text 展示进展、问题和结果;遇到表单、问卷、选项或按钮时,只做流程合理性清洗,不替用户决定创作内容;根据 list-thread-file 获取文件列表;再根据 download_url 调用 download-result 把缺失资源下载到用户本地。不要做的事:
+submit-run,除非用户明确要求分多次处理。后端 Agent 会负责理解短剧任务、组织创作流程和生成内容。用户侧 Agent 越俎代庖会降低结果一致性。
--message 是用户的原始短剧需求,不能为空。+submit-run 返回的 thread_id 和 run_id;如果需要查看整个会话,可以省略 --run-id。get-thread 当前固定走服务端 v2 响应,输出字段是 readable_text;不要解析旧版 messages 数组。+upload-file 当前用于短剧场景文件上传链路,只支持本地 .doc / .docx / .txt 文件;--path 不能为空,路径必须指向真实文件,不能是目录。+upload-file 上传成功后只返回 asset_id;把该值原样作为 +submit-run --asset-ids 的参数。thread_id),+submit-run 只支持绑定一个剧本文件。不要在同一 thread_id 下重复上传并追加第二个剧本 asset_id;用户给多个剧本时,先让用户选择一个,或分别开启新的创作会话。list-thread-file 只需要 thread_id;分页参数使用 --page-num 1 --page-size 200 起步,total 达到 200 时下一轮递增 page-num。list-thread-file 和 download-result 是两个不同的 CLI 指令:前者获取会话文件元信息,后者下载 URL 资源并写入到本地目标文件路径。download-result 接收 --url、--output-path、--updated-at、--workers;--output-path 必须是包含文件名的目标文件路径。