关于 Dejo
Dejo 是面向 Agent 的浏览器 MCP 服务,可将网站交互记录为可复用路线,并在之后重放。它在本地保存步骤及校验信息,帮助重复网站任务减少工具调用和模型调用。
主要功能
- 01学习并重放网站路线
- 02校验重放中的每一步
- 03修复变更的路线步骤
- 04记录已访问页面的地图
- 05管理登录配置与路线共享
- 06通过 CLI 运行路线
适用场景
- 01跨会话重复执行浏览器任务
- 02自动处理已登录网站的日常工作
- 03通过脚本运行已记忆的网站任务
MCP 相关
Dejo 以 stdio MCP 服务运行,供 MCP 客户端连接。Agent 可使用其工具学习和重放浏览器路线;Dejo 不会调用模型。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
16收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | any | 否 | |
| site | string | 是 | |
| task | any | 否 |
详细介绍
Dejo
一款会被 AI Agent 记住的浏览器。
它只需学习一次网站。此后每次运行只需调用一次工具,不调用大模型。
网站 · 安装 · 基准测试 · 工具 · 功能介绍 · 参与贡献
你的 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/19 | 251k | 4.7 | $0.17 | 31 s |
| Dejo,此后每次运行 | 19/19 | 89k | 1.2 | $0.02 | 16 s |
| Playwright MCP,每次运行 | 17/19 | 409k | 6.5 | $0.23 | 40 s |
| Playwright CLI,每次运行 | 18/19 | 559k | 8.4 | $0.28 | 38 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 次 | Dejo | Playwright MCP | Chrome DevTools MCP |
|---|---|---|---|
| 打开 GitHub 仓库 → Issues → 统计数量 | 28 次调用 · 1.4M 个令牌 | 83 次 · 3.4M | 33 次 · 1.7M |
| 打开作者页面 → 读取出生日期 | 27 次调用 · 1.3M 个令牌 | 60 次 · 2.6M | 60 次 · 2.6M |
| 打开分类 → 打开书籍 → 读取价格 | 41 次调用 · 1.9M 个令牌 | 56 次 · 2.8M | 56 次 · 2.8M |
| 三项合计 | 96 次调用 · 4.6M 个令牌 | 199 次 · 8.7M | 149 次 · 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_memory | Dejo 的记忆: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。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。