Skip to main content
Glama

ThumbAgent

ローカルファーストなプラットフォーム。AI エージェントにモバイル端末上で本物の「親指」を与えます。

中文 | English

CI

AI エージェント向けのローカルファースト、クロスプラットフォームなモバイルデバイス Skills プラットフォーム。

現在の進捗

プロジェクトは ITER-0052 Desktop Device Screen & Live Observation を完了しました。デスクトップワークベンチは Agent タスク実行時に デバイス画面バーを表示し、ラウンドごとにアクション後の実際のスクリーンショットをリアルタイム更新します。タスクレポートはラウンドごとにスクリーンショットの証跡を展開できます。Runtime には 読み取り専用のコンテンツエンドポイント GET /v1/artifacts/{artifact_id}/content(Bearer token 認証、スクリーンショット PNG のみ、 単一ファイル上限 8 MiB、no-store)が追加され、task.step_completed イベントはそのラウンドの screenshot_artifact_id を保持します。

デスクトップワークベンチ(Tauri 2)はローカル Runtime を自動起動して認証し、ホーム画面に統合された準備完了診断と検出済みデバイス一覧を表示します。 自然言語タスクの送信、実行タイムライン、完全なレポートに対応しています。デスクトップ側の開発は apps/desktop/README.md を参照してください。 Python 3.11+ を使用:

make check
make run

Runtime はデフォルトで 127.0.0.1:8765 をリッスンし、/v1/health、/v1/devices、POST /v1/devices/{device_id}/observe を提供します。

Related MCP server: android-mcp

MCP Skills 開発者プレビュー

macOS + Codex デスクトップでローカル実機受け入れを行う場合、ワンクリックスクリプトを使用できます:

./scripts/run-mcp-preview.zsh

初回実行時にモデル Key の入力を求められ、モデル Key と安定したローカル Runtime token はそれぞれ macOS ログイン Keychain に保存されます。以降の起動では再び尋ねられることはありません。スクリプトは対象ポートを占有している古い mobile_agent.api.server を安全に停止し、変更されていない MCP 登録を再利用して新しい Runtime を起動します。Codex/ChatGPT がすでに実行中の場合は 閉じる必要も開き直す必要もありません。初回登録時、明示的な --refresh-mcp 時、MCP 設定または Tool Catalog が変更された場合のみ、 実行中の Codex は一度再起動して新しいタスクを作成し、キャッシュされた MCP 環境を更新する必要があります。通常の Runtime 再起動では不要です。

モデル Key は Keychain と Runtime プロセス環境にのみ入り、リポジトリやスクリプト出力には書き込まれません。スクリプトはフォアグラウンドで実行され、 Ctrl+C で Runtime を停止します。Python、ADB、Codex、モデル設定パスを確認するだけで、鍵を読み取らず MCP 設定も変更しない場合は、次を使用:

./scripts/run-mcp-preview.zsh --check

MCP 登録を強制的に更新するか、プレビュー Secret を削除する場合:

./scripts/run-mcp-preview.zsh --refresh-mcp
./scripts/run-mcp-preview.zsh --forget-secrets

登録の更新では Keychain 内の token はローテーションされません。対象ポートが他のプログラムに占用されている場合、スクリプトは誤ってプロセスを終了することを拒否します。自動停止するのは コマンドライン上で明示的に mobile_agent.api.server に属するプロセスのみです。

Web、CLI、MCP が同じ Runtime を共有するには、明示的なローカル token を指定してサービスを起動してください:

MOBILE_AGENT_API_TOKEN=<local-random-token> \
MOBILE_AGENT_ADB_PATH=/usr/local/platform-tools/adb \
make run

次に MCP Host で stdio Server を設定し、同じ token を使用します。例は mcp-server.example.json を参照してください。MCP Host が実際に起動するコマンドは:

PYTHONPATH=runtime \
MOBILE_AGENT_API_TOKEN=<same-local-random-token> \
python3.11 -m mobile_agent.mcp

MCP は目標レベルの Tools を提供し、準備完了診断、デバイスとインストール済みアプリの確認、アプリライフサイクル、Agent 非同期タスク、 タスクの照会/キャンセル、脱敏ログ、集約パフォーマンススナップショット、診断エビデンスパッケージ、パフォーマンス比較、ローカル Artifact 保持クリーンアップをカバーします。ADB、 任意の Shell、任意のファイルパス、input.tap などの原子 Tool は公開しません。確認が必要なアクションは、MCP Host がユーザーに パラメータと影響を提示して確認を得た場合にのみ、confirmed=true を渡すことが許可されます。

起動後、統合された準備完了診断を確認できます:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.runtime_diagnose

GET /v1/readiness と Web UI は Android Gateway、デバイス接続/認可、Session、Lease 占有状況、 修正提案を表示します。ADB が未インストールまたはパスが誤っている場合でも Runtime は診断画面を起動し、ADB_NOT_FOUND で直接終了することはありません。

単一デバイスの現在の能力、リスク、確認要件、制限を確認:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_inspect <device_id>

MCP は読み取り専用の mobile_list_apps と mobile_inspect_app も提供し、アプリ識別子の境界付き一覧表示と、単一アプリの バージョン、インストール元、有効状態の照会を行います。APK パス、署名、権限、生の dumpsys は返さず、アプリの起動や変更も行いません。

ローカル APK インストールは <data-dir>/apks ディレクトリ内の単一の .apk のみを受け付けます。外部 Agent はまず mobile_prepare_apk_install を呼び出して、ファイル名、サイズ、SHA-256、Manifest パッケージ ID、置き換え影響を含む短期 Approval を取得する必要があります。MCP Host がユーザーにこのサマリーを提示して明示的な確認を得た後にのみ、mobile_install_apk を呼び出せます。Approval は 10 分で期限切れになり、デフォルトでは一度しか使用できません。Runtime は URL をダウンロードせず、split APK や任意の ADB パラメータも受け入れません。

アプリのアンインストールは独立した mobile_prepare_app_uninstall → mobile_uninstall_app の 2 段階フローを使用します。Prepare は 読み取り専用でアプリのバージョン、システムアプリ判定、データ削除の影響を返します。システムアプリまたは属性不明のアプリは直接拒否されます。ユーザーがこのサマリーを 改めて明示的に確認した後にのみ、非同期アンインストールタスクを提出できます。失敗または結果不明の場合は自動再試行してはなりません。

アプリライフサイクルは mobile_inspect_app_state、mobile_launch_app、mobile_stop_app を提供します。状態チェックは プロセスが存在するか、フォアグラウンドか、stopped flag のみを返します。起動、停止は非同期 task_id を返し、非システムアプリの停止前には 明示的な確認が必要です。アプリデータの完全消去は、まず mobile_prepare_app_data_clear を呼び出し、パッケージ名、バージョン、データ削除の 影響を表示して一度新しい明示的な確認を得てから、mobile_clear_app_data を呼び出す必要があります。アプリデータの消去はアプリをアンインストールせず、失敗や unknown outcome の場合も自動再試行してはなりません。

明示的な確認の後、最近のログスナップショットを収集します(Runtime 起動時に生成されたローカル API token を渡す必要があります):

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_logs_collect \
  <device_id> --max-lines 500 --minimum-level info --confirm --token <runtime-token>

ログはまず脱敏され、最大 1 MiB のローカル Artifact として保存されます。CLI と REST はログ本文を返しません。 --async-task を追加すると即座に task_id を取得でき、統一された実行状態、イベント、キャンセル、タスクレポートを使用できます:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_logs_collect \
  <device_id> --confirm --async-task --deadline-seconds 60 --token <runtime-token>

集約された CPU、メモリ、バッテリー温度、システム負荷のスナップショットを収集:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_performance_snapshot \
  <device_id> --async-task --deadline-seconds 90 --token <runtime-token>

パフォーマンス Artifact は集約された JSON メトリクスのみを含み、dumpsys 原文、プロセス名、アプリ詳細は保存しません。

スクリーンショット、UI Tree、脱敏ログ、集約パフォーマンス、任意のアプリ状態を一度に収集し、SHA-256 マニフェスト付きのローカル ZIP を生成:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.diagnostic_bundle_collect \
  <device_id> --app-id <package-id> --max-log-lines 500 \
  --minimum-log-level info --confirm --token <runtime-token>

診断パッケージは Medium リスクに分類され、明示的な確認が必要です。CLI、Web、REST、MCP は Artifact メタデータと安全サマリーのみを返し、 スクリーンショット、UI Tree、ログ、ZIP 内容をインラインで含めません。パッケージ内のファイル名は固定され、総サイズは 24 MiB を超えず、アップロードや外部送信は行われません。

ローカル Artifact の占有状況を確認し、デフォルトの 7 日間保持期間を超えるエビデンスを読み取り専用で事前チェック:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_storage
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_data_cleanup_prepare \
  --retention-days 7 --max-artifacts 500 --token <runtime-token>

Prepare はファイルを削除せず、候補数、サイズ、期限、短期 Approval のみを返します。ユーザーが影響サマリーを確認し、改めて明示的な 確認を行った後にのみ、非同期クリーンアップタスクを提出できます:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_data_cleanup \
  <approval-id> --confirm --token <runtime-token>

クリーンアップは Approval にバインドされたシステム生成 Artifact ID、相対パス、サイズ、SHA-256 のみを受け付けます。任意のパスは受け付けず、 タスクデータベース、設定、鍵、APK は削除せず、自動バックグラウンド実行や失敗時の自動再試行も行いません。

同じデバイス上の 2 つの完了したパフォーマンススナップショットタスクを比較:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_performance_compare \
  <baseline_task_id> <candidate_task_id> --token <runtime-token>

Web タスクレポートでは、1 つの成功したスナップショットをベースラインに設定し、別のスナップショットを選択して比較することもできます。比較結果は 2 点サンプルの 数値方向と安定しきい値のみを示し、因果関係やパフォーマンス低下を自動判定しません。

adb が PATH にない場合、明示的に設定できます:

MOBILE_AGENT_ADB_PATH=/usr/local/platform-tools/adb

ITER-0003 は GET /v1/tools、POST /v1/tools/{tool_id}/invoke、POST /v1/skills/app.open/invoke を追加しました。input.tap は Medium リスクであり、デフォルトで明示的な確認が必要です。

ITER-0004 は安全な UI hierarchy 解析、セマンティック Selector、input.tap_element、POST /v1/skills/settings.navigate/invoke を追加しました。セマンティッククリックは Medium リスクであり、一致が一意でない場合は実行を拒否します。

ITER-0005 はポリシー制約付きの input.swipe、input.text、境界付きセマンティックスクロール検索、POST /v1/skills/settings.scroll_navigate/invoke を追加しました。スクロールと入力はどちらも Medium リスクであり、デフォルトで明示的な確認が必要です。パスワード、検証コード、支払い、アカウントセキュリティ、自動送信シナリオはこのイテレーションの範囲外です。

ITER-0006 は最小 Task Runner、TaskRun エビデンスレポート、プレビュー型同期エンドポイント POST /v1/tasks/settings.scroll_navigate/run を追加しました。このエンドポイントは既存の settings.scroll_navigate Skill をラップするだけで、後続の非同期タスクキューデザインを置き換えるものではありません。

ITER-0007 はプロセス内 Task Store、TaskEvent、照会エンドポイント GET /v1/tasks/{task_id}、GET /v1/tasks/{task_id}/events を追加しました。この Store は現在の Runtime プロセスのライフサイクル内でのみ有効で、再起動時の復元はまだ提供されません。

ITER-0008 は最初のバージョンの CLI タスクレポートビューを追加し、TaskRun と TaskEvent をユーザーが読み取り可能なレポートに描画できます:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.task_report <task_id>

このコマンドはローカル Runtime API からタスクとイベントを照会します。

ITER-0009 は SQLite Task Store を追加し、デフォルトでタスクとイベントを <data-dir>/mobile-agent.db に保存します。MOBILE_AGENT_DATA_DIR を設定すると、データベースはそのディレクトリに配置されます。それ以外の場合はプラットフォームのデフォルトのローカルデータディレクトリを使用します。

ITER-0010 は履歴タスクリストを追加しました:

PYTHONPATH=runtime python3.11 -m mobile_agent.cli.task_list --limit 20

リストは最近のタスクのサマリーを表示し、その中の task_id をコピーして task_report で詳細を確認できます。

ITER-0011 はローカル Web UI を追加しました。Runtime 起動後に開く:

http://127.0.0.1:8765/ui

タスク履歴とタスクレポートの詳細を確認できます。

ITER-0012 は Web UI に「安全 Demo を実行」ボタンを追加しました。このボタンはオンラインの Android デバイスを選択し、固定タスクを実行します: システム設定を開き、表示/明るさページに移動します。POST リクエストは引き続きローカル Runtime token を使用し、同一オリジンの loopback ページからのみトリガーできます。

ITER-0013 はモデル接続前の Agent Loop Preview を追加しました: POST /v1/tasks/agent.run。このエンドポイントは deterministic Planner を使用して制約付き決定を生成し、現時点では安全デモ目標「システム設定の表示/明るさページに入る」のみをサポートし、観察サマリー、Planner 決定、Skill 実行結果、エビデンスをタスクレポートに書き込みます。

ITER-0014 は Web UI に自然言語タスク入力ボックスと「Agent Preview を実行」ボタンを追加しました。ページは POST /v1/tasks/agent.run を呼び出し、タスクが返された後に履歴リストを更新してタスクレポートを開きます。

ITER-0015 は LLM Planner の内部プレビュー契約と MockLLMPlanner を追加しました。モデル形式の出力はまず構造化解析とフィールド検証を経てから、Agent Runner の Skill allowlist による二次検証を受ける必要があります。このイテレーションでは実際のモデルサービスを呼び出さず、モデル鍵も読み取りません。

ITER-0016 はデフォルトでオフの OpenAI-compatible Planner Provider プレビューを追加しました。Provider は chat-completions スタイルのリクエストを構築でき、注入可能な transport を通じて構造化レスポンスを解析し、ITER-0015 の Planner 出力検証を再利用します。デフォルト Runtime は実際の Provider を有効にせず、テストはネットワークやモデル鍵に依存しません。

ITER-0017 はモデル Provider 設定ゲートを追加しました。デフォルト設定は引き続き RuleBasedPlanner を返します。openai_compatible を明示的に有効にし、base_url、model、api_key_ref を提供し、注入された SecretResolver を通じて鍵を解決した場合のみ、OpenAI-compatible Planner を構築します。このイテレーションではデフォルト Runtime に接続せず、実際の鍵も読み取りません。

ITER-0018 はモデル Provider の読み取り専用ステータスエントリを追加しました: GET /v1/model-provider/status と Web UI の「モデル Provider」ステータスパネル。ステータスは有効かどうか、provider、model、鍵参照が設定されているかのみを表示し、実際の鍵や api_key_ref の原文は返しません。デフォルト Runtime は引き続き実際のモデルを有効にしません。

ITER-0019 はローカルモデル設定の読み取りを追加しました。Runtime 起動時に <data-dir>/model-provider.json または MOBILE_AGENT_MODEL_CONFIG で指定されたファイルを読み取り、MOBILE_AGENT_MODEL_* 環境変数で設定フィールドを上書きできます。設定ファイルには api_key_ref のみが保存され、開発プレビュー SecretResolver は env:MOBILE_AGENT_MODEL_SECRET_* 参照のみを解決します。デフォルトの Agent Runner は引き続き実際のモデルを呼び出しません。

ITER-0020 はモデル Planner をデフォルト Runtime に制御付きで接続しました。設定がオフの場合は引き続きルール Planner を使用します。設定がオンで鍵参照が解決できる場合は OpenAI-compatible Planner を使用します。設定がオンだが利用できない場合、Agent タスクは MODEL_UNAVAILABLE で明確に失敗し、ルール Planner に静かにフォールバックしません。モデル出力は引き続き構造化解析、Skill allowlist、Policy Engine、Device Gateway を通過する必要があります。

ITER-0021 は Web UI のモデル Provider ステータスカードを拡張し、未有効、接続済み、設定利用不可、設定読込済みを区別し、利用不可の場合は設定ファイル、MOBILE_AGENT_MODEL_CONFIG、MOBILE_AGENT_MODEL_SECRET_* の確認を促します。リポジトリに設定例を提供: model-provider.example.json。

ITER-0022 は Agent Preview を「1 ラウンドのモデル決定で大きな Skill を呼び出す」から「複数ラウンドのモデル決定 + 原子 Tool 実行 + 各ラウンドでの再観察」にアップグレードしました。Planner は run_tool、finish を出力でき、Runtime はホワイトリストの Tool のみを許可し、finish 時には UI Selector を通じて決定論的検証を行います。旧 run_skill パスは互換性のため維持されます。

ITER-0023 は Agent の各ラウンドレポート内の AgentObservationSummary、AgentDecision、AgentStepResult を公開 JSON Schema に昇格させ、TaskRun Schema を更新して agent.run を正式にサポートしました。デスクトップ、CLI、将来の外部 Agent は複数ラウンドの Observe–Plan–Act レポートを安定して消費できます。

ITER-0024 は Agent アクション進捗フィードバックを追加しました。Runtime は Tool 実行前後のフォアグラウンドアプリと UI tree を比較し、changed / unchanged を次のラウンドのモデルにフィードバックし、同じ無進捗アクションの再送信を阻止します。Web レポートは実際の Tool、パラメータ、ページ進捗を同時に表示します。

ITER-0025 はモデル側の Observation を最適化しました。意味レイアウトのないノードをフィルタリングし、可視テキストと操作可能なノードを優先して保持し、サマリー切り詰めメタデータを追加し、UI テキストがモデル Prompt とタスクサマリーに入る前に一般的な電話番号、メール、長い数字識別子を脱敏します。

ITER-0026 は厳格な Agent ToolCall Contract、モデル無効パラメータの 1 回の有界修正、失敗ラウンドのエビデンス保持を追加しました。実機で「表示と明るさに入る」の複数ラウンドモデルループが完了しました。

ITER-0027 は目標駆動のオンライン Agent 評価基盤を確立しました。実際のモデルは毎回現在のデバイス UI に向き合って再プランニングし、評価は目標、最終状態、禁止 Tool、ラウンド予算のみを制約し、固定アクションパスは比較しません。完了した agent.run は POST /v1/tasks/{task_id}/evaluate で評価でき、シナリオ例は agent-evaluation-scenario.example.json にあります。

ITER-0042 は複数のパス非依存シナリオをバージョン付き Suite として整理しました。まず Web または MCP で Suite 内の目標をそれぞれ実行し、 次に完了した task_id を読み取り専用の集約 CLI に渡します。このコマンドは既存の評価 API のみを呼び出し、デバイスアクションを送信または再生しません:

./scripts/report-mcp-evaluation.zsh \
  --suite evaluations/android-settings-smoke-v1.json \
  --task settings.bluetooth.v1=task_<id> \
  --task settings.display-brightness.v1=task_<id> \
  --task settings.battery.v1=task_<id>

レポートは総成功率、シナリオ別成功率、所要時間 p50/p95、平均ラウンド数と Tool 数、Provider リトライ、 NO_PROGRESS、MODEL_UNAVAILABLE、ポリシー違反統計を表示します。Suite は目標と独立した成功条件を定義し、固定アクションパスは含みません。 スクリプトは Codex に登録済みの mobile-agent ローカル接続情報のみを読み取り、token を出力せず、デバイスタスクも送信しません。

ITER-0028 は信頼性を強化しました。副作用のない目標位置特定と finish 検証の失敗は failed round としてモデルにフィードバックしてプランニングを継続できます。finish はフォアグラウンドの app/activity と UI Selector を組み合わせられます。上部システム領域と下部ジェスチャー領域のクリックは配信前にインターセプトされます。Provider のタイムアウト、HTTP、接続、レスポンス形式エラーは分類記録され、retryable なモデルリクエストは最大 1 回再試行されます。無効な Selector はフィールドレベルの脱敏診断のみを表示します。 モデルがセキュリティ非重要の reason を省略した場合、Runtime は固定の監査説明を生成し、このために追加のモデル修正リクエストを発行しません。Tool、Selector、Policy、完了条件は引き続き厳格に検証されます。

ITER-0029 は呼び出し側が任意で指定できる Runtime-owned 成功条件を追加しました。POST /v1/tasks/agent.run は acceptance を受け取ることができ、フォアグラウンドの app id、Activity、一意の UI Selector の all-of セマンティクスでモデルが発行した finish を検証します。パスは引き続きモデルがリアルタイムの Observation に基づいて動的に計画します。タスクレポートは goal_acceptance と completion_source を永続化して表示します。リクエスト例は agent-run-runtime-acceptance.example.json にあります。

ITER-0030 は 2 段階の目標コンパイルを追加しました。POST /v1/goals/compile は短い自然言語目標をレビュー可能な AgentGoalSpec ドラフトに変換し、拡張された実行目標、仮定、信頼度、任意の成功条件を含みます。モデルドラフトはユーザーが 明示的に確認した後にのみ agent.run に渡せます。タスクは引き続きモデルがリアルタイムの Observation に基づいて動的に計画し、固定アクションパスは生成しません。例は agent-goal-spec.example.json にあります。

ITER-0031 は非同期 Agent 実行を追加しました。POST /v1/tasks/agent.run/async は即座に 202 Accepted と task_id を返し、GET /v1/task-executions/{task_id} と /events は永続化された状態とラウンドごとのイベントを提供し、 POST /v1/task-executions/{task_id}/cancel は安全な境界でキャンセルを要求します。非同期作成は Idempotency-Key をサポートします。従来の同期 POST /v1/tasks/agent.run は互換性を維持します。ローカル Web UI はデフォルトで非同期エントリを使用します。

ITER-0032 は Runtime の公開書き込みエントリに同一デバイス排他リースを追加し、同期/非同期 agent.run に任意の deadline_seconds(デフォルト 600 秒、範囲 1–1800)を追加しました。デバイスが他のタスクに占有されている場合は DEVICE_LOCKED を返します。 タスクが安全な境界で予算を超えた場合、timed_out/TASK_DEADLINE_EXCEEDED で終了し、完了済みアクションのエビデンスは保持されます。

ITER-0033 は同じデータディレクトリに対する Runtime 単一インスタンスロックを追加し、各連続オンラインデバイス接続に対して session_id を生成します。 タスクとリースは現在の Session にバインドされます。デバイスが切断または再接続された場合、古いタスクは DEVICE_SESSION_CHANGED で停止し、後続のアクションを新しい接続に送信しません。Device、TaskExecution、TaskRun、Web/CLI レポートはすべてセッション識別子を表示します。

ITER-0034 は統一された Runtime/Device Readiness を追加しました。Web と CLI は同じ読み取り専用 Contract を使用して ADB、デバイス 接続と認可、Session、Lease 状態を解釈します。ready デバイスのみ Web からタスクを開始できます。ADB が欠落している場合、Runtime は診断モードに入り修正提案を提供しますが、ツールの自動インストールやデバイス設定の変更は行いません。

ITER-0035 は Device Inspection と Capability Catalog を追加しました。Web でデバイスをクリックすると 8 つの基本 V1 能力を表示できます。 GET /v1/devices/{device_id}/inspection と CLI は現在の可用性、リスク、冪等性、検証要件、関連 Tools、制限を表示します。Inspection はデバイス発見と Lease のみを読み取り、スクリーンショットを撮らず、UI を読み取らず、アクションも実行しません。

ITER-0036 は最初のエンジニアリング診断 Skill を追加しました: POST /v1/skills/device.logs.collect/invoke。Android Adapter は有界な行数と固定ログレベルのみを受け付け、固定 logcat パラメータでスナップショットを収集します。Skill は Medium リスクの明示的な確認を要求し、 ローカルで脱敏した後に device_log Artifact を生成します。Web と CLI は Artifact メタデータのみを表示します。継続的なストリーミング収集、任意の logcat filter、ログアップロードはこのイテレーションの範囲外です。

ITER-0037 はログ収集を統一非同期タスクチェーンに接続しました: POST /v1/tasks/device.logs.collect/async は 202 Accepted を返し、TaskExecution 状態、増分 イベント、Idempotency-Key、キャンセル、Deadline、Device Session、Lease、永続化された TaskRun レポートを再利用します。Web のログボタンはデフォルトで非同期送信します。同期 Skill エンドポイントは引き続き保持されます。実行器はコード内に登録された Agent とログタスクタイプのみを許可し、 クライアントは任意のハンドラを送信できません。

ITER-0038 は device.performance.snapshot を追加しました。Android Adapter は固定の読み取り専用コマンドで総 CPU、 Total/Free RAM、バッテリー残量/温度、uptime、load average を収集し、正規化された数値のみをローカル JSON Artifact に書き込みます。 同期 Skill、非同期 Task、Web、CLI は同じ Contract を共有します。アプリ/PID 詳細と継続サンプリングは提供しません。

ITER-0039 は POST /v1/performance-comparisons を追加しました。同じデバイス上の 2 つの成功したパフォーマンススナップショット TaskRun を 入力として、CPU、メモリ、バッテリー、温度、負荷の 2 点差分としきい値トレンドを計算します。比較は完全にローカルで構造化タスクエビデンスを読み取り、 デバイス、モデル、生の dumpsys にはアクセスしません。Web と CLI は 2 点サンプルだけでは因果関係やパフォーマンス低下を単独で証明できないことを明示します。

ITER-0040 は MCP 2025-11-25 stdio 開発者プレビューを追加しました。MCP サブプロセスは起動済み Runtime の固定 localhost REST API のみを呼び出すため、Web とタスク、Session、Lease、Policy を共有します。すべての時間のかかる能力は非同期で ThumbAgent task_id を返します。Tool 入力は公開 Contract に由来し、呼び出し前に厳格な検証とレート制限を受け、ドメインエラーは structuredContent で返されます。MCP Tasks、リモートトランスポート、Resources、Prompts は当面実装しません。

ITER-0047 は device.diagnostics.bundle を追加しました。一度確認された非同期タスクが同じ Device Session と Lease 内で Observation、脱敏ログ、集約パフォーマンス、任意のアプリ状態を組み合わせ、固定内容のローカル ZIP を生成します。Manifest は 4 つのソース Artifact の名前、サイズ、SHA-256 を記録します。Runtime は診断パッケージを公開する前にソースの整合性と ZIP ファイルセットを再検証し、失敗時にはすでに完了した安全な Artifact 参照を保持します。

ITER-0048 はローカル Artifact ストレージのサマリーと 2 段階の期限切れクリーンアップを追加しました。Preview はシステム生成ファイルのみをスキャンし、集約された影響 サマリーを返します。Submit は 10 分有効、単回、範囲バインドされた High リスク Approval のみを受け付け、パス、サイズ、 SHA-256、期限を項目ごとに再確認した後に削除します。非同期タスクはデバイス Session や Lease を取得せず、キャンセルと Deadline は Artifact 間の安全な境界で後続の削除を阻止し、完了した削除サマリーを保持します。

実際の Provider がデフォルトの 30 秒予算付近で継続的にレスポンスを完了する場合、ローカル設定で timeout_seconds を 60(許容範囲 1–120)に引き上げるか、MOBILE_AGENT_MODEL_TIMEOUT_SECONDS=60 で 上書きできます。タイムアウト再試行は追加のモデル呼び出しを発生させる可能性があり、タスクレポートは再試行回数を表示します。

製品ドキュメント

エンジニアリング規範

ライセンス

Apache-2.0

Related MCP Connectors

Related MCP Servers