mcpField
D
Dejo

Dejo

本地服务
dejo.run浏览器自动化6今天更新

关于 Dejo

Dejo 是面向 Agent 的浏览器 MCP 服务,可将网站交互记录为可复用路线,并在之后重放。它在本地保存步骤及校验信息,帮助重复网站任务减少工具调用和模型调用。

主要功能

  1. 01学习并重放网站路线
  2. 02校验重放中的每一步
  3. 03修复变更的路线步骤
  4. 04记录已访问页面的地图
  5. 05管理登录配置与路线共享
  6. 06通过 CLI 运行路线

适用场景

  1. 01跨会话重复执行浏览器任务
  2. 02自动处理已登录网站的日常工作
  3. 03通过脚本运行已记忆的网站任务

MCP 相关

Dejo 以 stdio MCP 服务运行,供 MCP 客户端连接。Agent 可使用其工具学习和重放浏览器路线;Dejo 不会调用模型。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"dejohq-dejo": {
"command": "uvx",
"args": [
"dejo-mcp"
]
}
}
}
启动命令uvx dejo-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidejo-mcp0.2.0

工具

16

收录的工具列表 · 更新于 5 天前

参数类型必填说明
urlany否
sitestring是
taskany否

详细介绍

Dejo

Dejo

一款会被 AI Agent 记住的浏览器。
它只需学习一次网站。此后每次运行只需调用一次工具,不调用大模型。

PyPI Python 测试 MIT 许可证

网站 · 安装 · 基准测试 · 工具 · 功能介绍 · 参与贡献

你的 AI 可以使用网站,但每次都会忘记怎么使用。Dejo 能让它记住。

Dejo 为 Claude Code、Codex、Cursor 或任何 MCP 客户端提供一款带有记忆的浏览器。你的 Agent 只需浏览一次网站:登录、点击、阅读。Dejo 会记下操作路线。此后每次运行都会直接沿着路线执行:只需调用一次工具,不读取页面,不调用大模型。 如果网站发生变化,Dejo 会修复发生变化的那一步,并保留其余步骤。

安装

Python 3.11 或更高版本。

pip install dejo-mcp
playwright install chromium      # the browser, a separate download of about 150 MB

然后将它连接到你的 Agent:

Agent位置操作
Claude Code终端claude mcp add --scope user dejo -- dejo-mcp
Codex~/.codex/config.toml[mcp_servers.dejo]
command = "dejo-mcp"
Cursor~/.cursor/mcp.json{ "mcpServers": { "dejo": { "command": "dejo-mcp" } } }
其他任何客户端作为 stdio 服务dejo-mcp

Dejo 是一个无需参数的 stdio 服务,因此任何能够运行 MCP 服务的 Agent 都可以使用它。

无需 API 密钥,也无需账户。 Dejo 从不调用大模型。由你的 Agent 负责思考,记忆则保存在你设备上的本地文件中。

你可以随时检查安装情况。检查结果会列出缺少的内容以及相应的修复命令:

dejo doctor

快速开始

用自己的话让 Agent 帮你完成网站上的操作:

前往 github.com/microsoft/playwright,告诉我有多少个未解决的问题。

第一次运行时,Agent 会学习操作过程:Dejo 打开并显示页面,每个控件占一行;然后 Agent 通过一次调用发送步骤(click link "Issues",然后 read ... as open issues)。读取结果会由 Dejo 保存。明天在全新的聊天中再次提出要求,只需调用一次:

done: "count open issues" on github.com (profile default), 2 steps replayed in 1391 ms, no page reading.
open issues = 117
next: report the answer exactly as read and stop. Every step was checked as it ran.

更喜欢在终端中操作?无需 MCP 客户端也能使用所有功能:

dejo sites                                            # what it remembers
dejo run "count open issues" --site github.com        # replay, no model involved
dejo run "count open issues" --site github.com --json # one JSON line, for cron and scripts
dejo show github.com                                  # the route, step by step
dejo forget --site github.com                         # make it forget

工作原理

发生的情况开销
首次运行你的 Agent 通过 Dejo 操控浏览器。Dejo 会观察操作,并将操作过程整理成一条路线。多次调用
此后的每次运行Dejo 会自行重放路线,并检查每一步是否成功。调用一次,不调用大模型
网站发生变化Dejo 会在出错的那一步停止,并显示对应页面。你的 Agent 会为该步骤发送一行指令;Dejo 保存这条指令、保留旧方法作为备用,然后在同一次调用中重放其余步骤。仅额外调用一次
路线是什么

它不是录制,也不是笔记。每个步骤都会保留:

  • 它的用途,用通俗的话描述:"open this month's invoice"
  • 最多九种查找控件的方式:测试 ID、链接目标、标签、角色、占位符、 替代文本、标题、可见文本、CSS。按实际成功过的方式排序。
  • 证明操作已生效的检查:地址已更改、文件已下载、字段中保存着输入的内容、行数符合预期。

这些检查正是它与宏录制器的区别。录制器只会点击,然后寄希望于一切顺利。 Dejo 会留意点击是否没有效果,并指出网站已发生变化。

这九种定位器能让大多数改版无需付出代价:CSS ID 失效了,标签还在,步骤仍然能成功。 如果一半以上的步骤都失效了,说明网站是重建了,而不是调整了。Dejo 会丢弃路线,但保留它对网站的了解(需要登录、会向你的手机发送验证码),因此重新学习比首次访问更省力。

地图

一条路线是穿过网站的一条路径。Dejo 还会保留一张地图:它看过的每个页面,以及页面上的控件。保存地图没有任何成本,因为页面本来就已经读取过了。

dejo map github.com                    # every page it has seen
dejo map github.com --path /issues     # the controls that were on one of them

如果你要求在 Dejo 浏览过的网站上执行新任务,Agent 会在开始查找之前,先拿到它已经了解的页面。每个控件都会以步骤目标的形式返回,例如 button "Sign in",无需先查看页面,就能在步骤中使用。Dejo 已经浏览过的页面,无需再花时间读取。这对于一个网站承载许多任务的情况尤其重要:端到端测试套件、管理控制台,以及你每天使用的门户网站。

地图会标明每个页面的查看时间。它记录的是上次看到的内容,并不保证现在仍然如此。

在本仓库的演示网站上进行的测量(python benchmarks/benchmark.py):

                time  tool calls  page reads  model calls
Monday          1.4s           9           3            0   learning the site
Tuesday         1.7s           1           0            0   from memory
Wednesday       1.9s           1           0            0   from memory
Thursday       12.6s           3           0            0   the site changed, one step repaired
Friday          1.9s           1           0            0   from memory

耗时主要来自 Dejo 等待网站在最后一次点击后完成操作(此任务以下载结束)。如果任务以读取答案结束,则无需等待。

基准测试

在 12 个不太知名的网站上完成 19 项任务,这些任务是模型无法凭记忆作答的:大学课程目录、Debian 软件包目录、RFC Editor、博物馆藏品、Dart 软件包注册表和一家小商店。每个正确答案都在运行任何工具之前记录下来。Claude Sonnet 5(medium),每次运行使用一个全新会话,@playwright/[email protected]。

正确答案数平均令牌数平均工具调用数平均成本平均耗时
Dejo,首次运行(学习任务)19/19251k4.7$0.1731 s
Dejo,此后每次运行19/1989k1.2$0.0216 s
Playwright MCP,每次运行17/19409k6.5$0.2340 s
Playwright CLI,每次运行18/19559k8.4$0.2838 s
  • **首次运行:**比 Playwright MCP 少用 38% 的令牌,比 Playwright CLI 少用 55%。
  • **此后每次运行:**比 Playwright MCP 少用 78% 的令牌,19 次重复运行中有 17 次只需一次工具调用。同一任务运行 10 次,令牌数减少 74%。

表格还应说明三件事,因为这些都是真实情况:

  • 在典型任务中,首次运行的成本与 Playwright MCP 大致相同(中位数为 216k 对 257k)。首次运行节省的成本来自难以处理的网站:大学课程目录上为 324k 对 1.36M,博物馆筛选器上为 398k 对 983k。
  • 还有 6 项任务的网站会拦截自动化浏览器(Cloudflare 检查、直接返回 403)。Dejo 和 Playwright MCP 在这 6 项任务中都被拦截;Playwright CLI 完成了其中两项,分别耗费 1.2M 和 1.7M 个令牌。这些结果列在结果文件中,不在表格里。
  • Dejo 的数据来自修复了本基准测试发现的问题后的发布版本代码;Playwright 的数据来自提前一天进行的相同任务和模型测试。

任务:benchmarks/real_tasks.py。结果: benchmarks/benchmark-real-2026-10-21.json(全部三种工具)、-10-23.json 和 -10-23-fixes.json(修复后的 Dejo)。亲自运行: python benchmarks/benchmark_learning.py --bench real --tools dejo,playwright --runs 1。

更早的测试:同一项任务运行十次(Dejo 0.1.2)

同一项任务运行 10 次,每次都在全新的聊天中进行。在知名网站上完成三项多步骤任务,使用三种 MCP 浏览器工具,创建 90 个全新的 Claude 会话(Sonnet 5,medium): @playwright/[email protected]、[email protected]。

任务,运行 10 次DejoPlaywright MCPChrome DevTools MCP
打开 GitHub 仓库 → Issues → 统计数量28 次调用 · 1.4M 个令牌83 次 · 3.4M33 次 · 1.7M
打开作者页面 → 读取出生日期27 次调用 · 1.3M 个令牌60 次 · 2.6M60 次 · 2.6M
打开分类 → 打开书籍 → 读取价格41 次调用 · 1.9M 个令牌56 次 · 2.8M56 次 · 2.8M
三项合计96 次调用 · 4.6M 个令牌199 次 · 8.7M149 次 · 7.1M

**比 Playwright MCP 少 52% 的工具调用,少 47% 的令牌。**与 Chrome DevTools MCP 相比:调用次数少 36%,令牌数少 35%。所有工具在各自的 30 个会话中都给出了答案。

GitHub 任务逐次运行的结果:

run              1   2   3   4   5   6   7   8   9  10
Dejo            10   2   2   2   2   2   2   2   2   2
Playwright MCP   8   8  18   7   9   9   7   6   5   6

Dejo 只需付出一次成本来学习操作路径,无论路径有多少步骤,此后都只需调用两次。

表格还应说明两件事,因为这些都是真实情况:

  • **Dejo 在第 1 次运行时成本最高。**它既完成任务,也学习网站。这就是取舍。
  • **对于只需一行答案的单页任务,Dejo 并不更便宜。**打开一个页面并读取一行内容,每种工具都要调用两三次;此时没有可通过记忆节省的空间。

亲自运行:python benchmarks/benchmark_agents.py --journeys --runs 10。这些结果记录时 Dejo 仍名为 Cairn,因此文件中用 cairn 指代 Dejo。

登录

你只需在真实窗口中手动登录网站一次:

dejo login --site posthog.com

按照网站的要求登录:输入密码、使用 Google,或输入手机收到的验证码。Dejo 绝不会代你输入 密码,也不会自动点击 SSO 按钮。你说完成后,Dejo 会先检查窗口:如果仍显示登录页面,就会如实告知,而不是假装登录成功。会话会被保留,因此你会一直保持登录状态。

密码绝不会存入记忆。 需要密码的步骤只会记录此处需要输入密码。运行时会从环境变量 (DEJO_SECRET_BILLING_ACME_COM_PASSWORD)或 ~/.dejo/secrets.json 中读取密码:

{ "billing.acme.com": { "password": "..." } }
同时使用多个身份

一个配置文件就是一个完整的已登录浏览器:它有自己的 Cookie 和会话。你可以根据需要并行保留多个配置文件:

dejo --profile vendor login --site shop.example.com
dejo --profile admin  login --site shop.example.com

在 Agent 中,使用 dejo_profile 并设置 name="vendor" 可切换配置文件,不设置名称则会列出所有配置文件。覆盖三种角色的测试套件无需反复退出和登录,因此测试顺序不再重要。

共享路线

记忆按 Agent 隔离。同一台机器上的 Agent 可以互相传递路线:

dejo --agent alice share github.com     # alice already knows the site
dejo --agent bob borrow github.com      # bob has never opened it
dejo --agent bob run "count open issues" --site github.com   # one call

共享内容: 步骤、排序后的定位器、检查项、网站相关备注和地图。绝不共享: 在字段中输入的任何内容,以及使用的账户。借用的共享登录步骤会要求借用者提供自己的凭据。

借用者修复损坏的步骤后,可以将修复贡献回原始路线。

忘记

dejo forget --site github.com

Dejo 会清除该网站的所有操作指引,包括地图。下次运行时会告知记忆已不存在,不会悄悄改为探索模式。忘记操作也会撤回你为该网站共享的所有内容;之后 Dejo 不会悄悄把其他人的路线交给你:你必须主动借用。

数据存储位置

所有数据都在你的机器上。

内容位置
路线、网站信息、地图、历史记录~/.dejo/memory.db,一个 SQLite 文件。所有关于记忆内容的决策都由 engine/src/dejo/store.py 管理
已登录的浏览器配置文件~/.dejo/browser-profile、~/.dejo/profiles/
下载文件~/.dejo/downloads
密码(如果你选择将其保存在文件中)~/.dejo/secrets.json

保持登录状态不等于拥有记忆。忘记某个网站后,Dejo 仍保持登录状态,但不知道该点击什么。

记忆无需账户,也没有大小限制。历史记录是唯一会随每次运行而增长的部分,每个 Agent 最多保留最新的 10,000 条事件。如果你更愿意将记忆保存在 Sibyl Memory,请安装 pip install "dejo[sibyl]" 并设置 DEJO_MEMORY=sibyl。

工具

五个 MCP 工具。其中一个工具 dejo_run 负责所有浏览操作,因为每一轮都会读取每个工具名称,而选择工具是 Agent 工作中最容易出问题的环节。

工具功能
dejo_run所有网站任务。已知任务会在一次调用中重放。新任务会显示页面;你的 Agent 在下一次调用中逐行发送步骤,当某一步读取到答案时,任务就会保存。
dejo_login打开真实窗口供用户登录,登录完成后设为 done=true。
dejo_profile切换已登录的身份(客户、供应商、管理员),或列出这些身份。
dejo_memoryDejo 的记忆:sites、逐步查看一项任务(show)、网站 map,以及其他 Agent 分享的任务(commons)。
dejo_manage修改记忆:forget 一个网站或任务,note 一条事实,share 一项任务,或 borrow 一项任务。

步骤是普通文本行,并按顺序执行。Dejo 会在第一步失败时停止并显示该页面,因此下一次调用只需发送剩余步骤:

go https://billing.acme.com/invoices
click link "September 2026"
fill label "Search" "acme"
read css ".total" as total

目标可以是页面中的引用(e12),也可以是 role "name"(link "Travel")、text "..."、label "..."、css "..."。添加 first、last 或 nth 3,表示选择列表中的某个位置,而非某个项目。购买、付款、发送、删除或提交的步骤会标记为 !(click! button "Pay");未标记时,Dejo 不会执行;已标记时,也绝不会自行重复执行。

它可以处理会导致已记录工作流中断的情况:Shadow DOM、iframe、伪装成按钮的 div、延迟加载的内容、Cookie 横幅、确认对话框、新标签页,以及没有可见输入框的文件选择器。网站发生意料之外的情况时,js 步骤会运行你自己的 JavaScript。它不会保存到执行路径中,因为由代码构成的步骤无法修复。完整的功能列表及每项选择的原因,请参阅 docs/BROWSING.md。

遇到问题时

先运行 dejo doctor。它会检查浏览器、配置文件、记忆和下载文件夹,并针对缺失项打印确切的修复方法。

“Dejo 还没有可操作的浏览器。” pip install 会安装代码,但不会安装浏览器。运行 playwright install chromium。

“Dejo 无法在此处打开窗口:这台机器没有屏幕。” 登录需要真实窗口,因此 dejo login 无法通过普通 SSH 或在容器中运行。请在装有桌面环境的计算机上登录,然后复制 ~/.dejo/browser-profile,或使用 ssh -X 转发显示。普通运行采用无头模式,不受影响。

“Dejo 无法打开其浏览器配置文件。” 另一个 Dejo 运行实例或登录窗口仍在使用该配置文件,或者该配置文件处于浏览器无法接受的状态。请先关闭其他运行实例。如果问题并非如此,删除 ~/.dejo/browser-profile 即可修复,但你需要重新登录。若要同时运行两个 Agent,请为每个 Agent 指定独立的配置文件:DEJO_PROFILE=~/.dejo/profile-b dejo-mcp。

“Dejo 的浏览器配置文件中没有任何内容加载。” 某个页面超时后,Dejo 在全新的浏览器中尝试打开相同地址,并成功加载。网站没有问题,是该配置文件卡住了。请切换到新的配置文件(dejo --profile <name>,或在你的 Agent 中使用 dejo_profile)并在那里登录,或者关闭所有 Dejo 窗口,并删除提示中提到的配置文件夹。

验证码。 Dejo 会停止并说明情况。它不会将执行路径标记为损坏,也不会尝试解决验证码。请手动完成一次验证,然后重新运行。

从 Cairn 迁移

Dejo 在 2026 年 10 月之前名为 Cairn。首次启动时,Dejo 会将旧的 ~/.cairn 文件夹移至 ~/.dejo,保留所有登录状态,并将 Sibyl Memory 中的旧记忆复制到 ~/.dejo/memory.db,保留所有已学习的网站。Sibyl 文件本身保持不变。旧的 CAIRN_* 环境变量仍然有效,旧的 cairn-browser-mcp 软件包会安装 Dejo。

开发

git clone https://github.com/dejohq/dejo-mcp
cd dejo-mcp
python -m venv .venv
.venv/bin/python -m pip install -e "engine[dev]" -e "mcp[dev]"   # Windows: .venv\Scripts\python
.venv/bin/python -m playwright install chromium

cd engine && ../.venv/bin/python -m pytest
cd ../mcp && ../.venv/bin/python -m pytest
engine/      the engine (PyPI: dejo): browser, memory, replay, repair, sharing, the dejo command
mcp/         the MCP server (PyPI: dejo-mcp): five tools over the engine
benchmarks/  the benchmark scripts and their raw results
docs/        design notes

在克隆目录中打开 Claude Code 无需任何设置:仓库中已包含的 .mcp.json 会直接提供该服务。

常见问题

Dejo 是缓存吗? 不是。缓存只会重放并寄希望于一切正常。Dejo 保存的每个步骤都带有一项验证,用来证明步骤已成功执行,因此 Dejo 能区分网站已更改还是网站正常工作,并且只修复发生变化的步骤。

它会调用 AI 模型吗? 不会。重放完全由代码执行,不会调用任何模型,也无需设置 API 密钥。你已在使用的 Agent 会负责思考,包括首次运行时,以及需要修复某个步骤时。

每项任务都能省钱吗? 不能。首次运行的成本最高,因为 Dejo 要完成任务并学会执行路线。对于只需在单个页面上给出一句话答案的任务,没有什么值得记住。只有当任务包含你会重复执行的步骤时,它才能发挥价值。

它会存储我的密码吗? 不会。你会在真实窗口中自行登录。需要密码的步骤只会记录此处需要输入密码。

它兼容哪些 Agent? 任何能够运行 MCP 服务的 Agent:Claude Code、Codex、Cursor 等。

贡献

欢迎提交错误报告、指出 Dejo 操作有误的网站,以及发起拉取请求。请从 CONTRIBUTING.md 开始。发现安全问题?请按照 SECURITY.md 中的说明私下报告,不要在公开问题中披露。所有参与者都应遵守行为准则。

先前工作

  • pig-dot-dev/muscle-mem,一个“供 AI Agent 学习并重放复杂行为的缓存”。这是最接近的现有构想。Dejo 不是缓存:每个步骤都带有一项验证,因此它能区分网站已更改还是网站正常工作,修复发生变化的单个步骤,并将可正常工作的路线交给另一个 Agent。
  • @playwright/mcp,Dejo 的页面读取功能基于其无障碍树快照方案构建。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。