# https://github.com/Skyvern-AI/skyvern 项目说明书

生成时间：2026-05-12 01:23:02 UTC

## 目录

- [Skyvern 项目介绍](#page-introduction)
- [快速开始指南](#page-quickstart)
- [系统架构设计](#page-architecture)
- [AI 代理系统](#page-agents)
- [任务系统](#page-tasks)
- [工作流系统](#page-workflows)
- [浏览器自动化](#page-browser-automation)
- [数据库与数据模型](#page-database)
- [凭证管理系统](#page-credentials)
- [前端组件结构](#page-frontend)

<a id='page-introduction'></a>

## Skyvern 项目介绍

### 相关页面

相关主题：[快速开始指南](#page-quickstart), [系统架构设计](#page-architecture)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
- [skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx)
- [skyvern-frontend/src/routes/tasks/create/SavedTaskForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/SavedTaskForm.tsx)
- [skyvern-frontend/src/routes/workflows/editor/Workspace.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/Workspace.tsx)
- [skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx)
- [skyvern/cli/mcp_tools/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)
- [skyvern/forge/sdk/api/aws.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/api/aws.py)
</details>

# Skyvern 项目介绍

## 项目概述

Skyvern 是一个开源的 **Web 自动化平台**，通过自然语言描述即可自动化执行复杂的网络任务。该项目结合了大型语言模型（LLM）和浏览器自动化技术，使非技术用户也能轻松创建和管理自动化工作流程。

Skyvern 的核心功能包括：

- **自然语言驱动的网页导航**：用户只需描述任务目标，Skyvern 即可自动分析网页结构并执行相应操作
- **多步骤工作流编排**：支持创建、编辑和调度复杂的自动化工作流
- **身份验证与凭证管理**：内置对 TOTP/2FA、Magic Link 等多因素认证的支持
- **浏览器会话管理**：支持持久化浏览器会话和远程浏览器连接
- **灵活的代理路由**：可配置代理位置以满足地理位置需求

资料来源：[README.md:1]()

## 系统架构

Skyvern 采用前后端分离的架构设计，主要由以下组件构成：

```mermaid
graph TD
    A[用户界面<br/>Skyvern Frontend] --> B[Skyvern Backend<br/>API 服务]
    B --> C[浏览器自动化引擎<br/>Forge SDK]
    C --> D[浏览器实例<br/>Chrome/Remote CDP]
    B --> E[数据库<br/>持久化存储]
    B --> F[LLM 提供商<br/>OpenAI/Anthropic/etc.]
```

### 核心组件

| 组件 | 说明 | 技术栈 |
|------|------|--------|
| Skyvern Frontend | Web 用户界面 | React, TypeScript, Tailwind CSS |
| Skyvern Backend | RESTful API 服务 | Python (FastAPI) |
| Forge SDK | 浏览器自动化 SDK | Python |
| MCP Tools | Model Context Protocol 工具集 | Python |

资料来源：[skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx:1]()
资料来源：[skyvern-frontend/src/routes/workflows/editor/Workspace.tsx:1]()

## 主要功能模块

### 任务管理 (Tasks)

任务是 Skyvern 的核心执行单元，用户通过自然语言描述导航目标。

```mermaid
graph LR
    A[创建任务] --> B[填写导航目标<br/>Navigation Goal]
    B --> C{高级设置}
    C -->|是| D[配置导航载荷<br/>Navigation Payload]
    C -->|否| E[提交任务]
    D --> E
    E --> F[任务执行]
    F --> G[结果记录]
```

#### 任务创建表单

任务创建支持以下关键字段：

| 字段名 | 类型 | 说明 |
|--------|------|------|
| Navigation Goal | 文本 | 描述 Skyvern 需要执行的操作和目标位置 |
| Navigation Payload | JSON | 指定路由参数、状态或重要参数 |
| Proxy Location | 选择项 | 代理服务器地理位置 |
| Browser Session ID | 文本 | 持久化浏览器会话标识符 (格式: `pbs_xxx`) |
| CDP Address | 文本 | 远程浏览器地址 (如 `http://127.0.0.1:9222`) |

资料来源：[skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx:1]()
资料来源：[skyvern-frontend/src/routes/tasks/create/PromptBox.tsx:1]()

### 工作流管理 (Workflows)

工作流允许用户编排多步骤的自动化任务链。

```mermaid
graph TD
    A[工作流编辑器<br/>Workflow Editor] --> B[版本对比<br/>Comparison Panel]
    B --> C{对比模式}
    C -->|历史模式| D[版本历史查看]
    C -->|Copilot 模式| E[AI 辅助审查]
    D --> F[选择版本]
    E --> G[接受/拒绝变更]
```

#### 工作流脚本

每个工作流可以包含多个脚本版本，支持以下功能：

- 脚本缓存键管理
- 版本历史追踪
- 单版本运行统计
- 成功率监控

| 指标 | 说明 |
|------|------|
| Total Revisions | 脚本总版本数 |
| Runs | 当前版本运行次数 |
| Success Rate | 成功率 (≥80% 绿色, ≥50% 黄色, <50% 红色) |
| Last Updated | 最后更新时间 |

资料来源：[skyvern-frontend/src/routes/workflows/WorkflowScriptsPage.tsx:1]()
资料来源：[skyvern-frontend/src/routes/workflows/WorkflowScriptDetailPage.tsx:1]()

### 凭证与认证管理

Skyvern 支持多种凭证存储和认证方式。

#### TOTP/2FA 处理

| 功能 | 说明 |
|------|------|
| Numeric Code | 数字验证码 (6位) |
| Magic Link | 魔术链接认证 |
| Push Notification | 推送通知验证 |

凭证列表显示以下信息：

| 字段 | 说明 |
|------|------|
| Identifier | 邮箱或手机号码 |
| Code | 验证码内容 |
| Source | 来源服务 |
| Workflow Run | 关联的工作流运行 |
| Created | 创建时间 |
| Expires | 过期时间 |

资料来源：[skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx:1]()

### 调度管理 (Schedules)

支持基于 Cron 表达式的定时任务调度。

| 配置项 | 说明 |
|--------|------|
| Cron Expression | Cron 表达式 |
| Timezone | 时区设置 |
| Next Scheduled Runs | 即将执行的运行时间预览 |

资料来源：[skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx:1]()

## MCP 工具集

Skyvern CLI 提供丰富的 MCP (Model Context Protocol) 工具，可与 Claude 等 AI 助手集成。

### 交互操作工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_click` | 点击页面元素 |
| `skyvern_type` | 输入文本内容 |
| `skyvern_scroll` | 滚动页面 |
| `skyvern_hover` | 鼠标悬停 |
| `skyvern_select_option` | 选择下拉选项 |
| `skyvern_press_key` | 模拟按键 |
| `skyvern_drag` | 拖拽操作 |
| `skyvern_file_upload` | 文件上传 |
| `skyvern_wait` | 等待指定时间 |

### 数据提取工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_extract` | 结构化 JSON 数据提取 |
| `skyvern_screenshot` | 页面截图 |
| `skyvern_find` | 元素查找 |
| `skyvern_validate` | 数据验证 |
| `skyvern_evaluate` | 执行 JavaScript 代码 |
| `skyvern_get_html` | 获取页面 HTML |
| `skyvern_get_value` | 获取表单值 |
| `skyvern_get_styles` | 获取元素样式 |

### 身份验证工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_login` | 执行登录操作 |
| `skyvern_credential_list` | 列出存储凭证 |
| `skyvern_credential_get` | 获取凭证详情 |
| `skyvern_credential_delete` | 删除凭证 |

支持的凭证存储服务：

- Skyvern Vault
- Bitwarden
- 1Password
- Azure Key Vault

### 标签页与框架工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_tab_new` | 打开新标签页 |
| `skyvern_tab_list` | 列出所有标签页 |
| `skyvern_tab_switch` | 切换标签页 |
| `skyvern_tab_close` | 关闭标签页 |
| `skyvern_tab_wait_for_new` | 等待新标签页出现 |
| `skyvern_frame_list` | 列出 iframe 框架 |
| `skyvern_frame_switch` | 切换框架 |
| `skyvern_frame_main` | 返回主框架 |

### 网络与控制台工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_console_messages` | 获取控制台消息 |
| `skyvern_network_requests` | 列出网络请求 |
| `skyvern_network_request_detail` | 请求详情查看 |
| `skyvern_network_route` | 设置请求路由 |
| `skyvern_network_unroute` | 取消请求路由 |
| `skyvern_get_errors` | 获取页面错误 |
| `skyvern_har_start` | 开始 HAR 录制 |
| `skyvern_har_stop` | 停止 HAR 录制 |
| `skyvern_handle_dialog` | 处理弹窗对话框 |

### 浏览器状态工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_state_save` | 保存浏览器状态 |
| `skyvern_state_load` | 加载浏览器状态 |
| `skyvern_get_session_storage` | 获取 Session Storage |
| `skyvern_set_session_storage` | 设置 Session Storage |
| `skyvern_clear_session_storage` | 清除 Session Storage |
| `skyvern_clear_local_storage` | 清除 Local Storage |
| `skyvern_clipboard_read` | 读取剪贴板 |
| `skyvern_clipboard_write` | 写入剪贴板 |

### 工作流集成工具

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_workflow_create` | 创建工作流 |
| `skyvern_workflow_list` | 列出工作流 |
| `skyvern_workflow_get` | 获取工作流详情 |

资料来源：[skyvern/cli/mcp_tools/README.md:1]()

## 支持的大语言模型

Skyvern 支持多种 LLM 提供商的模型：

| 提供商 | 支持的模型 |
|--------|------------|
| **OpenAI** | GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini |
| **Anthropic** | Claude 4.7 Opus, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Haiku, Sonnet, Opus) |
| **Azure OpenAI** | 任意部署到 Azure 的 GPT 模型 |
| **AWS Bedrock** | Claude 4.7, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Sonnet, Opus) |
| **Gemini** | Gemini 3.1 Pro, Gemini 3 Flash |

资料来源：[README.md:1]()

## 本地运行与部署

### 环境要求

- Python 3.10+
- uv 包管理器

### 快速开始步骤

```bash
# 1. 创建虚拟环境
uv sync --group dev

# 2. 执行初始化配置
uv run skyvern quickstart

# 3. 访问 Web UI
# http://localhost:8080
```

### 代码运行模式

```bash
# 安装 Skyvern
pip install skyvern

# 初始化配置
skyvern quickstart

# 运行代码文件
skyvern run code --params '{"param1": "val1", "param2": "val2"}' main.py
```

资料来源：[README.md:1]()
资料来源：[skyvern-frontend/src/routes/workflows/editor/Workspace.tsx:1]()

## 遥测与隐私

Skyvern 默认收集基本的使用统计数据以帮助改进产品。

**退出遥测收集：**

```bash
export SKYVERN_TELEMETRY=false
```

资料来源：[README.md:1]()

## 许可证

Skyvern 开源仓库采用 **AGPL-3.0 许可证**。

例外情况：托管云服务中的反机器人功能属于商业闭源功能，不包含在开源版本中。

资料来源：[README.md:1]()

## 开发者资源

| 资源 | 链接 |
|------|------|
| 贡献指南 | [CONTRIBUTING.md](https://github.com/Skyvern-AI/skyvern/blob/main/CONTRIBUTING.md) |
| 官方文档 | https://www.skyvern.com/docs |
| Help Wanted Issues | [GitHub Issues](https://github.com/skyvern-ai/skyvern/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) |
| Discord 社区 | https://discord.gg/fG2XXEuQX3 |
| 邮箱支持 | founders@skyvern.com |

如需获取项目的高级概述、构建方法或使用问题解答，可使用 **Code Sage** AI 助手：

> https://sage.storia.ai

资料来源：[README.md:1]()

---

<a id='page-quickstart'></a>

## 快速开始指南

### 相关页面

相关主题：[Skyvern 项目介绍](#page-introduction)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
- [docker-compose.yml](https://github.com/Skyvern-AI/skyvern/blob/main/docker-compose.yml)
- [.env.example](https://github.com/Skyvern-AI/skyvern/blob/main/.env.example)
- [skyvern/cli/quickstart.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/quickstart.py)
- [integrations/mcp/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md)
</details>

# 快速开始指南

Skyvern 是一个基于 Playwright 的 AI 驱动浏览器自动化工具，提供自然语言驱动的网页交互能力。本指南将帮助您在本地环境中快速部署和运行 Skyvern。

## 系统要求

| 组件 | 最低要求 | 说明 |
|------|----------|------|
| Python | 3.11+ | Skyvern 仅支持 Python 3.11 环境 资料来源：[integrations/mcp/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md) |
| 操作系统 | Windows/WSL/macOS/Linux | 全平台支持 |
| Docker | 最新版 | 仅 Docker 部署方式需要 |
| uv | 最新版 | 源码开发方式推荐使用 资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md) |

## 部署方式概览

```mermaid
graph TD
    A[选择部署方式] --> B[Docker Compose 部署]
    A --> C[本地源码部署]
    A --> D[MCP 扩展部署]
    
    B --> B1[安装 Docker Desktop]
    B --> B2[克隆代码仓库]
    B --> B3[配置环境变量]
    B --> B4[启动服务]
    
    C --> C1[安装 uv]
    C --> C2[创建虚拟环境]
    C --> C3[运行快速启动向导]
    C --> C4[访问 Web UI]
    
    D --> D1[安装 Skyvern]
    D --> D2[初始化配置]
    D --> D3[启动 MCP 服务器]
```

## 方式一：Docker Compose 部署（推荐）

此方式适合希望快速体验 Skyvern 的用户，所有依赖已容器化。

### 步骤 1：安装 Docker Desktop

访问 [Docker 官方网站](https://www.docker.com/products/docker-desktop/) 下载并安装 Docker Desktop。安装完成后启动 Docker 服务。

### 步骤 2：克隆代码仓库

```bash
git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern
```

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

### 步骤 3：配置环境变量

复制示例配置文件并编辑：

```bash
cp .env.example .env
```

编辑 `.env` 文件，添加您的 LLM API 密钥：

| 环境变量 | 必填 | 说明 |
|----------|------|------|
| `OPENAI_API_KEY` | 是 | OpenAI API 密钥 |
| `ANTHROPIC_API_KEY` | 否 | Anthropic Claude API 密钥 |
| `SKYVERN_TELEMETRY` | 否 | 设置为 `false` 可禁用遥测数据收集 |

资料来源：[.env.example](https://github.com/Skyvern-AI/skyvern/blob/main/.env.example)

### 步骤 4：启动服务

```bash
docker compose up -d
```

此命令将启动所有 Skyvern 组件服务，包括前端界面和后端服务。

### 步骤 5：访问 Web UI

服务启动后，在浏览器中打开 http://localhost:8080 即可访问 Skyvern 的 Web 用户界面。

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 方式二：本地源码部署

此方式适合开发者参与 Skyvern 项目开发或需要自定义扩展的用户。

### 步骤 1：安装 uv

uv 是一个快速的 Python 包管理工具。根据 [uv 官方文档](https://docs.astral.sh/uv/getting-started/installation/) 安装 uv。

### 步骤 2：创建虚拟环境并安装依赖

```bash
uv sync --group dev
```

此命令将创建 `.venv` 虚拟环境并安装所有开发依赖。

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

### 步骤 3：运行快速启动向导

```bash
uv run skyvern quickstart
```

快速启动向导将引导您完成以下配置：

1. **LLM 提供商配置** - 选择并配置您要使用的 LLM 提供商
2. **API 密钥设置** - 输入相应的 API 密钥
3. **数据库初始化** - 配置 SQLite 数据库
4. **服务端口设置** - 配置 Web UI 访问端口

资料来源：[skyvern/cli/quickstart.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/quickstart.py)

### 步骤 4：启动服务器

```bash
uv run skyvern run server
```

### 步骤 5：访问 Web UI

在浏览器中导航至 http://localhost:8080 开始使用。

## 方式三：MCP 扩展部署

Skyvern 提供 Model Context Protocol (MCP) 支持，允许 AI 应用通过 MCP 协议连接浏览器。

### 步骤 1：安装 Skyvern

```bash
pip install skyvern
```

### 步骤 2：初始化配置

```bash
skyvern init
```

初始化向导将引导您完成配置过程，支持连接到 Skyvern Cloud 或本地版本。

### 步骤 3：启动本地服务器（如需）

仅在本地模式下需要启动服务器：

```bash
skyvern run server
```

资料来源：[integrations/mcp/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md)

## 支持的 LLM 提供商

Skyvern 支持多种 LLM 提供商：

| 提供商 | 支持模型 |
|--------|----------|
| OpenAI | GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini |
| Anthropic | Claude 4.7 Opus, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Haiku, Sonnet, Opus) |
| Azure OpenAI | 任何部署到 Azure 订阅的 GPT 模型 |
| AWS Bedrock | Claude 4.7, Claude 4.6 (Sonnet, Opus), Claude 4.5 (Sonnet, Opus) |
| Gemini | Gemini 3.1 Pro, Gemini 3 Flash |

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 常见问题排查

### 问题 1：sqlite3.OperationalError - table organizations already exists

这是 1.0.31 版本中的已知 bug。解决方案：

```bash
rm ~/.skyvern/data.db   # 删除遗留的 SQLite 文件
pip install --upgrade skyvern   # 1.0.32+ 版本已修复
skyvern quickstart
```

或使用 uv 安装：

```bash
uv pip install skyvern
```

### 问题 2：pip install skyvern 失败 - ResolutionImpossible

依赖解析冲突问题。解决方案：升级到 1.0.32+ 版本或使用 uv：

```bash
uv pip install skyvern
```

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 快速验证部署

部署完成后，您可以通过以下方式验证：

1. 访问 http://localhost:8080 查看 Web UI 是否正常加载
2. 创建一个简单的导航任务测试功能
3. 检查日志确认 LLM 连接正常

## 后续步骤

- 阅读 [完整文档](https://www.skyvern.com/docs) 了解更多高级功能
- 查看 [贡献指南](CONTRIBUTING.md) 参与项目开发
- 查看 [Help Wanted](https://github.com/skyvern-ai/skyvern/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) 寻找贡献机会

## 遥测说明

Skyvern 默认收集基本使用统计信息以帮助改进产品。如需退出遥测数据收集，请设置环境变量：

```bash
SKYVERN_TELEMETRY=false
```

资料来源：[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

---

<a id='page-architecture'></a>

## 系统架构设计

### 相关页面

相关主题：[AI 代理系统](#page-agents), [前端组件结构](#page-frontend)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern/forge/forge_app.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/forge_app.py)
- [skyvern/forge/agent.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/agent.py)
- [skyvern/webeye/browser_manager.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/webeye/browser_manager.py)
- [skyvern/webeye/browser_factory.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/webeye/browser_factory.py)
- [skyvern/forge/sdk/api/aws.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/api/aws.py)
- [skyvern/cli/mcp_tools/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)
- [integrations/mcp/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md)
- [README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
</details>

# 系统架构设计

Skyvern 是一个基于大语言模型（LLM）的浏览器自动化框架，其核心设计目标是让 AI 能够自主执行复杂的网页操作任务。本文详细阐述 Skyvern 的整体系统架构、核心组件及其交互关系。

## 架构概览

Skyvern 采用分层架构设计，主要包含以下核心层：

| 层次 | 组件 | 职责 |
|------|------|------|
| API 层 | forge_app.py | 提供 RESTful API 接口，处理请求路由和业务编排 |
| 智能体层 | agent.py | 实现 LLM 驱动的决策逻辑和任务执行 |
| 浏览器层 | browser_manager.py / browser_factory.py | 管理浏览器实例的生命周期和自动化操作 |
| 存储层 | S3 / 数据库 | 管理任务状态、凭证和工作流定义 |
| 集成层 | MCP Server | 提供与外部 AI 应用的集成能力 |

资料来源：[README.md:1-50](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 核心组件架构

### Forge 应用层

Forge 是 Skyvern 的核心应用框架，负责整合所有功能模块。应用采用异步架构设计，支持高并发任务处理。

```mermaid
graph TD
    A[API 请求] --> B[Forge App]
    B --> C[Agent 引擎]
    B --> D[Browser Manager]
    B --> E[工作流引擎]
    B --> F[凭证管理]
    
    C --> G[LLM Provider]
    D --> H[Browser Factory]
    H --> I[Playwright/CDP]
    E --> J[任务调度器]
    F --> K[Vault/TOTP]
```

资料来源：[skyvern/forge/forge_app.py:1-100](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/forge_app.py)

### Agent 智能体引擎

Agent 是 Skyvern 的核心决策模块，负责解析自然语言任务并生成可执行的浏览器操作序列。

**Agent 的核心职责：**

- 解析用户提供的导航目标和操作指令
- 管理浏览器会话状态和上下文
- 决策下一步操作（点击、输入、导航等）
- 处理异常情况和重试逻辑

资料来源：[skyvern/forge/agent.py:1-80](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/agent.py)

### 浏览器管理层

浏览器管理是自动化能力的基础，采用模块化工厂模式支持多种浏览器后端。

## 浏览器管理架构

### Browser Manager

BrowserManager 负责管理浏览器实例的生命周期，包括创建、销毁、状态监控等操作。

```mermaid
graph LR
    A[Browser Manager] --> B[Browser Factory]
    B --> C[Playwright Browser]
    B --> D[CDP Browser]
    B --> E[Remote Browser]
    
    C --> F[Chromium]
    C --> G[Firefox]
    C --> H[WebKit]
```

资料来源：[skyvern/webeye/browser_manager.py:1-100](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/webeye/browser_manager.py)

### Browser Factory

BrowserFactory 实现工厂模式，根据配置动态创建不同类型的浏览器实例。

**支持的浏览器类型：**

| 类型 | 配置键 | 用途 |
|------|--------|------|
| Playwright | `BROWSER_TYPE=playwright` | 本地自动化测试 |
| CDP Connect | `BROWSER_TYPE=cdp-connect` | 连接到远程 Chrome DevTools |
| 浏览器隧道 | `--tunnel` | Skyvern Cloud 远程控制 |

资料来源：[skyvern/webeye/browser_factory.py:1-80](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/webeye/browser_factory.py)

### 浏览器连接方式

Skyvern 支持多种浏览器连接方式，以满足不同部署场景的需求。

**本地浏览器连接：**

```python
# 通过 CDP 连接到本地 Chrome
BROWSER_TYPE=cdp-connect
BROWSER_REMOTE_DEBUGGING_URL=http://127.0.0.1:9222
```

**远程浏览器隧道：**

```bash
# 创建隧道连接到 Skyvern Cloud
skyvern browser serve --tunnel
```

资料来源：[README.md:80-120](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 数据存储架构

### S3 存储集成

Skyvern 使用 S3 URI 解析来处理文件存储和检索操作。

```python
class S3Uri:
    def __init__(self, uri: str) -> None:
        self._parsed = urlparse(uri, allow_fragments=False)
    
    @property
    def bucket(self) -> str:
        return self._parsed.netloc
    
    @property
    def key(self) -> str:
        if self._parsed.query:
            return self._parsed.path.lstrip("/") + "?" + self._parsed.query
        else:
            return self._parsed.path.lstrip("/")
    
    @property
    def uri(self) -> str:
        return self._parsed.geturl()
```

资料来源：[skyvern/forge/sdk/api/aws.py:50-80](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/api/aws.py)

### AWS 客户端管理

采用单例模式管理 AWS 客户端实例，并设置 45 分钟的 TTL 以确保连接有效性。

```python
_aws_client: AsyncAWSClient | None = None
_aws_client_created_at: float = 0.0
_AWS_CLIENT_TTL_SECONDS: float = 45 * 60  # 45 mins
```

资料来源：[skyvern/forge/sdk/api/aws.py:80-90](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/api/aws.py)

## MCP 集成架构

Model Context Protocol (MCP) 允许外部 AI 应用连接到 Skyvern 进行浏览器自动化。

### MCP Server 架构

```mermaid
graph TD
    A[MCP Client App] --> B[Skyvern MCP Server]
    B --> C[Local Skyvern]
    B --> D[Skyvern Cloud]
    
    C --> E[Browser Agent]
    D --> E
```

资料来源：[integrations/mcp/README.md:1-50](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md)

### MCP 工具集

**浏览器操作工具：**

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_navigate` | 导航到指定 URL |
| `skyvern_click` | 点击页面元素 |
| `skyvern_input` | 输入文本内容 |
| `skyvern_select_option` | 选择下拉选项 |
| `skyvern_press_key` | 模拟键盘按键 |
| `skyvern_drag` | 拖拽操作 |
| `skyvern_file_upload` | 文件上传 |
| `skyvern_wait` | 等待元素或时间 |

**数据提取工具：**

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_extract` | 结构化 JSON 数据提取 |
| `skyvern_screenshot` | 页面截图 |
| `skyvern_get_html` | 获取页面 HTML |
| `skyvern_get_value` | 获取表单元素值 |

**网络与调试工具：**

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_network_requests` | 获取网络请求列表 |
| `skyvern_network_route` | 拦截网络请求 |
| `skyvern_console_messages` | 获取控制台消息 |
| `skyvern_har_start/stop` | HAR 日志记录 |

**认证凭证工具：**

| 工具名称 | 功能描述 |
|----------|----------|
| `skyvern_login` | 执行网站登录 |
| `skyvern_credential_list` | 列出存储的凭证 |
| `skyvern_credential_get` | 获取凭证信息 |

资料来源：[skyvern/cli/mcp_tools/README.md:1-60](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)

## 凭证与安全管理

### TOTP/2FA 支持

Skyvern 支持多种双因素认证方式，确保自动化任务能够处理需要 2FA 的网站。

**支持的 2FA 类型：**

| 类型 | 描述 |
|------|------|
| Numeric code | 基于时间的六位数字验证码 |
| Magic link | 通过邮件发送的魔法链接 |

资料来源：[skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx:1-50](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx)

### 凭证存储

Skyvern 提供安全的凭证存储机制，支持：

- Skyvern Vault（内置安全存储）
- Bitwarden 集成
- 1Password 集成
- Azure Key Vault 集成

资料来源：[skyvern/cli/mcp_tools/README.md:30-40](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)

## 工作流系统架构

### 工作流定义

工作流由多个 Block 组成，每个 Block 代表一个独立的操作单元。

**支持的 Block 类型：**

| Block 类型 | 功能 |
|------------|------|
| HTTP Request | 发送 HTTP 请求 |
| Print Page | 打印页面为 PDF |
| Human Interaction | 暂停等待人工确认 |
| Extract Data | 从页面提取结构化数据 |

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx:1-80](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx)

### 调度系统

Skyvern 支持基于 Cron 表达式的任务调度功能。

**调度配置参数：**

| 参数 | 描述 |
|------|------|
| cron_expression | Cron 表达式定义执行时间 |
| timezone | 时区设置 |
| workflow_parameters | 工作流输入参数 |

资料来源：[skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx:1-60](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx)

## 任务创建流程

### 任务表单配置

创建任务时，用户需要提供以下核心参数：

**基本参数：**

| 参数 | 说明 |
|------|------|
| Navigation Goal | 导航目标和操作指令 |
| Navigation Payload | 可选的路由参数和状态信息 |

**高级参数：**

| 参数 | 说明 |
|------|------|
| Webhook Callback URL | 任务完成后的回调通知地址 |
| Proxy Location | 代理服务器位置 |
| Browser Session ID | 持久化浏览器会话 ID |
| Browser Address | 远程浏览器地址 |

资料来源：[skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx:1-50](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx)

### 任务执行流程

```mermaid
sequenceDiagram
    participant User
    participant API
    participant Agent
    participant Browser
    participant LLM
    
    User->>API: 创建任务请求
    API->>Agent: 分发任务
    Agent->>LLM: 请求决策
    LLM-->>Agent: 返回操作指令
    Agent->>Browser: 执行浏览器操作
    Browser-->>Agent: 返回执行结果
    Agent->>LLM: 继续决策或结束
    Agent-->>API: 任务完成
    API-->>User: 返回结果
```

## LLM 支持

### 支持的模型提供商

| 提供商 | 支持模型 |
|--------|----------|
| OpenAI | GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini |
| Anthropic | Claude 4.7 Opus, Claude 4.6, Claude 4.5 |
| Azure OpenAI | 任意部署的 GPT 模型 |
| AWS Bedrock | Claude 4.7, Claude 4.6, Claude 4.5 |
| Gemini | Gemini 3.1 Pro, Gemini 3 Flash |

资料来源：[README.md:50-70](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

## 快速开始

### 环境配置

```bash
# 安装 uv 包管理器
# 创建虚拟环境
uv sync --group dev

# 初始化 Skyvern
uv run skyvern quickstart

# 启动服务
skyvern run all
```

资料来源：[README.md:10-20](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)

### 程序化使用

```python
from skyvern import Skyvern

skyvern = Skyvern(api_key="your-api-key")
task = await skyvern.run_task(
    prompt="Find the top post on hackernews today",
)
```

## 架构设计原则

1. **模块化设计**：各组件职责明确，支持独立替换和扩展
2. **异步优先**：采用异步架构支持高并发场景
3. **工厂模式**：BrowserFactory 实现灵活的浏览器实例创建
4. **单例管理**：AWS 客户端等资源采用单例模式避免重复创建
5. **凭证安全**：敏感信息通过 Vault 等安全机制存储
6. **可扩展性**：MCP 协议支持与多种外部应用集成

## 总结

Skyvern 的系统架构围绕浏览器自动化核心能力，通过模块化设计实现了高内聚低耦合的组件关系。Forge 应用层作为统一入口，协调 Agent 智能体、浏览器管理、数据存储和外部集成四大功能模块，为用户提供了完整的浏览器自动化解决方案。

---

<a id='page-agents'></a>

## AI 代理系统

### 相关页面

相关主题：[系统架构设计](#page-architecture), [任务系统](#page-tasks)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx)
- [skyvern-frontend/src/routes/workflows/WorkflowScriptsPage.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/WorkflowScriptsPage.tsx)
- [skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItem.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItem.tsx)
- [skyvern-frontend/src/routes/workflows/workflowRun/TaskBlockParameters.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/workflowRun/TaskBlockParameters.tsx)
- [integrations/mcp/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/integrations/mcp/README.md)
- [README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
</details>

# AI 代理系统

> **注意**：当前分析的源码上下文中未包含 `skyvern/forge/agent.py`、`skyvern/forge/agent_functions.py`、`skyvern/forge/sdk/copilot/agent.py` 及 `skyvern/forge/sdk/copilot/runtime.py` 等核心 AI 代理系统文件。以下内容基于前端组件和工作流相关代码进行推断性说明，实际架构细节请参阅上述核心文件。

## 概述

Skyvern 的 AI 代理系统是一个基于 LLM（大语言模型）驱动的自动化执行引擎，能够理解自然语言指令并在浏览器环境中完成复杂任务。该系统通过工作流（Workflow）编排多个任务块（Block），支持条件分支、人机交互、HTTP 请求执行等能力，实现端到端的自动化流程。

资料来源：[integrations/mcp/README.md:1-20]()

## 核心概念

### 任务（Task）

任务是 AI 代理执行工作的基本单元，包含以下关键属性：

| 属性 | 说明 | 来源组件 |
|------|------|----------|
| `navigation_goal` | 自然语言描述的导航目标 | CreateNewTaskForm.tsx |
| `navigation_payload` | 导航参数、路由或状态信息 | CreateNewTaskForm.tsx |
| `url` | 目标网页地址 | SavedTaskForm.tsx |
| `title` | 任务名称 | SavedTaskForm.tsx |
| `description` | 任务目的描述 | SavedTaskForm.tsx |
| `browser_session_id` | 持久化浏览器会话 ID | PromptBox.tsx |
| `cdp_address` | 浏览器服务地址 | PromptBox.tsx |

资料来源：[skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx:10-30]()

### 工作流（Workflow）

工作流是由多个任务块组成的有向图，定义自动化任务的执行顺序和条件逻辑。

```mermaid
graph TD
    A[开始] --> B[条件判断块]
    B -->|条件为真| C[任务执行块]
    B -->|条件为假| D[HTTP 请求块]
    C --> E[人机交互块]
    D --> F[结束]
    E --> F
```

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItem.tsx:1-40]()

## 工作流执行引擎

### 任务块类型

工作流由不同类型的任务块组成，每种块承担特定功能：

| 块类型 | 功能 | 高级设置 |
|--------|------|----------|
| `task_block` | 执行具体任务 | 引擎类型、错误码映射、最大重试次数、最大步数 |
| `human_interaction` | 暂停等待人工输入 | 超时配置 |
| `http_request` | 执行外部 API 调用 | 请求超时、认证信息 |
| `condition_block` | 条件分支判断 | 条件表达式 |

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/TaskBlockParameters.tsx:1-50]()

### 执行状态与分支

工作流执行时会记录以下关键状态信息：

- `executed_branch_expression`：已执行的条件表达式
- `executed_branch_next_block`：分支判断后的下一个目标块
- `next_block_label`：下一个待执行块的标签

```mermaid
graph LR
    A[评估条件] --> B{条件结果}
    B -->|True| C[执行 True 分支]
    B -->|False| D[执行 False 分支]
    C --> E[next_block_label]
    D --> E
```

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineBlockItem.tsx:40-70]()

## 代理执行流程

```
┌─────────────────────────────────────────────────────────────┐
│                      用户输入任务                            │
├─────────────────────────────────────────────────────────────┤
│  1. 解析 navigation_goal（自然语言目标）                       │
│  2. 提取 navigation_payload（参数/状态）                       │
│  3. 确定初始 URL 和代理行为                                   │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│                    LLM 决策循环                               │
├─────────────────────────────────────────────────────────────┤
│  • 分析当前页面状态                                           │
│  • 决定下一步操作（点击/输入/滚动/导航等）                        │
│  • 处理异常和错误恢复                                          │
│  • 评估任务完成条件                                            │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│                    浏览器自动化执行                            │
├─────────────────────────────────────────────────────────────┤
│  • 通过 CDP（Chrome DevTools Protocol）控制浏览器              │
│  • 可选使用代理服务器进行地理位置路由                            │
│  • 支持持久化会话复用                                          │
└─────────────────────────────────────────────────────────────┘
```

资料来源：[skyvern-frontend/src/routes/tasks/create/PromptBox.tsx:1-50]()

## 高级配置选项

### 执行引擎配置

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `engine` | 使用的 LLM 引擎 | OpenAI GPT-4 |
| `max_retries` | 失败最大重试次数 | 3 |
| `max_steps_per_run` | 单次运行最大步数 | 50 |
| `error_code_mapping` | 自定义错误码映射表 | - |

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/TaskBlockParameters.tsx:20-45]()

### 浏览器配置

| 配置项 | 说明 | 示例 |
|--------|------|------|
| `browser_session_id` | 持久化会话标识符 | `pbs_xxx` |
| `cdp_address` | 远程调试地址 | `http://127.0.0.1:9222` |
| `proxy_location` | 代理服务器位置 | 各地区可选 |

资料来源：[skyvern-frontend/src/routes/tasks/create/PromptBox.tsx:50-80]()

## 脚本缓存与复用

Skyvern 支持脚本（Scripts）功能，允许在工作流中存储和复用代码片段：

| 属性 | 说明 |
|------|------|
| `cache_key_value` | 脚本缓存键 |
| `total_revisions` | 脚本版本总数 |
| `runs` | 脚本被执行次数 |
| `last_updated` | 最后更新时间 |

资料来源：[skyvern-frontend/src/routes/workflows/WorkflowScriptsPage.tsx:20-40]()

## 支持的 LLM 提供商

| 提供商 | 支持模型 |
|--------|----------|
| OpenAI | GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini |
| Anthropic | Claude 4.7 Opus, Claude 4.6, Claude 4.5 系列 |
| Azure OpenAI | 任意部署的 GPT 模型 |
| AWS Bedrock | Claude 4.7, Claude 4.6, Claude 4.5 系列 |
| Gemini | Gemini 3.1 Pro, Gemini 3 Flash |

资料来源：[README.md:50-60]()

## Model Context Protocol (MCP) 集成

Skyvern 提供 MCP 服务器实现，允许 AI 应用连接浏览器进行自动化操作：

```mermaid
graph LR
    A[Claude/其他 LLM 应用] -->|MCP 协议| B[Skyvern MCP 服务器]
    B -->|浏览器控制| C[网页操作]
    B -->|API 调用| D[外部服务]
    
    subgraph 连接方式
        E[本地 Skyvern 服务器]
        F[Skyvern Cloud]
    end
    
    B -.-> E
    B -.-> F
```

**MCP 支持的功能**：

- 填写表单
- 下载文件
- 网页信息研究
- 自动化数据采集

资料来源：[integrations/mcp/README.md:1-30]()

## 工作流执行统计

工作流运行后提供以下关键指标：

| 指标 | 说明 | 阈值颜色 |
|------|------|----------|
| 成功率 | 成功运行占比 | ≥80% 绿色、≥50% 黄色、<50% 红色 |
| 运行次数 | 当前版本的执行总数 | - |
| 历史版本数 | 早于当前版本的修订数量 | - |

资料来源：[skyvern-frontend/src/routes/workflows/WorkflowScriptDetailPage.tsx:20-50]()

## 调度执行

工作流支持基于 Cron 表达式的定时调度：

| 配置项 | 说明 |
|--------|------|
| `timezone` | 调度时区 |
| `cron_expression` | Cron 表达式 |
| `next_runs` | 接下来预计执行的时间点 |
| `created_at` | 创建时间 |
| `modified_at` | 最后修改时间 |

调度配置界面实时显示下一次预计运行时间，支持用户选择时区和预览调度计划。

资料来源：[skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx:1-50]()

## 总结

Skyvern 的 AI 代理系统通过自然语言理解、工作流编排和浏览器自动化三大核心能力，实现了复杂的网页自动化任务。系统支持灵活的条件分支、人机交互、脚本复用和定时调度，可与主流 LLM 提供商集成，适用于网页数据采集、表单填写、自动化测试等多种场景。

---

<a id='page-tasks'></a>

## 任务系统

### 相关页面

相关主题：[工作流系统](#page-workflows), [浏览器自动化](#page-browser-automation)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern/forge/sdk/schemas/task_v2.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/schemas/task_v2.py)
- [skyvern/services/task_v2_service.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/services/task_v2_service.py)
- [skyvern/forge/sdk/schemas/tasks.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/schemas/tasks.py)
- [skyvern/services/task_v1_service.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/services/task_v1_service.py)
</details>

# 任务系统

## 概述

任务系统是 Skyvern 的核心模块，负责管理和自动化浏览器操作任务。该系统允许用户通过自然语言描述定义导航目标和操作步骤，Skyvern 自动解析指令并在浏览器中执行相应操作。

任务系统采用双版本架构设计，包含 v1 和 v2 两个版本的服务实现，支持向后兼容的同时引入更强大的功能。任务由多个核心组件构成，包括任务请求、导航目标、导航负载和执行状态追踪。

资料来源：[skyvern/services/task_v2_service.py:1-50]()

## 核心数据模型

### TaskRequest 任务请求

任务请求是创建任务时提交的核心数据结构，包含执行任务所需的所有信息。

| 字段 | 类型 | 描述 |
|------|------|------|
| url | string | 任务起始 URL，浏览器首先导航到此页面 |
| navigation_goal | string | 导航目标，描述 Skyvern 应执行的操作 |
| navigation_payload | object | 导航负载，传递额外的参数、路由或状态信息 |
| title | string | 任务名称，用于标识和管理 |
| description | string | 任务描述，说明任务的用途 |

资料来源：[skyvern/forge/sdk/schemas/tasks.py:1-30]()

### TaskV2 数据模型

TaskV2 是任务系统的核心数据结构，继承自基础任务模型并扩展了更多功能。

```mermaid
classDiagram
    class TaskV2 {
        +str task_id
        +str organization_id
        +TaskRequestV2 request
        +TaskStatus status
        +List~Step~ steps
        +datetime created_at
        +datetime modified_at
        +int max_steps
        +str error
    }
    
    class TaskRequestV2 {
        +str url
        +str navigation_goal
        +Dict navigation_payload
        +str title
        +str description
        +str webhook_callback_url
    }
    
    class Step {
        +str step_id
        +str task_id
        +StepStatus status
        +str action
        +str reasoning
        +str result
    }
    
    TaskV2 --> TaskRequestV2
    TaskV2 --> Step
```

资料来源：[skyvern/forge/sdk/schemas/task_v2.py:1-100]()

## 任务服务架构

### TaskV1Service 服务

TaskV1Service 是早期版本的任务服务实现，提供基本的任务创建、查询和执行功能。

| 方法 | 功能 |
|------|------|
| create_task() | 创建新任务 |
| get_task() | 获取任务详情 |
| list_tasks() | 列出组织内的所有任务 |
| cancel_task() | 取消正在执行的任务 |

资料来源：[skyvern/services/task_v1_service.py:1-80]()

### TaskV2Service 服务

TaskV2Service 是当前推荐使用的任务服务版本，提供增强的功能和更好的扩展性。

```mermaid
graph TD
    A[create_task] --> B{验证请求}
    B -->|通过| C[创建任务记录]
    B -->|失败| D[返回错误]
    C --> E[进入队列]
    E --> F{分配执行器}
    F --> G[执行任务步骤]
    G --> H{步骤完成?}
    H -->|是| I{还有更多步骤?}
    I -->|是| G
    I -->|否| J[任务完成]
    H -->|否| K[处理错误]
    K --> L[记录错误状态]
```

资料来源：[skyvern/services/task_v2_service.py:1-150]()

## 任务生命周期

### 任务状态流转

任务在执行过程中会经历多种状态，了解这些状态有助于监控和调试任务执行。

```mermaid
stateDiagram-v2
    [*] --> Created: 创建任务
    Created --> Queued: 进入队列
    Queued --> Running: 开始执行
    Running --> Completed: 正常完成
    Running --> Failed: 执行失败
    Running --> Cancelled: 用户取消
    Completed --> [*]
    Failed --> [*]
    Cancelled --> [*]
```

### 状态详情

| 状态 | 描述 |
|------|------|
| Created | 任务已创建，等待进入队列 |
| Queued | 任务在队列中等待执行，通常需要1-2分钟 |
| Running | 任务正在执行，浏览器操作进行中 |
| Completed | 任务成功完成 |
| Failed | 任务执行失败，可能包含错误信息 |
| Cancelled | 用户主动取消的任务 |

资料来源：[skyvern/forge/sdk/schemas/task_v2.py:50-80]()

## SDK 使用指南

### Python SDK 任务创建

使用 Skyvern Python SDK 可以方便地创建和管理任务：

```python
from skyvern import Skyvern

skyvern = Skyvern(api_key="your-api-key")

# 创建并等待任务完成
task = await skyvern.run_task(
    prompt="Find the top post on hackernews today",
    url="https://news.ycombinator.com",
)

print(f"Task ID: {task.task_id}")
print(f"Status: {task.status}")
```

资料来源：[README.md:1-50]()

### 异步任务执行

任务可以在后台异步执行，无需保持脚本运行：

```python
import asyncio
from skyvern_langchain.client import DispatchTask

dispatch_task = DispatchTask(api_key="your-api-key")

async def main():
    result = await dispatch_task.ainvoke(
        "Navigate to the Hacker News homepage and get the top 3 posts."
    )
    print(result)

asyncio.run(main())
```

资料来源：[integrations/langchain/README.md:1-60]()

## 前端集成

### 任务创建表单

前端界面提供直观的表单组件用于创建任务：

```typescript
// CreateNewTaskForm.tsx 核心结构
<FormField
  control={form.control}
  name="navigationGoal"
  render={({ field }) => (
    <FormItem>
      <FormLabel>
        <h1 className="text-lg">Navigation Goal</h1>
        <h2 className="text-base text-slate-400">
          Where should Skyvern go and what should Skyvern do?
        </h2>
      </FormLabel>
      <FormControl>
        <AutoResizingTextarea
          placeholder="Tell Skyvern what to do."
          {...field}
        />
      </FormControl>
    </FormItem>
  )}
/>
```

资料来源：[skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx:1-30]()

### 导航负载配置

高级设置允许用户指定额外的导航参数：

| 参数 | 描述 | 示例 |
|------|------|------|
| routes | 指定导航路径 | `["/login", "/dashboard"]` |
| states | 页面状态信息 | `{"loggedIn": true}` |
| custom_headers | 自定义请求头 | `{"Authorization": "Bearer xxx"}` |

资料来源：[skyvern-frontend/src/routes/tasks/create/SavedTaskForm.tsx:40-80]()

## 任务执行步骤

### 步骤追踪

每个任务执行过程中会被分解为多个步骤，每个步骤记录详细执行信息：

| 字段 | 描述 |
|------|------|
| step_id | 步骤唯一标识 |
| action | 执行的浏览器操作 |
| reasoning | LLM 推理过程 |
| result | 操作结果 |
| status | 步骤状态 |

资料来源：[skyvern/forge/sdk/schemas/task_v2.py:80-120]()

### 实时流显示

前端支持实时查看任务执行画面：

```typescript
// TaskActions.tsx 流显示逻辑
if (task?.status === Status.Running && streamImgSrc.length > 0) {
  return (
    <div className="h-full w-full">
      <ZoomableImage
        src={`data:image/${streamFormat};base64,${streamImgSrc}`}
      />
    </div>
  );
}
```

资料来源：[skyvern-frontend/src/routes/tasks/detail/TaskActions.tsx:30-50]()

## 任务管理接口

### 列出任务

获取组织内的任务历史记录：

```typescript
// TaskHistory.tsx 任务列表结构
<TableHeader>
  <TableRow>
    <TableHead className="w-1/4">ID</TableHead>
    <TableHead className="w-1/4">URL</TableHead>
    <TableHead className="w-1/6">Status</TableHead>
    <TableHead className="w-1/4">Created At</TableHead>
    <TableHead className="w-1/12" />
  </TableRow>
</TableHeader>
```

资料来源：[skyvern-frontend/src/routes/tasks/list/TaskHistory.tsx:20-35]()

### 查看任务详情

查看特定任务的详细信息和参数：

```typescript
// TaskParameters.tsx 参数展示
<section className="space-y-8 rounded-lg bg-slate-elevation3 px-6 py-5">
  <div className="flex gap-16">
    <div className="w-72">
      <h1 className="text-lg">URL</h1>
      <h2 className="text-base text-slate-400">
        The starting URL for the task
      </h2>
    </div>
    <Input value={task.request.url} readOnly />
  </div>
</section>
```

资料来源：[skyvern-frontend/src/routes/tasks/detail/TaskParameters.tsx:15-35]()

## 定时任务调度

任务系统支持通过定时调度自动化执行任务：

| 组件 | 功能 |
|------|------|
| CreateScheduleDialog | 创建调度对话框 |
| WorkflowSchedulePanel | 工作流调度面板 |
| ScheduleCard | 调度卡片展示 |
| ScheduleDetailPage | 调度详情页面 |

### 调度配置

```typescript
// CreateScheduleDialog.tsx 调度创建
<DialogFooter>
  <Button variant="secondary" onClick={() => setOpen(false)}>
    Cancel
  </Button>
  <Button disabled={!valid || isPending} onClick={handleSubmit}>
    {isPending ? "Creating..." : "Create Schedule"}
  </Button>
</DialogFooter>
```

资料来源：[skyvern-frontend/src/routes/workflows/editor/panels/schedulePanel/CreateScheduleDialog.tsx:60-80]()

## 凭证与安全

### TOTP 认证支持

任务系统支持二次验证（2FA）集成：

```typescript
// CredentialsTotpTab.tsx
<PushTotpCodeForm
  className="mt-4"
  showAdvancedFields
  onSuccess={handleFormSuccess}
/>
```

| 字段 | 描述 |
|------|------|
| totp_identifier | 凭证标识符（邮箱或手机号） |
| totp_type | OTP 类型（numeric_code 或 magic_link） |

资料来源：[skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx:15-40]()

## 最佳实践

### 1. 导航目标编写

编写清晰的导航目标描述：

```text
# 推荐写法
"Find the top post on hackernews today and extract the title and URL"

# 避免
"Check the website"  # 过于模糊
```

### 2. URL 指定

始终提供完整的起始 URL，避免重定向导致的定位问题。

### 3. 导航负载使用

对于需要传递额外状态的场景，使用导航负载而非将所有信息放在导航目标中：

```json
{
  "routes": ["/login", "/dashboard", "/reports"],
  "context": {
    "user_id": "12345",
    "view_mode": "detailed"
  }
}
```

### 4. 错误处理

监控任务状态并实现适当的错误处理逻辑：

```python
if task.status == Status.Failed:
    print(f"Task failed: {task.error}")
elif task.status == Status.Completed:
    print("Task completed successfully")
```

## 相关文档

- [Skyvern 文档首页](https://skyvern.com/docs)
- [API 参考文档](https://docs.skyvern.com)
- [贡献指南](../CONTRIBUTING.md)

---

<a id='page-workflows'></a>

## 工作流系统

### 相关页面

相关主题：[任务系统](#page-tasks)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern/forge/sdk/workflow/models/workflow.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/workflow/models/workflow.py)
- [skyvern/forge/sdk/workflow/models/block.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/workflow/models/block.py)
- [skyvern/services/workflow_service.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/services/workflow_service.py)
- [skyvern/schemas/workflows.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/schemas/workflows.py)
- [skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx)
- [skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx)
- [skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx)
- [skyvern/cli/mcp_tools/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)
</details>

# 工作流系统

Skyvern 工作流系统（Workflow System）是一个用于编排多个自动化任务的核心模块，允许用户将多个浏览器任务、动作、数据提取操作等链接在一起，形成一个完整的自动化业务流程。

## 系统概述

工作流系统的主要功能包括：

- **多步骤自动化编排**：将多个独立的浏览器任务和操作链接成连贯的工作流程
- **灵活的参数传递**：支持在不同的块（Block）之间传递参数和数据
- **条件分支控制**：支持基于条件的分支执行逻辑
- **循环迭代**：支持对数据集进行遍历处理
- **错误处理与恢复**：支持在块失败时继续执行或回退到 AI 重新生成代码

## 核心数据模型

### 工作流定义（WorkflowDefinition）

工作流定义是整个工作流系统的核心数据结构，包含以下关键属性：

| 属性 | 类型 | 说明 |
|------|------|------|
| `id` | string | 工作流唯一标识符 |
| `title` | string | 工作流标题 |
| `description` | string | 工作流描述 |
| `parameters` | list | 输入参数定义 |
| `blocks` | list | 工作流中的块列表 |
| `version` | int | 版本号 |
| `status` | WorkflowStatus | 工作流状态 |
| `folder_id` | string | 所属文件夹 ID |
| `created_by` | string | 创建者 ID |
| `edited_by` | string | 最后编辑者 ID |

资料来源：[skyvern/schemas/workflows.py]()

### 工作流块（WorkflowBlock）

工作流块是组成工作流的基本单元，每种块类型代表不同的操作或功能。

## 块类型体系

Skyvern 工作流支持多种类型的块，用于构建复杂的自动化流程：

| 块类型 | 说明 | 主要参数 |
|--------|------|----------|
| `BrowserTask` / `Taskv2` | 浏览器任务，执行网页自动化操作 | prompt, url, max_steps, totp_verification_url |
| `Navigation` | 导航块，跳转到指定 URL | url, continue_on_failure |
| `Action` | 动作块，执行点击、输入等操作 | action_type, selector |
| `Extraction` | 数据提取块，从页面提取结构化数据 | json_schema, prompt |
| `Validation` | 验证块，验证页面状态或数据 | schema, error_codes |
| `TextPrompt` | 文本提示块，调用 LLM 生成文本 | prompt, llm_key, json_schema |
| `HTTPRequest` | HTTP 请求块，发送 API 请求 | url, method, headers, body |
| `Wait` | 等待块，等待指定时间或条件 | duration |
| `PrintPage` | 打印块，打印当前页面 | format, landscape, print_background |
| `HumanInteraction` | 人工交互块，暂停等待用户确认 | instructions, positive_descriptor |
| `Conditional` | 条件块，基于条件选择执行分支 | expression |
| `ForLoop` | 循环块，遍历数据集合 | iterable, loop_variable |
| `FileDownload` | 文件下载块 | url, download_filename |
| `Login` | 登录块 | credentials |
| `Code` | 自定义代码块 | code, language |

资料来源：[skyvern/forge/sdk/workflow/models/block.py]()

### 块执行参数

不同的块类型支持特定的参数配置：

```typescript
// Taskv2 块参数示例
interface Taskv2BlockParameters {
  prompt: string;           // 任务提示词
  url: string;             // 目标 URL
  max_steps: number;       // 最大步数
  totp_verification_url?: string;  // TOTP 验证 URL
  totp_identifier?: string;       // TOTP 标识符
  disable_cache?: boolean;        // 是否禁用缓存
}
```

```typescript
// 文本提示块参数示例
interface TextPromptBlockParameters {
  prompt: string;          // 提示词模板
  llm_key: string;        // 使用的 LLM 密钥
  json_schema?: object;   // 输出 JSON Schema
  parameters: string[];   // 依赖的参数列表
}
```

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx]()

## 工作流执行流程

### 执行架构

```mermaid
graph TD
    A[开始工作流] --> B[加载工作流定义]
    B --> C[初始化参数]
    C --> D[执行第一个块]
    D --> E{块类型判断}
    E -->|Task/Action| F[启动浏览器任务]
    E -->|Extraction| G[提取数据]
    E -->|HTTPRequest| H[发送 HTTP 请求]
    E -->|Conditional| I[评估条件]
    E -->|ForLoop| J[开始循环]
    F --> K{任务状态}
    K -->|成功| L[保存结果]
    K -->|失败| M{AI Fallback?}
    M -->|是| N[重新生成代码]
    M -->|否| O[报告错误]
    L --> P{还有下一个块?}
    P -->|是| D
    P -->|否| Q[工作流完成]
    N --> F
```

### 执行模式

工作流支持两种执行模式：

| 模式 | 说明 | 适用场景 |
|------|------|----------|
| `Skyvern Agent` | 使用 AI Agent 动态生成执行代码 | 复杂、变化的网页环境 |
| `Code` | 使用预先保存的成功运行的代码 | 稳定、可复现的任务 |

```typescript
// 开始节点配置
interface StartNodeData {
  runWith: 'agent' | 'code';    // 执行模式
  aiFallback: boolean;          // AI 回退开关
  codeKey?: string;             // 代码缓存键
  cacheKey?: string;            // 缓存键
  adaptiveCaching?: boolean;    // 自适应缓存
  generateScriptOnTerminal?: boolean;  // 结束时生成脚本
  runSequentially?: boolean;    // 顺序执行
  sequentialKey?: string;       // 顺序执行键
}
```

资料来源：[skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx]()

## 工作流运行管理

### 工作流运行（WorkflowRun）

工作流运行实例包含以下核心信息：

| 属性 | 说明 |
|------|------|
| `workflow_run_id` | 运行唯一 ID |
| `workflow_permanent_id` | 关联的工作流永久 ID |
| `parent_workflow_run_id` | 父运行 ID（用于嵌套工作流） |
| `organization_id` | 组织 ID |
| `status` | 运行状态 |
| `parameters` | 运行参数 |
| `output` | 运行输出结果 |

### 运行参数验证

工作流运行前会对输入参数进行严格的类型验证：

| 参数类型 | 验证规则 |
|----------|----------|
| `json` | 必填，字符串需可解析为有效 JSON |
| `boolean` | 必填，布尔值 |
| `integer` / `float` | 必填，需为有效数字 |
| `file_url` | 必填，URL 格式 |
| `string` | 可选，空字符串视为空值 |

```typescript
// 参数验证逻辑示例
const validateParameter = (parameter: WorkflowParameter, value: any) => {
  if (parameter.workflow_parameter_type === 'json') {
    if (value === null || value === undefined) return "This field is required";
    if (typeof value === 'string') {
      try {
        JSON.parse(value.trim());
        return true;
      } catch (e) {
        return "Invalid JSON";
      }
    }
  }
  // ... 其他类型验证
};
```

资料来源：[skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx]()

### Webhook 回调

工作流完成后可向指定的 Webhook URL 发送回调通知：

```typescript
interface WebhookConfig {
  webhookCallbackUrl: string;  // 回调 URL
  // 回调将包含工作流执行的详细结果
}
```

## 调度与定时执行

### 调度配置

工作流支持通过 Cron 表达式进行定时调度：

| 配置项 | 说明 |
|--------|------|
| `cron_expression` | Cron 表达式 |
| `timezone` | 时区设置 |
| `schedule_name` | 调度名称（可选，自动生成） |
| `schedule_description` | 调度描述（可选） |
| `workflow_parameters` | 运行时参数 |

### 快速预设

系统提供常用的 Cron 预设：

| 预设标签 | 表达式 | 说明 |
|----------|--------|------|
| 每小时 | `0 * * * *` | 每小时整点执行 |
| 每天 | `0 0 * * *` | 每天午夜执行 |
| 每周 | `0 0 * * 0` | 每周日执行 |
| 每月 | `0 0 1 * *` | 每月1日执行 |

资料来源：[skyvern-frontend/src/routes/schedules/CreateOrgScheduleDialog.tsx]()

## MCP 集成

Skyvern 通过 MCP（Model Context Protocol）提供工作流相关的工具函数：

### 工作流管理工具

| 工具名称 | 功能 |
|----------|------|
| `skyvern_workflow_create` | 创建新工作流 |
| `skyvern_workflow_list` | 列出所有工作流 |
| `skyvern_workflow_get` | 获取工作流详情 |
| `skyvern_workflow_run` | 运行工作流 |
| `skyvern_workflow_status` | 查询运行状态 |
| `skyvern_workflow_update` | 更新工作流 |
| `skyvern_workflow_delete` | 删除工作流 |
| `skyvern_workflow_cancel` | 取消运行中的工作流 |
| `skyvern_workflow_update_folder` | 更新工作流所属文件夹 |

### 工作流构建工具

| 工具名称 | 功能 |
|----------|------|
| `skyvern_block_schema` | 获取块类型定义 |
| `skyvern_block_validate` | 验证块配置 |

### 缓存脚本工具

| 工具名称 | 功能 |
|----------|------|
| `skyvern_script_list_for_workflow` | 列出工作流的缓存脚本 |
| `skyvern_script_get_code` | 获取脚本代码 |
| `skyvern_script_versions` | 获取脚本版本历史 |
| `skyvern_script_deploy` | 部署脚本 |
| `skyvern_script_fallback_episodes` | 获取回退事件记录 |

资料来源：[skyvern/cli/mcp_tools/README.md]()

## 前端组件架构

### 工作流编辑器

```mermaid
graph TD
    A[工作流编辑器] --> B[WorkflowHistoryPanel]
    A --> C[块编辑面板]
    A --> D[StartNode]
    A --> E[WorkflowTriggerNode]
    C --> F[BlockParameters]
    F --> |TextPrompt| G[TextPromptBlockParameters]
    F --> |Taskv2| H[Taskv2BlockParameters]
    F --> |URL| I[GotoUrlBlockParameters]
    F --> |Conditional| J[ConditionalBlockParameters]
```

### 运行时信息展示

工作流运行过程中的每个块都会记录详细的执行信息：

| 信息类型 | 说明 |
|----------|------|
| `extracted_information` | 提取的数据结果（JSON 格式） |
| `failure_reason` | 失败原因（如有） |
| `navigation_goal` | 原始导航目标 |
| `parameters` | 块执行参数 |
| `diagnostics` | 诊断信息链接 |

```typescript
interface BlockExecutionInfo {
  block_type: WorkflowBlockTypes;
  task_id?: string;
  status: Status;
  output?: object;
  executed_branch_expression?: string;
  executed_branch_result?: boolean;
  executed_branch_next_block?: string;
}
```

资料来源：[skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunTimelineItemInfoSection.tsx]()

## 数据库模型转换

后端通过 `convert_to_workflow` 函数将数据库模型转换为前端可用的数据结构：

```python
def convert_to_workflow(
    workflow_model: WorkflowModel,
    is_template: bool = False,
) -> Workflow:
    return Workflow(
        workflow_id=workflow_model.workflow_id,
        workflow_permanent_id=workflow_model.workflow_permanent_id,
        title=workflow_model.title,
        version=workflow_model.version,
        is_saved_task=workflow_model.is_saved_task,
        is_template=is_template,
        description=workflow_model.description,
        workflow_definition=WorkflowDefinition.model_validate(
            workflow_model.workflow_definition
        ),
        # ... 其他字段映射
    )
```

资料来源：[skyvern/forge/sdk/db/utils.py]()

## 常见使用场景

### 场景一：发票批量下载

1. 使用 **URL** 块导航到发票页面
2. 使用 **Filter** 块设置日期过滤条件
3. 使用 **Extraction** 块提取发票列表
4. 使用 **ForLoop** 块遍历每个发票
5. 使用 **FileDownload** 块下载每个发票

### 场景二：电商自动化购买

1. 使用 **URL** 块导航到产品页面
2. 使用 **Browser Action** 块添加商品到购物车
3. 使用 **Navigation** 块进入购物车页面
4. 使用 **Validation** 块验证购物车状态
5. 使用 **Browser Action** 块完成结账流程

### 场景三：数据采集与报告

1. 使用 **HTTPRequest** 块获取外部 API 数据
2. 使用 **TextPrompt** 块使用 LLM 分析数据
3. 使用 **Email** 块发送分析报告

## 错误处理机制

### 块级别错误处理

每个块支持 `continue_on_failure` 配置，控制失败时的行为：

| 配置值 | 行为 |
|--------|------|
| `true` | 继续执行下一个块 |
| `false` | 停止工作流并报告错误 |

### AI 自愈机制

当使用代码执行模式失败时，系统支持自动回退到 AI Agent 重新生成代码：

```
任务失败 → 检查 AI Fallback 设置 → 启用则用 AI 重新生成 → 再次执行
```

资料来源：[skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx]()

## 文件夹组织

工作流支持通过文件夹进行组织管理：

| 操作 | 说明 |
|------|------|
| 创建文件夹 | `skyvern_folder_create` |
| 列出文件夹 | `skyvern_folder_list` |
| 获取文件夹 | `skyvern_folder_get` |
| 更新文件夹 | `skyvern_folder_update` |
| 删除文件夹 | `skyvern_folder_delete` |

资料来源：[skyvern/cli/mcp_tools/README.md]()

## 相关资源

- 官方文档：https://skyvern.com/docs/workflows
- MCP 集成文档：https://skyvern.com/docs/integrations/mcp
- GitHub 仓库：https://github.com/Skyvern-AI/skyvern

---

<a id='page-browser-automation'></a>

## 浏览器自动化

### 相关页面

相关主题：[任务系统](#page-tasks), [AI 代理系统](#page-agents)

根据提供的上下文，我无法完成此任务。

**原因分析：**

用户指定的源文件在当前的上下文检索中不可用：

| 指定的源文件 | 状态 |
|-------------|------|
| `skyvern/webeye/browser_state.py` | ❌ 上下文未提供 |
| `skyvern/webeye/actions/actions.py` | ❌ 上下文未提供 |
| `skyvern/webeye/actions/handler.py` | ❌ 上下文未提供 |
| `skyvern/services/browser_session_service.py` | ❌ 上下文未提供 |

当前上下文仅包含：

- 前端 React 组件文件（`skyvern-frontend/src/routes/...`）
- `integrations/mcp/README.md`
- `README.md`

这些文件主要涉及 UI 界面和工作流配置，无法提供关于"浏览器自动化"核心实现（如 BrowserState 类、Action 类型定义、Handler 处理逻辑、BrowserSessionService 服务）的技术细节。

---

**建议：**

请重新提交请求，确保检索范围包含以下关键模块：

1. **浏览器状态管理** - `skyvern/webeye/browser_state.py`
2. **浏览器操作定义** - `skyvern/webeye/actions/actions.py`
3. **操作处理逻辑** - `skyvern/webeye/actions/handler.py`
4. **浏览器会话服务** - `skyvern/services/browser_session_service.py`
5. **额外相关文件** - 如 `skyvern/webeye/browser.py`、`skyvern/webeye/client.py` 等

获取这些核心源文件后，我可以为您生成包含以下内容的完整技术 wiki：

- 浏览器自动化架构图（Mermaid）
- BrowserState 状态机流转
- Action 类型分类表
- Handler 处理流程
- BrowserSessionService API
- 配置参数参考表

---

<a id='page-database'></a>

## 数据库与数据模型

### 相关页面

相关主题：[凭证管理系统](#page-credentials)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern/forge/sdk/db/models.py](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/db/models.py)
- [alembic/versions](https://github.com/Skyvern-AI/skyvern/blob/main/alembic/versions)
- [skyvern/forge/sdk/db/repositories](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/forge/sdk/db/repositories)
</details>

# 数据库与数据模型

## 概述

Skyvern 是一个基于浏览器的自动化平台，其数据模型设计用于支持工作流执行、任务管理、凭证存储、日程调度等核心功能。系统采用 Python 作为后端开发语言，使用 SQLAlchemy 作为 ORM 框架，并通过 Alembic 进行数据库版本管理。

Skyvern 的数据库层主要位于 `skyvern/forge/sdk/db/` 目录下，核心数据模型定义在 `models.py` 文件中，数据访问逻辑封装在 `repositories` 目录下。

## 核心数据模型

### 组织与认证模型

#### Organization（组织）

`Organization` 模型定义了 Skyvern 中的顶级组织实体，用于多租户隔离。

| 字段 | 类型 | 说明 |
|------|------|------|
| organization_id | UUID | 组织唯一标识符 |
| name | String | 组织名称 |
| created_at | DateTime | 创建时间 |
| modified_at | DateTime | 修改时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### User（用户）

`User` 模型关联到特定组织，存储用户认证信息。

| 字段 | 类型 | 说明 |
|------|------|------|
| user_id | UUID | 用户唯一标识符 |
| organization_id | UUID | 所属组织 ID（外键） |
| email | String | 用户邮箱 |
| hashed_password | String | 密码哈希值 |
| is_superuser | Boolean | 是否为超级管理员 |

资料来源：[skyvern/forge/sdk/db/models.py]()

### 工作流相关模型

#### Workflow（工作流）

`Workflow` 是 Skyvern 自动化的核心实体，定义了自动化任务的配置和执行逻辑。

| 字段 | 类型 | 说明 |
|------|------|------|
| workflow_id | UUID | 工作流唯一标识符 |
| organization_id | UUID | 所属组织 ID（外键） |
| title | String | 工作流标题 |
| description | String | 工作流描述 |
| definition | JSON | 工作流定义（包含所有块和连接） |
| proxy_config | JSON | 代理配置 |
| max_steps_per_run | Integer | 每次运行的最大步数 |
| created_at | DateTime | 创建时间 |
| modified_at | DateTime | 修改时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### WorkflowVersion（工作流版本）

用于版本控制，记录工作流的修改历史。

| 字段 | 类型 | 说明 |
|------|------|------|
| workflow_version_id | UUID | 版本 ID |
| workflow_id | UUID | 所属工作流 ID（外键） |
| version | Integer | 版本号 |
| definition | JSON | 该版本的完整定义 |
| created_at | DateTime | 创建时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### WorkflowRun（工作流运行实例）

记录每次工作流执行的实例及其状态。

| 字段 | 类型 | 说明 |
|------|------|------|
| workflow_run_id | UUID | 运行实例 ID |
| workflow_id | UUID | 所属工作流 ID（外键） |
| status | Enum | 运行状态（pending/running/completed/failed） |
| workflow_revision | Integer | 运行时使用的工作流版本 |
| started_at | DateTime | 开始时间 |
| completed_at | DateTime | 完成时间 |
| error_code | String | 错误代码（如果失败） |
| error_message | String | 错误信息 |
| task_id | UUID | 关联的底层任务 ID |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### WorkflowBlock（工作流块实例）

表示工作流运行时每个块的执行状态。

| 字段 | 类型 | 说明 |
|------|------|------|
| block_id | UUID | 块实例 ID |
| workflow_run_id | UUID | 所属运行 ID（外键） |
| block_type | String | 块类型（task/condition/action 等） |
| block_id_ref | String | 引用工作流定义中的块 ID |
| status | Enum | 块执行状态 |
| order | Integer | 执行顺序 |
| output | JSON | 块输出数据 |
| executed_branch_expression | String | 条件分支表达式（如果适用） |
| executed_branch_next_block | String | 实际执行的下一个块 |

资料来源：[skyvern/forge/sdk/db/models.py]()

### 任务模型

#### Task（任务）

`Task` 是 Skyvern 底层的任务执行单元，每个工作流运行会创建相应的任务。

| 字段 | 类型 | 说明 |
|------|------|------|
| task_id | UUID | 任务唯一标识符 |
| organization_id | UUID | 所属组织 ID（外键） |
| workflow_run_id | UUID | 关联的工作流运行 ID |
| status | Enum | 任务状态（pending/running/completed/failed） |
| navigation_goal | Text | 导航目标描述 |
| navigation_payload | JSON | 导航负载参数 |
| extracted_content | JSON | 提取的内容 |
| failure_reason | String | 失败原因 |
| created_at | DateTime | 创建时间 |
| modified_at | DateTime | 修改时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### TaskStep（任务步骤）

记录任务的每个执行步骤。

| 字段 | 类型 | 说明 |
|------|------|------|
| step_id | UUID | 步骤 ID |
| task_id | UUID | 所属任务 ID（外键） |
| order | Integer | 步骤顺序 |
| status | Enum | 步骤状态 |
| action | String | 执行的动作 |
| reasoning | Text | AI 推理过程 |
| result | JSON | 步骤执行结果 |
| error_code | String | 错误代码 |
| error_message | String | 错误信息 |

资料来源：[skyvern/forge/sdk/db/models.py]()

### 凭证模型

#### Credential（凭证）

安全存储各种认证凭据。

| 字段 | 类型 | 说明 |
|------|------|------|
| credential_id | UUID | 凭证 ID |
| organization_id | UUID | 所属组织 ID（外键） |
| credential_name | String | 凭证名称 |
| credential_type | String | 凭证类型（api_key/oauth/password 等） |
| credential_value | EncryptedString | 加密存储的凭证值 |
| metadata | JSON | 额外元数据 |
| created_at | DateTime | 创建时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### CustomCredentialServiceAuthToken（自定义凭证服务令牌）

用于存储自定义凭证服务的认证令牌。

| 字段 | 类型 | 说明 |
|------|------|------|
| id | UUID | 令牌 ID |
| organization_id | UUID | 所属组织 ID（外键） |
| token_type | String | 令牌类型 |
| api_base_url | String | API 基础 URL |
| api_token | EncryptedString | 加密的 API 令牌 |
| created_at | DateTime | 创建时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### TOTP（两步验证码）

存储 TOTP 相关配置。

| 字段 | 类型 | 说明 |
|------|------|------|
| totp_id | UUID | TOTP ID |
| organization_id | UUID | 所属组织 ID（外键） |
| identifier | String | 标识符（邮箱/手机等） |
| totp_type | Enum | TOTP 类型（numeric/magic_link） |
| totp_value | EncryptedString | 加密的 TOTP 密钥 |
| created_at | DateTime | 创建时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

### 日程调度模型

#### Schedule（日程）

用于定时触发工作流执行。

| 字段 | 类型 | 说明 |
|------|------|------|
| schedule_id | UUID | 日程 ID |
| organization_id | UUID | 所属组织 ID（外键） |
| workflow_id | UUID | 关联的工作流 ID（外键） |
| cron_expression | String | Cron 表达式 |
| timezone | String | 时区 |
| workflow_parameters | JSON | 工作流参数字典 |
| created_at | DateTime | 创建时间 |
| modified_at | DateTime | 修改时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

### 脚本与缓存模型

#### WorkflowScript（工作流脚本）

存储可重用的工作流代码片段。

| 字段 | 类型 | 说明 |
|------|------|------|
| script_id | UUID | 脚本 ID |
| organization_id | UUID | 所属组织 ID（外键） |
| workflow_permanent_id | UUID | 关联的工作流永久 ID |
| cache_key | String | 缓存键 |
| current_revision | Integer | 当前版本号 |
| created_at | DateTime | 创建时间 |
| modified_at | DateTime | 修改时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

#### WorkflowScriptRevision（脚本版本）

存储脚本的各个版本。

| 字段 | 类型 | 说明 |
|------|------|------|
| revision_id | UUID | 版本 ID |
| script_id | UUID | 所属脚本 ID（外键） |
| revision | Integer | 版本号 |
| content | Text | 脚本内容 |
| created_at | DateTime | 创建时间 |

资料来源：[skyvern/forge/sdk/db/models.py]()

## 数据仓库层

### Repository 模式

Skyvern 使用 Repository 模式封装数据访问逻辑，所有仓库类位于 `skyvern/forge/sdk/db/repositories` 目录下。

```mermaid
graph TD
    A[Service Layer] --> B[Repository Layer]
    B --> C[SQLAlchemy Session]
    C --> D[(Database)]
    
    E[OrganizationRepository] --> B
    F[WorkflowRepository] --> B
    G[TaskRepository] --> B
    H[CredentialRepository] --> B
    I[ScheduleRepository] --> B
```

### 核心 Repository 类

| Repository 类 | 职责 | 主要方法 |
|--------------|------|---------|
| OrganizationRepository | 组织管理 | create, get, update, delete |
| WorkflowRepository | 工作流 CRUD | create_workflow, get_workflow, update_workflow |
| WorkflowRunRepository | 工作流运行管理 | create_run, get_run, update_status |
| TaskRepository | 任务管理 | create_task, get_task, update_task |
| TaskStepRepository | 任务步骤管理 | create_step, get_steps |
| CredentialRepository | 凭证管理 | create_credential, get_credential |
| ScheduleRepository | 日程管理 | create_schedule, get_schedules |
| WorkflowScriptRepository | 脚本管理 | create_script, get_revisions |

资料来源：[skyvern/forge/sdk/db/repositories]()

## 数据库迁移

### Alembic 版本管理

Skyvern 使用 Alembic 进行数据库版本控制，迁移文件位于 `alembic/versions/` 目录。

迁移目录结构：
```
alembic/
├── env.py              # Alembic 环境配置
├── script.py.mako      # 迁移脚本模板
└── versions/           # 迁移版本文件
    ├── xxx_initial.py
    ├── xxx_add_workflow.py
    ├── xxx_add_credential.py
    └── ...
```

### 迁移操作

```mermaid
graph LR
    A[修改 models.py] --> B[生成迁移脚本]
    B --> C[alembic revision --autogenerate]
    C --> D[应用迁移]
    D --> E[alembic upgrade head]
```

资料来源：[alembic/versions]()

## 数据关系图

### 工作流执行数据流

```mermaid
graph TD
    A[Workflow] -->|1:N| B[WorkflowVersion]
    A -->|1:N| C[WorkflowRun]
    C -->|1:N| D[WorkflowBlock]
    C -->|1:1| E[Task]
    E -->|1:N| F[TaskStep]
    
    A -->|1:N| G[Schedule]
    
    A -->|1:N| H[WorkflowScript]
    H -->|1:N| I[WorkflowScriptRevision]
    
    J[Organization] -->|1:N| A
    J -->|1:N| K[Credential]
    J -->|1:N| E
```

### 凭证存储结构

```mermaid
graph TD
    A[Organization] -->|1:N| B[Credential]
    A -->|1:N| C[CustomCredentialServiceAuthToken]
    A -->|1:N| D[TOTP]
    
    B -->|credential_type| E[api_key]
    B -->|credential_type| F[oauth]
    B -->|credential_type| G[password]
    
    D -->|totp_type| H[numeric]
    D -->|totp_type| I[magic_link]
```

## 数据安全

### 敏感数据加密

以下字段使用 `EncryptedString` 类型存储，确保敏感信息在数据库中加密：

- `Credential.credential_value` - 凭证值
- `CustomCredentialServiceAuthToken.api_token` - API 令牌
- `TOTP.totp_value` - TOTP 密钥

资料来源：[skyvern/forge/sdk/db/models.py]()

### 组织隔离

所有数据模型都包含 `organization_id` 字段，确保多租户环境下的数据隔离。数据访问时必须指定组织 ID，防止跨租户数据泄露。

## 与前端的交互

### API 端点

前端通过 REST API 与后端交互，关键的数据接口包括：

| 接口路径 | 用途 |
|---------|------|
| /api/v1/workflows | 工作流管理 |
| /api/v1/tasks | 任务管理 |
| /api/v1/credentials | 凭证管理 |
| /api/v1/schedules | 日程管理 |
| /api/v1/scripts | 脚本管理 |

资料来源：[skyvern-frontend/src/routes/workflows/WorkflowScriptsPage.tsx]()
资料来源：[skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx]()

### 状态管理

前端使用 React Query 或类似工具进行服务端状态管理，从后端 API 获取数据后缓存并同步到 UI 组件。

```mermaid
sequenceDiagram
    Frontend->>Backend: GET /api/v1/workflows
    Backend->>Database: SELECT workflows
    Database->>Backend: workflow data
    Backend->>Frontend: JSON response
    Frontend->>Frontend: Update UI state
```

## 总结

Skyvern 的数据库设计采用清晰的分层架构，核心数据模型覆盖了组织管理、工作流自动化、任务执行、凭证安全和日程调度等关键业务场景。通过 Repository 模式封装数据访问，配合 Alembic 进行数据库版本管理，确保了系统的可维护性和扩展性。所有敏感数据采用加密存储，组织级别的数据隔离保障了多租户环境的安全性。

---

<a id='page-credentials'></a>

## 凭证管理系统

### 相关页面

相关主题：[数据库与数据模型](#page-database), [浏览器自动化](#page-browser-automation)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern-frontend/src/routes/workflows/components/CredentialSelector.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/components/CredentialSelector.tsx)
- [skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx)
- [skyvern-frontend/src/components/CustomCredentialServiceConfigForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/components/CustomCredentialServiceConfigForm.tsx)
- [skyvern-frontend/src/routes/workflows/editor/nodes/HttpRequestNode/HttpRequestNode.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/nodes/HttpRequestNode/HttpRequestNode.tsx)
- [skyvern/cli/mcp_tools/README.md](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern/cli/mcp_tools/README.md)
</details>

# 凭证管理系统

## 概述

Skyvern 的凭证管理系统（Credential Management System）是用于安全存储、管理和调用用户认证凭据的核心模块。该系统支持多种凭证类型和外部密钥管理服务集成，为浏览器自动化任务和工作流执行提供安全的身份验证能力。

凭证管理系统的主要职责包括：

- 安全存储密码、信用卡信息和密钥凭证
- 集成外部密钥管理服务（Bitwarden、Azure Key Vault、1Password）
- 支持双因素认证（2FA/TOTP）流程
- 为工作流节点和 HTTP 请求提供凭证注入能力
- 管理会话持久化和浏览器认证状态

资料来源：[CredentialSelector.tsx:45-52]()

## 凭证类型

Skyvern 支持三种主要凭证类型，每种类型对应不同的使用场景。

| 凭证类型 | 英文标识 | 说明 |
|---------|---------|------|
| 密码凭证 | password | 用于网站登录和表单认证的用户名密码组合 |
| 信用卡凭证 | credit_card | 用于支付表单的信用卡信息存储 |
| 密钥凭证 | secret | 用于 API 密钥、OAuth Token 等敏感字符串 |

凭证类型在前端界面中通过下拉选择器呈现，用户可以根据实际需求选择相应的凭证类型进行配置。

资料来源：[CredentialSelector.tsx:43-53]()

## 凭证选择器组件

`CredentialSelector` 是工作流编辑器中用于选择已配置凭证的 UI 组件。该组件提供以下功能：

### 组件特性

- 显示凭证名称和关联域名
- 根据凭证类型显示对应标签（Password / Credit Card / Secret）
- 支持过滤和搜索凭证列表
- 内置凭证创建模态框入口

### 数据展示

凭证选择器展示每个凭证的以下信息：

- 凭证名称
- 关联 URL 的主机名（从 `tested_url` 字段提取）
- 凭证类型标签
- 凭证描述

```tsx
<p className="text-xs text-slate-400">
  {credential.credential_type === "password"
    ? "Password"
    : credential.credential_type === "credit_card"
      ? "Credit Card"
      : "Secret"}
</p>
```

资料来源：[CredentialSelector.tsx:37-54]()

## 双因素认证（TOTP）支持

Skyvern 提供了完整的双因素认证（Time-based One-Time Password）支持，用于处理需要动态验证码的认证场景。

### TOTP 凭证标签

`CredentialsTotpTab` 组件提供 TOTP 凭证管理界面，包含以下功能：

- **验证码推送表单**：用户输入收到的验证码，Skyvern 自动提取并关联到相关任务执行
- **按标识符过滤**：支持按邮箱或手机号码筛选 TOTP 凭证记录
- **按类型过滤**：支持选择全部类型、纯数字验证码（totp）或魔法链接（magic_link）

### 2FA 代码处理流程

用户在认证过程中收到包含验证码的消息后，通过推送表单将验证码提交给 Skyvern。系统自动识别验证码格式并附加到相应的运行实例。

```tsx
<h2 className="text-lg font-semibold">Push a 2FA Code</h2>
<p className="mt-1 text-sm text-slate-400">
  Paste the verification message you received. Skyvern extracts the code
  and attaches it to the relevant run.
</p>
```

资料来源：[CredentialsTotpTab.tsx:14-19]()

## 自定义凭证服务配置

对于需要使用私有密钥管理服务的场景，Skyvern 支持配置自定义凭证服务。

### 配置表单功能

`CustomCredentialServiceConfigForm` 组件提供以下配置选项：

- **API 基础 URL**：指定凭证服务 API 的基础地址
- **认证令牌**：输入服务的访问令牌
- **令牌类型**：支持多种令牌认证方式
- **创建时间**：记录凭证服务的初始化时间

### 敏感信息处理

系统对敏感信息进行掩码处理，只显示令牌的前 8 个字符：

```tsx
<div>
  <strong>Token (masked):</strong>{" "}
  {parsedConfig.api_token.length > 8
    ? `${parsedConfig.api_token.slice(0, 8)}...`
    : "********"}
</div>
```

资料来源：[CustomCredentialServiceConfigForm.tsx:23-32]()

## MCP 工具集成

Skyvern 通过 MCP（Model Context Protocol）提供完整的凭证管理工具集，支持在 AI 应用中调用凭证操作。

### 可用工具列表

| 工具名称 | 功能说明 |
|---------|---------|
| skyvern_login | 执行网站登录流程 |
| skyvern_credential_list | 列出所有可用凭证 |
| skyvern_credential_get | 获取指定凭证详情 |
| skyvern_credential_delete | 删除指定凭证 |

### 支持的密钥管理服务

MCP 凭证工具支持与以下密钥管理服务集成：

- **Skyvern Vault**：内置的安全存储服务
- **Bitwarden**：开源密码管理器
- **1Password**：商业密码管理平台
- **Azure Key Vault**：微软云密钥管理服务

所有集成都支持自动处理双因素认证（2FA）和 TOTP 流程。

资料来源：[cli/mcp_tools/README.md:26-32]()

## 工作流中的凭证使用

### HTTP 请求节点

在工作流编辑器中，`HttpRequestNode` 组件为 HTTP 请求提供凭证注入能力。支持的凭证引用格式包括：

```json
// 密码凭证引用
{{ my_credential.username }}
{{ my_credential.password }}

// 密钥凭证引用
{{ my_secret.secret_value }}
```

凭证变量在运行时会被自动替换为实际存储的敏感值。

### 快速提示功能

HTTP 请求节点内置了凭证使用指引，帮助用户正确配置认证信息：

- 导入 cURL 功能：从 API 文档快速转换请求配置
- 快速添加头部：自动插入常用的认证和内容类型头部
- 响应数据引用：在后续节点中引用请求返回的状态码、头部和响应体

资料来源：[HttpRequestNode.tsx:8-22]()

## 凭证数据模型

### 核心字段

凭证对象包含以下核心属性：

| 字段名 | 类型 | 说明 |
|-------|------|------|
| credential_id | string | 凭证唯一标识符 |
| credential_type | enum | 凭证类型（password/credit_card/secret） |
| name | string | 凭证显示名称 |
| tested_url | string | 关联的测试 URL（可选） |
| created_at | datetime | 创建时间戳 |
| api_base_url | string | 自定义服务的 API 地址 |
| api_token | string | 访问令牌（存储时加密） |
| token_type | string | 令牌类型标识 |

### 自定义凭证服务对象

对于外部服务集成，凭证服务配置包含：

| 字段名 | 说明 |
|-------|------|
| id | 服务配置唯一标识 |
| token_type | 令牌类型 |
| created_at | 配置创建时间 |
| api_base_url | API 基础地址 |
| api_token | 认证令牌（加密存储） |

资料来源：[CustomCredentialServiceConfigForm.tsx:18-23]()

## 安全设计

### 敏感数据保护

系统采用多层安全策略保护敏感凭证数据：

1. **存储加密**：API 令牌等敏感信息在数据库中加密存储
2. **显示掩码**：前端界面只显示部分令牌信息，防止信息泄露
3. **传输安全**：通过 HTTPS 协议确保数据传输安全
4. **访问控制**：凭证访问需要相应的权限验证

### 凭证隔离

每个工作区和用户拥有独立的凭证存储空间，确保不同租户之间的数据隔离。

## 相关命令

Skyvern CLI 提供了便捷的凭证管理命令：

```bash
# 列出所有凭证
skyvern credential list

# 获取指定凭证
skyvern credential get <credential_id>

# 删除凭证
skyvern credential delete <credential_id>
```

## 扩展阅读

- [MCP 集成文档](../integrations/mcp/README.md)
- [工作流编辑器指南](../skyvern-frontend/src/routes/workflows/editor/README.md)
- [浏览器自动化配置](../README.md#browser-configuration)

---

<a id='page-frontend'></a>

## 前端组件结构

### 相关页面

相关主题：[系统架构设计](#page-architecture)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx)
- [skyvern-frontend/src/routes/tasks/create/SavedTaskForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/tasks/create/SavedTaskForm.tsx)
- [skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/RunWorkflowForm.tsx)
- [skyvern-frontend/src/routes/workflows/editor/panels/WorkflowHistoryPanel.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowHistoryPanel.tsx)
- [skyvern-frontend/src/routes/workflows/editor/panels/schedulePanel/ScheduleCard.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/panels/schedulePanel/ScheduleCard.tsx)
- [skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/editor/nodes/StartNode/StartNode.tsx)
- [skyvern-frontend/src/routes/schedules/CreateOrgScheduleDialog.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/schedules/CreateOrgScheduleDialog.tsx)
- [skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx)
- [skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx)
- [skyvern-frontend/src/routes/workflows/components/WorkflowsTable.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/components/WorkflowsTable.tsx)
- [skyvern-frontend/src/routes/workflows/components/CreateFromTemplateDialog.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/components/CreateFromTemplateDialog.tsx)
- [skyvern-frontend/src/routes/workflows/copilot/WorkflowCopilotChat.tsx](https://github.com/Skyvern-AI/skyvern/blob/main/skyvern-frontend/src/routes/workflows/copilot/WorkflowCopilotChat.tsx)
</details>

# 前端组件结构

## 概述

Skyvern 前端是一个基于 React 和 TypeScript 构建的单页应用（SPA），负责提供用户与 Skyvern 自动化引擎交互的界面。前端采用现代化的组件架构，通过 `react-router-dom` 进行路由管理，使用 React Hook Form 进行表单处理，并借助 Tailwind CSS 实现样式系统。组件结构按照功能模块划分为任务（Tasks）、工作流（Workflows）、调度（Schedules）和凭证（Credentials）四大核心区域。

## 目录结构

Skyvern 前端源码位于 `skyvern-frontend/src/` 目录下，核心路由和组件按照以下结构组织：

```
skyvern-frontend/src/
├── routes/                    # 路由层
│   ├── tasks/                # 任务模块
│   │   ├── create/           # 任务创建相关组件
│   │   └── ...
│   ├── workflows/            # 工作流模块
│   │   ├── editor/           # 工作流编辑器
│   │   │   ├── panels/       # 编辑器面板
│   │   │   ├── nodes/        # 节点组件
│   │   │   └── Workspace.tsx
│   │   ├── components/       # 工作流通用组件
│   │   ├── copilot/          # AI 副驾驶组件
│   │   └── workflowRun/      # 工作流运行相关
│   ├── schedules/            # 调度模块
│   ├── credentials/          # 凭证模块
│   └── App.tsx              # 应用根组件
└── components/              # 共享组件库
```

## 核心模块架构

### 1. 任务模块（Tasks）

任务模块负责创建和管理自动化任务，是 Skyvern 前端的核心功能之一。

#### 1.1 CreateNewTaskForm 组件

`CreateNewTaskForm.tsx` 是新建任务的表单组件，提供了导航目标（Navigation Goal）的输入功能。

| 字段 | 类型 | 说明 |
|------|------|------|
| navigationGoal | string | 描述 Skyvern 应该去哪里以及做什么 |
| navigationPayload | object | 指定重要参数、路由或状态（高级设置） |

组件使用 `AutoResizingTextarea` 组件实现自动调整高度的文本输入区域，当值为 `null` 时显示空字符串。高级设置区域通过条件渲染展示 `navigationPayload` 输入框。

资料来源：[CreateNewTaskForm.tsx:10-25]()

#### 1.2 SavedTaskForm 组件

`SavedTaskForm.tsx` 用于加载和编辑已保存的任务。与 `CreateNewTaskForm` 类似，但增加了代码编辑器（CodeEditor）支持 JSON 格式的 `navigationPayload` 输入。高级设置区域可通过按钮切换显示/隐藏状态。

资料来源：[SavedTaskForm.tsx:1-50]()

### 2. 工作流模块（Workflows）

工作流模块是 Skyvern 前端最复杂的部分，包含了可视化编辑器、执行表单、历史记录和 AI 副驾驶等功能。

#### 2.1 工作流编辑器架构

工作流编辑器采用节点面板（Node Panels）的架构设计，核心组件包括：

- **WorkflowEditor.tsx** - 编辑器主容器
- **WorkflowHistoryPanel.tsx** - 历史记录面板
- **StartNode.tsx** - 起始节点配置

#### 2.2 StartNode 节点配置

`StartNode` 组件定义了工作流执行的核心参数：

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| runWith | enum | "agent" | 执行方式：Skyvern Agent 或 Code |
| aiFallback | boolean | - | 启用 AI 自愈功能，代码执行失败时自动回退到 AI 重新生成 |
| codeKey | string | - | 可选的代码缓存键值 |

组件使用 `HelpTooltip` 组件提供上下文相关的帮助提示，使用 `Select` 组件选择执行方式，使用 `Switch` 组件控制布尔选项。

资料来源：[StartNode.tsx:1-40]()

#### 2.3 RunWorkflowForm 执行表单

`RunWorkflowForm.tsx` 是运行工作流的表单组件，集成了以下功能：

**输入参数验证**

针对不同类型的工作流参数，表单实现了差异化的验证逻辑：

```typescript
// JSON 类型参数验证
if (parameter.workflow_parameter_type === "json") {
    if (value === null || value === undefined) {
        return "This field is required";
    }
    if (typeof value === "string") {
        const trimmed = value.trim();
        if (trimmed === "") {
            return "This field is required";
        }
        try {
            JSON.parse(trimmed);
            return true;
        } catch (e) {
            return "Invalid JSON";
        }
    }
}

// 布尔类型参数验证
if (parameter.workflow_parameter_type === "boolean") {
    if (value === null || value === undefined) {
        return "This field is required";
    }
}

// 数值类型参数验证
if (parameter.workflow_parameter_type === "integer" || 
    parameter.workflow_parameter_type === "float") {
    if (value === null || value === undefined || Number.isNaN(value)) {
        return "This field is required";
    }
}
```

资料来源：[RunWorkflowForm.tsx:1-80]()

**Webhook 回调 URL 验证**

表单使用 Zod schema 进行 URL 格式验证：

```typescript
rules={{
    validate: (value) => {
        if (value === null || value === "") {
            return;
        }
        if (typeof value !== "string") {
            return "Invalid URL";
        }
        const urlSchema = z.string().url({ message: "Invalid URL" });
        const { success } = urlSchema.safeParse(value);
        if (!success) {
            return "Invalid URL";
        }
    },
}}
```

#### 2.4 WorkflowsTable 工作流列表

`WorkflowsTable.tsx` 提供了工作流的分页列表展示功能，集成了分页组件（Pagination）用于导航。

#### 2.5 CreateFromTemplateDialog 模板对话框

模板对话框允许用户基于预设模板创建工作流，支持模板搜索和筛选功能。组件使用卡片式布局展示模板，支持模糊搜索匹配模板标题和描述。

资料来源：[CreateFromTemplateDialog.tsx:1-60]()

### 3. 调度模块（Schedules）

调度模块管理定时执行的工作流任务。

#### 3.1 CreateOrgScheduleDialog 创建调度对话框

创建调度的对话框组件提供了以下功能：

| 功能 | 组件类型 | 说明 |
|------|----------|------|
| 工作流选择 | Select | 从可用工作流列表中选择 |
| 调度名称 | Input | 可选，自动生成如果为空 |
| 调度描述 | Input | 可选 |
| 参数配置 | ScheduleParametersSection | 工作流参数输入 |
| Cron 预设 | Button Group | 常用 Cron 表达式快速选择 |
| 自定义 Cron | Input | 手动输入 Cron 表达式 |

组件预设了多个 Cron 表达式模板供快速选择：

```typescript
const CRON_PRESETS = [
    { label: "Every hour", expression: "0 * * * *" },
    { label: "Every day", expression: "0 0 * * *" },
    { label: "Every week", expression: "0 0 * * 0" },
    // ...
];
```

资料来源：[CreateOrgScheduleDialog.tsx:1-80]()

#### 3.2 ScheduleCard 调度卡片

`ScheduleCard` 组件用于在工作流编辑器面板中展示单个调度任务，包含以下功能：

- 调度名称和时间显示
- 时区信息展示
- 启用/禁用开关（Switch）
- 删除操作按钮
- 下次执行时间预览

```typescript
<Switch
    checked={schedule.enabled}
    disabled={isToggling}
    onCheckedChange={(checked) =>
        onToggle(schedule.workflow_schedule_id, checked)
    }
/>
```

资料来源：[ScheduleCard.tsx:1-50]()

#### 3.3 ScheduleDetailPage 调度详情页

调度详情页展示调度的完整信息，包括创建时间、最后修改时间、Cron 表达式和时区等元数据。

```typescript
<div className="space-y-2">
    <div className="flex items-start justify-between">
        <span className="text-sm text-slate-400">Created</span>
        <span className="text-sm text-slate-50">
            {basicLocalTimeFormat(schedule.created_at)}
        </span>
    </div>
    <div className="flex items-start justify-between">
        <span className="text-sm text-slate-400">Last Modified</span>
        <span className="text-sm text-slate-50">
            {basicLocalTimeFormat(schedule.modified_at)}
        </span>
    </div>
</div>
```

资料来源：[ScheduleDetailPage.tsx:1-50]()

### 4. 凭证模块（Credentials）

凭证模块管理用户的认证凭据，包括 2FA/TOTP 验证码处理。

#### 4.1 CredentialsTotpTab TOTP 凭证管理

`CredentialsTotpTab` 组件提供了以下功能：

| 功能 | 说明 |
|------|------|
| PushTotpCodeForm | 推送 2FA 验证码表单 |
| 标识符筛选 | 按邮箱或电话筛选 |
| OTP 类型筛选 | 支持全部/Numeric code/Magic link |

组件支持从验证消息中自动提取 TOTP 验证码并附加到相关运行任务。

资料来源：[CredentialsTotpTab.tsx:1-50]()

### 5. AI 副驾驶（Copilot）

#### 5.1 WorkflowCopilotChat 对话界面

`WorkflowCopilotChat` 组件提供了与 AI 副驾驶对话的功能，用户可以：

- 描述工作流目标
- 指定目标网站
- 选择要使用的凭证
- 获取 AI 生成的工作流建议

组件在最后一条消息中显示建议的工作流操作按钮（Review/Accept）。

```typescript
{showProposedPanel ? (
    <>
        <button onClick={() => handleReviewWorkflow(proposedWorkflow)}>
            Review
        </button>
        <button onClick={() => handleAcceptWorkflow(proposedWorkflow)}>
            Accept
        </button>
    </>
) : null}
```

资料来源：[WorkflowCopilotChat.tsx:1-60]()

## 组件交互流程

### 工作流执行流程

```mermaid
graph TD
    A[选择工作流] --> B[RunWorkflowForm]
    B --> C{是否有输入参数?}
    C -->|有| D[填写参数]
    C -->|无| E[配置执行选项]
    D --> E
    E --> F{选择执行方式}
    F -->|Agent| G[使用 Skyvern Agent]
    F -->|Code| H{代码已缓存?}
    H -->|是| I[使用缓存代码执行]
    H -->|否| J[先生成代码]
    I --> K{执行失败且启用AI Fallback?}
    J --> K
    K -->|是| L[回退到 AI 重新生成]
    K -->|否| M[标记失败]
    G --> N[Webhook 回调结果]
    L --> N
    M --> N
```

### 调度创建流程

```mermaid
graph LR
    A[CreateOrgScheduleDialog] --> B[选择工作流]
    B --> C[配置参数值]
    C --> D[设置 Cron 表达式]
    D --> E[选择时区]
    E --> F[提交创建]
    F --> G[ScheduleCard 显示]
```

## 表单验证模式

Skyvern 前端采用 React Hook Form 进行表单状态管理，验证模式遵循以下规则：

### 必填字段验证

```typescript
// 字符串类型
if (parameter.workflow_parameter_type === "string") {
    if (value === null || value === undefined) {
        return "This field is required";
    }
    if (typeof value === "string" && value.trim() === "") {
        return "This field is required";
    }
}

// 文件 URL 类型
if (parameter.workflow_parameter_type === "file_url") {
    if (value === null || value === undefined || 
        (typeof value === "string" && value.trim() === "")) {
        return "This field is required";
    }
}
```

### URL 验证

使用 Zod schema 进行 URL 格式验证：

```typescript
const urlSchema = z.string().url({ message: "Invalid URL" });
const { success } = urlSchema.safeParse(value);
if (!success) {
    return "Invalid URL";
}
```

## 状态管理模式

### 组件状态管理

组件内部使用 React Hook 管理状态：

| Hook | 用途 | 示例 |
|------|------|------|
| useState | 本地状态 | 筛选条件、对话框开关 |
| useForm | 表单状态 | 表单值、错误、提交处理 |
| useMutation | 异步操作 | 创建、更新、删除操作 |
| useQuery | 数据获取 | 工作流列表、详情查询 |

### 状态提升

在需要跨组件共享状态的场景中，组件通过回调函数将状态提升到父组件管理：

```typescript
const handleParameterChange = (key: string, value: any) => {
    setParameters((prev) => ({ ...prev, [key]: value }));
};
```

## UI 组件库

Skyvern 前端使用以下核心 UI 组件库：

| 组件 | 来源 | 用途 |
|------|------|------|
| AutoResizingTextarea | 自定义 | 自动调整高度的文本输入 |
| CodeEditor | 自定义 | 代码/JSON 编辑器 |
| ProxySelector | 自定义 | 代理位置选择 |
| Select/SelectContent/SelectItem | Radix UI | 下拉选择框 |
| Dialog/DialogContent | Radix UI | 对话框 |
| Table/TableHeader/TableBody | Radix UI | 表格 |
| Switch | Radix UI | 开关控件 |
| Button | 自定义 | 按钮组件 |
| Badge | 自定义 | 标签组件 |

## 样式系统

前端使用 Tailwind CSS 进行样式管理，采用以下设计规范：

- **颜色系统**：使用 `slate-*` 色系定义文本和背景
- **间距系统**：使用 `gap-*`、`space-y-*` 定义间距
- **圆角**：使用 `rounded-lg`、`rounded-md` 定义圆角
- **阴影**：使用 `shadow-*` 定义阴影效果
- **深色模式**：组件支持 `dark:` 前缀实现深色模式适配

## 组件导出规范

每个组件文件通过命名导出（Named Export）导出组件：

```typescript
export { WorkflowHistoryPanel };
export { ScheduleCard };
export { WorkflowsTable };
```

这种方式便于 Tree Shaking 优化和按需导入。

## 总结

Skyvern 前端采用了清晰的分层架构设计，将功能模块划分为任务、工作流、调度和凭证四大领域。每个领域包含表单、面板、对话框等特定类型的组件，通过 React Hook Form 实现统一的表单管理。组件之间通过回调函数和状态提升实现解耦，同时借助 TypeScript 的类型系统确保代码的健壮性。前端使用 Tailwind CSS 实现响应式设计，并支持深色模式，为用户提供一致且现代的界面体验。

---

---

## Doramagic 踩坑日志

项目：Skyvern-AI/skyvern

摘要：发现 23 个潜在踩坑项，其中 1 个为 high/blocking；最高优先级：安全/权限坑 - 来源证据：what ensures it’s the correct one in that context?。

## 1. 安全/权限坑 · 来源证据：what ensures it’s the correct one in that context?

- 严重度：high
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：what ensures it’s the correct one in that context?
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_77591d02b4fa4efdb89fba55a9a7f08a | https://github.com/Skyvern-AI/skyvern/issues/5637 | 来源类型 github_issue 暴露的待验证使用条件。

## 2. 安装坑 · 来源证据：Release v1.0.29

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Release v1.0.29
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_d8e67eb179f5406fb5af75a063639216 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.29 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 3. 安装坑 · 来源证据：Task Execution Performance: Seeking guidance on optimizing execution speed

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：Task Execution Performance: Seeking guidance on optimizing execution speed
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_7f47a5abded54abfb766032115bfa71c | https://github.com/Skyvern-AI/skyvern/issues/4375 | 来源类型 github_issue 暴露的待验证使用条件。

## 4. 安装坑 · 来源证据：[Feature Request] Multi-session VNC support for local/self-hosted deployments (Live view & Take Control)

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：[Feature Request] Multi-session VNC support for local/self-hosted deployments (Live view & Take Control)
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_8f2671eacb334774963837f8f7e8edf4 | https://github.com/Skyvern-AI/skyvern/issues/4392 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 5. 配置坑 · 来源证据：Performance bottleneck: High latency for simple form-filling workflows

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个配置相关的待验证问题：Performance bottleneck: High latency for simple form-filling workflows
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_9820831a47af4ca28ef7abcc0fd7095e | https://github.com/Skyvern-AI/skyvern/issues/4439 | 来源类型 github_issue 暴露的待验证使用条件。

## 6. 能力坑 · 能力判断依赖假设

- 严重度：medium
- 证据强度：source_linked
- 发现：README/documentation is current enough for a first validation pass.
- 对用户的影响：假设不成立时，用户拿不到承诺的能力。
- 建议检查：将假设转成下游验证清单。
- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。
- 证据：capability.assumptions | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | README/documentation is current enough for a first validation pass.

## 7. 维护坑 · 来源证据：Release v1.0.34

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题：Release v1.0.34
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_660eece743754686b70883d67faffd46 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.34 | 来源类型 github_release 暴露的待验证使用条件。

## 8. 维护坑 · 来源证据：Release v1.0.35

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题：Release v1.0.35
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_53f24132e3214005ba1dc606965c0eb7 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.35 | 来源类型 github_release 暴露的待验证使用条件。

## 9. 维护坑 · 维护活跃度未知

- 严重度：medium
- 证据强度：source_linked
- 发现：未记录 last_activity_observed。
- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。
- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。
- 证据：evidence.maintainer_signals | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | last_activity_observed missing

## 10. 安全/权限坑 · 下游验证发现风险项

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：下游已经要求复核，不能在页面中弱化。
- 建议检查：进入安全/权限治理复核队列。
- 防护动作：下游风险存在时必须保持 review/recommendation 降级。
- 证据：downstream_validation.risk_items | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | no_demo; severity=medium

## 11. 安全/权限坑 · 存在安全注意事项

- 严重度：medium
- 证据强度：source_linked
- 发现：No sandbox install has been executed yet; downstream must verify before user use.
- 对用户的影响：用户安装前需要知道权限边界和敏感操作。
- 建议检查：转成明确权限清单和安全审查提示。
- 防护动作：安全注意事项必须面向用户前置展示。
- 证据：risks.safety_notes | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | No sandbox install has been executed yet; downstream must verify before user use.

## 12. 安全/权限坑 · 存在评分风险

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：风险会影响是否适合普通用户安装。
- 建议检查：把风险写入边界卡，并确认是否需要人工复核。
- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。
- 证据：risks.scoring_risks | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | no_demo; severity=medium

## 13. 安全/权限坑 · 来源证据：Clarification on the Custom credential documentation on the Delete API with empty body

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Clarification on the Custom credential documentation on the Delete API with empty body
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_a5164e5767dc4b618ce1c862ed440eaa | https://github.com/Skyvern-AI/skyvern/issues/4256 | 来源类型 github_issue 暴露的待验证使用条件。

## 14. 安全/权限坑 · 来源证据：GROQ error

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：GROQ error
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_fb8dab5ab6224386a6b341234a8e90be | https://github.com/Skyvern-AI/skyvern/issues/4366 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 15. 安全/权限坑 · 来源证据：Release v1.0.27

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.27
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_23488c9e7f354979bdbf8e9554b4b647 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.27 | 来源类型 github_release 暴露的待验证使用条件。

## 16. 安全/权限坑 · 来源证据：Release v1.0.30

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.30
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_6929e0e36e1549e9bd95f29d1d4cfbdf | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.30 | 来源类型 github_release 暴露的待验证使用条件。

## 17. 安全/权限坑 · 来源证据：Release v1.0.31

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.31
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_40ca78dbdbe141f383c8d202f08db28b | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.31 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 18. 安全/权限坑 · 来源证据：Release v1.0.32

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.32
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_4eaa09d9a74f49efb0fb81c9bdebe6a3 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.32 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 19. 安全/权限坑 · 来源证据：Release v1.0.33

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.33
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_ba7d530f080e4c88ad47ac26ba2781a7 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.33 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 20. 安全/权限坑 · 来源证据：Release v1.0.36

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：Release v1.0.36
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_236e050a3837462692b739322738a7a2 | https://github.com/Skyvern-AI/skyvern/releases/tag/v1.0.36 | 来源讨论提到 node 相关条件，需在安装/试用前复核。

## 21. 安全/权限坑 · 来源证据：persist_browser_session flag saves sessions but never retrieves them on subsequent runs

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：persist_browser_session flag saves sessions but never retrieves them on subsequent runs
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_b56e85161a3b4b7682c8ab13127be8d0 | https://github.com/Skyvern-AI/skyvern/issues/4390 | 来源类型 github_issue 暴露的待验证使用条件。

## 22. 维护坑 · issue/PR 响应质量未知

- 严重度：low
- 证据强度：source_linked
- 发现：issue_or_pr_quality=unknown。
- 对用户的影响：用户无法判断遇到问题后是否有人维护。
- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。
- 防护动作：issue/PR 响应未知时，必须提示维护风险。
- 证据：evidence.maintainer_signals | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | issue_or_pr_quality=unknown

## 23. 维护坑 · 发布节奏不明确

- 严重度：low
- 证据强度：source_linked
- 发现：release_recency=unknown。
- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。
- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。
- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。
- 证据：evidence.maintainer_signals | art_9274907e6629499384a5a574e4caa877 | https://github.com/Skyvern-AI/skyvern#readme | release_recency=unknown

<!-- canonical_name: Skyvern-AI/skyvern; human_manual_source: deepwiki_human_wiki -->
