{"repo":"Skyvern-AI/skyvern","free":true,"listed":false,"github":"https://github.com/Skyvern-AI/skyvern","clone":"git clone https://github.com/Skyvern-AI/skyvern.git","description":"Automate browser based workflows with AI","language":"Python","stars":22761,"topics":["ai","api","automation","browser","browser-automation","computer","gpt","llm","playwright","powerautomate","puppeteer","python","rpa","selenium","vision","workflow"],"license":"AGPL-3.0","category":"agentic_automation","readme_excerpt":"<!-- DOCTOC SKIP -->\n\n<h1 align=\"center\">\n <a href=\"https://www.skyvern.com\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"fern/images/skyvern_logo.png\"/>\n    <img height=\"120\" src=\"fern/images/skyvern_logo_blackbg.png\"/>\n  </picture>\n </a>\n <br />\n</h1>\n<p align=\"center\">\n🐉 Automate Browser-based workflows using LLMs and Computer Vision 🐉\n</p>\n<p align=\"center\">\n  <a href=\"https://www.skyvern.com/\"><img src=\"https://img.shields.io/badge/Website-blue?logo=googlechrome&logoColor=black\"/></a>\n  <a href=\"https://www.skyvern.com/docs/\"><img src=\"https://img.shields.io/badge/Docs-yellow?logo=gitbook&logoColor=black\"/></a>\n  <a href=\"https://discord.gg/fG2XXEuQX3\"><img src=\"https://img.shields.io/discord/1212486326352617534?logo=discord&label=discord\"/></a>\n  <!-- <a href=\"https://pepy.tech/project/skyvern\" target=\"_blank\"><img src=\"https://static.pepy.tech/badge/skyvern\" alt=\"Total Downloads\"/></a> -->\n  <a href=\"https://github.com/skyvern-ai/skyvern\"><img src=\"https://img.shields.io/github/stars/skyvern-ai/skyvern\" /></a>\n  <a href=\"https://github.com/Skyvern-AI/skyvern/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/skyvern-ai/skyvern\"/></a>\n  <a href=\"https://twitter.com/skyvernai\"><img src=\"https://img.shields.io/twitter/follow/skyvernai?style=social\"/></a>\n  <a href=\"https://www.linkedin.com/company/95726232\"><img src=\"https://img.shields.io/badge/Follow%20 on%20LinkedIn-8A2BE2?logo=linkedin\"/></a>\n</p>\n\n[Skyvern](https://www.skyvern.com) automates browser-based workflows using LLMs and computer vision. It provides a Playwright-compatible SDK that adds AI functionality on top of playwright, as well as a no-code workflow builder to help both technical and non-technical users automate manual workflows on any website, replacing brittle or unreliable automation solutions.\n\n<p align=\"center\">\n  <img src=\"fern/images/geico_shu_recording_cropped.gif\"/>\n</p>\n\nTraditional approaches to browser automations required writing custom scripts for websites, often relying on DOM parsing and XPath-based interactions which would break whenever the website layouts changed.\n\nInstead of only relying on code-defined XPath interactions, Skyvern relies on Vision LLMs to learn and interact with the websites.\n\n# How it works\nSkyvern was inspired by the Task-Driven autonomous agent design popularized by [BabyAGI](https://github.com/yoheinakajima/babyagi) and [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) -- with one major bonus: we give Skyvern the ability to interact with websites using browser automation libraries like [Playwright](https://playwright.dev/).\n\nSkyvern uses a swarm of agents to comprehend a website, and plan and execute its actions:\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"fern/images/skyvern_2_0_system_diagram.png\" />\n  <img src=\"fern/images/skyvern_2_0_system_diagram.png\" />\n</picture>\n\nThis approach has a few advantages:\n\n1. Skyvern can operate on websites it's never seen before, as it's able to map visual elements to actions necessary to complete a workflow, without any customized code\n1. Skyvern is resistant to website layout changes, as there are no pre-determined XPaths or other selectors our system is looking for while trying to navigate\n1. Skyvern is able to take a single workflow and apply it to a large number of websites, as it's able to reason through the interactions necessary to complete the workflow\nA detailed technical report can be found [here](https://www.skyvern.com/blog/skyvern-2-0-state-of-the-art-web-navigation-with-85-8-on-webvoyager-eval/).\n\n# Demo\n<!-- Redo demo -->\nhttps://github.com/user-attachments/assets/5cab4668-e8e2-4982-8551-aab05ff73a7f\n\n# Quickstart\n\n## Skyvern Cloud\n[Skyvern Cloud](https://app.skyvern.com) is a managed cloud version of Skyvern that allows you to run Skyvern without worrying about the infrastructure. It allows you to run multiple Skyvern instances in parallel and comes bundled with anti-bot detection mechanisms, proxy network, and CAPTCHA solvers.\n\nIf you'd like to try it out, navigate to [app.skyvern.com](https://app.skyvern.com) and create an account.\n\n## Run Locally (UI + Server)\n\nChoose your preferred setup method:\n\n> **Database default**: `skyvern quickstart` and `skyvern run server` default to a SQLite database at `~/.skyvern/data.db` so the pip path works without Postgres or Docker. To use Postgres instead, pass `--database-string` for an existing database (or omit `--no-postgres` so `quickstart` starts its own Postgres container). Docker Compose always uses the bundled Postgres service.\n\n### Option A: pip install (Recommended for Python-managed local setup)\n\nDependencies needed:\n- [Python 3.11, 3.12, or 3.13](https://www.python.org/downloads/)\n\nAdditionally, for Windows:\n- [Rust](https://rustup.rs/)\n- VS Code with C++ dev tools and Windows SDK\n\n#### 1. Install Skyvern\n\n```bash\npip install \"skyvern[all]\"\n```\n\n#### 2. Run Skyvern\n\n```bash\nskyvern quickstart\n```\n\nThe pip quickstart uses SQLite by default. To use a local Postgres container instead, run `skyvern quickstart` (Postgres container is started unless you pass `--no-postgres`), or connect to an existing database with `--database-string=postgresql+psycopg://user:pass@host:5432/dbname`.\n\n### Option B: Docker Compose\n\nUse this option if you want everything containerized (Postgres, API, UI) and don't want to install Python/Node locally.\n\n1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n2. Clone the repository:\n   ```bash\n   git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern\n   ```\n3. Configure your LLM provider in `.env` (the `quickstart --docker-compose` command below will create it from `.env.example` if missing):\n   ```bash\n   cp .env.example .env  # if not already created\n   # edit .env to add your LLM API key\n   ```\n4. Start everything:\n   ```bash\n   docker compose up -d\n   ```\n5. Open http://localhost:8080\n\n### Troubleshooting\n\n**`(sqlite3.OperationalError) table organizations already exists`** — You hit a known bug in `pip install skyvern==1.0.31`. Fix:\n\n```bash\nrm ~/.skyvern/data.db   # remove the leftover SQLite file\npip install --upgrade skyvern   # 1.0.32+ contains the fix\nskyvern quickstart\n```\n\nIf you are still on 1.0.31 and cannot upgrade, install via uv instead:\n\n```bash\nuv pip install skyvern\n```\n\n**`pip install skyvern` fails with ResolutionImpossible (litellm / fastmcp)** — You hit a dependency-resolution conflict in 1.0.31. Either upgrade to 1.0.32+ or use uv: `uv pip install skyvern`.\n\n## SDK\n\n**Skyvern is a Playwright extension that adds AI-powered browser automation.** It gives you the full power of Playwright with additional AI capabilities—use natural language prompts to interact with elements, extract data, and automate complex multi-step workflows.\n\n**Installation:**\n- Python SDK / cloud API: `pip install skyvern`\n- Local server + packaged UI: `pip install \"skyvern[all]\"` then run `skyvern quickstart`\n- Local server + packaged UI with Postgres: `pip install \"skyvern[all]\"` then run `skyvern quickstart --database-string=postgresql+psycopg://user:pass@host:5432/dbname`\n- Packaged UI for an existing API: `pip install \"skyvern[ui]\"` then set `VITE_API_BASE_URL` (and `VITE_SKYVERN_API_KEY` if your API requires a key) and run `skyvern run ui`\n- TypeScript: `npm install @skyvern/client`\n\n### AI-Powered Page Commands\n\nSkyvern adds four core AI commands directly on the page object:\n\n| Command | Description |\n|---------|-------------|\n| `page.act(prompt)` | Perform actions using natural language (e.g., \"Click the login button\") |\n| `page.extract(prompt, schema)` | Extract structured data from the page with optional JSON schema |\n| `page.validate(prompt)` | Validate page state, returns `bool` (e.g., \"Check if user is logged in\") |\n| `page.prompt(prompt, schema)` | Send arbitrary prompts to the LLM with optional response schema |\n\nAdditionally, `page.agent` provides higher-level workflow commands:\n\n| Command | Description |\n|---------|-------------|\n| `page.agent.run_task(prompt)` | Execute complex multi-step tasks |\n| `page.agent.login(credential_type, credential_id)` | Authenticate with stored credentials (Skyvern, Bitwarden, 1Password) |\n| `page.agent.download_files(prompt)` | Navigate and download files |\n| `page.agent.run_workflow(workflow_id)` | Execute pre-built workflows |\n\n### AI-Augmented Playwright Actions\n\nAll standard Playwright actions support an optional `prompt` parameter for AI-powered element location:\n\n| Action | Playwright | AI-Augmented |\n|--------|------------|--------------|\n| Click | `page.click(\"#btn\")` | `page.click(prompt=\"Click login button\")` |\n| Fill | `page.fill(\"#email\", \"a@b.com\")` | `page.fill(prompt=\"Email field\", value=\"a@b.com\")` |\n| Select | `page.select_option(\"#country\", \"US\")` | `page.select_option(prompt=\"Country dropdown\", value=\"US\")` |\n| Upload | `page.upload_file(\"#file\", \"doc.pdf\")` | `page.upload_file(prompt=\"Upload area\", files=\"doc.pdf\")` |\n\n**Three interaction modes:**\n```python\n# 1. Traditional Playwright - CSS/XPath selectors\nawait page.click(\"#submit-button\")\n\n# 2. AI-powered - natural language\nawait page.click(prompt=\"Click the green Submit button\")\n\n# 3. AI fallback - tries selector first, falls back to AI if it fails\nawait page.click(\"#submit-btn\", prompt=\"Click the Submit button\")\n```\n\n### Core AI Commands - Examples\n\n```python\n# act - Perform actions using natural language\nawait page.act(\"Click the login button and wait for the dashboard to load\")\n\n# extract - Extract structured data with optional JSON schema\nresult = await page.extract(\"Get the product name and price\")\nresult = await page.extract(\n    prompt=\"Extract order details\",\n    schema={\"order_id\": \"string\", \"total\": \"number\", \"items\": \"array\"}\n)\n\n# validate - Check page state (returns bool)\nis_logged_in = await page.validate(\"Check if the user is logged in\")\n\n# prompt - Send arbitrary prompts to the LLM\nsummary = await page.prompt(\"Summarize what's on this pag","default_branch":"main","files":5252,"tree":[".claude/skills/bump-version/SKILL.md",".dockerignore",".env.example",".flake8",".gitattributes",".github/actions/setup-ai-env/uv-sync.sh",".github/pull_request_template.md",".github/sync.yml",".github/workflows/auto-merge-sync.yml",".github/workflows/auto-release.yml",".github/workflows/build-docker-image.yml",".github/workflows/ci.yml",".github/workflows/claude-code-review.yml",".github/workflows/claude.yml",".github/workflows/inactive-issues-and-prs.yml",".github/workflows/preview-fern-docs",".github/workflows/publish-fern-docs.yml",".github/workflows/sdk-release.yml",".github/workflows/sync-skyvern-cloud.yml",".github/workflows/ts-sdk-release.yml",".github/workflows/update-openapi.yml",".github/workflows/zizmor.yml",".gitignore",".gitmodules",".nvmrc",".pre-commit-config.yaml",".superset/config.json",".yamlfmt","AGENTS.md","CLAUDE.md","CODE_OF_CONDUCT.md","CONTRIBUTING.md","Dockerfile","Dockerfile.ui","Dockerfile.ui.dockerignore","LICENSE","README.md","SECURITY.md","alembic.ini","alembic/README.md","alembic/env.py","alembic/script.py.mako","alembic/versions/2024_03_01_0537-99423c1dec60_create_tables.py","alembic/versions/2024_03_13_0518-82a0c686152d_add_title_error_code_mapping_and_errors_.py","alembic/versions/2024_03_22_0010-ffe2f57bd288_create_output_parameter.py","alembic/versions/2024_04_03_2257-4630ab8c198e_create_bitwarden_credential_parameter_.py","alembic/versions/2024_04_08_2347-ea8e24d0bc8e_add_orgs_max_retries_per_step.py","alembic/versions/2024_04_09_0058-8335d7fecef9_add_new_indices_to_tasks_table.py","alembic/versions/2024_04_23_2153-24303f1669a7_add_domain_to_organizations_table.py","alembic/versions/2024_04_28_2320-68d78072fdb5_add_org_task_step_index.py","alembic/versions/2024_05_05_0249-c4dca14a5e69_add_org_task_index_for_steps_table.py","alembic/versions/2024_05_11_2104-8792454ce498_add_max_steps_per_run_to_task.py","alembic/versions/2024_05_14_0114-bf561125112f_add_workflow_permanent_id_and_version_.py","alembic/versions/2024_05_14_0245-baec12642d77_add_workflow_permanent_id_constraint_.py","alembic/versions/2024_05_16_1729-04bf06540db6_add_proxy_location_and_webhook_callback_.py","alembic/versions/2024_06_07_2257-312d305c6b18_add_task_generations_table.py","alembic/versions/2024_06_11_0502-2c163e606a3d_add_collection_id_to_bitwarden_.py","alembic/versions/2024_06_27_1949-485667adef01_add_is_saved_task_to_workflows.py","alembic/versions/2024_07_09_1823-bea545cb21b4_add_workflow_permanent_id_and_.py","alembic/versions/2024_07_11_1644-ac679ea03578_create_bitwarden_identity_parameter_.py","alembic/versions/2024_07_12_0321-370cb81c73e7_add_totp_verification_url_to_tasks_.py","alembic/versions/2024_07_17_2227-94bc3829eed6_add_step_id_index_to_artifacts_table.py","alembic/versions/2024_07_31_0932-c5ed5a3a14eb_add_residential_ie_to_proxylocation_enum.py","alembic/versions/2024_08_06_1515-8f237f00faeb_add_gb_proxy.py","alembic/versions/2024_08_23_2012-6de11b2be7c8_add_suggested_title_to_task_generations_.py","alembic/versions/2024_09_03_0356-0de9150bc624_update_task_generation_table_use_user_.py","alembic/versions/2024_09_06_1842-c50f0aa0ef24_add_persist_browser_session_flag_to_.py","alembic/versions/2024_09_08_2159-c5848cc524b1_create_totp_codes_table_and_add_task_.py","alembic/versions/2024_10_02_2212-6c90d565076b_add_bitwarden_details_to_organizations.py","alembic/versions/2024_10_03_2301-a575628e1965_create_bitwarden_credit_card_data_.py","alembic/versions/2024_10_09_1652-12fb2dede685_add_workflow_run_id_index_to_tasks.py","alembic/versions/2024_10_15_1903-137eee1d3b3e_actions_table.py","alembic/versions/2024_10_18_2003-2873c5c8c41e_add_actions_confidence_float.py","alembic/versions/2024_11_04_1914-b8f9e09e181d_add_in_and_jp_proxylocation.py","alembic/versions/2024_11_15_0251-1909715536dc_add_failure_reason_column_to_workflow_.py","alembic/versions/2024_11_21_0708-2d79d5fc1baa_add_task_prompt_template_complete_.py","alembic/versions/2024_11_26_0322-56085e451bec_use_task_type_instead_of_prompt_template.py","alembic/versions/2024_11_29_1332-a5feab7712fe_add_application_column_to_tasks.py","alembic/versions/2024_12_02_1609-db41106b9f1a_steps_db_change_add_created_at_index.py","alembic/versions/2024_12_06_0113-de0254717601_introduce_workflow_run_blocks.py","alembic/versions/2024_12_06_0852-4d51ed4719d5_introduce_observercruise_and_.py","alembic/versions/2024_12_06_1819-fe49b59d836c_add_observer_thought_id_column_to_.py","alembic/versions/2024_12_08_0131-8069e38dc1b4_drop_all_the_foreign_keys_on_artifacts_.py","alembic/versions/2024_12_08_0532-dc2a8facf0d7_add_prompt_and_url_to_observer_cruises_.py","alembic/versions/2024_12_09_0040-c502ecf908c6_add_created_at_and_modified_at_to_.py","alembic/versions/2024_12_16_2220-411dd89f3df9_add_workflow_permanent_id_to_observer_.py","alembic/versions/2024_12_17_1841-282b0548d443_introduce_persistent_browser_sessions.py","alembic/versions/2024_12_18_0537-f81d59b4aed5_add_observer_cruise_index_to_the_.py","alembic/versions/2024_12_20_1637-5be249d8dc96_add_failure_reason_to_workflow_run_.py","alembic/versions/2024_12_23_0907-cf3cd8d666b0_add_current_value_current_index_loop_.py","alembic/versions/2024_12_23_1941-835522a23b19_add_more_columns_for_different_blocks.py","alembic/versions/2024_12_27_1610-d13af1e466fa_new_observer_thoughts.py","alembic/versions/2024_12_30_1816-172cdfb3e2ee_artifacts_index_workflow_run_block_id_.py","alembic/versions/2024_12_31_0936-521241e64aed_re_introduce_indexes_for_artifacts.py","alembic/versions/2025_01_03_2349-32e2f138f7fd_add_description_to_workflow_run_block.py","alembic/versions/2025_01_06_1214-d47a586d7036_make_browser_session_runnable_type_and_.py","alembic/versions/2025_01_09_0541-d5640aa644b9_add_ai_suggestions_table.py","alembic/versions/2025_01_10_2246-6a947c379c02_observer_summary_and_output.py","alembic/versions/2025_01_14_1641-46e38fc53f64_observer_webhook_callback_url_totp_.py","alembic/versions/2025_01_15_1504-9adef4708ca8_persistent_browser_add_status_and_.py","alembic/versions/2025_01_21_2337-13e4af5c975c_add_thought_cost_input_token_count_and_.py","alembic/versions/2025_01_24_1855-3a37869686bd_add_index_to_org_id_and_title_in_.py","alembic/versions/2025_01_24_2003-26dc22efaf0b_add_status_to_workflow_table.py","alembic/versions/2025_01_24_2014-957ad2d1d3f7_add_workflow_oid_status_idx_index_to_.py","alembic/versions/2025_01_28_0853-3aa0ef96942d_add_block_workflow_run_id_to_workflow_.py","alembic/versions/2025_01_29_0554-5dd8928389c5_add_residential_de_proxy.py","alembic/versions/2025_01_29_0738-df80b5d155d0_add_action_org_created_at_index.py","alembic/versions/2025_02_05_1839-ebf093461132_change_proxy_location_enum.py","alembic/versions/2025_02_09_1226-60d0743274c9_add_task_runs.py","alembic/versions/2025_02_11_0641-b111f0f795bd_add_task_run_org_run_id_index.py","alembic/versions/2025_02_13_1554-26c5ed737819_added_credentials_table_and_credential_.py","alembic/versions/2025_02_20_2146-b4bb0b98912a_change_credentials_table_add_.py","alembic/versions/2025_03_01_0428-a21b9f4f51d2_add_index_for_workflow_run_and_workflow_.py","alembic/versions/2025_03_03_1642-268dcc995513_add_bitwarden_item_id_and_make_url_.py","alembic/versions/2025_03_18_1850-c6c0eee7f88d_add_error_code_mapping_and_extracted_.py","alembic/versions/2025_03_20_2324-3aa168d1ffa5_keep_track_of_reasoning_token_and_.py","alembic/versions/2025_04_21_0019-511d9da18f5d_add_workflow_run_id_to_totp_code_model.py","alembic/versions/2025_05_02_1148-e8285b6ddcf0_drop_most_foreign_keys.py","alembic/versions/2025_05_05_1008-07cb499ecbce_add_max_steps_to_task_v2_table.py","alembic/versions/2025_05_13_2210-11b84609ef08_add_started_at_and_completed_at_to_the_.py","alembic/versions/2025_05_15_1507-d90177b2b935_add_include_action_history_in_.py","alembic/versions/2025_05_15_1919-ecdba16ef45c_remove_include_history_flag_out_of_.py","alembic/versions/2025_05_29_1435-af49ca791fc7_add_model_column_to_workflows_table.py","alembic/versions/2025_05_31_0300-babaa7307e8a_add_model_column_to_task_v1_v2_tables.py","alembic/versions/2025_06_02_0050-add_run_timestamps.py","alembic/versions/2025_06_12_0806-1517a4ba63fa_db_script_for_1password_integration.py","alembic/versions/2025_06_14_0649-2c6b27e8e961_add_screenshot_scroll_number.py","alembic/versions/2025_06_17_0723-2be3e0ba85ff_add_engine_to_workflow_run_block.py","alembic/versions/2025_06_19_0740-a9fd7a08469c_add_extra_headers.py","alembic/versions/2025_06_19_2002-2d2f165170f1_remove_unused_index_on_primary_key.py","alembic/versions/2025_06_19_2259-afeed80576cb_add_index_for_artifacts_table_.py","alembic/versions/2025_06_26_1455-760ae45a1345_add_run_id_column_to_artifacts_table.py","alembic/versions/2025_06_27_0211-6cf2c1e15039_add_http_request_block_columns_to_.py","alembic/versions/2025_07_03_1837-f63892bfc429_add_browser_session_id_to_tasks_.py","alembic/versions/2025_07_17_0612-2e997076a3aa_add_more_info_to_browser_session.py","alembic/versions/2025_07_28_1411-044b4a3c3dbc_add_debug_sessions_table.py","alembic/versions/2025_07_28_1606-1d0a10ae2a13_add_webhook_failure_reason.py","alembic/versions/2025_07_30_2249-f72cf593e1a7_add_projects_table.py","alembic/versions/2025_07_30_2338-bddb54c1509b_add_deleted_at_column_to_debug_sessions_.py","alembic/versions/2025_07_31_1342-0ecb03206fc6_add_status_column_to_debug_sessions_.py","alembic/versions/2025_07_31_1609-1b2a8b62de61_add_project_files_table.py","alembic/versions/2025_08_01_1631-2e58ef1b3d8b_add_1password_service_account_token_type.py","alembic/versions/2025_08_01_2306-1eedd7a957d1_remove_workflow_permanent_id_from_.py","alembic/versions/2025_08_05_0432-dd29417b397c_add_encrypt_token_and_method.py","alembic/versions/2025_08_06_0704-f2e78df26c97_add_cache_key_to_workflows_table.py","alembic/versions/2025_08_06_1946-2fe3e908a028_add_workflow_scripts_table.py","alembic/versions/2025_08_07_0449-0135ee8b36b0_rename_project_projects_script_scripts.py","alembic/versions/2025_08_07_1530-d67d7c00ab02_add_finished_at_to_steps_table.py","alembic/versions/2025_08_08_2105-92d665af080e_add_script_blocks_table.py","alembic/versions/2025_08_09_0105-a027553be970_add_organization_id_to_script_blocks.py","alembic/versions/2025_08_10_1557-944ef972e5a8_workflow_use_cache_generate_script.py","alembic/versions/2025_08_11_0553-20e960cf015d_script_blocks_script_file_id_from_.py","alembic/versions/2025_08_21_0313-afdfd14ac46d_add_cdp_address_in_task_and_workflow.py","alembic/versions/2025_08_22_1343-f148f36edc09_add_created_by_to_actions_table.py","alembic/versions/2025_08_23_0151-1bba8a38ddc7_remove_unique_constraints_for_workflow_.py","alembic/versions/2025_08_28_2112-d3ec63728c2a_add_ai_fallback_field_to_workflows_table.py","alembic/versions/2025_08_28_2356-f54bab75b1c4_add_block_runs_table.py","alembic/versions/2025_08_31_0606-ee2f523ea454_update_workflow_scripts_wpid_index.py","alembic/versions/2025_08_31_0618-8de03b8cb83a_add_generate_script_to_task_v2_table.py","alembic/versions/2025_09_11_2038-bbcc08ba09f5_add_input_or_select_context_column_to_.py","alembic/versions/2025_09_12_1313-d15d85a702a4_add_vnc_support_in_debug_session_model.py","alembic/versions/2025_09_12_1622-f78486c3f895_create_azure_vault_credential_.py","alembic/versions/2025_09_15_0540-8998d998feed_db_migration_script.py","alembic/versions/2025_09_17_1458-67add341e926_add_status_to_the_workflow_scripts_.py","alembic/versions/2025_09_18_0529-8f208daee7d1_add_workflow_sequential_setting.py","alembic/versions/2025_09_18_0916-4937dff73027_add_browser_session_proxy_schema.py","alembic/versions/2025_09_19_1414-6692fb5a3e91_add_run_with_to_workflow_runs_table.py","alembic/versions/2025_09_24_0347-4925c34e8d58_add_sequential_key.py","alembic/versions/2025_09_25_1503-e0ccabc005af_add_created_at_index_for_multiple_tables.py","alembic/versions/2025_09_29_1900-ac9d96ea0501_add_run_with_to_workflows_table_and_.py","alembic/versions/2025_10_01_1116-c50ee6f26432_add_debug_session_id_to_workflow_runs_.py","alembic/versions/2025_10_01_2107-d36daac4941e_add_ai_fallback_to_workflow_runs.py","alembic/versions/2025_10_02_2256-cce87185dbb5_add_code_gen_column_to_workflow_runs.py","alembic/versions/2025_10_06_1504-1ab477ef80e4_add_download_timeout_to_tasks_table.py","alembic/versions/2025_10_08_0753-81351201bc8d_add_depends_on_workflow_run_id.py","alembic/versions/2025_10_08_1822-8d015c5358f8_add_totp_type_to_credentials.py","alembic/versions/2025_10_09_0827-7cd6f55be8d2_add_job_id_idx.py","alembic/versions/2025_10_10_1533-d648e2df239e_creds_in_azure_vault.py","alembic/versions/2025_10_14_0819-774e10939484_add_magic_link_type_otp.py","alembic/versions/2025_10_14_2232-b80c42316c94_add_run_signature_to_script_block.py","alembic/versions/2025_10_27_1843-d135e472622c_add_fields_to_workflow_run_blocks_table.py","alembic/versions/2025_10_30_1414-541870962332_add_folders_table.py","alembic/versions/2025_10_30_1425-b61cf349aa4b_add_import_tracking_to_workflows.py","alembic/versions/2025_11_03_0424-2903b6252f31_add_workflow_run_id_workflow_run_block_.py","alembic/versions/2025_11_05_0126-7fbf463be9a7_add_browser_profiles_table.py","alembic/versions/2025_11_05_1523-2c34dee3304e_merge_migration_heads.py","alembic/versions/2025_11_06_0805-89d531e8b4ed_oss_sync_alembic.py","alembic/versions/2025_11_06_0857-7581811d57b1_oss_sync_alembic.py","alembic/versions/2025_11_06_0914-39e16cf92225_oss_sync_alembic.py","alembic/versions/2025_11_19_1929-1001a00ed620_add_depends_on_workflow_run_id_index.py","alembic/versions/2025_12_02_1717-24bd4ab81e07_add_browser_session_history_index.py","alembic/versions/2025_12_04_0703-44e95cb21d98_add_more_browser_session_history_index.py","alembic/versions/2025_12_04_2120-152354699b93_db_migration_created_by_steps.py","alembic/versions/2025_12_07_2027-135afee6e7bc_update_migration_script.py","alembic/versions/2025_12_09_1856-1faa2a5869cd_add_secrets_col.py","alembic/versions/2025_12_09_2308-67784da0203e_add_columns_to_task_runs_table.py","alembic/versions/2025_12_10_1915-174dcd456325_add_memory_mb_to_task_runs.py","alembic/versions/2025_12_10_2211-cf6ae2f5013c_make_browser_address_a_unique_key_in_.py","alembic/versions/2025_12_10_2356-7ab8e817802a_add_script_blocks_input_fields.py","alembic/versions/2025_12_12_0232-b4738bd17198_workflow_templates_table_updates_oss.py","alembic/versions/2025_12_24_0456-e393f33ec711_add_extension_for_browser_session.py","alembic/versions/2026_01_06_2148-db8667f8ce63_workflow_copilot_chat.py","alembic/versions/2026_01_06_2254-3545c24f02f6_add_screenshot_artifact_id_to_actions.py","alembic/versions/2026_01_07_0735-18a4ed894511_add_browser_type_to_pbs.py","alembic/versions/2026_01_15_0713-a720c991f779_add_index.py","alembic/versions/2026_01_22_0314-ce791d022652_add_browser_session_v2_compute_fields.py","alembic/versions/2026_01_27_2020-43217e31df12_workflow_copilot_chat_proposed_workflow.py","alembic/versions/2026_02_13_0000-add_2fa_waiting_state_fields.py","alembic/versions/2026_02_19_2317-dc37d888db44_browser_profile_testing_login_free_.py","alembic/versions/2026_02_27_1200-700dfebe7c5f_add_adaptive_caching_tables.py","alembic/versions/2026_03_02_1822-48fb938c9220_browser_profile.py","alembic/versions/2026_03_05_0910-a86c9fdba6b3_add_index_to_workflow_run_browser_.py","alembic/versions/2026_03_06_1804-08f585f2e7a6_partial_index_for_artifacts_table.py","alembic/versions/2026_03_13_0122-b37f05a2bfbf_user_context_for_credentials_table.py","alembic/versions/2026_03_13_1956-d38cca7e13b8_add_bundle_key_column_to_artifacts.py","alembic/versions/2026_03_15_1200-7dc73e5b2fe4_add_script_pinning_columns.py","alembic/versions/2026_03_17_2254-def7c03f425d_add_idx_workflow_scripts_org_script_id_.py","alembic/versions/2026_03_18_0220-e8c78980ed9d_add_workflow_schedules_table_and_.py","alembic/versions/2026_03_19_0735-786acdf95243_add_error_codes_to_workflow_run_blocks.py","alembic/versions/2026_03_23_1904-6e966003a58e_add_save_browser_session_intent_to_.py","alembic/versions/2026_03_25_0021-01dbfbf87496_remove_non_partial_indexes.py","alembic/versions/2026_03_25_0106-787109c06571_code_version_db_migration.py","alembic/versions/2026_03_26_1805-6904dea5f7de_add_failure_category_to_tasks_workflow_.py","alembic/versions/2026_03_26_2157-d77ed2605df0_failure_category_in_runs.py","alembic/versions/2026_03_31_1915-5516c5bf7762_add_run_history_columns_to_task_runs.py","alembic/versions/2026_04_03_0111-f7bf5845eafb_add_content_hash_dedup_index_to_script_files.py","alembic/versions/2026_04_14_2044-12f6731887f4_add_last_llm_model_to_steps_and_observer_thoughts.py","alembic/versions/2026_04_14_2233-c9005bafa5ec_restore_include_extracted_text_to_tasks.py","alembic/versions/2026_04_24_2353-c19d7d385560_add_llm_cost_to_workflow_run_blocks.py","alembic/versions/2026_04_25_0046-d1474f2d1581_add_script_run_to_workflow_run_blocks.py","alembic/versions/2026_04_25_2140-70b5f11e3655_checksum_in_artifacts_workflow_system_.py","alembic/versions/2026_04_26_0338-bd362c15b74b_add_copilot_attribution_columns.py","alembic/versions/2026_04_26_2142-2d0f9407ffac_add_browser_session_id_to_artifacts.py","alembic/versions/2026_04_27_1542-a5fe08ea4990_add_artifact_url_expiry_seconds_to_organizations.py","alembic/versions/2026_04_30_0904-696a7bba1ce6_add_source_browser_type_to_browser_profiles.py","alembic/versions/2026_05_04_2320-b19685399f97_credits_used_cached_credits_used.py","alembic/versions/2026_05_05_0445-53a306b96ed7_add_consent_app_origin_to_google_oauth_credentials.py","alembic/versions/2026_05_05_0445-768c42c4968a_add_google_oauth_credentials_collapsed_consent_credential_in_one_row.py","alembic/versions/2026_05_06_0322-289f2d72b0c2_add_max_steps_per_workflow_run_to_organizations.py","alembic/versions/2026_05_08_0815-78a8db531e69_add_file_size_to_artifacts.py","alembic/versions/2026_05_11_2257-43e7421f40f8_drop_status_is_not_null_predicate_from_ix_task_runs_org_toplevel_created.py","alembic/versions/2026_05_12_2000-5b15948c8d68_add_status_indexes_for_workflow_runs_and_tasks.py","alembic/versions/2026_05_12_2026-d8f04a23d52b_add_browser_profile_id_to_workflows.py","alembic/versions/2026_05_14_1030-d1e2f3a4b5c6_add_reviewer_version_to_script_fallback_episodes.py","alembic/versions/2026_05_14_1100-d7e8f9a0b1c2_add_composite_index_org_wrid_on_script_fallback_episodes.py","alembic/versions/2026_05_15_1616-5f28f1f478d5_add_cdp_connect_headers.py","alembic/versions/2026_05_17_1845-11a965fb5d82_drop_cdp_connect_headers.py","alembic/versions/2026_05_22_1755-9f512f2da31e_add_cdp_connect_headers.py","alembic/versions/2026_05_22_2059-0b0bd1875c6e_add_cdp_connect_headers.py","alembic/versions/2026_05_23_1202-729b4078a2e9_add_workflow_tag_tables.py","alembic/versions/2026_05_24_1812-8a7754a48701_add_turn_outcome_column_to_workflow_copilot_chat_messages.py","alembic/versions/2026_05_27_1503-4b254743ea85_add_max_elapsed_time_to_workflows_and_workflow_runs.py","alembic/versions/2026_05_27_1605-0d28973280f5_add_caller_type_to_workflow_tag_events.py","alembic/versions/2026_05_28_0106-c636e511753d_add_cost_columns_to_task_runs.py","alembic/versions/2026_05_29_2154-ed48b2c9cab2_add_narrative_payload_column_to_workflow_copilot_chat_messages.py","alembic/versions/2026_06_04_0930-8266bacba614_add_credential_folders.py","alembic/versions/2026_06_09_1634-4dbd183edee0_tagging_key_optional_labels_nullable_key_dual_partial_unique.py","alembic/versions/2026_06_10_1800-f3a9c2b7e1d4_add_generate_browser_profile_to_persistent_browser_sessions.py","alembic/versions/2026_06_11_2030-a8c4e2f9d6b1_add_audio_artifact_id_to_workflow_copilot_chat_messages.py","alembic/versions/2026_06_14_2221-218048b68412_add_workflow_copilot_completion_criteria_sets_table.py","alembic/versions/2026_06_16_0803-cfc2318acdf9_add_sequential_key_lookup_index_on_workflow_runs.py","alembic/versions/2026_06_16_1253-1fee32b3d7c6_add_browser_profile_loaded_to_persistent_browser_sessions.py","alembic/versions/2026_06_19_2044-58b0ced36529_add_downloaded_file_count_to_workflow_run_blocks.py","alembic/versions/2026_06_22_1122-61c9acf9f3ba_add_copilot_chat_history_indexes.py","alembic/versions/2026_06_24_1630-2c76348b4e7a_add_tag_values_table.py","alembic/versions/2026_06_25_0017-45128d67bc1a_add_browser_profile_key_to_workflows.py","alembic/versions/2026_06_26_1926-a1cad008154a_add_proxy_pin_fields.py","alembic/versions/2026_07_02_2317-ecf365563e98_managed_browser_profiles_for_save_and_reuse_session.py","alembic/versions/2026_07_03_0333-2ac47bc1c075_add_enable_self_healing_to_workflows.py","alembic/versions/2026_07_03_1853-aff1632dc377_add_workflow_run_credential_selections.py","alembic/versions/2026_07_07_1535-e2d87251fee8_browser_profile_name_unique_partial_on_deleted_at.py","alembic/versions/2026_07_07_2121-5b618ec6dce6_add_pin_saved_session_ip_to_workflows.py","alembic/versions/2026_07_08_1754-bec06d149264_add_workflow_run_tag_events_table.py","alembic/versions/2026_07_09_2247-e1227914ecfe_add_heal_episodes_and_proposals.py","alembic/versions/2026_07_10_0303-e4db575f75ee_allow_system_source_on_workflow_tag_events.py","alembic/versions/2026_07_10_2309-7a729fa75d9b_bind_google_oauth_credentials_client_config.py","alembic/versions/2026_07_11_0215-062b0fc39d36_add_microsoft_oauth_credentials.py","alembic/versions/2026_07_12_1933-a0d23605c574_add_topup_credits_used_to_workflow_runs.py","alembic/versions/2026_07_14_1836-2b8e37d98d97_add_heal_episode_workflow_block_label_index.py","alembic/versions/2026_07_15_0208-1915b0e1126e_grant_public_schema_privileges_and_default_privileges_to_the_k8s_app_roles.py","alembic/versions/2026_07_17_1752-d9ab2c4d41e5_add_credential_fallback_fields.py","alembic/versions/2026_07_18_0514-f2bad0d757f9_add_cdp_routing_columns_to_persistent_browser_sessions.py","alembic/versions/2026_07_24_2300-9c1f2a7be4d0_sync_browser_profile_and_browser_seed_columns.py","alembic/versions/2026_07_28_1744-ff4452dc827f_add_last_activity_at_to_persistent_browser_sessions.py","alembic/versions/2026_07_28_2230-b0941c6bd241_partial_index_for_the_vendor_held_session_lease_sweep_sky_13158.py","alembic/versions/2026_07_29_0814-304752078903_add_parse_status_to_totp_codes.py","alembic/versions/2026_07_29_1830-1fe4efc6b752_invalidate_cross_organization_task_generation_cache_copies.py","alembic/versions/2026_07_30_0957-58c683692601_add_credential_run_serialization.py","alembic/versions/2026_07_30_0957-64cbada89956_add_credential_gate_indexes.py","alembic/versions/2026_07_31_1522-9d85c51a8468_add_oauth_credential_email_addresses.py","alembic/versions/2026_07_31_1634-92ebe14532b9_add_pending_turns_to_workflow_copilot_chats.py","alembic/versions/2026_07_31_2340-f3a7c1d9e482_add_action_execution_timestamps.py","alembic/versions/2026_08_01_0519-04647fa4df41_add_workflow_run_blocks_final_url.py","alembic/versions/2026_08_01_2301-70e4ff9019f1_.py","alembic/versions/2026_08_02_0328-e1ffa32660cc_add_org_default_llm_keys.py","alembic/versions/2026_08_04_0637-1ee67c216fca_add_runnable_generation_id_to_persistent_browser_sessions.py","alembic/versions/2026_08_06_2232-ec34d7f81ad4_add_browser_runtime_to_workflow_runs.py","alembic/versions/2026_08_07_1956-a3b94b945dac_add_auto_profile_disabled_to_credentials.py","alembic/versions/2026_08_14_0137-ceb0b2b5836b_add_secure_runner_pinned_to_workflow_runs.py","bitwarden-cli-server/Dockerfile","bitwarden-cli-server/README.md","bitwarden-cli-server/entrypoint.sh","conftest.py","docker-compose.yml","docs/api-reference/openapi.json","docs/changelog-emails/2026-05-may.md","docs/changelog-emails/2026-06-june.md","docs/changelog-emails/2026-07-july.md","docs/changelog-emails/images/2026-04-01-copilot-v2.png","docs/changelog-emails/images/2026-04-02-mcp-oauth.png","docs/changelog-emails/images/2026-04-03-cli-schedule-config.png","docs/changelog-emails/images/2026-04-04-ai-summarize.png","docs/changelog-emails/images/2026-04-05-error-code-mapping.png","docs/changelog-emails/images/2026-04-06-debugger-run-dialog.png","docs/changelog-emails/images/2026-05-00-header.png","docs/changelog-emails/images/2026-05-01-draggable-editor.png","docs/changelog-emails/images/2026-05-02-run-page-redesign.png","docs/changelog-emails/images/2026-05-03-while-loop.png","docs/changelog-emails/images/2026-05-04-analytics-dashboard.png","docs/changelog-emails/images/2026-05-05-copilot.png","docs/changelog-emails/images/2026-05-06-run-control.png","docs/changelog-emails/images/2026-05-07-self-hosting.png","docs/changelog-emails/images/2026-05-08-browser-profiles.png","docs/changelog-emails/images/2026-06-00-header.png","docs/changelog-emails/images/2026-06-01-agents-rename.png","docs/changelog-emails/images/2026-06-02-workflow-studio.png","docs/changelog-emails/images/2026-06-03-code-first.png","docs/changelog-emails/images/2026-06-04-copilot.png","docs/changelog-emails/images/2026-06-05-models.png","docs/changelog-emails/images/2026-06-06-credentials.png","docs/changelog-emails/images/2026-06-07-multi-tab.png","docs/changelog-emails/images/2026-06-08-gcp-self-host.png","docs/changelog-emails/images/2026-07-00-header.png","docs/changelog-emails/images/2026-07-01-workflow-studio-ga.png","docs/changelog-emails/images/2026-07-02-hitl-approvals.png","docs/changelog-emails/images/2026-07-03-browser-recording-code.png","docs/changelog-emails/images/2026-07-04-credentials.png","docs/changelog-emails/images/2026-07-05-file-pipelines.png","docs/changelog-emails/images/2026-07-06-run-tags-digest.png","docs/changelog-emails/images/2026-07-07-custom-llms-models.png","docs/changelog-emails/images/2026-07-08-self-healing.png","docs/changelog-emails/templates/changelog-header-template.png","docs/changelog.mdx","docs/cloud/account-settings/api-keys.mdx","docs/cloud/account-settings/billing-usage.mdx","docs/cloud/account-settings/organization-settings.mdx","docs/cloud/account-settings/profile-settings.mdx","docs/cloud/browser-management/browser-profiles.mdx","docs/cloud/browser-management/browser-sessions.mdx","docs/cloud/building-agents/add-parameters.mdx","docs/cloud/building-agents/build-an-agent.mdx","docs/cloud/building-agents/configure-blocks.mdx","docs/cloud/building-agents/manage-agents.mdx","docs/cloud/building-agents/run-an-agent.mdx","docs/cloud/building-agents/run-from-code.mdx","docs/cloud/building-agents/scheduling.mdx","docs/cloud/getting-started/ai-agents-quickstart.mdx","docs/cloud/getting-started/core-concepts.mdx","docs/cloud/getting-started/introduction.mdx","docs/cloud/getting-started/mcp.mdx","docs/cloud/getting-started/monitor-a-run.mdx","docs/cloud/getting-started/overview.mdx","docs/cloud/getting-started/run-a-task.mdx","docs/cloud/getting-started/run-from-code.mdx","docs/cloud/getting-started/run-your-first-task.mdx","docs/cloud/managing-credentials/credentials-overview.mdx","docs/cloud/managing-credentials/credit-card-credentials.mdx","docs/cloud/managing-credentials/external-providers.mdx","docs/cloud/managing-credentials/password-credentials.mdx","docs/cloud/managing-credentials/totp-setup.mdx","docs/cloud/viewing-results/downloading-artifacts.mdx","docs/cloud/viewing-results/run-details.mdx","docs/cloud/viewing-results/run-history.mdx","docs/cookbooks/bulk-invoice-downloader.mdx","docs/cookbooks/healthcare-portal-data.mdx","docs/cookbooks/job-application-filler.mdx","docs/cookbooks/overview.mdx","docs/design/2026-06-15-workflow-build-recent-activity-design.md","docs/design/activity-timeline-placements.png","docs/design/activity-timeline-preview.png","docs/developers/browser-automations/actions-reference.mdx","docs/developers/browser-automations/extract-structured-data.mdx","docs/developers/browser-automations/handle-browsers.mdx","docs/developers/browser-automations/overview.mdx","docs/developers/browser-automations/work-with-files.mdx","docs/developers/credentials/handle-2fa.mdx","docs/developers/credentials/store-credentials.mdx","docs/developers/credentials/troubleshooting-login.mdx","docs/developers/debugging/faq.mdx","docs/developers/debugging/observability-with-laminar.mdx","docs/developers/debugging/troubleshooting-guide.mdx","docs/developers/debugging/using-artifacts.mdx","docs/developers/features/authentication-and-2fa.mdx","docs/developers/features/browser-sessions.mdx","docs/developers/features/captcha-and-bot-bypass.mdx","docs/developers/features/code-caching.mdx","docs/developers/features/proxy-and-geo-targeting.mdx","docs/developers/getting-started/ai-agents-quickstart.mdx","docs/developers/getting-started/core-concepts.mdx","docs/developers/getting-started/introduction.mdx"],"storefront":"/r/Skyvern-AI","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Skyvern-AI/skyvern/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}