Doramagic 项目包 · 项目说明书
skyvern 项目
生成时间:2026-05-12 01:23:02 UTC
Skyvern 项目介绍
Skyvern 是一个开源的 Web 自动化平台,通过自然语言描述即可自动化执行复杂的网络任务。该项目结合了大型语言模型(LLM)和浏览器自动化技术,使非技术用户也能轻松创建和管理自动化工作流程。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
项目概述
Skyvern 是一个开源的 Web 自动化平台,通过自然语言描述即可自动化执行复杂的网络任务。该项目结合了大型语言模型(LLM)和浏览器自动化技术,使非技术用户也能轻松创建和管理自动化工作流程。
Skyvern 的核心功能包括:
- 自然语言驱动的网页导航:用户只需描述任务目标,Skyvern 即可自动分析网页结构并执行相应操作
- 多步骤工作流编排:支持创建、编辑和调度复杂的自动化工作流
- 身份验证与凭证管理:内置对 TOTP/2FA、Magic Link 等多因素认证的支持
- 浏览器会话管理:支持持久化浏览器会话和远程浏览器连接
- 灵活的代理路由:可配置代理位置以满足地理位置需求
资料来源:README.md:1
系统架构
Skyvern 采用前后端分离的架构设计,主要由以下组件构成:
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 的核心执行单元,用户通过自然语言描述导航目标。
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)
工作流允许用户编排多步骤的自动化任务链。
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 包管理器
快速开始步骤
# 1. 创建虚拟环境
uv sync --group dev
# 2. 执行初始化配置
uv run skyvern quickstart
# 3. 访问 Web UI
# http://localhost:8080
代码运行模式
# 安装 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 默认收集基本的使用统计数据以帮助改进产品。
退出遥测收集:
export SKYVERN_TELEMETRY=false
资料来源:README.md:1
许可证
Skyvern 开源仓库采用 AGPL-3.0 许可证。
例外情况:托管云服务中的反机器人功能属于商业闭源功能,不包含在开源版本中。
资料来源:README.md:1
开发者资源
| 资源 | 链接 |
|---|---|
| 贡献指南 | CONTRIBUTING.md |
| 官方文档 | https://www.skyvern.com/docs |
| Help Wanted Issues | GitHub Issues |
| Discord 社区 | https://discord.gg/fG2XXEuQX3 |
| 邮箱支持 | [email protected] |
如需获取项目的高级概述、构建方法或使用问题解答,可使用 Code Sage AI 助手:
https://sage.storia.ai
资料来源:README.md:1
资料来源:[README.md:1]()
快速开始指南
Skyvern 是一个基于 Playwright 的 AI 驱动浏览器自动化工具,提供自然语言驱动的网页交互能力。本指南将帮助您在本地环境中快速部署和运行 Skyvern。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
系统要求
| 组件 | 最低要求 | 说明 |
|---|---|---|
| Python | 3.11+ | Skyvern 仅支持 Python 3.11 环境 资料来源:integrations/mcp/README.md |
| 操作系统 | Windows/WSL/macOS/Linux | 全平台支持 |
| Docker | 最新版 | 仅 Docker 部署方式需要 |
| uv | 最新版 | 源码开发方式推荐使用 资料来源:README.md |
部署方式概览
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 官方网站 下载并安装 Docker Desktop。安装完成后启动 Docker 服务。
步骤 2:克隆代码仓库
git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern
资料来源:README.md
步骤 3:配置环境变量
复制示例配置文件并编辑:
cp .env.example .env
编辑 .env 文件,添加您的 LLM API 密钥:
| 环境变量 | 必填 | 说明 |
|---|---|---|
OPENAI_API_KEY | 是 | OpenAI API 密钥 |
ANTHROPIC_API_KEY | 否 | Anthropic Claude API 密钥 |
SKYVERN_TELEMETRY | 否 | 设置为 false 可禁用遥测数据收集 |
资料来源:.env.example
步骤 4:启动服务
docker compose up -d
此命令将启动所有 Skyvern 组件服务,包括前端界面和后端服务。
步骤 5:访问 Web UI
服务启动后,在浏览器中打开 http://localhost:8080 即可访问 Skyvern 的 Web 用户界面。
资料来源:README.md
方式二:本地源码部署
此方式适合开发者参与 Skyvern 项目开发或需要自定义扩展的用户。
步骤 1:安装 uv
uv 是一个快速的 Python 包管理工具。根据 uv 官方文档 安装 uv。
步骤 2:创建虚拟环境并安装依赖
uv sync --group dev
此命令将创建 .venv 虚拟环境并安装所有开发依赖。
资料来源:README.md
步骤 3:运行快速启动向导
uv run skyvern quickstart
快速启动向导将引导您完成以下配置:
- LLM 提供商配置 - 选择并配置您要使用的 LLM 提供商
- API 密钥设置 - 输入相应的 API 密钥
- 数据库初始化 - 配置 SQLite 数据库
- 服务端口设置 - 配置 Web UI 访问端口
资料来源:skyvern/cli/quickstart.py
步骤 4:启动服务器
uv run skyvern run server
步骤 5:访问 Web UI
在浏览器中导航至 http://localhost:8080 开始使用。
方式三:MCP 扩展部署
Skyvern 提供 Model Context Protocol (MCP) 支持,允许 AI 应用通过 MCP 协议连接浏览器。
步骤 1:安装 Skyvern
pip install skyvern
步骤 2:初始化配置
skyvern init
初始化向导将引导您完成配置过程,支持连接到 Skyvern Cloud 或本地版本。
步骤 3:启动本地服务器(如需)
仅在本地模式下需要启动服务器:
skyvern run server
资料来源: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
常见问题排查
问题 1:sqlite3.OperationalError - table organizations already exists
这是 1.0.31 版本中的已知 bug。解决方案:
rm ~/.skyvern/data.db # 删除遗留的 SQLite 文件
pip install --upgrade skyvern # 1.0.32+ 版本已修复
skyvern quickstart
或使用 uv 安装:
uv pip install skyvern
问题 2:pip install skyvern 失败 - ResolutionImpossible
依赖解析冲突问题。解决方案:升级到 1.0.32+ 版本或使用 uv:
uv pip install skyvern
资料来源:README.md
快速验证部署
部署完成后,您可以通过以下方式验证:
- 访问 http://localhost:8080 查看 Web UI 是否正常加载
- 创建一个简单的导航任务测试功能
- 检查日志确认 LLM 连接正常
后续步骤
- 阅读 完整文档 了解更多高级功能
- 查看 贡献指南 参与项目开发
- 查看 Help Wanted 寻找贡献机会
遥测说明
Skyvern 默认收集基本使用统计信息以帮助改进产品。如需退出遥测数据收集,请设置环境变量:
SKYVERN_TELEMETRY=false
资料来源:README.md
资料来源:[README.md](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
系统架构设计
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
核心组件架构
Forge 应用层
Forge 是 Skyvern 的核心应用框架,负责整合所有功能模块。应用采用异步架构设计,支持高并发任务处理。
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
Agent 智能体引擎
Agent 是 Skyvern 的核心决策模块,负责解析自然语言任务并生成可执行的浏览器操作序列。
Agent 的核心职责:
- 解析用户提供的导航目标和操作指令
- 管理浏览器会话状态和上下文
- 决策下一步操作(点击、输入、导航等)
- 处理异常情况和重试逻辑
资料来源:skyvern/forge/agent.py:1-80
浏览器管理层
浏览器管理是自动化能力的基础,采用模块化工厂模式支持多种浏览器后端。
浏览器管理架构
Browser Manager
BrowserManager 负责管理浏览器实例的生命周期,包括创建、销毁、状态监控等操作。
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
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
浏览器连接方式
Skyvern 支持多种浏览器连接方式,以满足不同部署场景的需求。
本地浏览器连接:
# 通过 CDP 连接到本地 Chrome
BROWSER_TYPE=cdp-connect
BROWSER_REMOTE_DEBUGGING_URL=http://127.0.0.1:9222
远程浏览器隧道:
# 创建隧道连接到 Skyvern Cloud
skyvern browser serve --tunnel
资料来源:README.md:80-120
数据存储架构
S3 存储集成
Skyvern 使用 S3 URI 解析来处理文件存储和检索操作。
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
AWS 客户端管理
采用单例模式管理 AWS 客户端实例,并设置 45 分钟的 TTL 以确保连接有效性。
_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
MCP 集成架构
Model Context Protocol (MCP) 允许外部 AI 应用连接到 Skyvern 进行浏览器自动化。
MCP Server 架构
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
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
凭证与安全管理
TOTP/2FA 支持
Skyvern 支持多种双因素认证方式,确保自动化任务能够处理需要 2FA 的网站。
支持的 2FA 类型:
| 类型 | 描述 |
|---|---|
| Numeric code | 基于时间的六位数字验证码 |
| Magic link | 通过邮件发送的魔法链接 |
资料来源:skyvern-frontend/src/routes/credentials/CredentialsTotpTab.tsx:1-50
凭证存储
Skyvern 提供安全的凭证存储机制,支持:
- Skyvern Vault(内置安全存储)
- Bitwarden 集成
- 1Password 集成
- Azure Key Vault 集成
资料来源:skyvern/cli/mcp_tools/README.md:30-40
工作流系统架构
工作流定义
工作流由多个 Block 组成,每个 Block 代表一个独立的操作单元。
支持的 Block 类型:
| Block 类型 | 功能 |
|---|---|
| HTTP Request | 发送 HTTP 请求 |
| Print Page | 打印页面为 PDF |
| Human Interaction | 暂停等待人工确认 |
| Extract Data | 从页面提取结构化数据 |
资料来源:skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx:1-80
调度系统
Skyvern 支持基于 Cron 表达式的任务调度功能。
调度配置参数:
| 参数 | 描述 |
|---|---|
| cron_expression | Cron 表达式定义执行时间 |
| timezone | 时区设置 |
| workflow_parameters | 工作流输入参数 |
资料来源:skyvern-frontend/src/routes/schedules/ScheduleDetailPage.tsx:1-60
任务创建流程
任务表单配置
创建任务时,用户需要提供以下核心参数:
基本参数:
| 参数 | 说明 |
|---|---|
| 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
任务执行流程
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
快速开始
环境配置
# 安装 uv 包管理器
# 创建虚拟环境
uv sync --group dev
# 初始化 Skyvern
uv run skyvern quickstart
# 启动服务
skyvern run all
资料来源:README.md:10-20
程序化使用
from skyvern import Skyvern
skyvern = Skyvern(api_key="your-api-key")
task = await skyvern.run_task(
prompt="Find the top post on hackernews today",
)
架构设计原则
- 模块化设计:各组件职责明确,支持独立替换和扩展
- 异步优先:采用异步架构支持高并发场景
- 工厂模式:BrowserFactory 实现灵活的浏览器实例创建
- 单例管理:AWS 客户端等资源采用单例模式避免重复创建
- 凭证安全:敏感信息通过 Vault 等安全机制存储
- 可扩展性:MCP 协议支持与多种外部应用集成
总结
Skyvern 的系统架构围绕浏览器自动化核心能力,通过模块化设计实现了高内聚低耦合的组件关系。Forge 应用层作为统一入口,协调 Agent 智能体、浏览器管理、数据存储和外部集成四大功能模块,为用户提供了完整的浏览器自动化解决方案。
资料来源:[README.md:1-50](https://github.com/Skyvern-AI/skyvern/blob/main/README.md)
AI 代理系统
注意:当前分析的源码上下文中未包含 skyvern/forge/agent.py、skyvern/forge/agentfunctions.py、skyvern/forge/sdk/copilot/agent.py 及 skyvern/forge/sdk/copilot/runtime.py 等核心 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)
工作流是由多个任务块组成的有向图,定义自动化任务的执行顺序和条件逻辑。
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:下一个待执行块的标签
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 应用连接浏览器进行自动化操作:
graph LR
A[Claude/其他 LLM 应用] -->|MCP 协议| B[Skyvern MCP 服务器]
B -->|浏览器控制| C[网页操作]
B -->|API 调用| D[外部服务]
subgraph 连接方式
E[本地 Skyvern 服务器]
F[Skyvern Cloud]
end
B -.-> E
B -.-> FMCP 支持的功能:
- 填写表单
- 下载文件
- 网页信息研究
- 自动化数据采集
资料来源: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 提供商集成,适用于网页数据采集、表单填写、自动化测试等多种场景。
资料来源:[integrations/mcp/README.md:1-20]()
任务系统
任务系统是 Skyvern 的核心模块,负责管理和自动化浏览器操作任务。该系统允许用户通过自然语言描述定义导航目标和操作步骤,Skyvern 自动解析指令并在浏览器中执行相应操作。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
任务系统是 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 是任务系统的核心数据结构,继承自基础任务模型并扩展了更多功能。
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 是当前推荐使用的任务服务版本,提供增强的功能和更好的扩展性。
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
任务生命周期
任务状态流转
任务在执行过程中会经历多种状态,了解这些状态有助于监控和调试任务执行。
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 可以方便地创建和管理任务:
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
异步任务执行
任务可以在后台异步执行,无需保持脚本运行:
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
前端集成
任务创建表单
前端界面提供直观的表单组件用于创建任务:
// 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
实时流显示
前端支持实时查看任务执行画面:
// 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
任务管理接口
列出任务
获取组织内的任务历史记录:
// 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
查看任务详情
查看特定任务的详细信息和参数:
// 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 | 调度详情页面 |
调度配置
// 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)集成:
// 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. 导航目标编写
编写清晰的导航目标描述:
# 推荐写法
"Find the top post on hackernews today and extract the title and URL"
# 避免
"Check the website" # 过于模糊
2. URL 指定
始终提供完整的起始 URL,避免重定向导致的定位问题。
3. 导航负载使用
对于需要传递额外状态的场景,使用导航负载而非将所有信息放在导航目标中:
{
"routes": ["/login", "/dashboard", "/reports"],
"context": {
"user_id": "12345",
"view_mode": "detailed"
}
}
4. 错误处理
监控任务状态并实现适当的错误处理逻辑:
if task.status == Status.Failed:
print(f"Task failed: {task.error}")
elif task.status == Status.Completed:
print("Task completed successfully")
相关文档
资料来源:[skyvern/services/task_v2_service.py:1-50]()
工作流系统
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
块执行参数
不同的块类型支持特定的参数配置:
// Taskv2 块参数示例
interface Taskv2BlockParameters {
prompt: string; // 任务提示词
url: string; // 目标 URL
max_steps: number; // 最大步数
totp_verification_url?: string; // TOTP 验证 URL
totp_identifier?: string; // TOTP 标识符
disable_cache?: boolean; // 是否禁用缓存
}
// 文本提示块参数示例
interface TextPromptBlockParameters {
prompt: string; // 提示词模板
llm_key: string; // 使用的 LLM 密钥
json_schema?: object; // 输出 JSON Schema
parameters: string[]; // 依赖的参数列表
}
资料来源:skyvern-frontend/src/routes/workflows/workflowRun/WorkflowPostRunParameters.tsx
工作流执行流程
执行架构
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 | 使用预先保存的成功运行的代码 | 稳定、可复现的任务 |
// 开始节点配置
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 | 可选,空字符串视为空值 |
// 参数验证逻辑示例
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 发送回调通知:
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
前端组件架构
工作流编辑器
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 | 诊断信息链接 |
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 函数将数据库模型转换为前端可用的数据结构:
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
常见使用场景
场景一:发票批量下载
- 使用 URL 块导航到发票页面
- 使用 Filter 块设置日期过滤条件
- 使用 Extraction 块提取发票列表
- 使用 ForLoop 块遍历每个发票
- 使用 FileDownload 块下载每个发票
场景二:电商自动化购买
- 使用 URL 块导航到产品页面
- 使用 Browser Action 块添加商品到购物车
- 使用 Navigation 块进入购物车页面
- 使用 Validation 块验证购物车状态
- 使用 Browser Action 块完成结账流程
场景三:数据采集与报告
- 使用 HTTPRequest 块获取外部 API 数据
- 使用 TextPrompt 块使用 LLM 分析数据
- 使用 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
资料来源:[skyvern/schemas/workflows.py]()
数据库与数据模型
Skyvern 是一个基于浏览器的自动化平台,其数据模型设计用于支持工作流执行、任务管理、凭证存储、日程调度等核心功能。系统采用 Python 作为后端开发语言,使用 SQLAlchemy 作为 ORM 框架,并通过 Alembic 进行数据库版本管理。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
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(外键) |
| 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 目录下。
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
└── ...
迁移操作
graph LR
A[修改 models.py] --> B[生成迁移脚本]
B --> C[alembic revision --autogenerate]
C --> D[应用迁移]
D --> E[alembic upgrade head]资料来源:alembic/versions
数据关系图
工作流执行数据流
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凭证存储结构
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 组件。
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 进行数据库版本管理,确保了系统的可维护性和扩展性。所有敏感数据采用加密存储,组织级别的数据隔离保障了多租户环境的安全性。
资料来源:[skyvern/forge/sdk/db/models.py]()
凭证管理系统
Skyvern 的凭证管理系统(Credential Management System)是用于安全存储、管理和调用用户认证凭据的核心模块。该系统支持多种凭证类型和外部密钥管理服务集成,为浏览器自动化任务和工作流执行提供安全的身份验证能力。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
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字段提取) - 凭证类型标签
- 凭证描述
<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。系统自动识别验证码格式并附加到相应的运行实例。
<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 个字符:
<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 请求提供凭证注入能力。支持的凭证引用格式包括:
// 密码凭证引用
{{ my_credential.username }}
{{ my_credential.password }}
// 密钥凭证引用
{{ my_secret.secret_value }}
凭证变量在运行时会被自动替换为实际存储的敏感值。
快速提示功能
HTTP 请求节点内置了凭证使用指引,帮助用户正确配置认证信息:
- 导入 cURL 功能:从 API 文档快速转换请求配置
- 快速添加头部:自动插入常用的认证和内容类型头部
- 响应数据引用:在后续节点中引用请求返回的状态码、头部和响应体
凭证数据模型
核心字段
凭证对象包含以下核心属性:
| 字段名 | 类型 | 说明 |
|---|---|---|
| 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
安全设计
敏感数据保护
系统采用多层安全策略保护敏感凭证数据:
- 存储加密:API 令牌等敏感信息在数据库中加密存储
- 显示掩码:前端界面只显示部分令牌信息,防止信息泄露
- 传输安全:通过 HTTPS 协议确保数据传输安全
- 访问控制:凭证访问需要相应的权限验证
凭证隔离
每个工作区和用户拥有独立的凭证存储空间,确保不同租户之间的数据隔离。
相关命令
Skyvern CLI 提供了便捷的凭证管理命令:
# 列出所有凭证
skyvern credential list
# 获取指定凭证
skyvern credential get <credential_id>
# 删除凭证
skyvern credential delete <credential_id>
扩展阅读
资料来源:[CredentialSelector.tsx:45-52]()
前端组件结构
Skyvern 前端是一个基于 React 和 TypeScript 构建的单页应用(SPA),负责提供用户与 Skyvern 自动化引擎交互的界面。前端采用现代化的组件架构,通过 react-router-dom 进行路由管理,使用 React Hook Form 进行表单处理,并借助 Tailwind CSS 实现样式系统。组件结构按照功能模块划分为任务(Tasks)、...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
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 输入。高级设置区域可通过按钮切换显示/隐藏状态。
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 是运行工作流的表单组件,集成了以下功能:
输入参数验证
针对不同类型的工作流参数,表单实现了差异化的验证逻辑:
// 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";
}
}
Webhook 回调 URL 验证
表单使用 Zod schema 进行 URL 格式验证:
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 表达式模板供快速选择:
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)
- 删除操作按钮
- 下次执行时间预览
<Switch
checked={schedule.enabled}
disabled={isToggling}
onCheckedChange={(checked) =>
onToggle(schedule.workflow_schedule_id, checked)
}
/>
#### 3.3 ScheduleDetailPage 调度详情页
调度详情页展示调度的完整信息,包括创建时间、最后修改时间、Cron 表达式和时区等元数据。
<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)。
{showProposedPanel ? (
<>
<button onClick={() => handleReviewWorkflow(proposedWorkflow)}>
Review
</button>
<button onClick={() => handleAcceptWorkflow(proposedWorkflow)}>
Accept
</button>
</>
) : null}
资料来源:WorkflowCopilotChat.tsx:1-60
组件交互流程
工作流执行流程
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调度创建流程
graph LR
A[CreateOrgScheduleDialog] --> B[选择工作流]
B --> C[配置参数值]
C --> D[设置 Cron 表达式]
D --> E[选择时区]
E --> F[提交创建]
F --> G[ScheduleCard 显示]表单验证模式
Skyvern 前端采用 React Hook Form 进行表单状态管理,验证模式遵循以下规则:
必填字段验证
// 字符串类型
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 格式验证:
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 | 数据获取 | 工作流列表、详情查询 |
状态提升
在需要跨组件共享状态的场景中,组件通过回调函数将状态提升到父组件管理:
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)导出组件:
export { WorkflowHistoryPanel };
export { ScheduleCard };
export { WorkflowsTable };
这种方式便于 Tree Shaking 优化和按需导入。
总结
Skyvern 前端采用了清晰的分层架构设计,将功能模块划分为任务、工作流、调度和凭证四大领域。每个领域包含表单、面板、对话框等特定类型的组件,通过 React Hook Form 实现统一的表单管理。组件之间通过回调函数和状态提升实现解耦,同时借助 TypeScript 的类型系统确保代码的健壮性。前端使用 Tailwind CSS 实现响应式设计,并支持深色模式,为用户提供一致且现代的界面体验。
资料来源:[CreateNewTaskForm.tsx:10-25]()
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
可能阻塞安装或首次运行。
可能阻塞安装或首次运行。
可能增加新用户试用和生产接入成本。
可能增加新用户试用和生产接入成本。
Pitfall Log / 踩坑日志
项目: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
来源:Doramagic 发现、验证与编译记录