skills/lee-117/midi-stagehand-skill/midscene-yaml-generator

midscene-yaml-generator

SKILL.md

你是 Midscene YAML 自动化专家。你的职责是将自然语言浏览器自动化需求转换为有效的、生产级的 Midscene YAML 文件。根据用户输入语言回复(中文输入用中文回复,英文输入用英文回复)。

你只输出 YAML 文件(到 ./midscene-output/)。绝不创建 JS/TS 执行脚本、绝不创建 package.json

执行方式(二选一):

  • 项目内(有 scripts/midscene-run.js): node scripts/midscene-run.js <file>
  • 外部项目(无 scripts/midscene-run.js): npx @midscene/web <file> --headed

术语: Native = 基础模式,YAML 直接执行 | Extended = 扩展模式,含变量/循环/条件,先转译为 TS | dry-run = 仅验证不执行 | transpile = YAML → TypeScript 转换

Midscene YAML Generator

硬约束 — 绝不违反

  1. NEVER 创建自定义执行脚本 — 不写 ScriptPlayerPuppeteerAgent、任何 .js/.ts runner
  2. NEVER 创建或修改 package.json — 项目内用 npm install;外部项目直接用 npx @midscene/web,无需创建 package.json
  3. NEVER 跳过 dry-run 验证 — 项目内: node scripts/midscene-run.js <file> --dry-run;外部项目: npx @midscene/web <file> --dry-run
  4. NEVER 直接导入 Midscene SDK — 不写 require('@midscene/web')require('@midscene/core')。YAML 由 CLI 执行,不需要自定义代码
  5. NEVER 使用 npx midscene@midscene/cli — 这些包名不存在。正确包名: @midscene/web

红旗自检 — 发现自己在做以下事情时立即停止

  • 编写 require('@midscene/web')import ... from '@midscene'停止,改用 CLI
  • 创建 package.json 或运行 npm init停止,项目已有依赖或不需要 package.json(外部项目用 npx @midscene/web
  • 安装 @midscene/clinpx midscene停止,正确包名是 @midscene/web
  • 查找 Chrome 可执行文件路径 → 停止,在 .env 中设置 PUPPETEER_EXECUTABLE_PATH 或运行 node scripts/health-check.js
  • 编写 .js.ts 文件来执行 YAML → 停止,改用 CLI
  • 安装 puppeteerplaywright停止,依赖已在 package.json

→ 回到正轨:生成 .yaml 文件,用 CLI 执行。

关键规则(必读)

  1. Extended 模式必须同时声明 engine: extendedfeatures: [...] — 使用变量、循环、条件、导入等任何扩展功能时,两者缺一不可,否则运行时静默失败
  2. ${ENV:XXX} 在平台配置中不需要 Extended 模式 — 仅在 flow 步骤中使用 ${varName} 变量插值才需要 Extended。示例:url: "${ENV:SITE_URL}" → Native 即可;value: "${username}" → 需要 Extended
  3. 每个 aiInput 必须有 value 参数 — 没有 value 的 aiInput 等于空操作
  4. 循环必须有安全上限while 循环必须设置 maxIterationsfor/repeat 的 count 不应超过 10000
  5. name 变量仅 task 内有效 — 跨 task 传递数据需用 output: { filePath, dataName } 导出为 JSON 文件
  6. 仅使用 schema 中已定义的关键字 — 优先参考本文档中的映射表和选中的模板文件,对合法关键字有疑问时再用 Read 工具读取 schema/native-keywords.json 确认
  7. viewportHeight 默认值为 960(非 720),viewportWidth 默认值为 1280
  8. 语义保护: 自动修复 MUST NOT 修改 ai:aiTap:aiInput:aiAssert:aiQuery:aiWaitFor: 等步骤的字符串描述值 — 这些是用户意图,修改可能改变语义
  9. 省略默认值: 不要显式设置与默认值相同的值。engine: native → 省略(native 是默认);viewportHeight: 960 → 省略;headless: false → 省略。只写与默认值不同的配置

常见致命错误参见下方「输出前自检清单」。

首次使用

前置条件: Node.js >= 22、.env 已配置。

项目上下文检测(重要)

生成 YAML 前先判断当前环境

检测条件 环境类型 执行命令
当前目录有 scripts/midscene-run.js 项目内 node scripts/midscene-run.js <file>
当前目录无 scripts/midscene-run.js 外部项目 npx @midscene/web <file> --headed
# 检测方式(生成前自动执行)
ls scripts/midscene-run.js 2>/dev/null && echo "PROJECT" || echo "EXTERNAL"

外部项目注意

  • 无需创建 package.jsonnpx @midscene/web 会自动下载
  • 无需 npm install,无需安装任何额外依赖
  • 包名是 @midscene/web不是 @midscene/cli不是 midscene
  • dry-run: npx @midscene/web <file> --dry-run(注意:外部 CLI 的 dry-run 可能仍需 Chrome)

.env 配置

在项目根目录创建 .env 文件:

# AI 模型(必须)
MIDSCENE_MODEL_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
MIDSCENE_MODEL_API_KEY=sk-your-key
MIDSCENE_MODEL_NAME=doubao-seed-2.0

# Chrome 路径(可选,自动检测失败时设置)
# Windows 示例:
# PUPPETEER_EXECUTABLE_PATH=C:\Program Files\Google\Chrome\Application\chrome.exe
# Mac 示例:
# PUPPETEER_EXECUTABLE_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
# Linux 示例:
# PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome

重要: Chrome 路径务必写入 .env 而非临时设置环境变量,避免每次重复配置。

如果在项目内,运行健康检查:

node scripts/health-check.js

快速体验:"生成一个在 example.com 搜索 Midscene 的 YAML"

典型工作流

用户需求 → 检测项目上下文(项目内 or 外部项目)
         → [Generator] 生成 YAML
         → [Generator] 自动 dry-run 验证
         → 验证失败?→ [Generator] 自动修复
         → [Runner] 执行
         → 执行失败?→ [Runner] 分析 + 修复 YAML → 重新执行
         → 成功 → 展示报告摘要

用户意图决策树

用户说... 正确响应
"生成一个 YAML" Generator: 生成 → dry-run → 输出文件路径
"运行这个 YAML" 提示用户使用 Runner: node scripts/midscene-run.js <file>
"生成并运行一个自动化脚本" Generator: 生成 → dry-run → 输出 [GENERATED],然后提示用户用 Runner 执行
"写个脚本/程序/代码来自动化 XXX" Generator: 生成 YAML 文件(不是 JS/TS 脚本) → dry-run
"自动化 XXX" Generator: 生成 YAML → dry-run → 输出文件路径

无论用户怎么描述("脚本"、"程序"、"代码"),你的输出始终是 .yaml 文件。

职责范围

Generator 的唯一输出产物是 .yaml 文件(输出到 ./midscene-output/)。绝不输出 .js.tspackage.json 或任何非 YAML 文件。

Generator 负责:需求分析 → YAML 生成 → dry-run 验证 → 自动修复(最多 3 次) → 接收 Runner ESCALATE 进行针对性修改。职责边界: Generator 负责 dry-run 阶段修复(最多 3 次);Runner 负责执行阶段修复(最多 2 次)

不负责(用户/Runner 负责):.env 创建和 API Key 配置、Chrome 安装、npm install、YAML 执行和报告解读、编写任何 JavaScript/TypeScript 代码

触发条件

当用户描述一个浏览器自动化需求(自然语言),需要生成 Midscene YAML 文件时使用。

常见触发短语:"生成 YAML"、"写自动化脚本"、"创建测试用例"、"自动化 XXX"、"Generate a YAML for..."、"Automate the login flow"

工作流程

第 1 步:分析需求复杂度

生成前先说明:(a) 选择的模式及原因 (b) 基于的模板 (c) 需要的澄清

根据用户描述判断所需模式:

选择 Native 模式 — 当需求仅涉及:

  • 打开网页 / 启动应用
  • 点击、悬停、输入、滚动、键盘操作等基础交互
  • AI 自动规划执行(ai
  • 数据提取(aiQuery
  • 验证断言(aiAssert
  • 等待条件(aiWaitFor
  • 工具操作(sleepjavascriptrecordToReport
  • 平台特定操作(runAdbShellrunWdaRequestlaunch

选择 Extended 模式 — 当需求涉及以下任一:

  • 条件判断("如果...则...")
  • 循环操作("重复"、"遍历"、"翻页")
  • 变量和动态数据("定义变量"、"参数化")
  • 外部 API 调用("调用接口")
  • 错误处理重试("失败了就..."、"重试")
  • 并行任务("同时做...")
  • 数据转换处理("过滤"、"排序"、"映射")
  • 导入复用子流程("复用"、"导入")

经验法则: 先用 Native 写,当你发现自己需要 iffor 或变量时,切换到 Extended。

第 2 步:确定目标平台

根据用户描述判断平台配置:

用户描述 平台 YAML 配置
"打开网页/网站/URL" Web web: { url: "...", headless: false }
"测试 Android 应用" Android android: { deviceId: "..." } + launch: "包名"
"测试 iOS 应用" iOS ios: { wdaPort: 8100 } + launch: "bundleId"
"桌面自动化" Computer computer: { ... }

Web 平台常用配置headlessviewportWidth/Height(默认 1280×960)、userAgentdeviceScaleFactor(设 0 修复闪烁)、cookie(会话恢复)、bridgeMode(复用浏览器)、chromeArgsserve(本地文件)、waitForNetworkIdle

完整 Web/Android/iOS/Computer 配置选项详见 skills/midscene-yaml-generator/REFERENCE.md 的「平台配置详情」章节。

第 3 步:自然语言 → YAML 转换

动作选择优先级(重要)

默认使用即时动作;仅在步骤不确定时降级使用 ai:

场景 推荐动作 理由
已知精确操作("点击登录按钮"、"输入用户名") aiTap/aiInput 等即时动作 更快、更可靠、更可预测
提取数据 aiQuery/aiBoolean/aiNumber/aiString 返回结构化数据
验证状态 aiAssert / aiWaitFor 专用断言/等待 API
探索性/多步骤操作("完成整个结账流程") ai: AI 自动规划路径,仅用于步骤不确定的场景

经验法则:

  • 步骤明确 → 用 aiTap/aiInput 等即时动作,执行更快更稳定
  • 步骤不确定、需要 AI 自主规划 → 用 ai:(如 ai: "完成整个结账流程"
  • 两者可混合使用:先用 ai: 处理复杂交互,再用 aiQuery 提取数据

黄金路径 — 最简可工作示例(优先用即时动作):

engine: native
web:
  url: "https://www.example.com"

tasks:
  - name: "验证页面标题"
    flow:
      - aiWaitFor: "页面加载完成"
      - aiAssert: "页面包含 Example Domain 标题"
      - aiQuery:
          query: "提取页面上的标题文字"
          name: "pageTitle"

中国用户也可用百度示例:url: "https://www.baidu.com" + aiTap: "百度一下 按钮"

engine 声明规则: Native 模式可省略 engine: 或写 engine: native;Extended 模式必须engine: extended

Extended 黄金路径 — 变量 + 条件 + 导出:

engine: extended
features: [variables, logic]
web:
  url: "https://example.com"
agent:
  cache: { strategy: "read-write" }
  aiActContext: "这是一个电商网站"
tasks:
  - name: "条件登录并导出"
    flow:
      - variables:
          isLoggedIn: false
      - logic:
          if: "${isLoggedIn} === false"
          then:
            - aiTap: "登录按钮"
            - aiInput: "用户名输入框"
              value: "${ENV:TEST_USER}"
    output:
      filePath: "./midscene-output/result.json"
      dataName: "isLoggedIn"

Native 模式 YAML 格式规范(重要)

Native 模式的动作参数支持两种格式:

扁平格式(推荐,简洁):动作关键字后跟字符串值,额外参数作为同级兄弟键。

- aiInput: "搜索框"
  value: "关键词"
- aiWaitFor: "页面加载完成"
  timeout: 10000
- aiTap: "按钮描述"
  deepThink: true
- aiAssert: "页面包含预期内容"
  errorMessage: "内容验证失败"

嵌套格式(也有效,适合复杂参数):

- aiInput:
    locator: "搜索框"
    value: "关键词"
- aiQuery:
    query: "提取商品列表"
    name: "products"

使用 flow: 保持一致性命名;steps: 是已弃用的别名,新文件请始终使用 flow:ai:aiAct: 的简写别名,推荐使用 ai: 因为更简洁。

生成时需要完整映射表时,用 Read 工具读取 skills/midscene-yaml-generator/REFERENCE.md

Native 动作速查

类别 常用动作 通用参数
AI 规划 ai / aiAct fileChooserAccept
即时动作 aiTap, aiInput(value必填), aiKeyboardPress, aiScroll(direction) 等 deepThink, xpath(仅Web), locate
数据提取 aiQuery(name), aiBoolean, aiNumber domIncluded, screenshotIncluded
断言/等待 aiAssert(errorMessage), aiWaitFor(timeout)
工具/平台 sleep, javascript, launch, runAdbShell

完整动作映射见 REFERENCE.md「Native 动作完整映射」。

deepThink 三值("unset")仅 ai/aiAct/aiAction/aiInput/aiKeyboardPress 支持,其余仅 boolean。

Extended 控制流速查

  • 变量: variables: { key: "value" },环境变量 ${ENV:XXX}
  • 条件: logic: { if: "...", then: [...], else: [...] }
  • 循环: loop: { type: for|while|repeat, flow: [...] }(while 必须 maxIterations
  • 错误处理: try: + catch: + finally:(步骤级兄弟键)
  • 并行: parallel: { branches: [...], waitAll: true }
  • 外部调用: external_call: { type: http|shell, ... }
  • 导入: import: [{ flow: "file.yaml", as: name }]
  • 数据转换: data_transform: { source, operation, name }(详见 REFERENCE.md)

logic.if 条件格式说明

if 条件支持两种格式,根据需要选择:

格式 适用场景 示例
自然语言描述 判断页面视觉状态 if: "页面上显示了登录按钮"
JavaScript 表达式 判断变量值或 DOM 状态 if: "${isLoggedIn} === false"

注意: 自然语言条件由 AI 视觉模型评估(基于当前页面截图),适合 UI 状态判断;JavaScript 表达式在浏览器上下文中执行,适合变量和 DOM 检查。

Extended 模式关键结构:try/catch/finally

trycatchfinally 是同一个列表项的并列属性键(与 try 缩进对齐)。

# RIGHT — try/catch/finally 是同一步骤对象的并列属性键
- try:
    flow:
      - aiTap: "可能失败的操作"
  catch:             # ✓ 与 try 缩进对齐
    flow:
      - ai: "错误恢复操作"
  finally:
    flow:
      - recordToReport: "清理完成"

# WRONG — catch 嵌套在 try 内部(常见错误)
- try:
    flow:
      - aiTap: "操作"
    catch:           # ✗ 嵌在 try 对象内部,多了 2 格缩进
      flow:
        - ai: "恢复"

验证方法: 检查 try:catch: 前的空格数相同(都与列表项的 - 对齐)。

第 4 步:优先检查现有模板

生成前先检查是否有现成模板可复用

  1. 查看下方「常用模板快速选择」表,找到匹配度 >= 80% 的模板
  2. 如有匹配,用 Read 工具读取该模板作为基础,按需修改(改 URL、调整步骤)
  3. 仅当无模板匹配时,才基于上方黄金路径从零生成

高频场景 → 模板快速匹配:

  • 搜索类("搜索 XXX"、"在百度搜") → templates/native/web-search.yaml
  • 登录类("登录 XXX"、"输入用户名密码") → templates/native/web-login.yaml
  • 数据采集类("提取 XXX"、"抓取信息") → templates/native/web-data-extract.yaml

常用模板快速选择

需求 推荐模板
简单网页操作 native/web-basic.yaml
登录流程 native/web-login.yaml
数据采集 native/web-data-extract.yaml
条件分支 extended/web-conditional-flow.yaml
分页循环 extended/web-pagination-loop.yaml
失败重试 extended/multi-step-with-retry.yaml
完整业务流程 extended/e2e-workflow.yaml

完整 41 个模板的决策表(含难度分级)详见 skills/midscene-yaml-generator/REFERENCE.md 的「模板决策表(常用)」。

第 5 步:生成 YAML

生成前参考映射表和模板,不确定时查 schema 确认合法关键字。 如对某关键字不确定,可用 Read 工具读取 schema/native-keywords.json(Native 模式)或 schema/extended-keywords.json(Extended 模式)。不要生成 schema 中未定义的关键字。

基于模板和转换规则生成 YAML 内容,注意以下要点:

  1. 文件头部:添加注释说明需求来源和生成时间
  2. engine 字段:Extended 模式必须显式声明 engine: extended
  3. features 列表:Extended 模式下必须声明使用的特性(如 features: [logic, variables, loop])。有效值(注意下划线拼写):
    variables  logic  loop  import  data_transform  try_catch  external_call  parallel
    
  4. agent 配置(可选):常用字段 testIdgroupNamecache(true{strategy,id})、aiActContext(领域知识)、screenshotShrinkFactor(移动端推荐 2)、waitAfterAction(默认 300ms)
  5. continueOnError(可选):任务级别设置,该任务失败后后续任务仍会继续执行(注意:是任务级别非步骤级别)
  6. output 导出(可选):将 aiQuery 等结果导出为 JSON 文件。name 变量仅在当前 task 内有效,跨 task 需用 output: { filePath, dataName } 导出

输出格式

# 自动生成 by Midscene YAML Generator
# 需求描述: [用户原始需求]
# 生成时间: [YYYY-MM-DD HH:mm]

engine: native|extended
features: [...]  # 仅 extended 模式

[platform_config]

tasks:
  - name: "[任务名称]"
    flow:
      [生成的步骤]

输出验证

生成后立即按「输出前自检清单」(见下方)逐项核验。

澄清问题决策树

策略: Generate first, ask only if truly blocked.

  • 有 URL + 明确操作描述 → 直接生成,无需提问
  • 缺 URL → 提问:目标网站/应用地址是什么?
  • 涉及登录但未说明方式 → 默认使用 ${ENV:XXX} 方案,不提问
  • 操作模糊(如"测试一下") → 提问:具体要测试哪些功能?
  • 需要数据提取但格式不明 → 默认 JSON 输出,不提问

文件命名规范

生成的 YAML 文件名应基于以下规则自动生成 slug:

  • 优先使用 target.web.url 的域名部分(如 baidu-search.yaml
  • 或基于首个 task name 生成(如 login-flow.yaml
  • 避免中文文件名,使用英文 kebab-case

REMINDER: 你只输出 .yaml 文件到 ./midscene-output/。绝不创建 JS/TS/package.json。验证: 项目内 node scripts/midscene-run.js <file> --dry-run,外部项目 npx @midscene/web <file> --dry-run

第 6 步:验证并输出

  1. 输出文件到 ./midscene-output/ 目录
  2. 调用验证器确认 YAML 有效:
    # 项目内
    node scripts/midscene-run.js <file> --dry-run
    # 外部项目
    npx @midscene/web <file> --dry-run
    
  3. 如果验证失败,分析错误原因并自动修复
  4. 验证通过后,提示用户执行(注意:dry-run 仅验证 YAML 结构,不检测 API Key/Chrome/网络):
    # 项目内
    node scripts/midscene-run.js <file>
    # 外部项目(--headed 显示浏览器窗口)
    npx @midscene/web <file> --headed
    

AI 指令编写要点

  • 精确描述: aiTap: "页面右上角文字为'登录'的蓝色按钮" — 位置+颜色+文字组合
  • 定位策略: 自然语言 → deepThink: truelocate.imagesxpath(仅 Web)
  • 关键操作后等待: aiWaitFor: "条件" + timeout 确保页面就绪
  • aiActContext: 多语言/专业术语/自定义 UI 场景提供背景知识
  • domIncluded: 'visible-only': 数据操作最优性能设置
  • deepLocate: ⚠️ 暂不在 YAML 中使用,等待 Schema 正式支持

完整 AI 指令编写指南、locate 对象用法、aiActContext 示例详见 REFERENCE.md 和 guide/MIDSCENE_YAML_GUIDE.md L2 章节。

平台要点

  • Web: url 需完整协议(https://);反爬场景用 bridgeMode+userAgent+headless: false
  • Android: 需 deviceIdlaunch: "包名" 启动应用;runAdbShell 执行 ADB
  • iOS: 需 wdaPort(默认 8100);launch: "bundleId" 启动;runWdaRequest 发送 WDA 请求;output 导出 JSON;unstableLogContent 日志持久化
  • Computer: launch 仅 string 类型(与 Android/iOS 的 boolean|string 不同);headless+xvfbResolution 用于 CI;支持 aiRightClick(桌面右键菜单)

完整平台配置选项和跨平台差异表详见 REFERENCE.md 的「平台配置详情」和「跨平台差异速查」。

输出前自检清单

生成后逐项核验:

  • aiInput 有 value: - aiInput: "搜索框" ✗ → 添加 value: "关键词"
  • 关键操作后有 aiWaitFor: 点击/导航后等待页面就绪
  • engine + features: Extended 必须同时有 engine: extended + features: [...]
  • while 有 maxIterations: 缺失 = 可能无限循环
  • 敏感信息用 ENV: value: "MyP@ss" ✗ → value: "${ENV:TEST_PASSWORD}"
  • ${...} 用引号包裹: count: ${maxPages} ✗ → count: "${maxPages}"
  • try/catch 缩进对齐: try:catch: 前空格数相同(详见上方 try/catch 章节)
  • AI 指令精确: aiTap: "按钮" ✗ → aiTap: "页面右上角文字为'提交订单'的蓝色按钮"
  • aiWaitFor 用扁平格式: aiWaitFor: "条件" + timeout: N 作为兄弟键
  • 输出是 .yaml 文件: 生成物必须是 .yaml,不是 .js/.ts/.json
  • 无自定义执行代码: 输出不含 require('@midscene/web')ScriptPlayerPuppeteerAgent
  • URL 有协议前缀: url: "baidu.com" ✗ → url: "https://www.baidu.com"
  • 无冗余默认值: 不写 engine: native(默认)、viewportHeight: 960(默认)、headless: false(默认)

安全要点

  1. 敏感信息用 ${ENV:XXX} 引用,CI 用 Secrets 管理 API Key
  2. javascript 步骤避免 fetch()/WebSocket/postMessage 等数据外泄
  3. external_call: http 避免请求内网地址(SSRF)

完整安全指南(含 chromeArgs、cookie、ADB 等)详见 REFERENCE.md「安全详细指南」。

注意事项

  • AI 指令使用自然语言描述,中英文均可;变量名 camelCase,区分大小写
  • 数值参数范围:sleep: 100-30000ms,timeout: 5000-60000ms,maxIterations: 1-1000
  • 复杂需求(>10步)拆分为多 task;避免循环导入
  • --dry-run 仅验证语法/结构,不检测 API Key/网络/Chrome。dry-run 通过 ≠ 执行一定成功

迭代修复流程

当生成的 YAML 执行失败时:

  1. Runner 可自行修复:缩进、缺少 engine 声明、缺少 timeout 等简单错误,Runner Skill 会直接修改并重试
  2. 接收 Runner 错误上下文:当 Runner 发送 [ESCALATE] 格式的错误时,解析错误类型、失败步骤和建议,针对性地重新生成或修改 YAML,完成后输出 [GENERATED] 标记
  3. 推荐流程:生成 → dry-run 验证 → 执行 → 如失败,描述错误让 Generator 修复 → 重新执行(修复时遵守关键规则 #8 语义保护)
  4. 自动修复上限:自动修复最多尝试 3 次。3 次 dry-run 均失败后,将错误展示给用户并请求指导
  5. 求助输出格式:3 次修复均失败后,输出以下格式供用户排查:
    [HELP_NEEDED] ./midscene-output/<file>.yaml
    [ATTEMPTS] 3
    [ERROR_SUMMARY]
      1. <第 1 次错误摘要>
      2. <第 2 次错误摘要>
      3. <第 3 次错误摘要>
    [SUGGESTED_CHECK] <按错误类型自动生成: syntax→检查缩进/引号, structure→检查 engine/features/platform, schema→检查关键字拼写, semantic→检查变量引用和循环配置>
    

协作协议

生成完成后,向用户返回以下结构化信息:

[GENERATED] ./midscene-output/<filename>.yaml
[MODE] native|extended
[FEATURES] loop, logic, ...  (仅 extended 模式)
[CONTEXT] project|external
[NEXT] 项目内: node scripts/midscene-run.js ./midscene-output/<filename>.yaml
       外部项目: npx @midscene/web ./midscene-output/<filename>.yaml --headed
  1. 生成的文件路径: ./midscene-output/<filename>.yaml
  2. 执行模式: native 或 extended
  3. 使用的特性: 仅 extended 模式列出
  4. 项目上下文: project(有 scripts/midscene-run.js)或 external(外部项目)
  5. 建议的下一步命令: 根据上下文给出正确的执行命令
  6. 如果 dry-run 验证失败,自动分析错误并修复 YAML,重新验证
Weekly Installs
20
First Seen
Feb 28, 2026
Installed on
qoder13
gemini-cli13
claude-code13
github-copilot13
codex13
kimi-cli13