{"id":8647,"library":"skyvern","title":"Skyvern","description":"Skyvern is a Python library that enables AI-powered browser automation by extending Playwright with large language models (LLMs) and computer vision. It allows users to automate complex, multi-step web workflows using natural language prompts, aiming to be more robust than traditional selector-based automation tools. Skyvern also offers a no-code workflow builder and a managed cloud service. The current version is 1.0.31, with active development and frequent releases.","status":"active","version":"1.0.31","language":"en","source_language":"en","source_url":"https://github.com/Skyvern-AI/skyvern","tags":["web automation","AI","LLM","computer vision","playwright","scraping"],"install":[{"cmd":"pip install skyvern","lang":"bash","label":"Install SDK"},{"cmd":"skyvern quickstart","lang":"bash","label":"Local setup wizard (with Docker Compose option)"}],"dependencies":[{"reason":"Skyvern requires Python 3.11.x to 3.13.x. Python 3.14 is not yet supported.","package":"python","optional":false}],"imports":[{"symbol":"Skyvern","correct":"from skyvern import Skyvern"}],"quickstart":{"code":"import os\nimport asyncio\nfrom skyvern import Skyvern\n\nasync def main():\n    # Ensure SKYVERN_API_KEY is set as an environment variable or replace with your actual key\n    api_key = os.getenv(\"SKYVERN_API_KEY\", \"\")\n    if not api_key:\n        print(\"Error: SKYVERN_API_KEY environment variable not set.\")\n        return\n\n    client = Skyvern(\n        api_key=api_key,\n        # For self-hosted, use base_url=\"http://localhost:8000\"\n        # base_url=\"https://api.skyvern.com\" # Default for cloud service\n    )\n\n    print(\"Running task...\")\n    try:\n        result = await client.run_task(\n            prompt=\"Go to news.ycombinator.com and get the title of the #1 post\",\n            url=\"https://news.ycombinator.com\",\n        )\n        print(f\"Run ID: {result.run_id}\")\n        print(f\"Output: {result.output}\")\n    except Exception as e:\n        print(f\"An error occurred: {e}\")\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n","lang":"python","description":"This quickstart initializes the Skyvern client with an API key (preferably from an environment variable) and runs a simple task to extract data from a website. For local setup, ensure you run `skyvern quickstart` first and may need to specify a `base_url`."},"warnings":[{"fix":"Ensure all relevant environment variables are updated to reflect the new ports after modifying `docker-compose.yml`.","message":"Changing default ports in `docker-compose.yml` for self-hosted Skyvern deployments without updating related environment variables (like `VITE_WSS_BASE_URL`) can lead to 'network error' issues in the UI.","severity":"breaking","affected_versions":"All versions (self-hosted Docker deployments)"},{"fix":"Increase `max_steps` (default 50, max 75), add explicit completion criteria to prompts (e.g., 'COMPLETE when you see \"Order confirmed\"'), break complex tasks into smaller workflows, and check your account's concurrency limits. Verify LLM API keys and network access.","message":"Tasks can time out or get stuck in a 'queued' state due to complexity, insufficient `max_steps`, missing explicit completion criteria, concurrency limits, or LLM-related configuration issues.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Verify credentials in your credential store. For sensitive sites, consider using `RESIDENTIAL_ISP` proxies, configuring TOTP for MFA, or using browser profiles with existing sessions.","message":"Authentication failures (e.g., login-related termination) commonly occur due to expired credentials, CAPTCHAs, Multi-Factor Authentication (MFA), or detection of automation.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Edit `docker-compose.yml` and any associated `.env` files to ensure all port references and related environment variables are consistent with the new port configuration. Restart the Docker containers.","cause":"Environment variables within the Docker Compose setup, particularly those related to WebSocket URLs (e.g., `VITE_WSS_BASE_URL`), were not updated to match the new port mappings.","error":"network error (Skyvern UI after changing Docker Compose ports)"},{"fix":"Increase `max_steps` in your task parameters (up to 75). Add clear completion criteria to your prompt (e.g., 'COMPLETE when you see \"Order confirmed\"'). Review the task recording to identify where the AI got stuck and refine the prompt or break the task into smaller steps.","cause":"The task exceeded the `max_steps` limit (default 50), the AI got stuck in a navigation loop, or explicit completion criteria were missing for a complex task.","error":"Task timed_out / Status is timed_out"},{"fix":"Check the `screenshot_final` and `llm_response_parsed` artifacts. Add specific descriptions to your schema (e.g., 'The price in USD, without currency symbol'). Provide visual hints in your prompt. Make schema fields optional if data might not always be present, and add validation instructions.","cause":"The AI might have ended on the wrong page, targeted incorrect elements, or the schema description was ambiguous.","error":"Status is completed, but extracted data is incorrect or incomplete."},{"fix":"Wait for other runs to complete. Check your plan's concurrency limits in Skyvern settings. If using 'Run Sequentially' with credentials, ensure prior runs have finished. Contact support if the issue persists.","cause":"Account concurrency limits were reached, a sequential run lock was active (another run with the same credential), or there was high platform load.","error":"Run stays in queued status and never starts."}]}