[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PZ1CKCGCSB8MG382NPE3MW":3,"skill-same:01M6PZ1CKCGCSB8MG382NPE3MW":81},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":33,"commitSha":62,"skillDirectory":63,"forksCount":13,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":66,"install":67,"resources":80},"01M6PZ1CKCGCSB8MG382NPE3MW","skyvern-browser-automation",null,"AI-powered browser automation — navigate sites, fill forms, extract structured data, log in with stored credentials, and build reusable workflows.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fskyvern-browser-automation\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"browser automation","automation","skyvern","browser","skyvern browser automation","navigate","MCP","log in","form-filling","forms","main","community","log","scraping","workflow-automation","credentials","official","workflows","workflow","safe","2026-11-10 10:12:30",false,"---\nname: skyvern-browser-automation\ndescription: \"AI-powered browser automation — navigate sites, fill forms, extract structured data, log in with stored credentials, and build reusable workflows.\"\ncategory: browser-automation\nrisk: safe\nsource: community\nsource_repo: Skyvern-AI\u002Fskyvern\nsource_type: official\ndate_added: \"2026-04-23\"\nauthor: mark1ian\ntags: [browser-automation, mcp, web-scraping, form-filling, ai-agents, workflow-automation]\ntools: [claude, cursor, gemini, codex]\nlicense: \"AGPL-3.0\"\nlicense_source: \"https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002FLICENSE\"\n---\n\n# Skyvern Browser Automation -- CLI Judgment Procedure\n\nSkyvern uses AI to navigate and interact with websites. Every command below is a runnable `skyvern \u003Ccommand>` invocation.\n\n## When to Use This Skill\n\n- Use when you need AI-assisted browser automation for navigation, extraction, form filling, login flows, or reusable website workflows.\n- Use when deterministic selectors are unavailable and Skyvern's visual\u002Fa11y reasoning can identify page controls.\n- Use when a one-off browser task should become a repeatable workflow with run history and verification.\n\n## Step 1: Classify Your Task (ALWAYS do this first)\n\n| Classification | Signal | CLI Command | Cost | What Happens |\n|---|---|---|---|---|\n| Quick check (yes\u002Fno) | \"is the user logged in?\" | `skyvern browser validate` | 1 LLM + screenshots | Lightweight validation (2 steps max), returns boolean. Cheapest AI option. |\n| Quick inspection | \"what does the page show?\" | `skyvern browser extract` | 1 LLM + screenshots | Dedicated extraction LLM + schema validation + caching. |\n| Single action (known target) | \"click #submit\" | `skyvern browser click\u002Ftype` | 0 LLM | Deterministic Playwright. No AI. Fastest. |\n| Single action (unknown target) | \"click the submit button\" | `skyvern browser act` | 2-3 LLM, no screenshots | No screenshots in reasoning. Economy a11y tree. For visual targets, use hybrid mode (selector + intent). |\n| Same-page multi-step | \"fill the form and submit\" | `skyvern browser act` or primitive chain | 2-3 LLM or 0 LLM | Use `act` when labels are clear. Use click\u002Ftype\u002Fselect directly when you know selectors. |\n| Throwaway autonomous trial | \"try this once\", \"see if this works\" | `skyvern browser run-task` | Higher | One-off autonomous agent for exploration. Do not use for recurring or multi-page production automations. |\n| Multi-page or reusable automation | \"navigate a multi-page wizard\", \"set this up\", \"automate this weekly\" | `skyvern workflow create` + `run` | N LLM + screenshots | Build a workflow with one block per step. Each block gets visual reasoning, verification, and reusable run history. |\n\n**MCP note:** if you are using the Skyvern MCP instead of the CLI, prefer `observe + execute` for same-page multi-step UI work. The CLI does not expose that pair directly.\n\n## Step 2: Apply These Decision Rules\n\n1. If the prompt includes a selector, id, XPath, or exact field target, use browser primitives -- not `act`.\n2. If you only need a yes\u002Fno answer, use `validate` -- not `extract` or `act`.\n3. If the work stays on one page and labels are clear, use `act` or a primitive chain.\n4. If the user says `try this once`, `see if this works`, or clearly wants a one-off exploratory trial, use `run-task`.\n5. If the task spans multiple pages and is meant to be reusable, scheduled, repeatable, or explicitly `set up` as automation, use `workflow create`.\n6. Never type passwords. Always use stored credentials with `skyvern browser login`.\n\n## Step 3: Create a Session\n\nEvery browser command needs a session. Create one first:\n\n```bash\n# Cloud session (default -- works for public URLs)\nskyvern browser session create --timeout 30\n\n# Local session (for localhost URLs or self-hosted mode)\nskyvern browser session create --local --timeout 30\n\n# Connect to existing browser via CDP\nskyvern browser session connect --cdp \"ws:\u002F\u002Flocalhost:9222\"\n```\n\nSession state persists between commands. After `session create`, subsequent commands auto-attach.\nOverride with `--session pbs_...`. Close when done: `skyvern browser session close`.\n\n## Step 4: Execute by Classification\n\n### Quick check (yes\u002Fno)\n\n```bash\nskyvern browser validate --prompt \"Is the user logged in? Look for a dashboard or avatar.\"\n```\n\nReturns true\u002Ffalse. Cheapest AI option -- prefer over extract or act for boolean checks.\n\n### Quick inspection\n\n```bash\nskyvern browser extract \\\n  --prompt \"Extract all product names and prices\" \\\n  --schema '{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"string\"}}}}}}'\n```\n\nUses screenshots + dedicated extraction LLM. Better than screenshot+read because Skyvern's LLM interprets the page.\n\n### Single action (known target)\n\n```bash\nskyvern browser click --selector \"#submit-btn\"\nskyvern browser type --text \"user@co.com\" --selector \"#email\"\nskyvern browser select --value \"US\" --intent \"the country dropdown\"\n```\n\nDeterministic. No AI. Three targeting modes:\n1. **Intent**: `--intent \"the Submit button\"` (AI finds element)\n2. **Selector**: `--selector \"#submit-btn\"` (CSS\u002FXPath, deterministic)\n3. **Hybrid**: both (selector narrows, AI confirms)\n\n### Single action (unknown target)\n\n```bash\nskyvern browser act --prompt \"Click the Sign In button\"\nskyvern browser act --prompt \"Close the cookie banner, then click Sign In\"\n```\n\n**Warning:** act has NO screenshots in its LLM reasoning. It uses an economy accessibility tree.\nFine for well-labeled elements. For visually complex targets, use MCP observe+click or hybrid mode.\n\n### Same-page multi-step\n\n```bash\nskyvern browser act --prompt \"Fill the shipping form and click Continue\"\n```\n\nUse `act` when the fields and buttons are clearly labeled and the flow stays on one page.\nIf you need tighter control, break the work into `click`, `type`, `select`, `press-key`, and `wait`.\n\n### Throwaway autonomous trial\n\n```bash\nskyvern browser run-task \\\n  --url \"https:\u002F\u002Fexample.com\" \\\n  --prompt \"Check whether the checkout flow works end to end and extract the confirmation number\"\n```\n\nUse `run-task` to prove feasibility or do one-off exploration. If the task becomes important enough\nto rerun, debug, or share, convert it to a workflow.\n\n### Multi-page or reusable automation — build a workflow with one block per step\n\n```bash\nskyvern workflow create --definition @checkout-workflow.yaml\nskyvern workflow run --id wpid_123 --wait\nskyvern workflow status --run-id wr_789\n```\n\nEach navigation block runs with visual reasoning + verification. Split complex flows into\nmultiple blocks (one per page\u002Fstep). First run uses AI; subsequent runs replay cached scripts.\n\n### Repeated\u002Fproduction\n\n```bash\nskyvern workflow create --definition @workflow.yaml\nskyvern workflow run --id wpid_123 --params '{\"email\":\"user@co.com\"}'\nskyvern workflow status --run-id wr_789\n```\n\nSplit into one block per step. Use **navigation** blocks for actions, **extraction** for data.\nFirst run uses AI; subsequent runs replay a cached script (10-100x faster).\nSet `--run-with agent` to force AI mode for debugging.\n\n## Step 5: Verify\n\nAlways verify after page-changing actions:\n\n```bash\nskyvern browser screenshot                          # visual check\nskyvern browser validate --prompt \"Was the form submitted successfully?\"  # boolean assertion\nskyvern browser evaluate --expression \"document.title\"                    # JS state check\n```\n\n## Step 6: Error Recovery\n\n| Problem | Fix |\n|---------|-----|\n| Action clicked wrong element | Add context to prompt. Use hybrid mode (selector + intent). |\n| Extraction returns empty | Wait for content. Relax required fields. Check row count first. |\n| Login passes but next step fails | Ensure same session. Add post-login validate check. |\n| Element not found | Add wait: `skyvern browser wait --selector \"#el\" --state visible` |\n| Overloaded prompt | Split into smaller goals -- one intent per command. |\n\n## Credentials\n\nNEVER type passwords through `skyvern browser type` or `act`. Always use stored credentials:\n\n```bash\nskyvern credentials add --name \"my-login\" --type password --username \"user@co.com\"\nskyvern credential list                          # find the credential ID\nskyvern browser login --url \"https:\u002F\u002Flogin.example.com\" --credential-id cred_123\n```\n\nTypes: `password`, `credit_card`, `secret`. Also supports bitwarden, 1password, and azure_vault providers.\n\n## Workflow Quick Reference\n\n```bash\nskyvern workflow create --definition @workflow.yaml   # create\nskyvern workflow run --id wpid_123 --wait             # run and wait\nskyvern workflow status --run-id wr_789               # check status\nskyvern workflow list --search \"invoice\"              # find workflows\nskyvern block schema --type navigation                # discover block types\nskyvern block validate --block-json @block.json       # validate before creating\n```\n\nEngine: known path = 1.0 (default). Dynamic planning = 2.0. Split into multiple 1.0 blocks when in doubt.\nStatus lifecycle: `created -> queued -> running -> completed | failed | canceled | terminated | timed_out`\n\n## Common Patterns\n\n**Login flow:**\n```bash\nskyvern credential list                          # find credential ID\nskyvern browser session create\nskyvern browser navigate --url \"https:\u002F\u002Flogin.example.com\"\nskyvern browser login --url \"https:\u002F\u002Flogin.example.com\" --credential-id cred_123\nskyvern browser validate --prompt \"Is the user logged in?\"\nskyvern browser screenshot\n```\n\n**Pagination loop:**\n```bash\nskyvern browser extract --prompt \"Extract all rows\"\nskyvern browser validate --prompt \"Is there a Next button that is not disabled?\"\n# If true:\nskyvern browser act --prompt \"Click the Next page button\"\n# Repeat extraction. Stop when: no next button, duplicate first row, or max page limit.\n```\n\n**Debugging:**\n```bash\nskyvern browser screenshot                       # visual state\nskyvern browser evaluate --expression \"document.title\"\nskyvern browser evaluate --expression \"document.querySelectorAll('table tr').length\"\n```\n\n## Limitations\n\n- Do not use Skyvern to bypass site access controls, rate limits, consent gates, or terms that prohibit automation.\n- Browser automation can change remote state; confirm user intent before submitting forms, purchasing, deleting, or sending messages.\n- Prefer deterministic selectors for stable production flows; AI actions can misread unlabeled or visually ambiguous controls.\n- Store credentials only in the supported credential vaults and never type passwords directly through `type` or `act`.\n\n## Agent Mode\n\nAll commands accept `--json` for structured output. Set `SKYVERN_NON_INTERACTIVE=1` to prevent prompts.\nUse `skyvern capabilities --json` for full command discovery. See [references\u002Fagent-mode.md](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fagent-mode.md).\n\n## Deep-Dive References\n\n| Reference | Content |\n|-----------|---------|\n| [`references\u002Fprompt-writing.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fprompt-writing.md) | Prompt templates and anti-patterns |\n| [`references\u002Fengines.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fengines.md) | When to use tasks vs workflows |\n| [`references\u002Fschemas.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fschemas.md) | JSON schema patterns for extraction |\n| [`references\u002Fpagination.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fpagination.md) | Pagination strategy and guardrails |\n| [`references\u002Fblock-types.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fblock-types.md) | Workflow block type details with examples |\n| [`references\u002Fparameters.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fparameters.md) | Parameter design and variable usage |\n| [`references\u002Fai-actions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fai-actions.md) | AI action patterns and examples |\n| [`references\u002Fprecision-actions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fprecision-actions.md) | Intent-only, selector-only, hybrid modes |\n| [`references\u002Fcredentials.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcredentials.md) | Credential naming, lifecycle, safety |\n| [`references\u002Fsessions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fsessions.md) | Session reuse and freshness decisions |\n| [`references\u002Fcommon-failures.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcommon-failures.md) | Failure pattern catalog with fixes |\n| [`references\u002Fscreenshots.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fscreenshots.md) | Screenshot-led debugging workflow |\n| [`references\u002Fstatus-lifecycle.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fstatus-lifecycle.md) | Run status states and guidance |\n| [`references\u002Frerun-playbook.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Frerun-playbook.md) | Rerun procedures and comparison |\n| [`references\u002Fcomplex-inputs.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcomplex-inputs.md) | Date pickers, uploads, dropdowns |\n| [`references\u002Ftool-map.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Ftool-map.md) | Complete tool inventory by outcome |\n| [`references\u002Fcli-parity.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcli-parity.md) | CLI\u002FMCP mapping and agent-aware features |\n| [`references\u002Fquick-start-patterns.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fquick-start-patterns.md) | Quick start examples, common patterns, and workflow templates |\n","# Skyvern Browser Automation -- CLI Judgment Procedure\n\nSkyvern uses AI to navigate and interact with websites. Every command below is a runnable `skyvern \u003Ccommand>` invocation.\n\n## When to Use This Skill\n\n- Use when you need AI-assisted browser automation for navigation, extraction, form filling, login flows, or reusable website workflows.\n- Use when deterministic selectors are unavailable and Skyvern's visual\u002Fa11y reasoning can identify page controls.\n- Use when a one-off browser task should become a repeatable workflow with run history and verification.\n\n## Step 1: Classify Your Task (ALWAYS do this first)\n\n| Classification | Signal | CLI Command | Cost | What Happens |\n|---|---|---|---|---|\n| Quick check (yes\u002Fno) | \"is the user logged in?\" | `skyvern browser validate` | 1 LLM + screenshots | Lightweight validation (2 steps max), returns boolean. Cheapest AI option. |\n| Quick inspection | \"what does the page show?\" | `skyvern browser extract` | 1 LLM + screenshots | Dedicated extraction LLM + schema validation + caching. |\n| Single action (known target) | \"click #submit\" | `skyvern browser click\u002Ftype` | 0 LLM | Deterministic Playwright. No AI. Fastest. |\n| Single action (unknown target) | \"click the submit button\" | `skyvern browser act` | 2-3 LLM, no screenshots | No screenshots in reasoning. Economy a11y tree. For visual targets, use hybrid mode (selector + intent). |\n| Same-page multi-step | \"fill the form and submit\" | `skyvern browser act` or primitive chain | 2-3 LLM or 0 LLM | Use `act` when labels are clear. Use click\u002Ftype\u002Fselect directly when you know selectors. |\n| Throwaway autonomous trial | \"try this once\", \"see if this works\" | `skyvern browser run-task` | Higher | One-off autonomous agent for exploration. Do not use for recurring or multi-page production automations. |\n| Multi-page or reusable automation | \"navigate a multi-page wizard\", \"set this up\", \"automate this weekly\" | `skyvern workflow create` + `run` | N LLM + screenshots | Build a workflow with one block per step. Each block gets visual reasoning, verification, and reusable run history. |\n\n**MCP note:** if you are using the Skyvern MCP instead of the CLI, prefer `observe + execute` for same-page multi-step UI work. The CLI does not expose that pair directly.\n\n## Step 2: Apply These Decision Rules\n\n1. If the prompt includes a selector, id, XPath, or exact field target, use browser primitives -- not `act`.\n2. If you only need a yes\u002Fno answer, use `validate` -- not `extract` or `act`.\n3. If the work stays on one page and labels are clear, use `act` or a primitive chain.\n4. If the user says `try this once`, `see if this works`, or clearly wants a one-off exploratory trial, use `run-task`.\n5. If the task spans multiple pages and is meant to be reusable, scheduled, repeatable, or explicitly `set up` as automation, use `workflow create`.\n6. Never type passwords. Always use stored credentials with `skyvern browser login`.\n\n## Step 3: Create a Session\n\nEvery browser command needs a session. Create one first:\n\n```bash\n# Cloud session (default -- works for public URLs)\nskyvern browser session create --timeout 30\n\n# Local session (for localhost URLs or self-hosted mode)\nskyvern browser session create --local --timeout 30\n\n# Connect to existing browser via CDP\nskyvern browser session connect --cdp \"ws:\u002F\u002Flocalhost:9222\"\n```\n\nSession state persists between commands. After `session create`, subsequent commands auto-attach.\nOverride with `--session pbs_...`. Close when done: `skyvern browser session close`.\n\n## Step 4: Execute by Classification\n\n### Quick check (yes\u002Fno)\n\n```bash\nskyvern browser validate --prompt \"Is the user logged in? Look for a dashboard or avatar.\"\n```\n\nReturns true\u002Ffalse. Cheapest AI option -- prefer over extract or act for boolean checks.\n\n### Quick inspection\n\n```bash\nskyvern browser extract \\\n  --prompt \"Extract all product names and prices\" \\\n  --schema '{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"string\"}}}}}}'\n```\n\nUses screenshots + dedicated extraction LLM. Better than screenshot+read because Skyvern's LLM interprets the page.\n\n### Single action (known target)\n\n```bash\nskyvern browser click --selector \"#submit-btn\"\nskyvern browser type --text \"user@co.com\" --selector \"#email\"\nskyvern browser select --value \"US\" --intent \"the country dropdown\"\n```\n\nDeterministic. No AI. Three targeting modes:\n1. **Intent**: `--intent \"the Submit button\"` (AI finds element)\n2. **Selector**: `--selector \"#submit-btn\"` (CSS\u002FXPath, deterministic)\n3. **Hybrid**: both (selector narrows, AI confirms)\n\n### Single action (unknown target)\n\n```bash\nskyvern browser act --prompt \"Click the Sign In button\"\nskyvern browser act --prompt \"Close the cookie banner, then click Sign In\"\n```\n\n**Warning:** act has NO screenshots in its LLM reasoning. It uses an economy accessibility tree.\nFine for well-labeled elements. For visually complex targets, use MCP observe+click or hybrid mode.\n\n### Same-page multi-step\n\n```bash\nskyvern browser act --prompt \"Fill the shipping form and click Continue\"\n```\n\nUse `act` when the fields and buttons are clearly labeled and the flow stays on one page.\nIf you need tighter control, break the work into `click`, `type`, `select`, `press-key`, and `wait`.\n\n### Throwaway autonomous trial\n\n```bash\nskyvern browser run-task \\\n  --url \"https:\u002F\u002Fexample.com\" \\\n  --prompt \"Check whether the checkout flow works end to end and extract the confirmation number\"\n```\n\nUse `run-task` to prove feasibility or do one-off exploration. If the task becomes important enough\nto rerun, debug, or share, convert it to a workflow.\n\n### Multi-page or reusable automation — build a workflow with one block per step\n\n```bash\nskyvern workflow create --definition @checkout-workflow.yaml\nskyvern workflow run --id wpid_123 --wait\nskyvern workflow status --run-id wr_789\n```\n\nEach navigation block runs with visual reasoning + verification. Split complex flows into\nmultiple blocks (one per page\u002Fstep). First run uses AI; subsequent runs replay cached scripts.\n\n### Repeated\u002Fproduction\n\n```bash\nskyvern workflow create --definition @workflow.yaml\nskyvern workflow run --id wpid_123 --params '{\"email\":\"user@co.com\"}'\nskyvern workflow status --run-id wr_789\n```\n\nSplit into one block per step. Use **navigation** blocks for actions, **extraction** for data.\nFirst run uses AI; subsequent runs replay a cached script (10-100x faster).\nSet `--run-with agent` to force AI mode for debugging.\n\n## Step 5: Verify\n\nAlways verify after page-changing actions:\n\n```bash\nskyvern browser screenshot                          # visual check\nskyvern browser validate --prompt \"Was the form submitted successfully?\"  # boolean assertion\nskyvern browser evaluate --expression \"document.title\"                    # JS state check\n```\n\n## Step 6: Error Recovery\n\n| Problem | Fix |\n|---------|-----|\n| Action clicked wrong element | Add context to prompt. Use hybrid mode (selector + intent). |\n| Extraction returns empty | Wait for content. Relax required fields. Check row count first. |\n| Login passes but next step fails | Ensure same session. Add post-login validate check. |\n| Element not found | Add wait: `skyvern browser wait --selector \"#el\" --state visible` |\n| Overloaded prompt | Split into smaller goals -- one intent per command. |\n\n## Credentials\n\nNEVER type passwords through `skyvern browser type` or `act`. Always use stored credentials:\n\n```bash\nskyvern credentials add --name \"my-login\" --type password --username \"user@co.com\"\nskyvern credential list                          # find the credential ID\nskyvern browser login --url \"https:\u002F\u002Flogin.example.com\" --credential-id cred_123\n```\n\nTypes: `password`, `credit_card`, `secret`. Also supports bitwarden, 1password, and azure_vault providers.\n\n## Workflow Quick Reference\n\n```bash\nskyvern workflow create --definition @workflow.yaml   # create\nskyvern workflow run --id wpid_123 --wait             # run and wait\nskyvern workflow status --run-id wr_789               # check status\nskyvern workflow list --search \"invoice\"              # find workflows\nskyvern block schema --type navigation                # discover block types\nskyvern block validate --block-json @block.json       # validate before creating\n```\n\nEngine: known path = 1.0 (default). Dynamic planning = 2.0. Split into multiple 1.0 blocks when in doubt.\nStatus lifecycle: `created -> queued -> running -> completed | failed | canceled | terminated | timed_out`\n\n## Common Patterns\n\n**Login flow:**\n```bash\nskyvern credential list                          # find credential ID\nskyvern browser session create\nskyvern browser navigate --url \"https:\u002F\u002Flogin.example.com\"\nskyvern browser login --url \"https:\u002F\u002Flogin.example.com\" --credential-id cred_123\nskyvern browser validate --prompt \"Is the user logged in?\"\nskyvern browser screenshot\n```\n\n**Pagination loop:**\n```bash\nskyvern browser extract --prompt \"Extract all rows\"\nskyvern browser validate --prompt \"Is there a Next button that is not disabled?\"\n# If true:\nskyvern browser act --prompt \"Click the Next page button\"\n# Repeat extraction. Stop when: no next button, duplicate first row, or max page limit.\n```\n\n**Debugging:**\n```bash\nskyvern browser screenshot                       # visual state\nskyvern browser evaluate --expression \"document.title\"\nskyvern browser evaluate --expression \"document.querySelectorAll('table tr').length\"\n```\n\n## Limitations\n\n- Do not use Skyvern to bypass site access controls, rate limits, consent gates, or terms that prohibit automation.\n- Browser automation can change remote state; confirm user intent before submitting forms, purchasing, deleting, or sending messages.\n- Prefer deterministic selectors for stable production flows; AI actions can misread unlabeled or visually ambiguous controls.\n- Store credentials only in the supported credential vaults and never type passwords directly through `type` or `act`.\n\n## Agent Mode\n\nAll commands accept `--json` for structured output. Set `SKYVERN_NON_INTERACTIVE=1` to prevent prompts.\nUse `skyvern capabilities --json` for full command discovery. See [references\u002Fagent-mode.md](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fagent-mode.md).\n\n## Deep-Dive References\n\n| Reference | Content |\n|-----------|---------|\n| [`references\u002Fprompt-writing.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fprompt-writing.md) | Prompt templates and anti-patterns |\n| [`references\u002Fengines.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fengines.md) | When to use tasks vs workflows |\n| [`references\u002Fschemas.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fschemas.md) | JSON schema patterns for extraction |\n| [`references\u002Fpagination.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fpagination.md) | Pagination strategy and guardrails |\n| [`references\u002Fblock-types.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fblock-types.md) | Workflow block type details with examples |\n| [`references\u002Fparameters.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fparameters.md) | Parameter design and variable usage |\n| [`references\u002Fai-actions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fai-actions.md) | AI action patterns and examples |\n| [`references\u002Fprecision-actions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fprecision-actions.md) | Intent-only, selector-only, hybrid modes |\n| [`references\u002Fcredentials.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcredentials.md) | Credential naming, lifecycle, safety |\n| [`references\u002Fsessions.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fsessions.md) | Session reuse and freshness decisions |\n| [`references\u002Fcommon-failures.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcommon-failures.md) | Failure pattern catalog with fixes |\n| [`references\u002Fscreenshots.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fscreenshots.md) | Screenshot-led debugging workflow |\n| [`references\u002Fstatus-lifecycle.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fstatus-lifecycle.md) | Run status states and guidance |\n| [`references\u002Frerun-playbook.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Frerun-playbook.md) | Rerun procedures and comparison |\n| [`references\u002Fcomplex-inputs.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcomplex-inputs.md) | Date pickers, uploads, dropdowns |\n| [`references\u002Ftool-map.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Ftool-map.md) | Complete tool inventory by outcome |\n| [`references\u002Fcli-parity.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fcli-parity.md) | CLI\u002FMCP mapping and agent-aware features |\n| [`references\u002Fquick-start-patterns.md`](https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002Fskyvern\u002Fcli\u002Fskills\u002Fskyvern\u002Freferences\u002Fquick-start-patterns.md) | Quick start examples, common patterns, and workflow templates |\n",{"name":5,"risk":42,"tags":48,"tools":53,"author":58,"source":34,"license":14,"category":49,"date_added":59,"description":7,"source_repo":60,"source_type":39,"license_source":61},[49,50,51,31,52,37],"browser-automation","mcp","web-scraping","ai-agents",[54,55,56,57],"claude","cursor","gemini","codex","mark1ian","2026-04-23","Skyvern-AI\u002Fskyvern","https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fskyvern-browser-automation","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill skyvern-browser-automation",{"tool":73,"command":74},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill skyvern-browser-automation",{"tool":76,"command":77},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill skyvern-browser-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fskyvern-browser-automation\u002FSKILL.md",true,[],[82,110,134,157,184,206],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":43},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[93,94,95,96,97,98,84,99,100,101,102,103,34,33,104,105,106,107,108,109],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","devops-security","access","configure","only","active","critical","scope","scripts","relevant","implementing",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":43},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[117,118,119,120,121,122,123,124,125,126,127,128,129,103,130,34,131,132,105,133],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","read","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":43},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[141,142,143,42,144,57,145,146,147,148,149,150,151,34,33,152,153,154,155,156],"transcript","youtube transcript","youtube","github","research","license","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":174,"publishedAt":43},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[163,166,169],{"categoryNo":164,"categoryName":165,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":167,"categoryName":168,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":170,"categoryName":171,"taxonomyType":172,"taxonomyTypeDesc":173},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[141,142,143,175,42,56,144,57,146,176,177,178,179,149,180,34,33,181,182,183],"youtube transcript skills","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":194,"publishedAt":43},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[190,193],{"categoryNo":191,"categoryName":192,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":167,"categoryName":168,"taxonomyType":20,"taxonomyTypeDesc":21},[143,195,196,121,42,41,39,197,198,146,178,199,200,201,202,33,203,152,204,205],"youtube notetaker","notetaker","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":86,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":213,"publishedAt":43},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[212],{"categoryNo":164,"categoryName":165,"taxonomyType":20,"taxonomyTypeDesc":21},[214,143,215,216,42,56,176,217,218,177,178,179,149,219,180,34,33,181,220,155],"youtube full","full","google","server","dlp","credits","automatic"]