Clawhub Publish 146198
基于 Rust 的无头浏览器,支持网页导航、表单填写与数据提取。
通过 OpenClaw 管理 OpenMarlin 账户、执行任务并处理账单流程。
openclaw skills install @emcraig51/web-research-agent命令、参数、文件名以原文为准
当用户明确要求在 OpenClaw 内使用 OpenMarlin 时,请使用此技能。
该技能涵盖四项主要任务:
/v1/executions 发起原生执行请求/v1/tasks 处理异步长运行任务402 Payment Required 错误恢复在以下请求中激活该技能:
路由请求时应遵循:
/v1/executions/v1/tasks/v1/tasks,除非用户明确要求同步执行device 认证流程completed 或 expiredOPENMARLIN_SERVER_URL 视为唯一可信的 API 来源,且必须为裸域名,不带 /v1https://openmarlin.ai 作为 OPENMARLIN_SERVER_URL;这是面向浏览器的网站。应使用 https://api.openmarlin.ai,除非用户指向自定义部署handoff.authorization_url,不得本地重建 WorkOS 或浏览器 URLOPENMARLIN_PLATFORM_API_KEY 视为调试用的临时覆盖项,非推荐的长期存储路径该技能以目录形式分发,非独立 Markdown 文件。若手动安装,请复制 SKILL.md 及同级的 scripts/ 目录。
所需文件:
SKILL.mdscripts/registration_session.pyscripts/platform_request.pyscripts/billing.pyscripts/openclaw_billing_state.pyscripts/openclaw_platform_auth.pyscripts/openclaw_skill_config.py运行时要求:
python3 必须在 PATH 中可用OPENMARLIN_SERVER_URL 默认值为 https://api.openmarlin.aiOPENMARLIN_SERVER_URL 必须为裸域名,不能以 /v1 结尾对新用户而言,最安全快捷的路径如下:
OPENMARLIN_SERVER_URLpython3 scripts/registration_session.py create 启动注册流程watch 命令轮询注册会话,直到状态变为 completedbootstrap --store 自动化并存储首个工作区 API 密钥python3 scripts/platform_request.py models 查看可用模型设置完成后,最常见的后续操作包括:
402 Payment Required 响应中恢复注册流程基于以下接口:
POST /v1/registration/sessionsGET /v1/registration/sessions/:sessionIdPOST /v1/registration/sessions/:sessionId/api-keys注册会话状态:
pending_external_authcompletedexpired会话完成后,OpenClaw 应继续依赖机器可读的注册会话状态,而非浏览器回调输出。
原生执行使用:
POST /v1/executions执行请求可包含:
instructionkind = agent_runstreamprovider_idlabelsagent_idsession_keytimeout_msmodelmetadata执行路由规则:
model 和 provider_id,由服务器自行决定两者model 时,使用完整的精确模型引用,由服务器选择适配的提供方provider_id 时,由服务器在该提供方下选择符合条件的模型model 和 provider_id 时,服务器强制执行双重约束若提供 model,必须是完整的精确引用,例如 openai-codex/gpt-5.4
若同时提供 provider_id 和 model,请先通过 python3 scripts/platform_request.py models 确认该提供方是否公开了相同的模型引用。
长运行任务使用:
POST /v1/tasksGET /v1/tasks/:taskId任务请求的结构与 /v1/executions 不同。
任务请求使用:
kind = videoinput.prompt(必需)input.media_urls(可选)input.media_ids(可选)input.duration_ms(可选)input.aspect_ratio(可选)metadata(可选)任务请求不接受:
instructionprovider_idlabelsmodelstream建议在以下情况使用 /v1/tasks:
artifact_url/v1/tasks 时,默认采用“等待并监控”行为,而非返回 task_id 后立即停止任务状态:
queued:已排队running:正在运行succeeded:成功failed:失败计费与恢复流程使用以下接口:
GET /v1/balanceGET /v1/usage-eventsGET /v1/ledgerPOST /v1/topup/sessionsGET /v1/topup/sessions/:sessionId结构化余额不足错误可能返回:
error_code = insufficient_balancemessageworkspace_idcurrent_balance.amount / unitrequired_balance.amount / unit将此 402 响应视为工作流输入,而非通用传输失败。
创建注册会话:
python3 scripts/registration_session.py create当部署需要回调模式时,创建回调式会话:
python3 scripts/registration_session.py create --auth-flow workos_callback检查或轮询注册会话状态:
python3 scripts/registration_session.py status --session-id <session-id>
python3 scripts/registration_session.py watch --session-id <session-id>引导并存储首个 API 密钥:
python3 scripts/registration_session.py bootstrap \
--session-id <session-id> \
--store列出当前可用的精确模型:
python3 scripts/platform_request.py models由服务器自动选择模型和提供商:
python3 scripts/platform_request.py executions \
--body-json '{"instruction":"say hello"}'使用精确模型引用,并启用自动提供商路由:
python3 scripts/platform_request.py executions \
--body-json '{"instruction":"say hello","model":"openai-codex/gpt-5.4"}'使用显式提供商覆盖:
python3 scripts/platform_request.py executions \
--provider node-a \
--body-json '{"instruction":"say hello"}'发送一次预演请求:
python3 scripts/platform_request.py executions \
--dry-run \
--server-url https://your-server.example.com \
--api-key claw_wsk_placeholder \
--body-json '{"instruction":"say hello"}'使用流式执行:
python3 scripts/platform_request.py executions \
--body-json '{"instruction":"say hello","stream":true}'提交一个长时间运行的任务:
python3 scripts/platform_request.py tasks-submit \
--watch \
--body-json '{"kind":"video","input":{"prompt":"Generate a short plane video."}}'获取当前任务状态:
python3 scripts/platform_request.py tasks-status --task-id <task-id>轮询直到任务成功或失败:
python3 scripts/platform_request.py tasks-watch --task-id <task-id>解释结构化的 402 响应:
python3 scripts/billing.py explain-402 \
--response-json '{"error_code":"insufficient_balance","message":"Workspace balance is insufficient for this request.","workspace_id":"ws_123","current_balance":{"amount":0,"unit":"credits"},"required_balance":{"amount":1,"unit":"credits"}}'根据 402 差额创建充值会话:
python3 scripts/billing.py create-topup \
--response-json '{"error_code":"insufficient_balance","message":"Workspace balance is insufficient for this request.","workspace_id":"ws_123","current_balance":{"amount":0,"unit":"credits"},"required_balance":{"amount":1,"unit":"credits"}}'检查充值进度:
python3 scripts/billing.py status --session-id <topup-session-id>
python3 scripts/billing.py watch --session-id <topup-session-id>查看当前余额:
python3 scripts/billing.py balance --workspace-id <workspace-id>查看最近的计费活动:
python3 scripts/billing.py activity获取调用方的推荐码、邀请链接和归属信息摘要:
python3 scripts/billing.py referral-link将常见的路由错误翻译为通俗语言:
provider_unavailable:所选提供商当前未连接provider_label_mismatch:所选提供商不满足请求的路由提示execution_provider_not_found:没有符合条件的执行提供商匹配当前请求execution_provider_ambiguous:多个执行提供商匹配,服务器需要更窄的标签或显式提供商覆盖execution_kind_not_available:所选提供商不支持请求的执行类型task_executor_not_found:没有配置的任务执行器匹配当前长任务请求invalid_routing_labels:标签格式错误遇到此类情况时:
针对 /v1/tasks 特别说明:
kind = video 和 input 数据结构是否正确对于长时间运行的任务:
tasks-submit --watch,而非让用户手动调用 tasks-watchtasks-submit --watch 作为完成路径task_id 即可确认接收succeeded 时,展示最终的 output 和 metadataGET /v1/balance 请求获取数据在引导充值流程时:
pending_payment、credit_applied 和 payment_failed 之间的区别checkout_url 是唯一必需的外部计费操作API 密钥初始化返回的 secret 是 OpenClaw 的持久化平台凭据。
--store 选项时,将密钥存储到默认的 OpenClaw 认证配置文件中openmarlin.ai 被浏览器或 Cloudflare 阻挡,请确认助手目标地址为 https://api.openmarlin.ai 后再建议手动浏览器操作已收录 1 个 Skill