Dejo について
Dejoは、Agent向けのブラウザーMCPサーバーです。ウェブサイトでの操作を再利用可能なルートとして記録し、後から再生します。手順と検証情報をローカルに保存し、繰り返す作業のツール呼び出しとモデル呼び出しを減らします。
主な機能
- 01ウェブサイトのルート学習と再生
- 02再生時の各手順の検証
- 03変更された手順の修復
- 04訪問済みページのマップ保存
- 05ログインプロファイルとルート共有の管理
- 06CLIからのルート実行
活用シーン
- 01セッションをまたぐブラウザー作業の反復
- 02ログイン済みサイトでの定型作業の自動化
- 03スクリプトからの記録済みタスク実行
MCP 対応
Dejoはstdio MCPサーバーとして動作し、MCPクライアントから接続できます。Agentはツールを使ってブラウザールートを学習・再生でき、Dejo自体はモデルを呼び出しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
16掲載時のツール一覧 · 5 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | any | いいえ | |
| site | string | はい | |
| task | any | いいえ |
詳細
Dejo
AI エージェントが覚えているブラウザー。
ウェブサイトを一度学習すれば、その後の実行は毎回ツール呼び出し1回で済み、モデル呼び出しはゼロです。
ウェブサイト · インストール · ベンチマーク · ツール · できること · コントリビューション
AI はウェブサイトを使えます。しかし、毎回その方法を忘れてしまいます。Dejo はそれを覚えておけるようにします。
Dejo は Claude Code、Codex、Cursor、またはあらゆる MCP クライアントに、記憶機能を備えたブラウザーを提供します。エージェントがウェブサイトを一度操作します。サインインし、クリックし、読み取ります。Dejo はその経路を書き留めます。その後の実行では、経路をたどるだけです。**ツール呼び出し1回、ページの読み取りなし、モデル呼び出しゼロ。**サイトが変わった場合は、移動した1つのステップをDejoが修復し、残りはそのまま保ちます。
インストール
Python 3.11以降が必要です。
pip install dejo-mcp
playwright install chromium # the browser, a separate download of about 150 MB
次に、エージェントに接続します。
| エージェント | 設定場所 | 設定内容 |
|---|---|---|
| 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 サーバーを実行できるエージェントならどれでも利用できます。
**API キーもアカウントも不要です。**Dejo はモデルを呼び出しません。考えるのはエージェントで、記憶はお使いのマシン上のローカルファイルに保存されます。
いつでもインストール状況を確認できます。不足しているものと、それを解決するコマンドが表示されます。
dejo doctor
クイックスタート
ウェブサイトでやりたいことを、自分の言葉でエージェントに頼みます。
github.com/microsoft/playwright にアクセスして、未解決の Issue がいくつあるか教えてください。
初回は、エージェントが操作方法を学習します。Dejo がページを開いて表示し、各コントロールを1行ずつ示します。エージェントは手順を1回の呼び出しで返します(click link "Issues"、続いて read ... as open issues)。Dejo が保存するのは、この読み取り操作です。翌日、新しいチャットで再度頼めば、呼び出しは1回だけです。
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
仕組み
| 動作 | コスト | |
|---|---|---|
| 初回の実行 | エージェントが Dejo 経由でブラウザーを操作します。Dejo がその様子を見守り、起きたことを経路に変換します。 | 多数の呼び出し |
| 2回目以降の実行 | Dejo が経路を自ら再生し、各ステップが正しく完了したかを確認します。 | 呼び出し1回、モデル呼び出しゼロ |
| サイトが変わった場合 | Dejo は壊れたステップで停止し、その時点のページを表示します。エージェントはそのステップの1行を返します。Dejo はそれを保存し、以前の方法をバックアップとして残したうえで、同じ呼び出しの中で残りの経路を再生します。 | 追加の呼び出しが1回、一度だけ |
ルートとは
記録でも、メモでもありません。各ステップには次の情報が含まれます。
- 何のためのステップかを平易な言葉で記します:
"今月の請求書を開く" - コントロールを見つける方法を最大9種類指定します:テスト ID、リンク先、ラベル、ロール、プレースホルダー、 代替テキスト、タイトル、表示テキスト、CSS。実際に機能した回数が多い順に並びます。
- 処理が完了したことを証明するチェックを行います:アドレスが変わった、ファイルがダウンロードされた、フィールドに入力した 値が入っている、行数が想定どおりである、といったことを確認します。
このチェックが、マクロレコーダーとの違いです。レコーダーはクリックして、うまくいくことを期待します。 Dejo はクリックしても何も起きなかったことに気づき、サイトが変わったと伝えます。
ほとんどの再設計でコストがかからないのは、9種類のロケーターがあるからです。CSS ID がなくなっても、ラベルが残っていれば、 ステップは引き続き目的の場所に到達します。ステップの半分以上が機能しなくなった場合は、サイトが調整されたのではなく、作り直されたということです。 Dejo はルートを破棄しますが、サイトについて把握した情報(ログインが必要、電話にコードが送信されるなど)は保持するため、 最初に訪れたときよりも低コストで学び直せます。
マップ
ルートは、サイト内を通る経路の1つです。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 が巡回済みのサイトで新しいタスクを依頼すると、エージェントは探索を始める前に、すでに把握しているページを受け取ります。
各コントロールは button "Sign in" のようなステップのターゲットとして返され、事前にページを確認しなくてもステップで機能します。
Dejo が巡回済みのページは、再読み取りが一切不要です。これは、1つのサイトで多くのタスクを行う場合に特に重要です。
エンドツーエンドのテストスイート、管理コンソール、毎日使うポータルなどが該当します。
マップには、各ページを確認した日時が記録されます。そこにあるのは前回確認したときの状態であり、現在も同じだという保証ではありません。
このリポジトリのデモサイトで測定しています(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)、実行ごとに新しいセッションを1つ使用、@playwright/[email protected]。
| 正解数 | 平均トークン数 | 平均ツール呼び出し回数 | 平均コスト | 平均時間 | |
|---|---|---|---|---|---|
| Dejo、初回実行(タスクを学習) | 19/19 | 251k | 4.7 | $0.17 | 31 s |
| Dejo、2回目以降の各実行 | 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%少なくなりました。
- 2回目以降の各実行: Playwright MCP よりトークンが78%少なく、19回中17回はツール呼び出し1回で完了しました。同じタスクを10回実行した場合、トークンを74%削減できます。
この表から分かる、事実に基づく重要な点がほかに3つあります。
- 一般的なタスクでは、初回実行のコストは Playwright MCP とほぼ同じです(中央値は216k対257k)。初回実行での削減分は難しいサイトから生まれています。大学の講義カタログでは324k対1.36M、博物館の絞り込み機能では398k対983kです。
- 自動ブラウザーをブロックするサイトでのタスクがさらに6件ありました(Cloudflare のチェック、通常の403エラー)。Dejo と Playwright MCP は6件すべてで停止しました。Playwright CLI はそのうち2件を完了しましたが、トークン数は1.2Mと1.7Mでした。これらは結果ファイルには含まれていますが、表には含まれていません。
- Dejo の数値は、このベンチマークで判明した問題を修正した後のリリースコードによるものです。 Playwright の行は、同じタスクとモデルを使って、その1日前に記録したものです。
タスク:benchmarks/real_tasks.py。結果:
benchmarks/benchmark-real-2026-10-21.json(3つすべてのツール)、-10-23.json および
-10-23-fixes.json(修正後の Dejo)。自分で実行するには:
python benchmarks/benchmark_learning.py --bench real --tools dejo,playwright --runs 1。
以前のベンチマーク:同じ作業を10回実行(Dejo 0.1.2)
同じ作業を10回実行し、そのたびに新しいチャットを使用しました。よく知られたサイトでの複数ステップのタスク3件、MCP ブラウザーツール3種、新しい Claude セッション90回(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 |
| 3つすべて | 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 は最初にルートを学習するためのコストを一度だけ払い、そのルートのステップ数にかかわらず、以降は2回の呼び出しで完了します。
この表から分かる、事実に基づく重要な点がほかに2つあります。
- Dejo は1回目の実行で最もコストがかかります。 タスクを実行しながら、サイトについても学習します。それがトレードオフです。
- 回答が1行だけの単一ページでは、Dejo のほうが安くなるわけではありません。 1ページを開いて1行読むだけなら、どのツールでも呼び出しは2~3回必要です。メモリーで節約できる余地はありません。
自分で実行するには:python benchmarks/benchmark_agents.py --journeys --runs 10。この結果は Dejo がまだ Cairn と呼ばれていた時点で記録されたため、Dejo を指す箇所がファイル内では cairn になっています。
サインイン
実際のウィンドウで、手動で一度サイトにサインインします:
dejo login --site posthog.com
サイトの指示に従ってサインインしてください。パスワード、Google、スマートフォンに届くコードなどを使います。Dejo が代わりにパスワードを入力したり、SSO ボタンを自動操作したりすることはありません。完了したと伝えると、Dejo はまずウィンドウを確認します。まだサインインページが表示されている場合は、そう伝え、完了したふりはしません。セッションは保持されるため、サインインしたままになります。
パスワードがメモリに入ることはありません。 パスワードが必要な手順では、パスワードを入力する場所だけが記録されます。値は実行時に環境変数(DEJO_SECRET_BILLING_ACME_COM_PASSWORD)または ~/.dejo/secrets.json から読み取られます:
{ "billing.acme.com": { "password": "..." } }
複数の ID を同時に使用する
プロファイルは、サインイン済みブラウザー一式です。それぞれ固有の Cookie とセッションを持ちます。必要な数だけ並行して保持できます:
dejo --profile vendor login --site shop.example.com
dejo --profile admin login --site shop.example.com
エージェントから dejo_profile を name="vendor" とともに呼び出すと切り替わり、名前を指定しない場合は一覧が表示されます。3 つのロールを対象とするテストスイートでは、サインアウトしてから再びサインインする必要がないため、テストの順序に左右されません。
ルートの共有
メモリはエージェントごとに保持されます。同じマシン上のエージェント同士で、ルートを受け渡すことができます:
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 ファイル 1 つです。何を記憶するかについてのすべての判断は、engine/src/dejo/store.py にあります |
| サインイン済みブラウザープロファイル | ~/.dejo/browser-profile、~/.dejo/profiles/ |
| ダウンロード | ~/.dejo/downloads |
| ファイルに保存する場合のパスワード | ~/.dejo/secrets.json |
サインインしていることと、記憶していることは別です。サイトの情報を忘れても、Dejo はサインインしたままですが、何をクリックすればよいのかはわかりません。
メモリの利用にアカウントは不要で、サイズ制限もありません。実行ごとに増える履歴だけは、エージェントごとに最新のイベント 10,000 件を保持します。メモリを Sibyl Memory に保存したい場合は、pip install "dejo[sibyl]" をインストールし、DEJO_MEMORY=sibyl を設定してください。
ツール
5 つの MCP ツールがあります。そのうち 1 つの dejo_run がすべてのブラウジングを行います。各ターンでツール名がすべて読み込まれるため、ツール選択はエージェントの作業で最も不安定な部分だからです。
| tool | what it does |
|---|---|
dejo_run | あらゆるウェブサイト上のタスクに使います。既知のタスクは 1 回の呼び出しで再実行されます。新しいタスクではページが表示され、次の呼び出しでエージェントが手順を 1 行ずつ送信します。手順で答えを読み取ると、タスクが保存されます。 |
dejo_login | 実際のウィンドウを開いてユーザーがサインインできるようにし、サインイン後に done=true を返します。 |
dejo_profile | サインイン済みのユーザー(顧客、ベンダー、管理者)を切り替えるか、一覧表示します。 |
dejo_memory | Dejo の記憶を確認します。sites、1 つのタスクの手順(show)、サイトの map、他のエージェントが共有したタスク(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 は実行せず、付いている場合も自動で 2 回実行されることはありません。
シャドウ DOM、iframe、ボタンのように振る舞う div、遅れて読み込まれるコンテンツ、Cookie バナー、確認ダイアログ、新しいタブ、入力欄が見えないファイル選択ダイアログなど、記録済みのフローが中断される原因に対応します。js 手順を使うと、サイトで想定外の動作が起きたときに独自の JavaScript を実行できます。コードで構成された手順は修復できないため、ルートに保存されることはありません。選択した各機能の理由を含む全機能一覧は、docs/BROWSING.md にあります。
問題が起きたとき
まず dejo doctor を実行してください。ブラウザー、プロファイル、メモリ、ダウンロードフォルダーを確認し、不足しているものがあれば具体的な修正方法を表示します。
「Dejo has no browser to drive yet.」 pip install でインストールされるのはコードであり、ブラウザーではありません。playwright install chromium を実行してください。
「Dejo cannot open a window here: this machine has no screen.」 サインインには実際のウィンドウが必要なため、通常の SSH やコンテナー内では dejo login を実行できません。デスクトップ環境のあるコンピューターでサインインし、~/.dejo/browser-profile をコピーするか、ssh -X でディスプレイを転送してください。通常の実行はヘッドレスで行われるため、影響を受けません。
「Dejo could not open its browser profile.」 別の Dejo の実行またはサインインウィンドウがまだプロファイルを開いているか、ブラウザーが受け付けない状態になっています。まず、他の実行をすべて閉じてください。それでも解決しない場合は、~/.dejo/browser-profile を削除すると直りますが、サインアウトされます。2 つのエージェントを同時に実行するには、それぞれに専用のプロファイルを指定してください。DEJO_PROFILE=~/.dejo/profile-b dejo-mcp
「Nothing loads in Dejo's browser profile.」 ページがタイムアウトしたため、Dejo は新しいブラウザーで同じアドレスを試し、そちらでは読み込みに成功しました。サイトには問題がなく、プロファイルが停止しています。新しいプロファイル(dejo --profile <name>、またはエージェントから dejo_profile)に切り替えてサインインするか、Dejo のウィンドウをすべて閉じて、メッセージに記載されたプロファイルフォルダーを削除してください。
CAPTCHA。 Dejo は停止して、その旨を通知します。ルートを壊れた状態とは記録せず、CAPTCHA の解決も試みません。一度手動で解除してから再実行してください。
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 がサーバーをすぐに利用可能にします。
FAQ
Dejo はキャッシュですか? いいえ。キャッシュは記録を再生するだけで、うまくいくことを期待します。Dejo が保存する各ステップには、正常に完了したことを証明するチェックが付いているため、サイトが変更されたのか、正常に動作しているのかを判別し、変更されたステップだけを修正できます。
AI モデルを呼び出しますか? いいえ。再生はモデル呼び出しを一切行わない通常のコードで実行され、設定する API キーもありません。最初の実行時も、ステップの修正が必要なときも、すでにお使いのエージェントが考えます。
どのタスクでもコストを削減できますか? いいえ。最初の実行では Dejo が作業を行い、手順を学習するため、最もコストがかかります。1 行で答えられる単一のページでは、覚えておくことはありません。繰り返し実行するステップのあるタスクで効果を発揮します。
パスワードを保存しますか? いいえ。実際のウィンドウで、ご自身でサインインします。パスワードが必要なステップでは、その場所にパスワードを入力することだけを記録します。
どのエージェントで動作しますか? MCP サーバーを実行できるエージェントであれば、どれでも動作します。Claude Code、Codex、Cursor などが対象です。
貢献
バグ報告、Dejo が正しく動作しないサイトの報告、プルリクエストを歓迎します。CONTRIBUTING.md から始めてください。セキュリティ上の問題を見つけた場合は、公開 issue ではなく、SECURITY.md の説明に従って非公開で報告してください。参加するすべての方は、行動規範 に従ってください。
先行する取り組み
- pig-dot-dev/muscle-mem:「AI エージェントが複雑な動作を学習し、再生するためのキャッシュ」です。最も近い既存のアイデアです。Dejo はキャッシュではありません。各ステップにチェックが付いているため、サイトが変更されたのか、正常に動作しているのかを判別し、変更されたステップだけを修復して、動作する手順を別のエージェントに渡せます。
- @playwright/mcp。Dejo のページ読み取りは、こちらのアクセシビリティツリースナップショット方式を基盤にしています。
ライセンス
MIT です。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。