大多数 AI 产品的输出是静态内容——一段文字、一张图、一个文件。Gumloop 的 Live Artifacts(官方文档称 Interactive Artifacts)走了一条不同的路:AI 生成的不是内容,而是一个会运行的小型应用。
这是 Agent 递给你一张 Slack 频道截图,还是给你一个永远显示最新数据的活仪表板的区别。
一个 Live Artifact 由两部分组成:(1) 一个 HTML 文件(布局/样式/UI 逻辑)+ (2) 一个或多个 Python 数据脚本(观看时刻从集成拉数据)。打开时 HTML 调用 fetch('/gumloop/data/...'),Gumloop 拦截请求、在安全沙箱运行对应 Python 脚本、把结果作为 JSON 返回、HTML 再渲染。每次打开/刷新都重新执行——数据永远是"现在的"。
v10.3.0 的变化:此前 Live Artifact 只能调用部分 MCP 服务器;现在扩展到用户已连接的全部 MCP 服务器,含 Custom MCP、Hosted/Proxied MCP。Agent 生成的活应用能触达用户整个数字工作区。
┌──────────────────────────────────────────────────────────────────────┐ │ 静态内容 vs Live Artifact(生成式应用) │ ├─────────────────────────────────┬────────────────────────────────────┤ │ 静态 Artifact(v8.2.0) │ Live Artifact(v9.7.0 / v10.3.0) │ ├─────────────────────────────────┼────────────────────────────────────┤ │ Agent 生成时刻的快照 │ 每次打开实时拉取 │ │ 所有人看到同一份内容 │ 每个观看者看到自己的数据 │ │ 数据是"生成时"的 │ 数据是"此刻"的 │ │ 无副作用 │ 可执行写操作(发消息/建 issue) │ │ 创建者承担成本 │ 观看者承担成本(各自付各自的) │ │ PDF / CSV / 图片 / 静态 HTML │ HTML + Python 数据脚本 │ └─────────────────────────────────┴────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────┐
│ Live Artifact 打开时的执行流程 │
├──────────────────────────────────────────────────────────────────────┤
│ 观看者打开 Live Artifact URL │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Consent Overlay │ 列出该文件要访问的集成 + 动作 │
│ │ (首次/per- │ 观看者必须明确批准才能运行任何脚本 │
│ │ session) │ │
│ └────────┬─────────┘ │
│ │ 批准 │
│ ▼ │
│ ┌──────────────────┐ fetch('/gumloop/data/...') ┌──────────┐ │
│ │ HTML 文件 │ ───────────────────────────────▶ │ Gumloop │ │
│ │ (UI/布局/渲染) │ │ 后端代理│ │
│ └──────────────────┘ └────┬─────┘ │
│ ▲ │ 运行 │
│ │ JSON 结果 ▼ │
│ │ ┌──────────────────┐│
│ └────────────────────────────────────│ Python 数据脚本 ││
│ 在安全沙箱运行 ││
│ 用【观看者】凭据 ││
│ (短时 scoped token, ││
│ 5 分钟过期) ││
│ 调用 MCP 服务器 ──────┼▶ Linear / Slack /
│ └──────────────────┘ Gmail / GitHub /
│ 任意 MCP 服务器
│ (v10.3.0 全域)│
└──────────────────────────────────────────────────────────────────────┘
这是 Live Artifact 最关键、也最反直觉的设计:运行用观看者的凭据,不是创建者的。
如果同事创建了"团队 Slack 仪表板"并分享给你:他打开看到他的 Slack 数据;你打开看到你的 Slack 数据;创建者永远看不到你的,你也看不到他的。每次脚本运行时铸造短时 scoped token(仅文件声明的集成/工具,5 分钟过期,脚本结束失效),凭据从不暴露给 HTML 本身。
┌──────────────────────────────────────────────────────────────────────┐ │ "一个 Artifact,每人一视图" 的团队价值 │ ├──────────────────────────────────────────────────────────────────────┤ │ 团队 lead 创建"My Open Tasks" Live Artifact,分享全团队 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 成员 A │ │ 成员 B │ │ 成员 C │ │ 成员 D │ │ │ │ 打开 │ │ 打开 │ │ 打开 │ │ 打开 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │自己凭据 │自己凭据 │自己凭据 │自己凭据 │ │ ▼ ▼ ▼ ▼ │ │ A 的任务 B 的任务 C 的任务 D 的任务 │ │ A 的日历 B 的日历 C 的日历 D 的日历 │ │ A 的邮件 B 的邮件 C 的邮件 D 的邮件 │ │ │ │ 同一链接,每人看到自己的工作台 —— 一份 Artifact,全员个性化 │ └──────────────────────────────────────────────────────────────────────┘
| MCP 服务器类型 | v10.3.0 前状态 | v10.3.0 后状态 |
|---|---|---|
| 内置集成(Slack/Gmail/Linear/GitHub 等) | ✅ 可调用 | ✅ 可调用 |
| Custom MCP Servers(用户自建) | ⚠️ 受限/部分 | ✅ 全部可调用 |
| Hosted MCP(Gumstack 托管) | ⚠️ 受限/部分 | ✅ 全部可调用 |
| Proxied MCP(Gumstack 代理) | ⚠️ 受限/部分 | ✅ 全部可调用 |
为什么是质变:扩展前 Live 仪表板只能读主流内置集成;扩展后能读用户自建私有 MCP(内部 API/定制工具)、企业托管/代理 MCP。一个"我的工作台"现在可聚合用户整个数字工作区,而不只是 Gumloop 预置的那几十个。
第一层 Consent Overlay(观看者授权):首次打开及每次 session 刷新后显示,列出该文件要访问的每个集成及具体动作;观看者必须明确批准;per-session 设计(刷新再次出现);他人分享的文件由观看者决定是否授予访问自己账号的权限。
第二层 HTML 安全沙箱:运行在严格沙箱——阻止访问 Gumloop session/cookie/localStorage、阻止直接网络请求(fetch/XHR/WebSocket)、阻止弹窗、自动剥离经代理请求的敏感 header。安全请求(GET/HEAD)自动代理;不安全请求(POST/PUT/DELETE)需观看者确认对话框。
每次 data script 运行,观看者为沙箱执行时间付 credit,创建者不被收费。分享给 10 人,每人各自为自己数据加载付费;credit 不足脚本不执行报错。data script 每次打开/刷新重新运行,每次创建全新沙箱(刷新间不携带状态),5 分钟超时。
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| A1 | 用户让 Agent"做一个用我集成的数据的仪表板/工具/报表" | Agent 生成 HTML 文件 + 对应 Python data script | P0 |
| A2 | Agent 生成的 Live Artifact 需访问某集成 | 在文件中声明所需集成 + 动作(用于 consent 展示) | P0 |
| A3 | 用户打开自己生成的 Live Artifact | 走 consent → 脚本执行 → 渲染 | P0 |
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| B1 | 数据源是用户已连接的任意 MCP 服务器 | data script 可调用该 MCP 工具(含 Custom/Hosted/Proxied MCP) | P0 |
| B2 | 声明了某 MCP 但观看者未连接 | 显示 setup 提示,要求连接后才能加载;脚本不执行 | P0 |
| B3 | 观看者已连接但 consent 未批准 | 不运行任何脚本,停在 consent 浮层 | P0 |
| B4 | MCP 调用产生写操作(POST/PUT/DELETE) | 需观看者额外确认对话框(与安全模型一致) | P1 |
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| C1 | 不同观看者打开同一 Live Artifact | 各自用自己的凭据拉数据,各自看到自己 scope 数据 | P0 |
| C2 | 脚本运行时 | 铸造短时 scoped token(仅文件声明集成/工具,5 分钟过期,脚本结束失效) | P0 |
| C3 | token 过期或被撤销 | 脚本失败,走错误处理 | P1 |
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| D1 | 首次打开 / session 刷新后打开 | 显示 consent 浮层,列出所有要访问的集成 + 动作 | P0 |
| D2 | 观看者批准 consent | 脚本可运行;token 按需铸造 | P0 |
| D3 | 观看者拒绝 consent | 不运行任何脚本,文件不加载 | P0 |
| D4 | HTML 尝试直接网络请求或访问 session | 沙箱阻止;仅能通过 Gumloop 安全代理 | P0 |
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| E1 | 创建者把 Live Artifact 分享给团队/组织 | 通过 Share Permissions(Restricted/Org/Anyone) | P0 |
| E2 | 多人打开共享的 Live Artifact | 每人各自 consent + 各自凭据 + 各自付费 + 各自个性化视图 | P0 |
| E3 | 客户/外部打开"Anyone"共享的 Live Artifact | 需登录 Gumloop 连接自己集成才能加载数据 | P1 |
用户画像:孙玮,38 岁,工程团队 lead。想要聚合 Linear 待办、今日 Calendar、未读 Gmail、GitHub PR 的"每日工作台",且团队成员每人看到自己的。
作为团队 lead,我希望 Agent 生成一个工作台仪表板,分享后每个人打开都看到自己的任务/会议/邮件/PR——一份 Artifact,全员个性化。
验收标准:Agent 生成 HTML + 4 个 data script → 孙玮打开 consent 批准看到自己工作台 → 分享组织 → 成员 A/B 各自 consent + 各自凭据看到各自数据 → 各自付 credit。
用户画像:周婷,29 岁,运营。想做一个表单工具,团队成员填好内容选好频道就能发格式化 Slack 公告。
作为运营,我希望 Agent 生成一个"发公告"表单,任何人填好提交就能往指定频道发格式化消息——把重复操作变成自助小工具。
验收标准:Agent 生成 HTML 表单 + Slack 发消息 data script(写操作)→ 打开 consent → 填写 → 点发送触发 POST → 确认对话框 → 确认 → 消息发出。分享后任何人用自己凭据发公告。
用户画像:马俊,33 岁,销售经理。想给客户实时报告链接,客户打开看到自己作为该客户的 deal 进展、续约时间线、工单状态。
作为销售,我希望 Agent 生成从 CRM 拉实时数据的客户报告,分享给客户每人只看自己 scope——而不是我每周手动截图发邮件。
验收标准:Agent 生成 HTML + HubSpot data script → 分享客户(需客户 Gumloop 账号 + 连接自己 HubSpot)→ 客户打开 consent → 自己凭据 → 自己 scope deal/工单 → 数据实时。
用户画像:刘洋,31 岁,数据工程师。团队用 Custom MCP Server 连了内部私有 API。想聚合内部 + 外部数据的工作台。
作为数据工程师,我希望 Agent 的仪表板能同时读我的 Custom MCP(内部 API)和 GitHub——v10.3.0 之前 Live Artifact 读不到我的 Custom MCP,现在可以了。
验收标准:Agent 生成聚合内部监控 API(Custom MCP)+ GitHub PR 的工作台。v10.3.0 前 data script 无法调用 Custom MCP → 加载失败/不全;v10.3.0 后可调用全部 MCP → 内部 + 外部都加载成功。
| 竞品 | 功能/行为 | 优势 | 劣势 | 洞察/机会 |
|---|---|---|---|---|
| Claude Artifacts | 生成 HTML/React 交互式 Artifact | 生成交互式 UI 体验好 | Artifact 是静态的——不含"用观看者凭据拉实时数据"的运行时;无 consent/凭据代理模型 | Gumloop 的"观看者凭据 + 实时数据"是 Claude 没有的运行时范式 |
| ChatGPT Canvas/Apps | 生成可交互应用 | GPT 生成应用能力强 | 同样缺"按观看者凭据个性化 + 实时集成数据"运行时 | "生成式应用 + 集成生态"是差异化 |
| Retool / 内部工具构建器 | 拖拽构建连数据源的内部工具 | 工具成熟、数据源丰富 | 需人工拖拽;非 AI 生成;不按观看者凭据自动个性化 | Gumloop 是"用自然语言生成 Retool 式工具",且天然个性化 |
| Notion / Airtable 视图 | 数据库 + 多视图 + 按用户筛选 | 数据结构化、协作成熟 | 视图是数据表筛选,非"运行时拉外部集成实时数据"的生成式应用 | Live Artifact 是"生成式 + 实时 + 集成"的交叉 |
| 漏斗阶段 | 事件名称 | 触发条件 | 指标/KPI | 优先级 |
|---|---|---|---|---|
| 采用 | live_artifact_created | Agent 生成 Live Artifact(含 data script) | Live Artifact 创建量 / 总 Artifact 占比 | P0 |
| 使用 | live_artifact_opened | 观看者打开 Live Artifact | 打开数(按观看者计) | P0 |
| 使用 | live_artifact_consent_approved | 观看者批准 consent | consent 批准率 | P0 |
| 运行 | data_script_executed | data script 在沙箱执行 | 每次打开的脚本执行数 | P0 |
| v10.3.0 价值 | live_artifact_custom_mcp_called | Live Artifact 调用 Custom/Hosted/Proxied MCP | 全 MCP 扩展使用率 | P1 |
| 价值 | live_artifact_shared_multi_viewer | 同一 Live Artifact 被 >1 观看者打开 | 团队共享率 | P0 |
| 摩擦 | live_artifact_integration_not_connected | 观看者未连接所需集成 | setup 摩擦点 | P1 |
| 阶段 | 时间线 | 里程碑 | 状态 |
|---|---|---|---|
| Phase 1 — Live Artifact 运行时 | v9.7.0 | HTML + data script + 观看者凭据 + consent + 安全沙箱 | ✅ 已发布 |
| Phase 2 — 全 MCP 访问 | v10.3.0 | data script 可调用全部 MCP(含 Custom/Hosted/Proxied) | ✅ 已发布 |
| Phase 3 — Live Artifact 模板库 | v10.x | 预置高质量模板(工作台/CRM 报告/监控页),一键克隆改集成 | ⬜ 探索中 |
| Phase 4 — 持久化与协作 | v11.x | 状态持久化(刷新间携带)、多人协作编辑、版本管理 | ⬜ 探索中 |
| Phase 5 — Live Artifact 市场 | 远期 | 团队/社区分享高质量 Live Artifact,形成生成式应用生态 | ⬜ 探索中 |
| Phase 6 — 自主更新的活应用 | 远期 | Live Artifact 由 Agent 定期自主维护/优化(发现数据源变化主动改脚本) | ⬜ 探索中 |
spec_resource/gumloop-docs_agent-artifacts.md — Agent Artifacts 官方文档(Interactive Artifacts / Live Data 章节)
v10.3.0 Twillingate 版本详情 — 含本功能原始 changelog 描述
关联规格:Agent Artifacts(静态产出) · MCP Artifacts(文件生成/发布) · Share Artifact with Agents(资产化)