/byted-acep-api
通过本地 Python CLI 和 OpenAPI 客户端管理、排查火山云手机资源。适用于查询实例和资源、截图、执行命令、查看任务、检查应用、主机和机房容量、标签、DNS、路由,以及操作已授权的测试云手机实例。
$ npx -y skills add bytedance/agentkit-samples --skill byted-acep-api --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/byted-acep-api
Context preview
The summary Claude sees to decide when to auto-load this skill.
通过本地 Python CLI 和 OpenAPI 客户端管理、排查火山云手机资源。适用于查询实例和资源、截图、执行命令、查看任务、检查应用、主机和机房容量、标签、DNS、路由,以及操作已授权的测试云手机实例。
SKILL.md
byted-acep-api.SKILL.mdname: byted-acep-api
description: 通过本地 Python CLI 和 OpenAPI 客户端管理、排查火山云手机资源。适用于查询实例和资源、截图、执行命令、查看任务、检查应用、主机和机房容量、标签、DNS、路由,以及操作已授权的测试云手机实例。
license: Apache-2.0
version: 1.2.0
火山云手机 Skill
当用户要求查看或操作已配置测试业务下的火山云手机资源时,使用这个 skill。
运行约束
- 不要静态配置 DC。应根据用户请求或当前资源可用性选择 DC。
- 先通过 `list-products` 查业务 ID,再在每条命令里显式传入 `product_id`。
- 创建和订购资源时必须显式选择业务资源类型:云盘存储使用 `100`,本地存储使用 `200`。
- 更新实例镜像或规格时,优先先关机;涉及强制更新时,提醒用户确认可能带来的影响。
- 后付费实例资源组只支持复购。在订购后付费资源前,先确认该业务已经在火山云手机控制台下过单,并且能查到 `OrderId`。
- 截图优先使用直连方式 `get-presigned-edge-url --api-type TakeScreenshot`。
- `batch-screen-shot` 作为回退方式使用;当业务已配置截图存储且用户明确需要该链路时再用。
- 除非用户明确要求,否则不要输出签名 URL。
- 查询已安装应用时优先使用 `get-pod-app-list`;仅在确有需要时才回退到 Android `pm list packages`。
- 除非用户明确要求,否则不要输出 access key、secret key、Authorization header 或完整签名 URL。
- 创建、删除、开关机、重启、重置、安装/卸载、文件传输、应用启动/关闭,以及 Android 命令执行都属于有状态变更操作。除非用户明确要求执行该操作,否则先确认。
命令入口
以下示例默认在当前 skill 包目录下执行:
python3 scripts/vephone_cli.py <command> [args]
这个 skill 已内置 `scripts/vephone_cli.py` 和 `scripts/core/`,可以直接运行,不依赖仓库根目录下的实现。
命令以显式 flags 的形式暴露常用参数。除 `list-products` 等少数查询命令外,大多数业务命令都把 `product_id` 作为第一个位置参数;查看某个命令支持哪些过滤条件时,直接用 `python3 scripts/vephone_cli.py <command> -h`。如果认证配置不在默认位置,可以用 `--config /path/to/config.json` 指定配置文件路径;这个全局参数放在子命令前后都可以。
如果现有命令还没有覆盖到目标 OpenAPI Action,可以使用通用命令:
python3 scripts/vephone_cli.py action-call ListOperableProduct --json-body --param Count=10 --param CloudphoneProductType=5
python3 scripts/vephone_cli.py action-call GetProductResource --product-id <product_id>
python3 scripts/vephone_cli.py action-call SetProxy --json-body --params-json '{"ProductId":"<product_id>","PodIdList":["pod-1"],"ProxyStatus":1,"ProxyConfig":{"version":"v2","type":"socks5","address":"203.0.113.52","port":"12345"}}'`action-call` 的 `--param` 使用 `Key=Value` 形式,`Value` 会优先按 JSON 解析,失败时按字符串处理,所以可以直接传 `true`、`123`、`[1,2]`、`{"k":"v"}`。注意在常见 shell 中如果不对 `Key=Value` 做引用/转义,形如 `--param Foo={"k":"v"}` 的双引号可能会被 shell 吞掉,导致程序实际收到 `Foo={k:v}` 并触发 JSON 解析失败;当 `Value` 含双引号、空格或复杂 JSON 时,请用单引号包裹整个 `Key=Value`(如 `--param 'Foo={"k":"v"}'` / `--param 'PodIdList=["pod-1"]'`),或优先使用 `--params-json`(如 `--params-json '{"Foo":{"k":"v"}}'`)。若希望强制按字符串传入 `true`/`123` 等,请使用 JSON 字符串形式:`--param Name='"123"'`。需要批量传参时用 `--params-json`;如果同时传了同名键,`--param` 会覆盖 `--params-json`。默认按 query string 调用,带 `--json-body` 时改为 JSON body。
实例管理
只读操作:
python3 scripts/vephone_cli.py list-products --count 10
python3 scripts/vephone_cli.py list-pods <product_id> --max-results 10
python3 scripts/vephone_cli.py list-pods <product_id> --configuration-code-list <code1,code2> --dc-list <dc1,dc2> --online-list 1,2 --next-token <token>
python3 scripts/vephone_cli.py detail-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py get-pod-metric <product_id> <pod_id>
python3 scripts/vephone_cli.py get-pod-property <product_id> <pod_id>
有状态变更操作:
python3 scripts/vephone_cli.py create-pod <product_id> --name <name> --template-id <template_id> --configuration-code <code> --dc-id <dc> --resource-type 200 --image-id <image_id> --display-layout-id <layout_id> --phone-template-id <template_id>
python3 scripts/vephone_cli.py update-pod <product_id> <pod_id> --image-id <image_id> --display-layout-id <layout_id> --configuration-code <code>
python3 scripts/vephone_cli.py update-pod <product_id> <pod_id> --image-id <image_id> --force
python3 scripts/vephone_cli.py delete-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py power-on-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py power-off-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py reboot-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py reset-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py create-pod-one-step <product_id> --configuration-code <code> --dc <dc> --app-list <app_id:version_id,...>
python3 scripts/vephone_cli.py update-pod-property <product_id> --pod-id <pod_id> --pod-settings '[{"SettingsName":"locale_language","SettingsType":"global","SettingsValue":"zh-CN","SettingsValueType":"string"}]'
python3 scripts/vephone_cli.py update-pod-resource-apply-num <product_id> --resource-set-id <resource_set_id> --apply-num <num>
python3 scripts/vephone_cli.py backup-pod <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py restore-pod <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py pod-mute <product_id> --pod-id <pod_id> --mute true --display-list <display1,display2>
python3 scripts/vephone_cli.py pod-adb <product_id> --pod-id <pod_id> --enable true
python3 scripts/vephone_cli.py pod-stop <product_id> --pod-id <pod_id>
python3 scripts/vephone_cli.py pod-data-delete <product_id> --pod-id <pod_id> --file-path-list </sdcard,/data/data> --package-list <pkg1,pkg2>
python3 scripts/vephone_cli.py set-proxy <product_id> --pod-id-list <pod_id1,pod_id2> --proxy-status 1 --proxy-config '{"version":"v2","type":"socks5","address":"203.0.113.52","port":"12345"}'
python3 scripts/vephone_cli.py get-proxy <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py backup-data <product_id> --pod-id-list <pod_id1,pod_id2> --backup-all false --include-path-list </data/app,/data/data> --exclude-path-list </data/anr>
python3 scripts/vephone_cli.py restore-data <product_id> --backup-data-id <backup_data_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py list-backup-data <product_id> --status completed --max-results 20
python3 scripts/vephone_cli.py delete-backup-data <product_id> --backup-data-id-list <backup_data_id1,backup_data_id2>`list-pods` 支持通过 `--max-results` 和 `--next-token` 分页。`create-pod` 可以用 `--image-id` 指定初始镜像。`delete-pod`、`reset-pod`、`update-pod --force` 这类操作有明显影响,执行前先确认。像 `--app-list`、`--pod-settings`、`--specify-host-list`、`--proxy-config` 这类结构化参数,直接看对应命令的 `-h` 获取格式说明。
资源、DC、主机与镜像查询
python3 scripts/vephone_cli.py list-dcs <product_id>
python3 scripts/vephone_cli.py get-dc-bandwidth-daily-peak <product_id> <dc_id_list>
python3 sc
Read more
name: byted-acep-api description: 通过本地 Python CLI 和 OpenAPI 客户端管理、排查火山云手机资源。适用于查询实例和资源、截图、执行命令、查看任务、检查应用、主机和机房容量、标签、DNS、路由,以及操作已授权的测试云手机实例。 license: Apache-2.0 version: 1.2.0
火山云手机 Skill
当用户要求查看或操作已配置测试业务下的火山云手机资源时,使用这个 skill。
运行约束
- 不要静态配置 DC。应根据用户请求或当前资源可用性选择 DC。
- 先通过 `list-products` 查业务 ID,再在每条命令里显式传入 `product_id`。
- 创建和订购资源时必须显式选择业务资源类型:云盘存储使用 `100`,本地存储使用 `200`。
- 更新实例镜像或规格时,优先先关机;涉及强制更新时,提醒用户确认可能带来的影响。
- 后付费实例资源组只支持复购。在订购后付费资源前,先确认该业务已经在火山云手机控制台下过单,并且能查到 `OrderId`。
- 截图优先使用直连方式 `get-presigned-edge-url --api-type TakeScreenshot`。
- `batch-screen-shot` 作为回退方式使用;当业务已配置截图存储且用户明确需要该链路时再用。
- 除非用户明确要求,否则不要输出签名 URL。
- 查询已安装应用时优先使用 `get-pod-app-list`;仅在确有需要时才回退到 Android `pm list packages`。
- 除非用户明确要求,否则不要输出 access key、secret key、Authorization header 或完整签名 URL。
- 创建、删除、开关机、重启、重置、安装/卸载、文件传输、应用启动/关闭,以及 Android 命令执行都属于有状态变更操作。除非用户明确要求执行该操作,否则先确认。
命令入口
以下示例默认在当前 skill 包目录下执行:
python3 scripts/vephone_cli.py <command> [args]
这个 skill 已内置 `scripts/vephone_cli.py` 和 `scripts/core/`,可以直接运行,不依赖仓库根目录下的实现。
命令以显式 flags 的形式暴露常用参数。除 `list-products` 等少数查询命令外,大多数业务命令都把 `product_id` 作为第一个位置参数;查看某个命令支持哪些过滤条件时,直接用 `python3 scripts/vephone_cli.py <command> -h`。如果认证配置不在默认位置,可以用 `--config /path/to/config.json` 指定配置文件路径;这个全局参数放在子命令前后都可以。
如果现有命令还没有覆盖到目标 OpenAPI Action,可以使用通用命令:
python3 scripts/vephone_cli.py action-call ListOperableProduct --json-body --param Count=10 --param CloudphoneProductType=5
python3 scripts/vephone_cli.py action-call GetProductResource --product-id <product_id>
python3 scripts/vephone_cli.py action-call SetProxy --json-body --params-json '{"ProductId":"<product_id>","PodIdList":["pod-1"],"ProxyStatus":1,"ProxyConfig":{"version":"v2","type":"socks5","address":"203.0.113.52","port":"12345"}}'`action-call` 的 `--param` 使用 `Key=Value` 形式,`Value` 会优先按 JSON 解析,失败时按字符串处理,所以可以直接传 `true`、`123`、`[1,2]`、`{"k":"v"}`。注意在常见 shell 中如果不对 `Key=Value` 做引用/转义,形如 `--param Foo={"k":"v"}` 的双引号可能会被 shell 吞掉,导致程序实际收到 `Foo={k:v}` 并触发 JSON 解析失败;当 `Value` 含双引号、空格或复杂 JSON 时,请用单引号包裹整个 `Key=Value`(如 `--param 'Foo={"k":"v"}'` / `--param 'PodIdList=["pod-1"]'`),或优先使用 `--params-json`(如 `--params-json '{"Foo":{"k":"v"}}'`)。若希望强制按字符串传入 `true`/`123` 等,请使用 JSON 字符串形式:`--param Name='"123"'`。需要批量传参时用 `--params-json`;如果同时传了同名键,`--param` 会覆盖 `--params-json`。默认按 query string 调用,带 `--json-body` 时改为 JSON body。
实例管理
只读操作:
python3 scripts/vephone_cli.py list-products --count 10 python3 scripts/vephone_cli.py list-pods <product_id> --max-results 10 python3 scripts/vephone_cli.py list-pods <product_id> --configuration-code-list <code1,code2> --dc-list <dc1,dc2> --online-list 1,2 --next-token <token> python3 scripts/vephone_cli.py detail-pod <product_id> <pod_id> python3 scripts/vephone_cli.py get-pod-metric <product_id> <pod_id> python3 scripts/vephone_cli.py get-pod-property <product_id> <pod_id>
有状态变更操作:
python3 scripts/vephone_cli.py create-pod <product_id> --name <name> --template-id <template_id> --configuration-code <code> --dc-id <dc> --resource-type 200 --image-id <image_id> --display-layout-id <layout_id> --phone-template-id <template_id>
python3 scripts/vephone_cli.py update-pod <product_id> <pod_id> --image-id <image_id> --display-layout-id <layout_id> --configuration-code <code>
python3 scripts/vephone_cli.py update-pod <product_id> <pod_id> --image-id <image_id> --force
python3 scripts/vephone_cli.py delete-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py power-on-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py power-off-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py reboot-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py reset-pod <product_id> <pod_id>
python3 scripts/vephone_cli.py create-pod-one-step <product_id> --configuration-code <code> --dc <dc> --app-list <app_id:version_id,...>
python3 scripts/vephone_cli.py update-pod-property <product_id> --pod-id <pod_id> --pod-settings '[{"SettingsName":"locale_language","SettingsType":"global","SettingsValue":"zh-CN","SettingsValueType":"string"}]'
python3 scripts/vephone_cli.py update-pod-resource-apply-num <product_id> --resource-set-id <resource_set_id> --apply-num <num>
python3 scripts/vephone_cli.py backup-pod <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py restore-pod <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py pod-mute <product_id> --pod-id <pod_id> --mute true --display-list <display1,display2>
python3 scripts/vephone_cli.py pod-adb <product_id> --pod-id <pod_id> --enable true
python3 scripts/vephone_cli.py pod-stop <product_id> --pod-id <pod_id>
python3 scripts/vephone_cli.py pod-data-delete <product_id> --pod-id <pod_id> --file-path-list </sdcard,/data/data> --package-list <pkg1,pkg2>
python3 scripts/vephone_cli.py set-proxy <product_id> --pod-id-list <pod_id1,pod_id2> --proxy-status 1 --proxy-config '{"version":"v2","type":"socks5","address":"203.0.113.52","port":"12345"}'
python3 scripts/vephone_cli.py get-proxy <product_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py backup-data <product_id> --pod-id-list <pod_id1,pod_id2> --backup-all false --include-path-list </data/app,/data/data> --exclude-path-list </data/anr>
python3 scripts/vephone_cli.py restore-data <product_id> --backup-data-id <backup_data_id> --pod-id-list <pod_id1,pod_id2>
python3 scripts/vephone_cli.py list-backup-data <product_id> --status completed --max-results 20
python3 scripts/vephone_cli.py delete-backup-data <product_id> --backup-data-id-list <backup_data_id1,backup_data_id2>`list-pods` 支持通过 `--max-results` 和 `--next-token` 分页。`create-pod` 可以用 `--image-id` 指定初始镜像。`delete-pod`、`reset-pod`、`update-pod --force` 这类操作有明显影响,执行前先确认。像 `--app-list`、`--pod-settings`、`--specify-host-list`、`--proxy-config` 这类结构化参数,直接看对应命令的 `-h` 获取格式说明。
资源、DC、主机与镜像查询
python3 scripts/vephone_cli.py list-dcs <product_id> python3 scripts/vephone_cli.py get-dc-bandwidth-daily-peak <product_id> <dc_id_list> python3 sc
欢迎来到 AgentKit 代码工坊(Samples)仓库! AgentKit 是火山引擎推出的企业级 AI Agent 开发平台,为开发者提供完整的 Agent 构建、部署和运维解决方案。平台通过标准化的开发工具链和云原生基础设施,显著降低复杂智能体应用的开发部署门槛。 本代码库包含了一系列示例和教程,帮助您理解、实现和集成 AgentKit 的各项功能到您的应用中。
Other skills on agentkit-samples.
- /code-optimization
Optimize code performance through iterative improvements (max 2 rounds). Benchmark execution time and memory usage, compare against baseline implementations, and generate detailed optimization reports. Supports C++, Python, Java, Rust, and other languages.
Open skill - /image-video-gen
根据文字描述生成视频,一个生成图片和视频的工作流技能。依赖 skills: byted-web-search, image-generate, video-generate。注意:此 workflow 没有执行脚本,只是一个描述性的文档。
Open skill - /skills-management
Manage AgentKit skills, SkillHub/skillhub, skill centers, and skill spaces. Use this skill whenever the user has a management intent for AgentKit skills, skill中心, skill 空间, skill space, or skill hub, including listing, inspecting, downloading, fetching, uploading, publishing,
Open skill - /tos-file-access
Upload files or directories to TOS-compatible object storage for Volcano Engine or BytePlus and download files from URLs. Use this skill when (1) Upload Agent-generated files or directories for sharing, (2) Download files from URLs before Agent processing.
Open skill - /veadk-go-skills
根据用户的功能需求,完成与 VeADK-Go 相关的功能; 包括:直接根据需求生成 Agent;将Enio Agent转换为VeADK-Go Agent。
Open skill - /veadk-skills
根据用户的功能需求,完成与 VeADK 相关的功能。
Open skill

