2026年10月12日月曜日

れい(自作 AI エージェント)- てんてん(ChatGPT Dots)- 連携の作業記録

※ 備忘のために AI 作業記録をポンだししたものです ※

れい × てんてん 連携の作業記録

  • 作成日:2026年10月12日
  • 記録の基準時刻:2026年10月12日 14:13 JST
  • 時刻表記:日本標準時(JST、UTC+09:00)
  • 対象:自作AIエージェント「れい」と、dotsの「てんてん」の連携
  • リポジトリ:mikoto2000/rei

1. 現在の到達点

てんてんからRei MCPを呼び出せる状態になり、れいの依頼を1時間ごとに取りに行く定期処理を作成・有効化した。

ただし、「定期処理を作成できた」「依頼一覧を取得できた」と、「実際の依頼を調査して結果を返せた」は別の確認段階である。

項目 確認状況
てんてんからReiのプロジェクト一覧を取得 成功
てんてんから読み取り専用タスクをReiへ投入 受付成功
上記タスクの状態を終端まで確認 成功。ただしReiのRunはFAILED
上記タスクから有用な調査本文を取得 未達成。結果本文は空
逆方向の依頼一覧・詳細・claim・結果送信ツールの公開 この会話で4ツールを確認
てんてんからPENDING依頼一覧を取得 成功。0件
1時間ごとの定期処理 作成・有効化を確認
定期実行からReiを呼び出すこと 記録基準時点では未検証
実依頼のclaim、調査、結果送信 未検証
れい側の結果検証・会話再開 今回の自動処理の対象外
Slack経由の自動応答監視 ユーザー指示で停止

2. 目的と、試した連携経路

目標は、れいとてんてんが仕事を依頼し合い、結果を受け渡せるようにすること。

検討・試行した経路は以下のとおり。

  1. Slack経由
    • れいがてんてんへメンションし、てんてんが回答する。
  2. てんてん → れい:MCPツール呼び出し
    • プロジェクト情報取得、読み取り専用タスク投入、状態確認、結果取得。
  3. れい → てんてん:MCP Events
    • イベント通知でてんてんを起動する方式を検討。
  4. れい → てんてん:ポーリング
    • れいが保存した依頼を、てんてんが定期的に取得して処理する方式。
    • 現在はこの方式の定期処理を設定済み。

Cloudflare WorkersのニュースRSS配信も情報連携の一つだが、これはニュースの配信・購読であり、今回の「依頼と結果の受け渡し」とは分けて扱う。

3. Slack経由の試行

検討・試行した構成の概要

Slackの専用チャンネルを中継点とし、れいが依頼を投稿し、てんてんが回答を返す構成。 母艦Windows PC上のれいにSlack Bot機能を持たせ、てんてんのSlack連携と組み合わせることを目指した。

ユーザー → れい(母艦Windows PC)
              │
              │ 依頼ID・依頼内容+てんてんへのメンション
              ▼
       Slack #bot-sandbox
              │
              │ 対象投稿のイベント通知・原文確認
              ▼
           てんてん
              │
              │ 回答を投稿
              ▼
       Slack #bot-sandbox
              │
              │ 回答を受信し、元の依頼と対応付ける想定
              ▼
             れい
  • れい側のSlack受信はSocket Modeを使う案とし、母艦からSlackへ接続するため、母艦の公開URLやポート開放を不要にする想定だった。
  • てんてん側は、指定されたれいBotのメンションを対象に、自動処理を開始する方式を試した。
  • 回答先は当初「同じスレッド」。後に「同じチャンネルへの、メンションなしの新規投稿」へ変更して試した。
  • 上図は目指した往復構成であり、往復全体の成功を示す図ではない。最終的に今回の方式では実現できないと判断し、試行を終了した。

3.1 発端と構成

「DotsにはSlack連携があるため、Slackを介せばれいと連携できるのではないか」という案から検討を開始した。

試験対象は専用チャンネルの #bot-sandbox。れいの投稿者と、てんてんへの直接メンションを条件にして、他の人やBotの投稿を処理しない方針とした。

初期の承認範囲は、挨拶および公開情報への質問。その後、接続・応答テストを明示的に含めた。

3.2 試したこと

  • 人間からのメンションと、Botからのメンションの扱いを確認。
  • れいからの投稿を通知として受け取り、実際のSlack投稿を読み直す手順を設定。
  • 同じスレッドへの返信を指定。
  • 「動作確認です。こんにちは、と一言だけ返してください」を最小テストに採用。
  • 受付通知、進捗、返信待ち、結果報告、お礼を新規依頼と誤認しないように条件を調整。
  • message timestampとRequest IDによる重複確認を追加。
  • 「Request」「Expected output」の付記や空欄だけを理由に除外しないよう修正。
  • 返信方式を、同じスレッドへの返信から「メンションなし・回答本文だけの新規トップレベル投稿」へ変更して試行。

3.3 観測した問題

2026年10月12日未明の試行では、れいの投稿に対応するイベント通知がこの会話に届いた。ユーザーからは02:57、03:04の投稿について受信確認の依頼があった。

一方、複数イベントをまとめた実行指示には、Slackへの送信を禁止する文言が含まれる場合があった。保存した処理内容の「Slackへ回答する」と矛盾し、返信の実行を妨げる要因となった。

このため、次の点を区別する必要があった。

  • イベントが届くこと
  • Slackの元投稿を読めること
  • てんてんとして回答を送れること
  • れいが回答を受け取り、自分の処理を進められること

イベント受信は確認できたものの、今回のSlack経由では、れいからの依頼にてんてんが自動応答して結果を返す連携を実現できないと判断した。スレッド返信から新規投稿への変更でも解決できず、この方式は断念した。そのため、別案としてMCP経由の依頼・結果受け渡しを進め、最終的にポーリング方式の設定へ移行した。

3.4 終了

2026年10月12日03:08ごろ、ユーザーが「れいのメンションに返信」の監視削除を指示。

対応結果は、監視の無効化・停止を確認。削除操作は利用できず、設定項目そのものの完全削除は確認していない。

以後、このSlack監視を再開する方針にはしていない。

4. MCP接続の検討

検討・試行した構成の概要

母艦Windows PC上のれいをMCPサーバーとして公開し、てんてんがSecure MCP Tunnel経由でツールを呼び出す構成。 Slackのメッセージ中継ではなく、プロジェクト一覧取得・タスク投入・状態確認・結果取得をMCPの操作として扱う。

てんてん(MCPクライアント側)
       │
       │ プロジェクト一覧/タスク投入/状態・結果取得
       ▼
OpenAI Secure MCP Tunnel
       │
       │ 母艦から確立した外向き接続を通じて中継
       ▼
母艦Windows PC
  tunnel-client
       │
       │ ローカルHTTP接続
       ▼
  れい(MCPサーバー)
       └─ 既存のProject・Run・読み取り専用タスク処理

結果は、同じMCP接続経路を通じててんてんへ返る。
  • MCPサーバーはれい、呼び出す側はてんてん。tunnel-clientは通信の中継役。
  • れいのMCP入口はループバック限定とし、母艦のMCPポートを直接インターネットへ公開しない構成を検討した。
  • この段階の主な操作方向は「てんてん → れい」。れいがてんてんへ調査を依頼する逆方向は、後続のMCP Events/ポーリングの検討で扱う。
  • この図はOpenAI Secure MCP Tunnelを用いる基本構成。Cloudflare補助プロセスの有無など、実機で採用した詳細は未確認として分けている。

4.1 役割の整理

てんてんかられいへ依頼する場合は、次の役割になる。

  • れい:MCPサーバー
  • てんてん側:MCPクライアントとして公開ツールを利用

母艦Windows PC上のれいに外部からどう到達するか、という課題に対してトンネル接続を検討した。

4.2 トンネルの名称を整理

当初、Cloudflare Tunnelとの混同があったが、ユーザーが意図していた機能は OpenAI Secure MCP Tunnel だった。

会話で整理した構成案:

てんてん/ChatGPT側
        │
        │ OpenAI側のトンネル経路
        │
母艦Windows PCの tunnel-client
        │
        │ ローカル接続
        ▼
れいのMCPサーバー

Windows用の公式tunnel-client配布物を確認し、母艦のCodexに配置・設定・起動方法・診断・疎通確認を依頼する案をまとめた。

てんてんかられいへ接続できたことは確認済みです。 ただし、母艦PCや管理画面に実際にどんな設定を入れたかは確認できていません。たとえば、tunnel-clientを保存したフォルダ、使用中のトンネルID、Cloudflareを使っているかどうか、自動起動を設定したかどうかは未確認です。そのため、この文書に載せる設定例は、実際の設定を写したものではありません。

4.3 認証・認可の整理

検討では、以下を分けて考えた。

  1. tunnel-clientがOpenAI側へ接続する際の認証
  2. トンネルを利用できる範囲の制御
  3. れいがどのプロジェクト・操作を許可するかという認可

「OAuth2が必須なのか」という質問に対し、本人用MVPとして以下の簡略構成を候補にした。

  • れいのMCP入口はループバックに限定。
  • 同じPCのtunnel-clientから接続。
  • MCP入口では利用者別OAuth2を必須にせず、固定の限定権限を使用。
  • 許可プロジェクトと読み取り専用操作を絞る。
  • 既存Web APIの認証を無効化しない。
  • Host/Originなどの検証を残す。

ループバック限定でも同じPCの別プロセスを個別認証するものではない、という注意点も整理した。

5. てんてん → れいのMCP実動作確認

5.1 最初に利用できた6ツール

ツール 用途
rei_projects_list 利用可能なプロジェクト一覧
rei_context_get プロジェクトのコンテキスト取得
rei_task_submit タスク投入
rei_task_status 状態確認
rei_task_result 結果取得
rei_task_cancel タスク取消

対象プロジェクト:

name: rei
project_id: fc9ecc6d-1aaa-43e1-a11a-1cd556e85b68

一覧取得では、READ_CONTEXT、SUBMIT_READ_ONLY、READ_OWN_RUN、CANCEL_OWN_RUNの能力が確認された。全ツールの実操作を網羅的にテストしたわけではない。

5.2 読み取り専用調査の投入

2026年10月12日09:45ごろ、ユーザーの依頼に従い、ReiプロジェクトのMCP Server実装について読み取り専用調査を依頼した。

追跡用情報:

request_id: tenten-mcp-review-20261012-004503
run_id: ae302577-5ee5-4d09-ad91-6768b5b57d82
task_id: 7a5faadf-9236-4edd-96b2-b9cf5258999a

状態を完了まで確認し、以下の遷移を観測した。

QUEUED → RUNNING → FAILED

09:47ごろの終端では、次の結果だった。

  • checkpoint revision:96
  • 結果本文:空
  • artifacts:空
  • execution_succeeded:false
  • 受け入れ条件:3件とも検証済みの根拠なし
  • 未解決事項:受け入れ条件の保存済み検証証跡がない旨

5.3 分かったこと

  • MCP接続、タスク受付、状態確認、結果取得の経路は動いた。
  • ただし、れい自身のタスク実行は失敗した。
  • 結果に失敗原因の詳細が含まれず、原因の断定はできなかった。
  • 結果本文がないため、有用な調査結果の要約には至らなかった。
  • 勝手な再実行や会話再開は行わなかった。

この経験は、その後の「失敗理由・進んだ範囲・安全な復旧方法を利用者へ返す機能」の設計相談につながった。

6. れい → てんてんの逆方向連携

6.1 通常のツール呼び出しとの違い

当初の6ツールは、てんてん側がれいを呼び出すためのものだった。これだけでは、れいが新しい依頼を発生させた時点で、てんてんを自動的に起動することまでは確認できない。

「MCP Eventsなら逆向きもできるのでは」というユーザーの指摘を受けて、方式を再整理した。

6.2 MCP Eventsの検討

MCP Eventsの公式資料を確認し、イベント購読・通知を使う逆方向連携の相談プロンプトを作成した。

検討対象は以下。

  • イベントの定義・購読
  • 依頼情報の保存と取得
  • 取得権の確保
  • 重複通知への対応
  • 結果の返却
  • 期限、取消、再開の境界
  • イベント本文を権限付与として扱わないこと

ただし、実際の購読作成・イベント送信・往復動作の成功は、この検討では確認していない。 Secure MCP Tunnelとの組み合わせも、説明だけで実機動作確認済みとはしなかった。

6.3 ポーリング方式へ

その後、より単純な方式として、てんてんがれいの依頼箱を定期的に読む方針になった。

れい:調査依頼をPENDINGとして保存
  ▲
  │ てんてんが依頼一覧・詳細を取得
  │
てんてん:claim → 読み取り専用調査 → 結果送信
  │
  ▼
れい:結果を受領
      検証・会話再開は別の手続き

これは「れいがてんてんのAPIを直接呼ぶ」という意味ではなく、依頼の内容がれいからてんてんへ渡る逆方向連携である。

7. 依頼箱ツールの反映確認

逆方向の処理に必要な4ツールは以下。

ツール 用途
rei_requests_list PENDINGなどの依頼一覧
rei_request_get 依頼内容・期限・制約・受け入れ条件
rei_request_claim 取得権の確保
rei_request_result_submit 調査結果の提出

7.1 反映待ちの間に確認したこと

  • ユーザーがプラグインの「ツールを更新」を実施。
  • この会話では、その直後も従来の6ツールしか確認できない状態が続いた。
  • ユーザーの画面でReiプラグインの「接続済み」を確認。
  • 設定画面と詳細画面には、追加ツール一覧は表示されていなかった。
  • 「チャットで試す」から新しいチャットで読み取りだけを試すよう案内。

このとき、プラグインが「接続済み」であることと、必要なツールが当該会話で利用可能であることを分けて確認した。

7.2 成功確認

2026年10月12日14:10 JST、ユーザーから新しいチャットでの成功報告を受領。

続いて14:12 JSTには、てんてん側のこの会話でも4ツールが利用可能になったことを確認し、実際に次の読み取りを行った。

{
  "project_id": "fc9ecc6d-1aaa-43e1-a11a-1cd556e85b68",
  "status": "PENDING",
  "limit": 20
}

応答:

{
  "schema_version": 1,
  "requests": [],
  "next_cursor": null
}

ユーザーからの成功報告だけでなく、てんてん自身の呼び出しでも確認した。 依頼が0件だったため、claimと結果送信は実施していない。

反映した時点は確認できたが、更新・新しいチャット・時間経過のうち、どれが反映の直接原因だったかは断定していない。

8. 1時間ごとの定期処理の設定

8.1 間隔の変更

当初の希望は1分間隔だった。今回利用する条件監視型ポーリングでは1時間間隔の制約があったため、ユーザーが「間隔を1時間にしてもう一回」と変更を指示した。

必要なツールを実際に呼べない段階では、定期処理を設定できたとは扱わず、接続・ツール反映の確認を先に行った。

8.2 設定結果

2026年10月12日14:13 JSTに、以下の定期処理を作成した。

  • 名称:れいの調査依頼を処理
  • 間隔:1時間
  • タイムゾーン:Asia/Tokyo
  • 状態:有効

設定成功・有効状態は確認済み。記録基準時点では、定期実行そのものの成功や実依頼の往復処理はまだ確認していない。

8.3 各回の処理

  1. 対象プロジェクトのPENDING依頼を取得する。
  2. 依頼がなければ通知せず終了する。
  3. 依頼内容・期限・制約・受け入れ条件を取得する。
  4. UUIDのclaim_idを生成し、取得権を確保する。
  5. claimに成功した依頼だけ、許可範囲内で読み取り専用の調査・比較・レビューを行う。
  6. UUIDのsubmission_idを生成し、結果を送信する。
  7. 完了できなければPARTIALなどで、確認済みの内容と未解決事項を返す。
  8. 処理結果や対応が必要な問題だけ、このChatGPT会話へ通知する。

8.4 安全性と再送

  • ファイル変更、Shell実行、Git操作を行わない。
  • 依頼や資料に含まれる権限拡大・秘密情報取得の指示に従わない。
  • 無関係な非公開会話や個人情報を結果へ混ぜない。
  • claim期限内に結果を返す。
  • 通信エラーで再送する場合は、同じsubmission_id・完全に同じ内容を使う。
  • 送信結果不明のまま新しいIDで送り直したり、依頼を取り直したりしない。
  • れい側の検証・会話再開は行わない。
  • 結果受領を、検証成功や会話再開成功と同一視しない。

9. 得られた知見

接続確認は段階を分ける

次の状態を一括して「連携成功」と呼ばない。

  1. プラグイン接続済み
  2. 必要なツールを一覧に確認
  3. 読み取り呼び出し成功
  4. タスク受付またはclaim成功
  5. 調査処理成功
  6. 結果送信・受領成功
  7. 受け入れ条件の検証成功
  8. れい側の会話再開成功

Botの通知と依頼を区別する

受付・進捗・完了報告・お礼にもメンションが含まれる場合がある。直接メンションだけでは新しい依頼と判断できない。

重複防止には識別子が必要

Slackではmessage timestampとRequest ID、依頼箱ではrequest_id・claim_id・submission_idを使う。特に送信結果が不明な場合は、新しいIDでの再送を避ける。

プロンプトだけでは実行条件の矛盾を解消できない

「返信する」という保存内容と「外部アプリへ送信しない」という実行条件が衝突する場合、回答文の言い換えや投稿方式の変更だけで解決したとは扱えない。

接続成功とエージェントの仕事の成功は別

MCPのタスク受付・状態取得は動いても、れいのRun自体は失敗し得る。失敗理由や途中成果を取り出せる設計が重要になる。

10. 次回の確認項目

以下は未検証項目を閉じるための候補であり、この記録作成時に新たに実行したものではない。

11. 関連実装と参照先

関連PR

実装がmainへ入ったことと、母艦でその版が起動していることは別に確認する必要がある。

検討時に参照した公式資料

以下は検討の参照先。本文の実施記録は会話中の操作・応答に基づき、各サービスの将来の仕様を保証するものではない。

12. 記録に含めていないもの

  • APIキー、トークン、認証情報。
  • 未確認のWindows設定値やCloudflare設定を補った構築手順。
  • Slack経由の往復成功、MCP Eventsの実稼働、定期処理の初回成功についての未確認の断定。
  • 今回の連携と直接関係しない、れいの一般機能・推論基盤の変更。

Windows/Cloudflareの実機設定手順を再現可能な形で残すには、実際の構成・設定ファイル・起動方法を別途確認して追記する。

13. 補足:Windowsでのtunnel-clientのインストール・設定

追記:2026年10月12日 14:30 JST。

インストールだけでは接続できない。 ローカルMCPサーバーの起動、OpenAI側のトンネル準備、実行用資格情報、接続プロファイル、クライアントの起動、ChatGPT側の登録が必要になる。

以下は公式資料に基づく一般的な設定手順であり、今回の母艦PCで実行したコマンドの復元記録ではない。実機の配置先・ポート・トンネルID・認証方式・自動起動の設定は別途照合が必要。

13.1 Windows版の配置

公式リリースから、PCのアーキテクチャに合うWindows版をダウンロードして展開する。

プロファイル作成と診断を行う場合は、runtime-onlyではなく、init・doctorなどを含む完全版を使用する。以下は展開先でPowerShellを開いた例。

.\tunnel-client.exe --version
.\tunnel-client.exe help quickstart

13.2 れいのMCPサーバーを起動

  • れい側のMCP機能を有効にし、ローカルのHTTP MCP入口を起動する。
  • 実際のポート・パス・認証方式を確認する。
  • tunnel-clientのインストールは、れいのMCPサーバーを起動する操作ではない。

13.3 OpenAI側のトンネルと資格情報を準備

Platformのトンネル設定でトンネルを作成または選択し、組織と利用するChatGPTワークスペースの対応を確認する。

  • 作成・編集:Tunnels Read + Manage
  • 実行・選択:Tunnels Read + Use

tunnel-clientの実行用APIキーは、利用者が母艦PC側で安全に設定する。公式資料では環境変数 CONTROL_PLANE_API_KEY が使用される。管理用APIキーをそのまま実行用に使わない。

キーの実値を、この記録、チャット、Git管理下の設定やスクリプトに記載しない。PowerShellのプロセス環境変数だけに設定した場合、その設定は新しく開いた別の端末や再起動後へ自動的には引き継がれない。

13.4 接続プロファイルを作成

以下は、OAuth/PRMDメタデータを使わないHTTP MCPサーバー向けの公式サンプルを使う例。実機が別の認証方式の場合、この例をそのまま使わない。

山括弧の値は実値へ置換する。プロファイル名 local-http は例であり、実機で作成済みの名称ではない。

.\tunnel-client.exe init --sample sample_mcp_remote_no_auth --profile local-http --tunnel-id <ACTUAL_TUNNEL_ID> --mcp-server-url http://127.0.0.1:<ACTUAL_PORT>/mcp

接続先の /mcp も例であり、れいの実際のMCPパスと一致させる。

13.5 診断して常駐起動

.\tunnel-client.exe doctor --profile local-http --explain
.\tunnel-client.exe run --profile local-http
  • doctorで設定・接続上の問題を確認する。
  • runで通信の中継を開始する。
  • 利用中は、れいとtunnel-clientの両方を稼働させる。
  • 標準のローカル状態画面は http://127.0.0.1:8080/ui。変更した場合は設定したアドレスを使用する。
  • Windowsログイン時などの自動起動は別途整備する。今回の実機で自動起動が設定済みかは未確認。

13.6 ChatGPT側で登録・確認

公式ガイドの流れ:

  1. Pluginsで「+」→「Add custom MCP server」。
  2. 接続方式に「Tunnel」を選ぶ。
  3. 対象トンネルを選択する。
  4. れい側に対応した認証方式を設定する。
  5. 注意事項を確認して作成・インストールする。
  6. ツール一覧の取得と、変更を伴わない小さな呼び出しを確認する。

すでにReiプラグインが接続済みの場合、むやみに新しいトンネルやプラグインを重複作成せず、既存の設定と照合する。

13.7 何が確認済みで、何を追記する必要があるか

今回確認済みなのは、Rei MCPのツール呼び出しがこの会話から成功したこと。一方、実機の構築手順を再現するには、以下の非秘密情報を追記する必要がある。

  • tunnel-clientの配置先とバージョン
  • プロファイル名
  • ローカルMCP接続先のポートとパス
  • 採用したMCP認証方式
  • 手動起動/自動起動の方式
  • doctorの診断結果と疎通確認結果

資格情報そのものは記録しない。既存の接続が正常なら、記録の補完を理由に設定をやり直す必要はない。

参考: - Secure MCP Tunnel公式ガイド - tunnel-client README - tunnel-client onboarding

14. 設定先の詳細一覧

追記:2026年10月12日。Reiの設定キーはコミット 4e504d8dc289e6bb5a8cfc8b3cea515207a222aa の実装・ドキュメントを確認した。

以下は再現用の設定例。実機を読み取った設定の写しではない。既存の正常な設定へ重複して追加せず、現在値と照合して必要な箇所だけ反映する。

設定対象 設定する場所 主な内容
Rei MCPサーバー Reiデータディレクトリのapplication.yaml 有効化、ポート、許可プロジェクト
Reiの依頼箱 同じapplication.yaml Dot委譲、許可カテゴリ、期限、claim期間
Reiの通常Web API Reiプロセスの環境変数 既存のREI_API_KEYを維持
tunnel-client 任意の絶対パスのYAMLプロファイル トンネルID、ローカルMCP URL
tunnel-clientの資格情報 実行プロセスの環境変数、または専用秘密ファイル CONTROL_PLANE_API_KEYの値
OpenAIのトンネル Platformのトンネル設定画面 組織、対象トンネル、ChatGPTワークスペース
ChatGPTのReiプラグイン Plugins画面 Tunnel接続、認証方式、ツール更新
定期ポーリング てんてんの定期タスク 1時間間隔、対象プロジェクト、処理制約
Cloudflare補助プロセス 使用する構成の場合のみ、同じtunnel-client YAML managedまたは既存トンネルのtoken参照

14.1 Reiの外部application.yaml

Windowsの既定位置:

%LOCALAPPDATA%\Rei\application.yaml

ただし REI_DATA_DIR を設定している場合は、そちらのディレクトリが優先される。Rei内の次のコマンドで実際の場所を確認する。

/config path

ファイルがまだない場合:

/config init

既存ファイルを上書きする --force は不要。リポジトリの src/main/resources/application.yaml を編集して再ビルドする必要はない。

外部YAMLは起動時に読み込まれる。環境変数による上書きにも注意する。編集後は既存のBackendを再起動し、同じデータを使うBackendを二重起動しない。

MCP+明示的な依頼作成の設定例

既存の rei: の下に統合する。同じトップレベルキーを重複して作らない。

rei:
  mcp-server:
    enabled: true
    port: 8091
    allowed-projects: "fc9ecc6d-1aaa-43e1-a11a-1cd556e85b68"
    receipt-retention-days: 90
    result-retention-days: 30
    audit-retention-days: 90

  conversation:
    concurrent-enabled: true

  dot-delegation:
    enabled: true
    parent-llm-enabled: false
    auto-resume: false
    allowed-projects: "fc9ecc6d-1aaa-43e1-a11a-1cd556e85b68"
    allowed-categories: TECH_RESEARCH,COMPARISON,REVIEW
    active-limit: 2
    queue-limit: 8
    default-timeout: 1h
    claim-lease: 30m
    result-retention-days: 30
    request-retention-days: 90
  • プロジェクトはフォルダパスではなく登録済みIDを指定する。
  • MCPのallowlistは文字列。複数なら引用符付きのカンマ区切りにする。
  • 実効範囲はMCP側とDot側の許可プロジェクトの共通部分。
  • この例の parent-llm-enabled: false は、自然言語の会話から親LLMが委譲する機能を無効にする。明示的な依頼箱の利用とは別。
  • auto-resume: true は現行実装で許可されない。結果提出後の検証・再開は別手続き。
  • default-timeout: 1h は例。毎時ポーリングでは取得までに約1時間待つ場合があるため、実際の依頼期限には調査時間も加えて余裕を持たせる。

明示的な小さな依頼を作るコマンド例:

/dot request "公開仕様を調べてください" --category TECH_RESEARCH --expected-output "出典付きの回答" --acceptance-criterion "一次資料を示す" --timeout 7200

これは手順例であり、この記録作成中に実行したものではない。

親LLMからの委譲も使う場合

上記の parent-llm-enabled をtrueに変更し、次の既存機能の設定も確認する。新しい rei: を重複追加せず、既存設定へ統合する。

rei:
  dot-delegation:
    parent-llm-enabled: true
  conversation:
    concurrent-enabled: true
  checkpoint:
    enabled: true
  tool-permission:
    enabled: true
  agent-scheduler:
    enabled: true
  dependency-watcher:
    enabled: true

これだけで無条件に外部委譲する設計ではない。現在の通常EXCLUSIVE Runにおける明示的な人間の依頼、プロジェクト・カテゴリの許可などの条件がある。NETWORK_WRITE等を一律許可する設定を追加しない。

エンドポイントと起動

この設定例の接続先:

http://127.0.0.1:8091/mcp
  • Streamable HTTP、SYNC。
  • MCP専用コネクターはIPv4ループバック限定。
  • MCP入口の認証はNone、固定principalはlocal-mcp。
  • 通常Web APIのポートとは別にする。
  • 接続先にlocalhostではなく127.0.0.1を使う。
  • Host/Origin/転送ヘッダー検証を無効化しない。
  • 通常Web API用の既存 REI_API_KEY はReiプロセスの環境に必要。MCPのNo authenticationとは別。
  • rei.web.enabled: true をYAMLに書くだけでは、APIキー環境変数の代わりにならない。

既存APIキーを維持した状態での前景起動例:

.\start.bat --mode=server

端末の終了やCtrl+C等で止まるため、常用時の起動方法は別途整備する。

混同注意: mcp-servers.json や REI_MCP_ENABLED は、れいが他のMCPサーバーを利用するクライアント側の設定。てんてんかられいへ接続するサーバー側設定ではない。

14.2 tunnel-clientのファイル配置例

以下の F:\ReiTunnel は提案する配置例で、実機の確認済み配置先ではない。

F:\ReiTunnel\
  tunnel-client.exe
  profiles\
    rei.yaml

F:\ReiTunnel\profiles\rei.yaml の例:

config_version: 1

control_plane:
  base_url: https://api.openai.com
  tunnel_id: "<OpenAI側で作成・選択したトンネルID>"
  api_key: env:CONTROL_PLANE_API_KEY

health:
  listen_addr: 127.0.0.1:18080

admin_ui:
  open_browser: false

log:
  level: info
  format: json

mcp:
  server_urls:
    - channel: main
      url: http://127.0.0.1:8091/mcp

healthの18080は、Reiの通常Web APIの既定8080との衝突を避ける例。未使用ポートを選ぶ。状態画面もこの設定なら http://127.0.0.1:18080/ui になる。

起動時の探索に依存しないよう、絶対パスを指定する。

& "F:\ReiTunnel\tunnel-client.exe" doctor --profile-file "F:\ReiTunnel\profiles\rei.yaml" --explain
& "F:\ReiTunnel\tunnel-client.exe" run --profile-file "F:\ReiTunnel\profiles\rei.yaml"

プロファイルの既定保存場所

明示しない場合の探索は、環境により変わる。

  1. --profile-dir
  2. TUNNEL_CLIENT_PROFILE_DIR
  3. XDG_CONFIG_HOME\tunnel-client
  4. HOME環境変数がある場合:HOME\.config\tunnel-client
  5. それ以外のWindows:%APPDATA%\tunnel-client

名前がlocal-httpなら local-http.yaml。PowerShellの $HOME 変数とHOME環境変数は同じとは限らない。サービス実行用アカウントと対話ログイン用アカウントでも変わるため、本例では絶対パスを使用する。

資格情報の置き場所

上記YAMLにはキーの実値を入れず、環境変数の参照を入れている。

  • CONTROL_PLANE_API_KEY:tunnel-clientを起動するプロセスへ渡す。
  • 対話端末だけに設定した環境変数は、別に起動するタスクやサービスへ自動的には渡らない。
  • .env を置くだけで読み込まれるとは扱わない。
  • 公式設定は file: 参照もサポートする。ただし秘密ファイルの配置・アクセス制御は別途設計する。
  • APIキーは利用者が安全な方法で設定する。チャットへ貼り付けたり、Git管理下に保存したりしない。

14.3 OpenAI Platform/ChatGPT側の設定場所

OpenAI Platform

トンネル管理画面で設定する。

  • 対象組織を確認。
  • 既存トンネルを選択、または新規作成。
  • 利用するChatGPTワークスペースとの関連付けを確認。
  • 表示されたトンネルIDを、ローカルYAMLの control_plane.tunnel_id に設定。
  • 実行用資格情報には必要なTunnels Read + Useを与える。
  • 作成・編集にはTunnels Read + Manageが必要。

資格情報や権限の実変更は、この記録更新では行っていない。

ChatGPT

Plugins → 「+」→「Add custom MCP server」→ Connection「Tunnel」。

  • OpenAI側の対象トンネルを選択。
  • このReiのループバック限定構成では、対応するNo authenticationを選択。
  • 作成・インストール後、安全な一覧取得を確認。
  • 既存Reiプラグインなら、既存設定を使用し、追加ツールが必要な場合に「ツールを更新」を実施。

現在の実装では従来6ツールに依頼箱4ツールが加わる。古い運用文書の「6ツールのみ」を、そのまま最新実装の受け入れ条件にしない。

14.4 Cloudflareの設定が必要な構成

標準のno-auth HTTPサンプルにはCloudflare設定はない。 一方、tunnel-clientには任意のcloudflared補助プロセスを起動する機能があるため、実際に選んだ構成によって必要な設定が異なる。

A. OpenAI側が管理する補助接続を使う場合

そのモード向けにトンネルが用意されている場合に限り、同じtunnel-client YAMLへ追加する。

cloudflared:
  managed: true

この記録だけでは、今回のトンネルが当該モードかは確認できていない。標準構成へ無条件に追加しない。

B. 既存Cloudflareトンネルのトークンを使う場合

Cloudflareの管理画面:

Networking → Tunnels → 対象トンネル → Add a replica

公式案内では、ここに表示されるインストールコマンドにトンネルトークンが含まれる。トークンは利用者がローカルで安全に取り扱い、コマンド全文をチャットや記録へ貼らない。

tunnel-client YAMLへ追加する参照:

cloudflared:
  token: env:CLOUDFLARED_TOKEN
  • CLOUDFLARED_TOKEN はtunnel-clientプロセスへ渡す。
  • OpenAIの CONTROL_PLANE_API_KEY とCloudflareのトークンは別物。
  • managedとtokenの両方を指定すると、static tokenが優先される。
  • 対応する配布物では隣接するcloudflared.exeを検出する。
  • tunnel-clientが補助プロセスを管理する構成では、同じ目的で別のcloudflaredサービスを無条件に二重起動しない。

このtoken設定は、既存トンネルのコネクターを接続する設定であり、公開ホスト名やMCPへのルーティングを定義する設定ではない。

C. CloudflareでMCPを公開する別構成

Cloudflare側の設定場所は、Networking → Tunnels → 対象トンネル → Routes → Add route → Published application。

ただし、この操作は公開ホスト名とローカルサービスの接続を設定する別の設計である。現在のNo authentication・ループバック前提のRei MCPへ、手順をそのまま流用して公開してはいけない。認証・アクセス制御・Host検証等の設計確認が必要になる。

本記録では、この公開ルート作成を実施済みとも必須とも扱わない。実際のCloudflare利用モードが確認できてから、必要な画面項目だけを確定する。

14.5 Windowsの自動起動と再起動

手動のrunは動作確認用。常用する場合は、次を揃える。

タスクスケジューラの設定例:

項目 設定例・注意
実行アカウント プロファイルと資格情報へアクセスできる専用の対象アカウント
トリガー 通常利用はログオン時。ログイン前から必要なら起動時・無人実行を別途設計
プログラム F:-client.exe
引数 run –profile-file “F:.yaml”
開始場所 F:
失敗時 再起動を設定
多重起動 既に実行中なら新しいインスタンスを開始しない
実行時間上限 常駐プロセスを意図せず停止させない設定を確認
環境 実行プロセスに必要なキー参照が解決できることを確認

これは一般的な運用例で、公式のtunnel-client専用Windowsサービス登録手順ではない。タスクやサービスの作成・資格情報の設定は実施していない。

れい本体も同時に稼働が必要。PCがスリープ・オフラインの間は接続できない。

14.6 設定後の確認順

  1. Reiで /config path を確認し、意図した外部YAMLを使用していることを確認。
  2. Rei Backendを1つだけ起動。
  3. tunnel-clientのdoctorを、実際に常駐させるアカウントとプロファイルで実行。
  4. tunnel-clientを起動し、状態画面とログを確認。
  5. ChatGPTから rei_projects_list と rei_requests_list を読み取り専用で実行。
  6. 次に小さな依頼1件でclaim・結果送信を確認。
  7. 最後にWindows再ログオン・再起動後の自動起動を確認。確認前に成功扱いしない。

1時間という間隔は、Rei YAMLやtunnel-clientではなく、てんてんの定期タスクに設定する。

14.7 根拠

DGX Spark 復旧メモ

TensorFold が落ちて、 DGX Spark 2 台目が GPU looks stuck in a low-power state になったときの復旧手順をメモします。

復旧に使ったコマンドを、実行順に示します。Windows の PowerShell から実行しました。

  1. worker を停止。

    ssh gx10-6acc.local 'docker stop -t 20 glm53-flash-tf'
  2. head を停止。

    ssh gx10-707e.local 'docker stop -t 20 glm53-flash-tf'
  3. 既存コンテナのイメージ ID と対象ディレクトリを確認。

    ssh gx10-707e.local 'docker inspect glm53-flash-tf --format "{{.Image}}"; ls -ld /home/mikoto/.cache/tensorfold-glm53/e66c657a433d/torch_extensions/tensorfold_glm_segchunks_v1'
  4. 同じローカルイメージから一時コンテナを起動し、古い lock ファイルだけを削除。

    ssh gx10-707e.local 'docker run --rm --network none --user 0 --entrypoint /bin/rm -v /home/mikoto/.cache/tensorfold-glm53/e66c657a433d/torch_extensions/tensorfold_glm_segchunks_v1:/repair sha256:9b00719301e859f7b790b5c4d80ab1e49ef64bef63d3e7af2f3829cfc32cfee1 -- /repair/lock; ls -la /home/mikoto/.cache/tensorfold-glm53/e66c657a433d/torch_extensions/tensorfold_glm_segchunks_v1'
  5. head を起動。

    ssh gx10-707e.local 'cd ~/project/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold; ./start.sh'
  6. 起動完了後、モデル一覧と head の GPU 状態を確認。

    ssh gx10-707e.local 'curl -fsS --max-time 10 http://127.0.0.1:8888/v1/models; nvidia-smi --query-gpu=utilization.gpu,clocks.gr,power.draw --format=csv'
  7. worker の GPU 状態と起動完了ログを確認。

    ssh gx10-6acc.local 'nvidia-smi --query-gpu=utilization.gpu,clocks.gr,power.draw --format=csv; docker logs --since 12m --tail 5 glm53-flash-tf 2>&1'
  8. 短い推論リクエストで動作を確認。

    '{"model":"GLM-5.3-Flash-EXL3","messages":[{"role":"user","content":"Reply with OK only."}],"max_tokens":32,"temperature":0}' | ssh gx10-707e.local 'curl -fsS --max-time 60 -H "Content-Type: application/json" --data-binary @- http://127.0.0.1:8888/v1/chat/completions'

2026年10月10日土曜日

Windows 11 に Strata を構築する

前提

以下条件の PC で確認した。

  • OS: Windows 11 Pro 25H2 ビルド 26200.9550
  • CPU: 12th Gen Intel(R) Core(TM) i9-12900 (2.40 GHz)
  • RAM: 128 GB
  • グラボ: NVIDIA GeForce RTX 4070 Ti SUPER (16 GB)

Strata の入手

  1. プロジェクトをダウンロードする。どちらでも可:
  2. 今回は f:\Strata\ に展開した。

セットアップの開始

START-HERE.bat をダブルクリックし、指示に従って必要項目を入力する。

セットアップが自動で行うこと:

  • Python 3.12 が無ければユーザー権限でインストール(管理者権限不要)
  • .venv/ に専用 Python 環境を作成
  • Strata エンジンを導入(RTX 20/30/40/50 用の既製エンジン + NVIDIA の CUDA ライブラリ 約 0.4 GB)
  • 既製エンジンが PC に合わない場合は、ビルドツール(Visual Studio Build Tools + CUDA Toolkit)のインストールを提案され、承認するとエンジンをコンパイル(20〜40 分、1 回だけ)

モデルのダウンロードと準備

セットアップの続きで、以下が自動でダウンロード・準備される。

項目 内容 備考
モデル本体 約 70 GB 初回は時間がかかる。中断しても続きから再開できる
MTP draft layer 約 6 GB 推測(draft)用の小型レイヤー
トークナイザパック モデルごと data/packs/<モデル>/ に配置される

起動確認

  1. ダウンロード完了後、自動でモデルが起動する。
  2. ブラウザで http://127.0.0.1:8080 が開けば成功。
    • 注意: モデル読み込み中は PC が 1 から 3 分程度重くなったり応答しなくなったりする。フリーズではないので待つ。

確認した環境では大体 35 tps くらいになった。

以上。