Token导航 LogoToken导航

Agent Skill · 开发

web-autopilot(网络自动驾驶仪)

web-autopilot 用于补充开发相关能力,适合在 OpenClaw 中需要让 Agent 承接开发相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

web-autopilot 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为操作浏览器;许可证为 MIT-0,第三方扫描有提醒项,按安装量在开发类的 21,746 个 Skill 里排第 3,816。

总安装 10,057周安装 432GitHub Stars 公开资料未说明下载 3,525核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.1.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:web-autopilot(网络自动驾驶仪)
来源仓库:https://github.com/kckyan/web-autopilot
安装命令:
openclaw skills install web-autopilot
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install web-autopilot

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

记录一次Web操作并转化为可重复使用的自动化工具。适用于在任何Web应用上执行重复性任务如报告提交。通过Playwright实现浏览器级自动化流程。需授权访问目标网站并处理登录态保持问题。适用宿主包括 OpenClaw,接入前应确认版本、权限和运行环境要求。

web-autopilot 属于开发类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install web-autopilot;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要操作浏览器,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

web-autopilot 怎么安装?

在终端执行 openclaw skills install web-autopilot。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

web-autopilot 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

web-autopilot 需要什么权限?

权限级别是操作浏览器。该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

web-autopilot 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

web-autopilot 用的人多吗?

公开数据是累计安装 10,057 次,近一周安装 432 次,下载 3,525 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

web-autopilot 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
web-autopilot

网络自动驾驶仪 · 本页

10,057—操作浏览器MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
web-autopilot
description
>

Web Autopilot

Record once in any web app, let AI handle it from now on.

Overview

Record → Analyze → Confirm Fields → Generate → Test → Register as Tool

🎬 Record         User performs the workflow once in a real browser (after login)
🔍 Analyze        AI analyzes network traffic, classifies fixed/dynamic/session fields
✅ Confirm Fields  [Required for submit tasks] User confirms field classifications
📝 Generate       Generates reusable TS script + field mapping
🧪 Test           Iterative test loop, up to 5 rounds of auto-fix
🔧 Register       Register as an OpenClaw tool for direct invocation

Task Types

📊 Query / Export

Data extraction and report generation. Scripts run and output results automatically — no manual intervention needed. Examples: pull sales reports, extract project data, export revenue details

📝 Submit

Submit forms such as expense reports, travel requests, payment requests, etc. Each run requires dynamic parameters. Examples: submit travel request, submit expense report, submit payment request

The key challenge for submit tasks: correctly distinguishing which fields are fixed vs. which change every time, and confirming with the user before generating the script.

Skill Directory

~/.openclaw/rpa/
├── recordings/<task-name>/recording.json
├── tasks/<task-name>/
│   ├── task-meta.json
│   ├── run.ts
│   └── field-mapping.json
└── sessions/<domain>.session.json

Skill scripts: /opt/homebrew/lib/node_modules/openclaw/skills/web-autopilot/scripts/


Commands

1. record — Record a workflow

Ask user: task name, login URL or app URL.

cd /opt/homebrew/lib/node_modules/openclaw/skills/web-autopilot

# Option A: Start from login page (SSO, OAuth, username/password, etc.)
npx ts-node scripts/record.ts --name "my-task" --sso-url "https://login.example.com"

# Option B: Start directly from app (if already logged in or no login needed)
npx ts-node scripts/record.ts --name "my-task" --app-url "https://app.example.com"

Run in PTY mode (pty: true, background: true). User operates browser, types "done" when finished.

Note: --sso-url is a legacy parameter name; it works for any login URL (SSO, OAuth, plain login page, etc.).

2. analyze — Analyze the recording (AI does this)

Read recording.json, separate login traffic from business traffic, identify core APIs.

Key steps:

  1. Read ~/.openclaw/rpa/recordings/<task>/summary.txt for overview
  2. Parse recording.json to extract all API calls to app domain
  3. For each POST/PUT/PATCH with meaningful body:

- Classify fields: FIXED / DYNAMIC / SESSION / RELATIONAL - Detect protocol: rest-json / graphql / form-urlencoded / multipart

  1. Map the complete API sequence (prerequisites → main operation → follow-ups)
  2. Analyze ALL response fields and create field-mapping.json with human-readable labels
  3. Create task-meta.json
  4. [Submit tasks] After analysis, present the field classification confirmation table to the user (see below)
Field Classification
TypeMeaningHandling
FIXEDSame value every submission (approval flow ID, company entity, currency, expense type enums…)Hardcoded in script
DYNAMICDifferent each submission (amount, date, reason, attachment path…)Becomes CLI --parameter
SESSIONAuth tokens/cookies, auto-managedInjected by session.ts
RELATIONALRequires a lookup from another API to get the ID (e.g., project ID, person ID…)Auto-queried in script, or exposed as DYNAMIC parameter
Field Analysis Rules (MANDATORY)

Every field must have a human-readable label. Including system-generated field names.

Inference priority:

  1. Data value type: timestamp (10^12-13) / monetary amount (contextual) / enum (fixed values) / URL / JSON object
  2. Field name pattern: *time/*date/*_at → datetime | *amount/*price/*cost → monetary | *id/*_key → ID | *status/*state → status
  3. Business context: infer from related fields, API endpoint names
  4. If uncertain → annotate as (unknown meaning: sample value)
Field Confirmation Step (MANDATORY for Submit tasks)

After analysis, you must present the following confirmation table to the user and wait for confirmation before generating the script:

📋 Field Classification Confirmation — <task name>

✅ FIXED (hardcoded):
  - approvalFlowId: "xxx"  → Approval Flow ID
  - companyId: "yyy"       → Company Entity
  - currency: "CNY"        → Currency

🔄 DYNAMIC (passed as parameters each run):
  - amount          → Amount (example: --amount 1500)
  - startDate       → Start Date (example: --startDate 2026-03-10)
  - endDate         → End Date (example: --endDate 2026-03-12)
  - destination     → Destination (example: --destination "New York")
  - reason          → Reason (example: --reason "Client visit")
  - attachments     → Attachment path (example: --attachments ~/Desktop/receipt.jpg)

🔗 RELATIONAL (auto-queried):
  - projectId       → Project ID (auto-looked up by project name, --projectName "Project X")

❓ Needs confirmation (AI uncertain):
  - field_abc123    → Unknown meaning (recorded value: "0"), suggest: FIXED("0") or DYNAMIC?

Please confirm the above classification or indicate any fields that need adjustment.

Only proceed to the Generate step after user confirmation.

CSV Export Rules (MANDATORY)
  • Keep ALL fields, including hidden fields, dynamic fields, system fields — never crop
  • Field order: preserve original order from data, never sort (sorting causes column misalignment)
  • JSON/object fields → convert to JSON string for storage
  • Use csv.writer + proper quoting to handle JSON fields containing commas

3. generate — Generate the task script

Pre-generation checklist (Query/Export tasks):

  • ✅ All fields are in field-mapping.json
  • ✅ All fields have human-readable labels
  • ✅ CSV export uses field-mapping.json for column headers
  • ✅ Field order preserves original order

Pre-generation checklist (Submit tasks):

  • ✅ User has confirmed field classification (FIXED / DYNAMIC / RELATIONAL)
  • ✅ All DYNAMIC fields converted to CLI parameters (with type, example value, required/optional)
  • ✅ RELATIONAL fields have auto-query logic or corresponding parameters
  • ✅ Script has --dry-run mode (prints request body without submitting, for testing)
  • ✅ Script outputs submission result (success/failure + document number/link)

Submit task invocation example (written to task-meta.json usage field after generation):

# Preview (no actual submission)
npx ts-node run.ts --dry-run --amount 1500 --startDate 2026-03-10 ...

# Submit for real
npx ts-node run.ts --amount 1500 --startDate 2026-03-10 --destination "New York" --reason "Client visit"

4. test — Iterative test loop (max 5 rounds)

Run script → check output → if error: diagnose → fix → repeat.

ErrorCauseFix
401/403Session expired / wrong authRe-check auth headers, re-login
400Wrong field name/typeCompare with recording
404Wrong URLCheck URL exactly
JSON parse errorResponse is HTMLLog resp.raw

5. run — Execute a registered task

npx ts-node ~/.openclaw/rpa/tasks/<task>/run.ts --param1 value1

6. list — List all tasks

npx ts-node /opt/homebrew/lib/node_modules/openclaw/skills/web-autopilot/scripts/run-task.ts --list

Session & Credential Management

Session (Cookie/Token Storage)

Sessions are cookie-based and work with any login method:

  • SSO (OIDC, SAML, CAS, etc.)
  • OAuth / OAuth2
  • Username + password forms
  • Any browser-based authentication

Session files: ~/.openclaw/rpa/sessions/<domain>.session.json

Credentials (Encrypted Storage)

Login credentials are stored encrypted (AES-256-GCM) in a separate file — never stored in plaintext.

File: ~/.openclaw/rpa/credentials.enc

  • Encryption key = machine identity (hostname+username) + optional RPA_CREDENTIAL_KEY env var
  • File permissions: 0600 (owner only)
  • Supports automatic extraction and encrypted storage from recording.json
# Manage credentials
npx ts-node scripts/utils/credentials.ts list                    # List saved domains + usernames
npx ts-node scripts/utils/credentials.ts save <domain> <user> <pass>  # Save manually
npx ts-node scripts/utils/credentials.ts delete <domain>         # Delete
npx ts-node scripts/utils/credentials.ts extract <recording.json> # Extract from recording

Auto-Login Flow

When a session expires, the auto-login flow kicks in:

1. Read encrypted credentials for the target domain from credentials.enc
2. Select login strategy based on loginFlow.type
3. Launch browser (headless if credentials exist, headed if not)
4. Execute login steps → follow redirects → reach target app
5. Capture cookies/tokens → save new session
6. If all else fails → open headed browser for manual login (fallback)
Login Flow Types

When generating scripts, you must identify the login type from the recording and write it to the loginFlow field in task-meta.json:

typeScenarioAuto-login methodExample
apiSSO/app provides a REST login endpoint, single POST completes authCall API directly → follow redirectsEnterprise SSO (POST /api/sso/login)
formSingle-page login form (username + password on same page)Fill form fields → click submitCommon admin dashboards
multi-stepMulti-step login (email → next page → password → next page → possible 2FA)Execute step sequenceGoogle, Microsoft, Okta
manual-onlyHas CAPTCHA/2FA/risk control, cannot be fully automatedOpen headed browser directlyBanking systems, strong CAPTCHA sites
loginFlow Schema (task-meta.json)
{
  "loginFlow": {
    "type": "api",              // api | form | multi-step | manual-only
    "loginUrl": "https://sso.example.com",
    "loginDomain": "sso.example.com",
    "appDomain": "app.example.com",

    // ── type=api specific fields ──
    "loginApiPath": "/api/sso/login",
    "authType": "passwordAuth",       // Optional, auth type field in API body
    "appId": "1234567890",            // Optional, SSO portal app ID (for forward redirect)
    "appForwardUrl": "...",           // Optional, direct redirect URL (alternative to appId)

    // ── type=form specific fields ──
    "usernameSelector": "input[name='email']",    // Optional, custom selectors
    "passwordSelector": "input[type='password']",
    "submitSelector": "button[type='submit']",

    // ── type=multi-step specific fields ──
    "steps": [
      { "action": "fill", "selector": "input[type=email]", "field": "username" },
      { "action": "click", "selector": "#identifierNext" },
      { "action": "wait", "selector": "input[type=password]", "timeoutMs": 5000 },
      { "action": "fill", "selector": "input[type=password]", "field": "password" },
      { "action": "click", "selector": "#passwordNext" }
    ],

    // ── Common fields ──
    "successIndicator": "url_contains:app.example.com",  // Condition to detect successful login
    "postLoginWaitMs": 3000          // Wait time after login success (for cookies to settle)
  }
}
Login Identification Guide for Analyze Step (MANDATORY)

During the analyze step, you must complete the following login analysis:

  1. Extract credentials → credentials.ts extract <recording.json> (auto-detects username/password in POST body)
  2. Identify login type → Inspect the login flow in the recording:

- Has a clear POST login/auth API → type = api - Has form fill actions (password type input) on the same page → type = form - Has multiple form fill actions with page navigations in between → type = multi-step - Has CAPTCHA image requests or reCAPTCHA scripts → type = manual-only

  1. Document the SSO → app redirect path:

- Does it use an appId forward? - Does it use a redirect_uri callback? - Where is the token — in URL query / response body / cookie?

  1. Write loginFlow → Write all fields to task-meta.json
  2. Sanitize → Replace passwords in recording.json with [REDACTED]

⚠️ If credentials.ts extract cannot extract credentials (e.g., Google multi-step login), prompt the user to save credentials manually:

npx ts-node scripts/utils/credentials.ts save accounts.google.com user@gmail.com 'password'
Login Code Templates for Script Generation

Choose the auto-login implementation based on loginFlow.type:

type=api (REST API login):

// API login → follow redirects → navigate to app
const resp = await page.evaluate(async (p) => {
  const r = await fetch(p.url, { method: 'POST', headers: {'Content-Type':'application/json'},
    body: JSON.stringify(p.body), credentials: 'include' });
  return { status: r.status, ok: r.ok };
}, { url: loginApiUrl, body: { authType, credential: { username, password } } });

type=form:

await page.fill(loginFlow.usernameSelector || 'input[name="username"]', cred.username);
await page.fill(loginFlow.passwordSelector || 'input[type="password"]', cred.password);
await page.click(loginFlow.submitSelector || 'button[type="submit"]');

type=multi-step:

for (const step of loginFlow.steps) {
  if (step.action === 'fill') {
    const value = step.field === 'username' ? cred.username : cred.password;
    await page.fill(step.selector, value);
  } else if (step.action === 'click') {
    await page.click(step.selector);
  } else if (step.action === 'wait') {
    await page.waitForSelector(step.selector, { timeout: step.timeoutMs || 10000 });
  }
}

type=manual-only:

// Open headed browser, wait for user to complete login manually
const browser = await pw.chromium.launch({ headless: false });
// ... wait for successIndicator

task-meta.json loginFlow example (SSO → enterprise app):

{
  "loginFlow": {
    "type": "api",
    "loginUrl": "https://sso.example.com",
    "loginDomain": "sso.example.com",
    "loginApiPath": "/api/sso/login",
    "authType": "passwordAuth",
    "appId": "1234567890",
    "appDomain": "app.example.com",
    "successIndicator": "url_contains:app.example.com"
  }
}

⚠️ Security Rules (MANDATORY)

  1. Passwords in recording.json must be sanitized immediately after analysis (replace with [REDACTED])
  2. credentials.enc is an encrypted binary file — do not attempt to read or edit directly
  3. credentials.enc and sessions/ directory must never be committed to version control or shared
  4. Skill packages (.skill) must not contain any credentials, sessions, or recording data
  5. Generated task scripts (run.ts) must never hardcode any passwords

Known Issues & Lessons Learned

🔐 Login flow must match app — don't assume one-size-fits-all

  • Current implemented scripts use type=api mode (enterprise SSO → business app)
  • Each new app recording must re-identify the login type — do not reuse login logic from old scripts
  • Google/Microsoft multi-step logins require type=multi-step + steps sequence
  • Sites with CAPTCHA/2FA can only use type=manual-only
  • Inlining login logic into run.ts (rather than importing external login.ts) is more stable due to Node ESM/CJS compatibility issues

⚠️ Node v25 ESM compatibility

  • Node v25 defaults to ESM, require() is unavailable
  • Solution: place tsconfig.json in the task directory to force "module": "commonjs"
  • Dependencies like Playwright need full-path require: require('/opt/.../node_modules/playwright')
  • Cross-directory .ts imports under ts-node are unstable — recommend inlining critical logic into run.ts

⚠️ Multi-tab traffic capture (fixed)

Some login flows or apps open new tabs. Recorder uses context.on('request/response') to capture ALL tabs.

📋 CSV must include ALL fields with human-readable labels

  • Never crop fields — include everything from the API response
  • System-generated field names (e.g. field_*, attr_*, custom_*) must be analyzed from sample data
  • Create field-mapping.json for every task
  • Field order: preserve original order from data, never sort
  • Use proper CSV quoting to handle JSON fields with commas

📝 Submit tasks: always confirm field classification before generating

  • Never skip the field confirmation step — wrong FIXED/DYNAMIC split breaks every future submission
  • Fields that look fixed (e.g. a hardcoded project ID) might actually need to be dynamic in real use
  • Always include --dry-run in generated scripts so users can verify the request body before committing
  • RELATIONAL fields (e.g. approver ID looked up by name) should be auto-resolved in script, exposed as human-readable params

File Locations

ItemPath
Recorderscripts/record.ts
Task runnerscripts/run-task.ts
Session utilityscripts/utils/session.ts
Login helperscripts/utils/login.ts
Recordings~/.openclaw/rpa/recordings/<task>/
Generated tasks~/.openclaw/rpa/tasks/<task>/
Sessions~/.openclaw/rpa/sessions/<domain>.session.json

平台分布

OpenClaw

92.57%
按下载量换算3,263

安全审计

VirusTotal

可疑

ClawScan

可疑

Static analysis

未展示

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills