Dejo

io.github.dejohq由 GitHub 帳號 dejohq 發布v0.2.0更新於 Nov 6, 2026

A browser your AI agent remembers. Learn a site once, replay it in one call, zero model calls.

已驗證STDIO僅桌面瀏覽器自動化知識與記憶

概覽

AI 產生的概覽

Dejo 為助理提供一個帶記憶的真實瀏覽器:網站任務只需學習一次,之後一次工具呼叫即可重播,不必再讀取頁面。

可以做什麼
  • 執行網站任務:讀取數值、填寫表單、下載檔案、查看儀表板,已學會的任務一次呼叫即可重播
  • 在可見視窗中登入網站,並同時保留多個已登入的設定檔或角色
  • 檢視記憶:列出已學習的網站及其狀態、顯示某任務的步驟、列出網站上看過的頁面、列出其他代理共享的路線
  • 修改記憶:忘掉某個網站或任務、記錄網站備註、與其他代理共享路線或借用路線
適用情境
適合重複性的多步驟網站操作,例如入口網站、管理後台、端對端測試套件和儀表板,首次學習成本可在反覆執行中回收。一次性的單頁查詢效益不大。
執行需求
以 Python 套件形式透過 stdio 在本機執行,需要 Python 3.11 或更新版本,並需透過 Playwright 另外下載 Chromium。不需要 API 金鑰或帳號。登入需要具備真實螢幕的機器。DEJO_HEADED、DEJO_CDP_URL、DEJO_PROXY、DEJO_MEMORY 等選用設定透過環境變數配置。
安裝前請注意
它會驅動真實瀏覽器並使用你已登入的工作階段,因此能以你的身分操作網站;購買、付款、傳送、刪除或送出類步驟必須明確標記,且不會自行重複執行。密碼不會寫入記憶,但可在執行時從 DEJO_SECRET_* 變數或本機密鑰檔讀取。共享給其他代理的路線不包含輸入值和帳號身分。記憶、瀏覽器設定檔、下載和日誌都保存在本機使用者目錄下。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Dejo,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Dejo]

Dejo

A browser your AI agent remembers.
It learns a website once. Every run after that is one tool call, with zero model calls.

[PyPI] [Python] [Tests] [MIT license]

Website · Install · Benchmark · Tools · What it can do · Compared · Contributing

Your AI can use websites. But it forgets how, every single time. Dejo makes it remember.

Dejo gives Claude Code, Codex, Cursor or any MCP client a browser with a memory. Your agent walks a website once: signing in, clicking, reading. Dejo writes down the route. Every run after that follows the route instead: one tool call, no page reading, zero model calls. When the site changes, Dejo repairs the one step that moved and keeps the rest.

Install

Python 3.11 or newer.

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

Then connect it to your agent:

agentwherewhat
Claude Codeyour terminalclaude 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" } } }
anything elseas a stdio serverdejo-mcp

Dejo is one stdio server with no arguments, so any agent that can run an MCP server can use it.

No API key, no account. Dejo never calls a model. Your agent does the thinking, and the memory is a local file on your machine.

Check the install at any time. It names anything missing and the command that fixes it:

bash
dejo doctor

Quick start

Ask your agent for something on a website, in your own words:

Go to github.com/microsoft/playwright and tell me how many open issues it has.

The first time, your agent learns it: Dejo opens the page and shows it, one line per control, and your agent sends the steps back in one call (click link "Issues", then read ... as open issues). The read is what Dejo saves. Ask again tomorrow, in a brand-new chat, and it is one call:

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

Prefer a terminal? Everything works without an MCP client:

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

How it works

what happenscost
First runYour agent drives the browser through Dejo. Dejo watches, and turns what happened into a route.many calls
Every run afterDejo replays the route itself and checks that each step landed.one call, zero model calls
The site changedDejo stops at the one broken step and shows the page there. Your agent sends one line for that step; Dejo saves it, keeps the old ways as backups, and replays the rest in the same call.one extra call, once

What a route is

Not a recording, and not notes. Each step keeps:

  • what it was for, in plain words: "open this month's invoice"
  • up to nine ways to find the control: test id, link target, label, role, placeholder, alt text, title, visible text, CSS. Ranked by which have actually worked.
  • a check that proves it landed: the address changed, the file downloaded, the field holds what was typed, the row count is what it should be.

The checks are the difference between this and a macro recorder. A recorder clicks and hopes. Dejo notices when a click did nothing, and says the site changed.

The nine locators are why most redesigns cost nothing: lose the CSS id, keep the label, and the step still lands. If more than half the steps break, the site was rebuilt rather than adjusted. Dejo throws the route away but keeps what it knows about the site (needs a login, sends a code to your phone), so relearning is cheaper than the first visit.

The map

A route is one path through a site. Dejo also keeps a map: every page it has looked at, and the controls that were on it. It costs nothing to keep, because the page had already been read.

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

Ask for something new on a site Dejo has walked, and your agent is handed the pages it already knows before it starts hunting. Each control comes back as a step target such as button "Sign in", which works in a step without looking at the page first. A page Dejo has already walked costs no reading at all. This matters most where one site carries many tasks: an end-to-end test suite, an admin console, a portal you work in every day.

The map says when each page was seen. It is what was there last time, not a promise about now.

Measured on the demo site in this repo (python benchmarks/benchmark.py):

                time  tool calls  page reads  model callsMonday          1.4s           9           3            0   learning the siteTuesday         1.7s           1           0            0   from memoryWednesday       1.9s           1           0            0   from memoryThursday       12.6s           3           0            0   the site changed, one step repairedFriday          1.9s           1           0            0   from memory

The time is mostly Dejo waiting for the site to finish after the last click (this task ends in a download). A task that ends by reading its answer does not pay that wait.

Benchmark

19 tasks on 12 lesser-known websites, the kind a model cannot answer from memory: a college course catalog, the Debian package directory, the RFC Editor, a museum's collection, a Dart package registry, a small shop. Every right answer was written down before any tool ran. Claude Sonnet 5 (medium), one fresh session per run, @playwright/[email protected].

right answersavg tokensavg tool callsavg costavg time
Dejo, first run (learns the task)19/19251k4.7$0.1731 s
Dejo, every run after19/1989k1.2$0.0216 s
Playwright MCP, every run17/19409k6.5$0.2340 s
Playwright CLI, every run18/19559k8.4$0.2838 s
  • First run: 38% fewer tokens than Playwright MCP, 55% fewer than Playwright CLI.
  • Every run after: 78% fewer tokens than Playwright MCP, and 17 of 19 repeats were a single tool call. The same task run 10 times costs 74% fewer tokens.

Three things the table should also tell you, because they are true:

  • On a typical task the first run costs about the same as Playwright MCP (median 216k vs 257k). The first-run savings come from the hard sites: 324k against 1.36M on the college catalog, 398k against 983k on the museum's filters.
  • 6 more tasks were on sites that block automated browsers (Cloudflare checks, plain 403s). Dejo and Playwright MCP were stopped on all six; Playwright CLI got through two of them at 1.2M and 1.7M tokens. They are in the results file, not in the table.
  • Dejo's numbers are from the release code, after fixing what this benchmark found; the Playwright rows are from the same tasks and model, one day earlier.

Tasks: benchmarks/real_tasks.py. Results: benchmarks/benchmark-real-2026-10-21.json (all three tools), -10-23.json and -10-23-fixes.json (Dejo after the fixes). Run it yourself: python benchmarks/benchmark_learning.py --bench real --tools dejo,playwright --runs 1.

Earlier: the same job ten times (Dejo 0.1.2)

The same job, done 10 times, each time in a brand-new chat. Three multi-step tasks on well-known sites, three MCP browser tools, 90 fresh Claude sessions (Sonnet 5, medium): @playwright/[email protected], [email protected].

the task, done 10 timesDejoPlaywright MCPChrome DevTools MCP
open a GitHub repo → Issues → count them28 calls · 1.4M tokens83 · 3.4M33 · 1.7M
open an author's page → read their birth date27 calls · 1.3M tokens60 · 2.6M60 · 2.6M
open a category → open a book → read the price41 calls · 1.9M tokens56 · 2.8M56 · 2.8M
all three96 calls · 4.6M tokens199 · 8.7M149 · 7.1M

52% fewer tool calls and 47% fewer tokens than Playwright MCP. Against Chrome DevTools MCP: 36% fewer calls, 35% fewer tokens. Every tool answered in all 30 of its sessions.

The GitHub task, run by run:

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

Dejo pays once to learn the route, then costs two calls however many steps that route has.

Two things this table should also tell you, because they are true:

  • Dejo costs the most on run 1. It does the job and learns the site. That is the trade.
  • On a single page with a one-line answer, Dejo is not cheaper. Opening one page and reading one line costs every tool two or three calls, and there is nothing left for memory to save.

Run it yourself: python benchmarks/benchmark_agents.py --journeys --runs 10. These results were recorded while Dejo was still called Cairn, so the files say cairn where they mean Dejo.

Signing in

You sign in to a site once, by hand, in a real window:

bash
dejo login --site posthog.com

Sign in however the site asks: a password, Google, a code on your phone. Dejo never types a password for you and never automates an SSO button. When you say you are done, Dejo checks the window first: if it still shows a sign-in page, it says so rather than pretending. The session is kept, so you stay signed in.

A task learned while signed out keeps its sign-in steps. Replayed once you are signed in, the site skips its sign-in page, so Dejo skips those steps too, says so, and runs the rest of the task. A task that is only a sign-in answers that there is nothing to do.

Passwords never go into memory. A step that needs one records only that a password goes there. The value is read at run time from an environment variable (DEJO_SECRET_BILLING_ACME_COM_PASSWORD) or from ~/.dejo/secrets.json:

json
{ "billing.acme.com": { "password": "..." } }

More than one identity at once

A profile is a whole signed-in browser: its own cookies, its own session. Keep as many as you need, side by side:

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

From your agent, dejo_profile with name="vendor" switches, and without a name lists them. A suite covering three roles never has to sign out and back in, so the order of the tests stops mattering.

Sharing a route

Memory is per agent. Agents on one machine can hand routes to each other:

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

What travels: the steps, the ranked locators, the checks, the notes about the site, and the map. What never travels: anything typed into a field, and which account was used. A shared sign-in step asks the borrower for their own credentials.

When a borrower repairs a broken step, the fix can be contributed back to the original.

Forgetting

bash
dejo forget --site github.com

Dejo now has nothing to follow for that site, its map included. The next run says the memory is gone. It does not quietly fall back to exploring. Forgetting also withdraws anything you shared for that site, and Dejo will not quietly hand you somebody else's route for it afterwards: you have to borrow it on purpose.

Where your data lives

All on your machine.

whatwhere
routes, site facts, maps, history~/.dejo/memory.db, one SQLite file. Every decision about what is remembered is in engine/src/dejo/store.py
signed-in browser profiles~/.dejo/browser-profile, ~/.dejo/profiles/
downloads~/.dejo/downloads
screenshots and PDFs~/.dejo/captures
saved sign-in states (state save)~/.dejo/states
videos and traces~/.dejo/recordings
the step log, one file a day~/.dejo/logs
passwords, if you choose to keep them in a file~/.dejo/secrets.json

Being signed in is not the same as remembering. Forget a site and Dejo is still signed in, and has no idea what to click.

The memory needs no account and has no size limit. History, the one part that grows with every run, keeps the newest 10,000 events per agent. If you would rather keep your memory in Sibyl Memory, install pip install "dejo[sibyl]" and set DEJO_MEMORY=sibyl.

Tools

Five MCP tools. One of them, dejo_run, does all of the browsing, because every tool name is read on every turn and tool choice is the most fragile part of an agent's day.

toolwhat it does
dejo_runEvery website task. A known task replays in one call. A new one shows the page; your agent sends the steps, one per line, in the next call, and the task is saved when a step reads the answer.
dejo_loginOpens a real window so the user signs in, then done=true when they have.
dejo_profileSwitch signed-in identity (customer, vendor, admin), or list them.
dejo_memoryWhat Dejo remembers: sites, one task step by step (show), the site map, and tasks other agents shared (commons).
dejo_manageChange it: forget a site or task, note a fact, share a task, borrow one.

Steps are plain lines, run in order. Dejo stops at the first one that fails and shows the page there, so the next call only sends the rest:

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

Targets are a ref from the page (e12), or role "name" (link "Travel"), text "...", label "...", css "...". A name is matched whole first; when nothing has exactly that name, words inside a name count, in any case, as in Playwright, so link "Belt Sander" finds the card link "Belt Sander $73.59". Two such matches are refused, never guessed. The page is searched first, then each iframe. Add first, last or nth 3 to mean a place in a list rather than one item. A step that buys, pays, sends, deletes or submits is marked with ! (click! button "Pay"); unmarked, Dejo will not do it, and marked, it never runs twice on its own.

Every step, in one place:

stepwhat it does
go URL, back, forward, reloadmove between pages
click T, double_click T, hover T, tap Tpress things
fill T "text", type T "text", clear T, press KEY [T]type; press Control+A sends a chord
select T "option", check T, uncheck T, set_checked T truechoose
upload T "file", drag T to T, focus T, blur T, select_text Teverything else a hand does
scroll T, scroll down|up|left|right|top|bottom|PIXELSbring an element into view, or scroll the page
scroll T down|up|left|right [PIXELS]scroll inside one element: a list, table or chat in its own box
mouse click|dblclick|right|move X Y, mouse drag X Y to X2 Y2, mouse down|up, mouse wheel DX DYthe mouse at a place on the screen, for a chart, map or canvas with nothing inside it to name
keydown KEY, keyup KEYhold a key while other steps run
options at the end of a line: at=X,Y, keys=Shift+Control, button=right|middle, delay=MSclick a spot on an element, hold keys while clicking, right click, type at a given speed (type T "text" delay=100)
wait T, wait text:WORDS, wait url:PART, wait gone:CSS, wait idle, wait SECONDSwait for something real
wait "text:Saved|Error"wait for whichever words come first
block "**/*.png", block off [PATTERN]stop the page loading what matches (images, an ad, a chat widget that slows every run). Kept in the trail
allow notifications clipboard-read ..., allow offgrant permissions to every site (Dejo grants none unasked). Kept in the trail
mock "**/api/user" 200 '{"name": "Asha"}', mock offanswer the page's requests to an address with a made-up response, to test a page. Not kept in a trail: a trail replays the real site
script "JAVASCRIPT"run your own JavaScript in every page from now on, before the page's own. Not kept, like js
header set NAME "VALUE", header clearsend a header with every request, such as a test server's key. Not kept in a trail
wait request:WORDS, wait response:WORDSwait until the page asked for, or got an answer from, an address with these words, since the step before
tab N|latest|main, tab new [URL], tab close [N]move between tabs, open one, close one (read tabs lists them)
emulate viewport 390x844, emulate device "iPhone 13", emulate timezone Asia/Tokyo, emulate locale de-DE, emulate color dark, emulate media print, emulate motion reduce, emulate offline on, emulate network slow3g, emulate cpu 4, emulate geolocation 18.52,73.85look like another browser from now on; emulate KIND off undoes one. Kept in the trail, and every replay starts from the browser as it is
cookie set NAME "VALUE", cookie clear [NAME], storage set KEY "VALUE", storage clear [KEY]change the browser's cookies or this page's local storage (read cookies, read storage read them). Not kept in a trail: a cookie is often a sign-in
state save NAME, state load NAME|"/path/state.json"save every cookie and the local storage to ~/.dejo/states/NAME.json (Playwright's storage-state file), or load one: a sign-in to keep, move to another machine, or take from another tool
record video, record trace, record performance (one or more), record stoprecord what happens next: a video of every tab, a trace that opens in Playwright's trace viewer (npx playwright show-trace FILE), or a performance trace that opens in Chrome DevTools' Performance panel. Saved under ~/.dejo/recordings. Set DEJO_RECORD=video,trace to record every replay
dialog dismiss, dialog accept ["answer"]how to answer the next alert, confirm or prompt box (Dejo accepts unless told)
screenshot [T|full] [as NAME], pdf [as NAME]save a picture of the screen, one element or the whole page, or the page as a PDF, under ~/.dejo/captures. Kept in a trail, so every replay saves a new one
read fields '{"name": "h3", "price": ".price", "link": "a@href"}' css "article" as itemsmany fields of every matching element at once, as JSON: the agent names each field with CSS inside the element (@attr for an attribute). No model involved, and it replays
read box T as where, read html T as markupwhere an element is on the screen (X Y WIDTH HEIGHT, the numbers mouse click uses), or its HTML
read metrics as speedhow fast the page loaded: first byte, first and largest paint, ready, load, layout shift, requests and bytes
read table T as rowsa whole table as JSON, one object per row, named by its headings
read [KIND] T as NAMEthe answer: KIND is text, all_text, value, checked, visible, enabled, editable, attr NAME, passage "words", count; page-wide url, title, tabs, cookies, storage, downloads, workers, dialog, console, console_errors, requests ["words"], response "words" (the body of the latest answer from that address), failed_requests
expect url|text|see|gone|count|value ...check the step before landed
look [WORDS|from REF|gN|all|raw]show the page
look imagesend a picture of the screen in the reply, for a chart, map or canvas; click a spot in it with mouse click X Y
dismiss css "...", note "fact", restart, set_time "2026-09-15", js CODEsite knowledge and escape hatches

It handles what breaks recorded flows: shadow DOM, iframes, divs pretending to be buttons, content that loads late, cookie banners, confirm dialogs, new tabs, and file pickers with no visible input. A js step runs your own JavaScript when a site does something nobody anticipated, and is deliberately never saved into a route, because a step made of code cannot be repaired. The full capability list, with the reason for each choice, is in docs/BROWSING.md. How Dejo compares with Playwright, Playwright MCP, Chrome DevTools MCP, browser-use, Stagehand, Puppeteer and Selenium, capability by capability, is in docs/CAPABILITIES.md.

Settings

Set these in the environment of dejo-mcp, in your agent's MCP config ("env": {...}), or before a dejo command. All are optional.

settingwhat it does
DEJO_HEADED=1show the browser window, to watch every run live. Headless otherwise. dejo run --headed does the same for one run
DEJO_RECORD=video,tracerecord every replay: a video, a Playwright trace, or both, under ~/.dejo/recordings
DEJO_CDP_URL=http://127.0.0.1:9222drive a browser that is already running instead of starting one: a cloud browser, or your own Chrome started with --remote-debugging-port=9222. Its sign-ins are used as they are. Dejo works in a tab of its own, never one you have open, closes that tab when it stops, and leaves the browser running. dejo run --cdp URL does the same for one run
DEJO_PROXY=http://proxy.corp:8080send every request through your company's proxy
DEJO_IGNORE_HTTPS_ERRORS=1accept a site's own certificate, for an intranet or a test server
DEJO_LOG=offstop writing the step log, ~/.dejo/logs/DATE.log: one plain line for each step learned or replayed, what it did, how it found its element, and why it stopped
DEJO_PROFILE, DEJO_PROFILES_DIRwhere the browser profiles live
DEJO_DBwhich memory file
DEJO_AGENTwhich agent this is, when several share one memory
DEJO_LOCALEthe language and region the browser tells sites, like en-IN
DEJO_MEMORY=sibylkeep the memory in Sibyl Memory

When something goes wrong

Start with dejo doctor. It checks the browser, the profile, the memory and the downloads folder, and prints the exact fix for anything missing.

"Dejo has no browser to drive yet." pip install brings the code, not a browser. Run playwright install chromium.

"Dejo cannot open a window here: this machine has no screen." Signing in needs a real window, so dejo login cannot work over plain SSH or in a container. Sign in on a computer with a desktop and copy ~/.dejo/browser-profile across, or forward a display with ssh -X. Normal runs are headless and unaffected.

"The browser profile ... is in use by another Dejo session." A profile can be open in one browser at a time, and another Dejo run (another agent, another terminal) has it. The message names that session's process. Close it, or work in another profile (dejo_profile with a new name, or dejo --profile <name>).

"Dejo could not open its browser profile." Another Dejo run or sign-in window still has it open, or the profile is in a state no browser accepts. Close any other run first. If that was not it, deleting ~/.dejo/browser-profile fixes it, at the cost of signing you out. To run two agents at once, give each its own profile: DEJO_PROFILE=~/.dejo/profile-b dejo-mcp.

"Nothing loads in Dejo's browser profile." A page timed out twice in the profile, Dejo tried the same address in a fresh browser, and the site's real page loaded there (an error page from a site that is down does not count). The site is fine; that profile is stuck. Switch to a new profile (dejo --profile <name>, or dejo_profile from your agent) and sign in there. Delete the profile folder the message names only if every site keeps timing out in it.

A site shows the wrong country, currency or date format. Dejo's browser tells sites the language and region this machine is set to (on Linux and macOS, from LANG), and Chrome uses the machine's own time zone. To choose another, set DEJO_LOCALE, like DEJO_LOCALE=en-IN.

A captcha. Dejo stops and says so. It does not mark the route broken and does not try to solve it. Clear it yourself once, and run again.

Coming from Cairn

Dejo was called Cairn until October 2026. On first start, Dejo moves an old ~/.cairn folder to ~/.dejo, so every sign-in is kept, and copies the old memory across from Sibyl Memory into ~/.dejo/memory.db, so every learned site is kept. The Sibyl file itself is left as it was. The old CAIRN_* environment variables still work, and the old cairn-browser-mcp package installs Dejo.

Development

bash
git clone https://github.com/dejohq/dejo-mcpcd dejo-mcppython -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 pytestcd ../mcp && ../.venv/bin/python -m pytest
engine/      the engine (PyPI: dejo): browser, memory, replay, repair, sharing, the dejo commandmcp/         the MCP server (PyPI: dejo-mcp): five tools over the enginebenchmarks/  the benchmark scripts and their raw resultsdocs/        design notes

Opening Claude Code inside the clone needs no setup: the checked-in .mcp.json offers the server straight away.

FAQ

Is Dejo a cache? No. A cache replays and hopes. Every step Dejo saves carries a check that proves it landed, so Dejo can tell a changed site from a working one and fix only the step that moved.

Does it call an AI model? No. Replay is plain code with zero model calls, and there is no API key to set. The agent you already use does the thinking, on the first run and when a step needs fixing.

Is it cheaper on every task? No. The first run costs the most, because Dejo does the job and learns the route. On a single page with a one-line answer there is nothing to remember. It pays off on tasks with steps that you run again.

Does it store my passwords? No. You sign in yourself, in a real window. A step that needs a password records only that a password goes there.

Which agents does it work with? Any agent that can run an MCP server: Claude Code, Codex, Cursor, and others.

Contributing

Bug reports, sites Dejo gets wrong, and pull requests are all welcome. Start with CONTRIBUTING.md. Found a security problem? Please report it privately, as SECURITY.md explains, not in a public issue. Everyone taking part follows the Code of Conduct.

Prior work

  • pig-dot-dev/muscle-mem, "a cache for AI agents to learn and replay complex behaviors". The closest existing idea. Dejo is not a cache: every step carries a check, so it can tell a changed site from a working one, repair the single step that moved, and hand a working route to another agent.
  • @playwright/mcp, whose accessibility-tree snapshot approach Dejo's page reading is built on.

License

MIT. See LICENSE.

來源:README.md,提交 856140d

工具

5

dejo_run

Use for ANY website task: read a value, fill a form, download, check a page. A real browser with memory: a task done once is replayed later with no page reading. Call with site, task and url. Known task: Dejo replays it and returns the answer. New task: Dejo opens the url and returns the page, one line per element, each with a ref (e12). Then call again with steps, one per line. They run in order. Dejo stops at the first step that fails and returns the page there. Steps: go URL click T | fill T "text" | select T "option" | check T | press Enter read T as name (the value you will report) expect url "part" | expect text "words" | expect see T look words (show the page, these words first) Also: back, hover T, wait T, upload T "file", tab N. T is a ref, or role "name" (link "Travel"), text "...", label "...", css "...". Add first, last or nth 3 to mean that place in a list, not that item. Write click! (or fill! etc.) for a step that buys, pays, sends, deletes or submits. Passed steps are kept. When all steps pass and one is a read (or a file downloads), the task is saved. done=true saves a task that reads nothing.

輸入參數urldonesite必填task必填stepsprofile

dejo_login

Sign in to a website, website login, SSO, Google sign-in, one-time code. Opens a visible browser window so the USER signs in; never type a password you were not given. Call with site, tell the user to sign in there, then call again with done=true. Signs in the current profile only, and it stays signed in.

輸入參數donesite必填confirmed

dejo_profile

Website profiles and roles: customer, vendor, admin. A profile is a whole signed-in browser; several stay signed in side by side. With a name: switch to it (made on first use). Without: list them. Trails are shared by every profile.

輸入參數name

dejo_memory

What Dejo remembers about websites. Read only. what=sites lists every trail and its health; what=show gives one trail's steps; what=map lists pages seen on a site (with path: that page's controls); what=commons lists trails other agents shared.

輸入參數pathsitetaskwhat必填

dejo_manage

Change what Dejo remembers about a website. do=forget removes a site (or one task) for good; do=note keeps a fact that is not a step (needs 2FA, use the finance account); do=share offers a trail to other agents (typed values never leave); do=borrow takes a shared trail.

輸入參數do必填site必填tasktext

版本歷史

2
  1. v0.2.0最新Oct 23, 2026
  2. v0.1.2Oct 18, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分