motus
Motusフレームワークを使用してAIエージェントを構築、設定、デプロイできます。ユーザーがエージェントの作成、ツールの定義、ワークフローのセットアップ、メモリまたはガードレールの設定、ローカルまたはクラウドへのエージェントデプロイを望む場合に使用します。motus、CodingAgent、ReActAgent、agent_task、ツール作成、MCP統合、motus deploy、motus serveの言及時にトリガーされます。
description の原文を見る
Build, configure, and deploy AI agents using the Motus framework. Use when user wants to create agents, define tools, set up workflows, configure memory or guardrails, or deploy agents locally or to the cloud. Triggers on mentions of motus, CodingAgent, ReActAgent, agent_task, tool creation, MCP integration, motus deploy, motus serve.
SKILL.md 本文
Motus
Motus AI エージェント フレームワークの専門家です。ユーザーがエージェント アプリケーションを構築してデプロイするのをお手伝いします。
コマンド ルーティング
ユーザーの引数を解析してモードを判定します:
- 最初の引数が
deploy→ Cloud Deploy に進む、残りの引数を渡す - 最初の引数が
serve→ Local Serve に進む、残りの引数を渡す - その他 (引数なし、または構築内容の説明) → Build に進む
エージェントを実行する 3 つの異なる方法があります — あなたとユーザーがどちらを使うか一致していることを確認してください:
| モード | 内容 | 使用場面 |
|---|---|---|
| CLI 対話 | ターミナルで直接エージェントを実行 (uv run python agent.py) | クイック テスト、開発、ワンオフの会話 |
| ローカル serve | ユーザーのマシンで HTTP サーバーを起動 (motus serve start) | ローカル API テスト、マルチセッション利用、統合テスト |
| クラウド デプロイ | LITHOSAI クラウドにデプロイ (motus deploy) | 本番環境、他ユーザーとの共有、永続的なホスティング |
例:
/motus→ Build (対話型)/motus I need a customer support agent→ Build/motus deploy→ Cloud Deploy (自動検出、motus.toml があれば使用)/motus deploy myapp:my_agent→ インポート パスを指定して Cloud Deploy/motus deploy --name my-app myapp:my_agent→ 最初のクラウド デプロイ (新規プロジェクト作成)/motus deploy --project-id abc123 myapp:my_agent→ 既存プロジェクトへの Cloud Deploy (ID 指定)/motus serve→ Local Serve (自動検出)/motus serve myapp:my_agent→ インポート パスを指定して Local Serve
Build
ユーザーの要件を理解し、Motus を使用して完全に機能するエージェント アプリケーションを構築するのをお手伝いするのがあなたの仕事です。
コードを書く前に
ユーザーがすでに述べたこと、およびプロジェクト コンテキスト (既存コード、依存関係、環境変数) からできるだけ多くを推測します。コンテキストから回答できる質問はしないでください。 コード記述を開始し、ユーザーに軌道修正させます。
フレームワークの選択 — コンテキストに基づいて選択し、質問しません:
- ユーザーが特定の SDK (Anthropic、OpenAI Agents、Google ADK) を言及している場合は、その SDK のラッパーを使用します。
- それ以外の場合は、デフォルトで
motus.agent.CodingAgentを使用します — これはほとんどのケースで機能する汎用的で完全なエージェント ハーネスです。ユーザーが特定のハーネス (別のツール セット、カスタム ワークフロー、またはデフォルトからの他の偏差) を求める場合のみ、ベアmotus.agent.ReActAgentにフォールバックします。
| ユーザーが言及 | フレームワーク |
|---|---|
| "Anthropic SDK" | motus.anthropic.ToolRunner |
| "OpenAI SDK" / "OpenAI Agents" | motus.openai_agents.Agent |
| "Google ADK" / "Gemini" | motus.google_adk.agents.llm_agent.Agent |
| 優先なし / "Motus" | motus.agent.CodingAgent (デフォルト) |
| 優先なし / "Motus" — 特定のハーネスが必要 | motus.agent.ReActAgent ("anthropic/claude-sonnet-4.5" や "gpt-4o" などのモデルで OpenAIChatClient を使用) |
重要: ReActAgent はモデル クライアント (OpenAIChatClient など) をバックエンドとして使用する汎用エージェント ループです。プロバイダのネイティブ SDK を使用することとは 異なります。ユーザーが特定プロバイダの SDK を要求する場合は、上記のそのプロバイダ専用ラッパーを使用します — プロバイダのクライアントを使用した ReActAgent ではなく。
エージェントが デプロイ 準備完了時: ユーザーの元の要求にデプロイが含まれている場合は、Cloud Deploy に直接進みます — ユーザーに /motus deploy を別途実行するよう求めません。"デプロイ" は常にクラウド デプロイを意味します。ユーザーがデプロイを指定せずにエージェントを "テスト" または "試す" ことを求める場合は、代わりに CLI 対話またはローカル serve を提案します。
常に uv を優先 してください (パッケージ管理用に uv add、uv sync)。ユーザー スクリプト実行には uv run を使用 (例: uv run python agent.py)、ただし motus CLI には使用しません — これはグローバルに uv tool install 経由でインストールされ、motus として直接利用可能です。
Python バージョン — 新規プロジェクト作成時、Python 3.12 を固定してください (例: uv init --python 3.12 または pyproject.toml 内で requires-python = ">=3.12")。クラウド ランタイムは Python 3.13 までサポートします。Python 3.14 は使用しないでください (uv はデフォルトでこれを選択する可能性があります)。
環境チェック
エージェント コードを書く前に、ユーザーの環境が準備完了していることを確認します。これらのチェックを静かに実行し、問題のみ報告します:
- Motus がインストール済み —
lithosai-motusがプロジェクト依存関係としてインストールされていることを確認します。インストールされていない場合:uv add lithosai-motus - API キー — LLM プロバイダ キー (
OPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_API_KEYなど) は ローカル テストにのみ必要、クラウド デプロイには不要です。キーが設定されていない場合、ブロックしないでください — それを記録して続行します。ユーザーはまだエージェント コードを構築してクラウドにデプロイできます。クラウドではプラットフォームのモデル プロキシがすべての LLM クレデンシャルを自動的に提供します。ユーザーがエージェントをローカルで実行したいと明示的に望む場合のみ、API キーについて尋ねます。 - オプション: Docker — ローカル サンドボックスまたは MCP-in-container 実行にのみ必要です。
docker infoは成功する必要があります。クラウド デプロイには不要です。
すべて問題ない場合は、チェックについて言及せずに進めます。
クイック リファレンス
詳細な API リファレンスとパターンについては、以下のファイルを参照してください:
REFERENCE.md— 完全な API シグネチャ、コンストラクタ、すべてのパラメータPATTERNS.md— 一般的なシナリオの実証済みコード パターンEXAMPLES.md— エンドツーエンドの例アプリケーション
コア コンセプト (簡潔版)
| コンセプト | 内容 | キー インポート |
|---|---|---|
CodingAgent | ほとんどのユースケース用デフォルト エージェント。 bash、ファイル (読み取り/書き込み/編集)、検索 (glob/grep)、todo、web_fetch、web_search、plan-mode、サブエージェント ディスパッチ ツール付きで事前設定された完全な ReActAgent ハーネス。プロジェクト ルートから AGENTS.md / CLAUDE.md を自動注入。 | from motus.agent import CodingAgent |
ReActAgent | 推論 + ツール使用ループ付きの汎用自律エージェント。デフォルトの CodingAgent ハーネスが適合せず、ツール セット全体を完全にコントロールする必要がある場合に使用。 | from motus.agent import ReActAgent |
ToolRunner | Anthropic SDK ラッパー、ツール実行付き (デプロイ用 run_turn あり) | from motus.anthropic import ToolRunner |
Google ADK Agent | Google ADK ラッパー (デプロイ用 run_turn あり) | from motus.google_adk.agents.llm_agent import Agent |
OpenAI Agents Agent | OpenAI Agents SDK ラッパー (デプロイ向けに自動適応) | from motus.openai_agents import Agent |
@agent_task | 関数を依存関係追跡の非同期タスクに変換するデコレータ | from motus.runtime import agent_task |
@tool | 汎用ツール デコレータ (ReActAgent + Anthropic ToolRunner で機能) | from motus.tools import tool |
MCPSession | 外部 MCP ツール サーバーへの接続 | from motus.tools import get_mcp |
Sandbox | コード実行用の隔離環境 (ローカル Docker またはクラウド管理) | from motus.tools import get_sandbox |
| ガードレール | エージェントとツール上の入出力バリデータ | from motus.guardrails import * |
| メモリ | 会話履歴管理 (基本的または圧縮) | from motus.memory import * |
| フック | タスク ライフサイクル コールバック (開始/終了/エラー) | from motus.runtime.hooks import register_hook |
デプロイ可能なエージェント タイプ
すべての一般的なエージェント設定はクラウドにデプロイされます。これを使用して、構築するものをガイドしてください:
| エージェント タイプ | CLI | ローカル serve | クラウド デプロイ | メモ |
|---|---|---|---|---|
| 会話型 (カスタマー サポート、Q&A、アシスタント) | はい | はい | はい | 最も一般的。API 呼び出し、検索などにツールを使用。 |
| 調査 / パイプライン (ウェブ検索、マルチステップ推論) | はい | はい | はい | @tool 関数と @agent_task ワークフローを使用。 |
| マルチエージェント (オーケストレータ + スペシャリスト) | はい | はい | はい | デリゲーション用に agent.as_tool() を使用。 |
| MCP 接続 (外部ツール サーバー) | はい | はい | はい | get_mcp() を使用 — MCP サーバーはクラウドからネットワーク アクセス可能である必要があります。 |
| コーディング / サンドボックス (コード実行) | はい | はい | はい | get_sandbox() は両方で機能 — ローカルは Docker、クラウドはプラットフォーム管理。 |
ユーザーがエージェント構築を依頼したら、説明からタイプを推測します — このリストから選択するよう求めません。
ワークフロー: エージェント アプリケーション構築
ステップ 1: フレームワークを選択してツールを定義
上記の "コードを書く前に" のガイダンスに基づいて、ユーザーの優先 SDK に基づいてフレームワークを選択します。各フレームワークには独自のツール形式があります:
Motus ReActAgent — @tool デコレータを使用:
from motus.tools import tool
@tool
async def my_tool(param: str) -> str:
"""LLM が見る説明。"""
return result
Anthropic ToolRunner — Anthropic SDK の BetaAsyncFunctionTool を使用:
from anthropic.lib.tools import BetaAsyncFunctionTool
async def my_tool(param: str) -> str:
"""LLM が見る説明。
Args:
param: パラメータの説明。
"""
return result
tools = [BetaAsyncFunctionTool(my_tool)]
OpenAI Agents — @function_tool デコレータを使用:
from motus.openai_agents import function_tool
@function_tool
def my_tool(param: str) -> str:
"""LLM が見る説明。"""
return result
Google ADK — プレーン関数を使用:
def my_tool(param: str) -> str:
"""LLM が見る説明。"""
return result
複雑な入力については、PATTERNS.md を参照してください。外部ツール サーバーについては get_mcp() を使用。コード実行については get_sandbox() を使用 — ローカルとクラウドの両方で機能します。
ステップ 2: エージェントを作成
Motus CodingAgent (デフォルト — ほとんどのケース向け完全なエージェント ハーネス):
from motus.agent import CodingAgent
from motus.models import AnthropicChatClient
agent = CodingAgent(
client=AnthropicChatClient(), # クラウド プロキシが API キーを自動提供
model_name="claude-sonnet-4-6",
)
それだけです — CodingAgent には bash、ファイル (読み取り/書き込み/編集)、検索 (glob/grep)、todo、web_fetch、web_search、plan-mode、task サブエージェント ディスパッチ ツールが付属しており、プロジェクト ルートから AGENTS.md を自動注入します。プロジェクト固有のルール用に agent.py の隣に AGENTS.md を追加します。extra_tools=[...] を渡してドメイン ツールを追加するか、完全なカスタマイズ オプションについては coding-agent ガイド を参照してください。
Motus ReActAgent (汎用ループ — CodingAgent のハーネスが適合しない場合で、特定のツール セットが必要な場合に使用):
from motus.agent import ReActAgent
from motus.models import OpenAIChatClient
client = OpenAIChatClient() # クラウド プロキシが API キーを自動提供
agent = ReActAgent(client=client, model_name="gpt-4o", system_prompt="You are ...", tools=[my_tool], max_steps=10)
Anthropic ToolRunner (ネイティブ Anthropic SDK ツール使用):
from motus.anthropic import ToolRunner
agent = ToolRunner(model="claude-sonnet-4-20250514", max_tokens=1024, tools=tools, system="You are ...")
OpenAI Agents (OpenAI Agents SDK):
from motus.openai_agents import Agent
agent = Agent(name="my_agent", model="gpt-4.1", instructions="You are ...", tools=[my_tool])
Google ADK (Google ADK):
from motus.google_adk.agents.llm_agent import Agent
agent = Agent(model="gemini-2.0-flash", name="my_agent", description="...", instruction="You are ...", tools=[my_tool])
ステップ 3: 実行
上記のエージェント インスタンスはすべて 3 つの実行モードをサポートします。詳細は Serve Contract & Framework Support を参照してください。
CLI 対話 (テストの最も簡単な方法):
uv run python agent.py
対話的な CLI 使用のため、エージェント ファイルに __main__ ブロックを追加します (以下のパターンを参照)。
ローカル serve (HTTP サーバー):
motus serve start agent:my_agent --port 8000
クラウド デプロイ (本番環境):
motus deploy --name my-app agent:my_agent # 最初のデプロイ (プロジェクト作成)
motus deploy # その後のデプロイ (motus.toml を読む)
重要なルール
ReActAgentの場合:clientを最初の引数として渡してください — モデル名文字列ではなく。- 非同期コンテキストでエージェント呼び出しに
awaitを使用してください —response = await agent("prompt")。 - ガードレール関数は検査するパラメータのみを宣言してください — ツール シグネチャ全体と一致する必要はありません。
- MCP セッションはデフォルトで遅延実行されます — エージェントに渡された場合、最初のツール呼び出し時に接続します。
Local Serve
エージェント用のローカル HTTP サーバーを起動します。これは API テスト、マルチセッション使用、およびクラウド デプロイ前の統合テストに便利です。
使用方法:
/motus serve— ファイルからエージェントを自動検出/motus serve myapp:my_agent— インポート パスを指定して serve
S0. 検出と確認
引数が提供されていない場合:
現在のディレクトリの .py ファイルをスキャンして、可能性のあるエージェント エントリ ポイントを探します。以下を確認:
- エージェント インスタンス (ReActAgent、ToolRunner、ADK Agent、OpenAI Agent)
- serve コントラクトに一致する関数:
def xxx(message, state)またはasync def xxx(message, state)(Agent Function Contract を参照) agent.py、app.py、server.py、main.pyという名前のファイル
候補が見つかった場合は、AskUserQuestion ツールを呼び出す 必要があります 。ユーザーはクリック可能なオプションを取得します:
{"question": "I found these agent entry points. Which one to serve?", "options": ["agent:my_agent", "app:serve", "Let me specify manually"]}
S1. バリデート
- インポート パスに
:が含まれていることを確認 (形式:module:callable) - 参照されるモジュール ファイルが現在のディレクトリに存在することを確認
- エージェント関数シグネチャをバリデート — Agent Function Contract を参照。関数が準拠していない場合は、続行する前にユーザーが修正するのをお手伝いします。
S2. サーバー起動
motus serve start $IMPORT_PATH --port 8000
ユーザーに提供するオプション フラグ:
--port <N>— バインド ポート (デフォルト 8000)--workers <N>— ワーカー プロセス (デフォルト CPU 数)--ttl <seconds>— アイドル セッション TTL--timeout <seconds>— エージェント ターン当たりの最大秒数--log-level debug— 詳細ログ
S3. テスト
サーバーが実行中になったら、別のターミナルでテストするよう提案:
motus serve chat http://localhost:8000 "hello" # シングル メッセージ
motus serve chat http://localhost:8000 # 対話型 REPL
motus serve health http://localhost:8000 # ヘルス チェック
serve 後の対話詳細については、POST-DEPLOY.md を参照してください。
Cloud Deploy
エージェントを LITHOSAI クラウドにデプロイして本番環境でホストします。"デプロイ" は常にクラウド デプロイを意味します — ローカル使用については、Local Serve を参照するか、CLI 対話を使用してください。
使用方法:
/motus deploy— ファイルからエージェントを自動検出してクラウドにデプロイ/motus deploy myapp:my_agent— 特定のインポート パスをクラウドにデプロイ/motus deploy --project-id my-project myapp:my_agent— 特定のクラウド プロジェクトにデプロイ
デプロイ トラブルシューティングについては、DEPLOY-REFERENCE.md を参照してください。デプロイ後の対話については、POST-DEPLOY.md を参照してください。
C0. 検出と確認
引数が提供されていない場合:
現在のディレクトリの .py ファイルをスキャンして、可能性のあるエージェント エントリ ポイントを探します。以下を確認:
- エージェント インスタンス (ReActAgent、ToolRunner、ADK Agent、OpenAI Agent)
- serve コントラクトに一致する関数:
def xxx(message, state)またはasync def xxx(message, state)(Agent Function Contract を参照) agent.py、app.py、server.py、main.pyという名前のファイル
候補が見つかった場合は、AskUserQuestion ツールを呼び出す 必要があります 。ユーザーはクリック可能なオプションを取得します:
{"question": "I found these agent entry points. Which one to deploy?", "options": ["agent:my_agent", "app:serve", "Let me specify manually"]}
候補が見つからない場合は、AskUserQuestion ツールを呼び出してオプションなしで質問し、インポート パスを尋ねる 必要があります。
C1. バリデート
--name、--project-id、またはmotus.toml内のproject_idが利用可能であることを確認- インポート パスが提供されている (引数または
motus.tomlで) こと、および:が含まれていることを確認 (形式:module:callable) - 参照されるモジュール ファイルが現在のディレクトリに存在することを確認
- エージェント関数シグネチャをバリデート — Agent Function Contract を参照。関数が準拠していない場合は、続行する前にユーザーが修正するのをお手伝いします。
motus whoamiを実行してユーザーが認証されていることを確認します。出力がユーザーがログインしていないことを示す場合は、motus loginを直接実行します (ユーザーに実行するよう求めないでください)。ブラウザ認証が必要な場合、コマンドは URL を出力してユーザーが開くのを待ち、クレデンシャルが保存されたら戻ります。motus login完了後、デプロイを続行します — 追加の環境変数セットアップは不要です。
C1.5. クラウド モデル プロキシ — コード変更は不要
Motus クラウド プラットフォームは、すべてのサポート対象 SDK のために API 呼び出しを自動的にルーティングする 透過的なモデル プロキシ を提供します。エージェントがデプロイされると、プラットフォームは必要な環境変数 (OPENAI_API_KEY、OPENAI_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL、GOOGLE_API_KEY、GOOGLE_GEMINI_BASE_URL) を自動的に配線するため、SDK クライアントはコード変更なしで機能します。
これは以下を意味します:
- API キーまたはベース URL をハードコーディングする必要がない
- デプロイ中に
--secretフラグを渡す必要がない - ローカルで環境変数で機能するコードはクラウドで同じに機能
- 3 つの SDK (OpenAI、Anthropic、Google) すべてが透過的にサポートされている
サポート対象プロキシ エンドポイント:
/v1/chat/completions— OpenAI Chat Completions API (OpenRouter 経由)/v1/responses— OpenAI Responses API (OpenAI へ直接)/v1/messages— Anthropic Messages API (OpenRouter 経由)/v1beta/— Google GenAI API (Google へ直接)
必要なチェック: エージェント コードが、自動配線される値と競合する API キーまたはベース URL をハードコーディングしていないことを確認します。標準的な SDK パターン (OpenAIChatClient()、AsyncAnthropic()、Gemini 経由の google.genai) はすべて環境変数を自動的に取得します。
トレース: クラウド デプロイはトレースを Motus ダッシュボードに自動的にアップロードします。ログインしている場合でも、ローカル実行は決してアップロードしません。
C1.6. クラウド デプロイ前のローカル スモーク テスト (オプション)
LLM プロバイダ API キーがローカルで利用可能な場合、アップロード前に motus serve start でエージェントを実行してエラーを早期に検出できます。LLM プロバイダ キーが設定されていない場合、このステップをスキップしてください — クラウド プラットフォームが自動的に提供するため、ローカル キーが不足していることはデプロイメントをブロックする理由ではありません。
motus serve start $IMPORT_PATH --port 8000
別のターミナルで:
motus serve chat http://localhost:8000 "hello"
エージェントが正常に応答した場合、クラウド デプロイに進みます。インポート エラーまたはシグネチャ不一致でエラーが発生した場合は、最初にローカルで修正します。LLM クライアント接続エラーのみが発生した場合 (不足している API キー環境変数)、問題ありません — クラウド デプロイに進みます。
このステージでの一般的なエラー:
- インポート エラー (依存関係なし、タイプミス) — デプロイ前に修正
- ハンドラ シグネチャ不一致 — デプロイ前に修正
- LLM クライアント接続エラー (API キー環境変数なし) — OK、クラウドがこれらを提供
C1.7. プロジェクト依存関係をチェック (サード パーティ パッケージ)
クラウド ビルドはベース motus パッケージ (extras なし) をインストールし、requirements.txt、pyproject.toml、uv.lock、または pylock.toml からプロジェクト依存関係をインストールします。これらのいずれも存在しない場合は、ベース motus のみが利用可能です。
motus SDK インテグレーションは、別のパッケージをプルする オプション extras です:
| 見つかったインポート | 基盤となるパッケージが必要 | requirements.txt に追加 |
|---|---|---|
from motus.openai_agents import ... または from agents import ... | openai-agents (motus[openai-agents] extra) | openai-agents |
その他のサード パーティ インポート (例: requests、pandas) | そのパッケージ | パッケージ名 |
注: requirements.txt に
motus[openai-agents]を記述しないでください — motus はクラウド ビルドで既にインストール済みです。基盤となるパッケージのみが必要です (例:openai-agents)。
プロジェクトで .py ファイルをスキャンしてこれらのインポートを探します。次に、依存関係ファイルが存在するかをチェック:
-
requirements.txtが存在 — 必要なパッケージがリストされていることを確認します。見つからない場合は、警告してを追加するよう提案します。 -
pyproject.tomlが存在 —[project.dependencies]をチェック。見つからない場合は、警告して追加するよう提案します。 -
依存関係ファイルが存在しない — ユーザーに警告して
AskUserQuestionを使用:{"question": "No requirements.txt found. Create one with the needed dependencies?", "options": ["Yes, create it for me", "No, I'll handle it myself"]}「はい」の場合、検出されたパッケージで
requirements.txtを作成します。デプロイ後にオプションでクリーンアップできるようにファイル作成を記録します。
C2. SDK インポートの書き換え (必要な場合)
.py ファイルで、motus ラッパーを使用する直接 SDK インポートをスキャン (クラウド ビルドで motus をインストールするため、ラッパーは利用可能)。Motus ラッパーはドロップイン — すべてのシンボルを * インポート経由で再エクスポート。
| 直接インポート | 置き換え |
|---|---|
from agents import ... | from motus.openai_agents import ... |
import agents | import motus.openai_agents as agents |
見つかった場合: ファイル/行を一覧表示し、変更がデプロイ用に一時的なものであることを説明し、ユーザーの確認を待ち、置き換えを行い、元のものを記録してリバート。
C3. デプロイ
最初のデプロイ (まだ motus.toml がない):
motus deploy --name $PROJECT_NAME $IMPORT_PATH
その後のデプロイ (motus.toml が前回のデプロイから project_id を持つ):
motus deploy
プロジェクト ID で特定プロジェクトをターゲット:
motus deploy --project-id $PROJECT_ID $IMPORT_PATH
重要: 最初のデプロイ後、
motus.tomlがproject_idとimport_pathで作成されます。常にフラグを選択する前にmotus.tomlをチェック — 存在してproject_idを持つ場合は、フラグなしでmotus deployを実行してください。すべてのデプロイで--nameを渡さないでください。毎回新規プロジェクトが作成されます。
プラットフォームのモデル プロキシがすべてのサポート対象 LLM プロバイダに API キーを自動的に提供するため、--secret フラグは必要ありません。--secret KEY=VALUE は、エージェントが必要とする非 LLM シークレットのみに追加 (例: データベース クレデンシャル、外部 API トークン)。
C4. インポートをリバート
C2 でインポートが書き換えられた場合、ユーザーにリバートするかどうかを尋ねます。リバートしない場合、motus インポートは問題ありません (同じ動作 + トレース)。
C5. レポート
- 出力からビルド ID を抽出
- レポート: プロジェクト ID、ビルド ID、インポート パス
- 予想されるエージェント URL:
https://{project-id}.agent.lithosai.cloud - 提案:
motus serve health https://{project-id}.agent.lithosai.cloud
デプロイが失敗した場合、トラブルシューティングについては DEPLOY-REFERENCE.md を参照してください。デプロイ後の対話、テスト、デバッグについては、POST-DEPLOY.md を参照してください。
クラウド エージェント REST API
デプロイされたエージェントはエージェント ルータを通じて同じ serve REST API を公開:
POST /sessions — セッション作成
GET /sessions — セッション一覧
GET /sessions/{id} — セッション取得 (?wait=true でロングポーリング)
DELETE /sessions/{id} — セッション削除
POST /sessions/{id}/messages — メッセージ送信 (202 を返す、非同期)
GET /sessions/{id}/messages — メッセージ履歴取得
認証: Authorization: Bearer <api-key> (motus login クレデンシャルまたは LITHOSAI_API_KEY 環境変数より)
SDK インポート マッピング
motus ラッパー (motus.openai_agents) は透過的なドロップイン置き換え:
- 元の SDK から
from <sdk> import *経由ですべてのシンボルを再エクスポート - キー エントリ ポイント (
Runner) をラップしてトレース注入 - トレースは LITHOSAI コンソールで表示するため、自動的にクラウドにアップロード
- 動作変更なし — 同じ API サーフェス、オブザーバビリティ追加のみ
Serve Contract & Framework Support
motus serve start <module>:<name> は 3 種類のターゲット を受け入れます (この順序でチェック):
ServableAgentインスタンス —run_turn(message, state)メソッドを持つすべてのオブジェクト。serve ランタイムがrun_turnを直接呼び出します。ラッパー関数は不要。- OpenAI Agents SDK
Agentインスタンス — 自動検出されてランタイムでラップ。ラッパー関数は不要。 - ベア呼び出し可能 —
(ChatMessage, list[ChatMessage]) -> tuple[ChatMessage, list[ChatMessage]]に一致する関数。
組み込みフレームワーク サポート (推奨)
複数の Motus フレームワーク インテグレーションが ServableAgent プロトコルを実装。これらを使用する場合、エージェント インスタンスにインポート パスを直接指定 — 手動ラッパー関数を書かないでください。
| フレームワーク | クラス | run_turn あり? | デプロイ ターゲット |
|---|---|---|---|
| Motus ReActAgent | motus.agent.ReActAgent | はい (AgentBase から継承) | module:my_react_agent |
| Google ADK | motus.google_adk.agents.llm_agent.Agent | はい | module:my_adk_agent |
| Anthropic SDK | motus.anthropic.ToolRunner | はい | module:my_tool_runner |
| OpenAI Agents SDK | motus.openai_agents.Agent | いいえ — ただし serve ランタイムで自動適応 | module:my_oai_agent |
例 — ReActAgent (ラッパー不要):
# agent.py — デプロイ: motus deploy --name myapp agent:my_agent
from motus.agent import ReActAgent
from motus.models import OpenAIChatClient
from motus.tools import tool
@tool
async def search(query: str) -> str:
"""ウェブを検索。"""
return f"{query} の結果"
client = OpenAIChatClient() # クラウド プロキシが API キーを自動提供
my_agent = ReActAgent(
client=client,
model_name="anthropic/claude-sonnet-4.5",
system_prompt="You are a research assistant.",
tools=[search],
max_steps=10,
)
# デプロイ ターゲット: agent:my_agent — run_turn は AgentBase から継承
例 — Google ADK (ラッパー不要):
# agent.py — デプロイ: motus deploy --name myapp agent:my_agent
from motus.google_adk.agents.llm_agent import Agent
def get_time(city: str) -> dict:
"""都市の現在時刻を返す。"""
return {"city": city, "time": "10:30 AM"}
my_agent = Agent(
model="gemini-2.0-flash",
name="time_agent",
description="都市の時刻を返す。",
instruction="時刻について聞かれたら get_time を呼び出す。",
tools=[get_time],
)
# デプロイ ターゲット: agent:my_agent — run_turn は Agent クラスに組み込み
例 — Anthropic ToolRunner (ラッパー不要):
# agent.py — デプロイ: motus deploy --name myapp agent:my_runner
from motus.anthropic import ToolRunner
from motus.tools import tool
@tool
async def lookup(query: str) -> str:
"""情報を検索。"""
return f"{query} に関する情報"
my_runner = ToolRunner(
model="claude-sonnet-4-20250514",
tools=[lookup],
system_prompt="You are a helpful assistant.",
)
# デプロイ ターゲット: agent:my_runner — run_turn は ToolRunner に組み込み
例 — OpenAI Agents SDK (ラッパー不要):
# agent.py — デプロイ: motus deploy --name myapp agent:my_agent
from motus.openai_agents import Agent, function_tool
@function_tool
def get_status() -> str:
"""システム ステータスを返す。"""
return "All systems operational"
my_agent = Agent(
name="assistant",
model="gpt-4.1",
instructions="You are a concise assistant.",
tools=[get_status],
)
# デプロイ ターゲット: agent:my_agent — serve ランタイムが OAI Agent インスタンスを自動ラップ
手動ラッパー (フォールバック)
手動ラッパー関数は以下の場合のみ記述:
- Motus が自動サポートしないフレームワークを使用 (例: LangGraph、CrewAI)
- カスタム状態管理または前処理/後処理ロジックが必要
関数は この署名に準拠する必要があります:
from motus.models import ChatMessage
async def my_agent(
message: ChatMessage,
state: list[ChatMessage],
) -> tuple[ChatMessage, list[ChatMessage]]:
# あなたのロジック
response = ChatMessage(role="assistant", content="...")
return response, state + [message, response]
def (非非同期) も受け入れられます。
バリデーション チェックリスト (手動ラッパー用)
| # | チェック | エラー例 |
|---|---|---|
| 1 | モジュール レベル関数 — メソッド、ネストされた関数、またはクラスではない | class Agent: def run(self, ...) |
| 2 | 正確に 2 つのパラメータ — (message, state) | def agent(query): |
| 3 | message は単一の ChatMessage — str、dict、または list ではない | def agent(message: str, state) |
| 4 | state は list[ChatMessage] — 会話履歴 | def agent(message, state: dict) |
| 5 | tuple[ChatMessage, list[ChatMessage]] を返す — (応答、更新状態) | return response (状態がない) |
| 6 | 応答が role="assistant" を持つ | ChatMessage(role="user", ...) |
| 7 | 更新状態に着信メッセージと応答が含まれる | return response, state (追加を忘れた) |
一般的な手動ラッパー パターン
パターン A: 文字列を取り、文字列を返す関数
def my_agent(query: str) -> str:
return call_llm(query)
# ラッパー
from motus.models import ChatMessage
def my_agent_motus(message: ChatMessage, state: list[ChatMessage]) -> tuple[ChatMessage, list[ChatMessage]]:
result = my_agent(message.content)
response = ChatMessage(role="assistant", content=result)
return response, state + [message, response]
パターン B: クラスベース エージェント (例: LangGraph、CrewAI)
from motus.models import ChatMessage
_agent = MyAgent() # モジュール レベルで 1 回インスタンス化
def my_agent(message: ChatMessage, state: list[ChatMessage]) -> tuple[ChatMessage, list[ChatMessage]]:
result = _agent.run(message.content)
response = ChatMessage(role="assistant", content=result)
return response, state + [message, response]
準拠していないコードを修正する方法
準拠していない関数を検出した場合:
- どのチェックが失敗したかを説明
- ユーザーのコードをコントラクトに適応させるラッパー関数を表示 (上記のパターンを使用)
AskUserQuestionを使用して 2 つのオプションを提供:
{
"question": "Your function `agent:run` takes (query: str) instead of (message: ChatMessage, state: list[ChatMessage]). I can add a wrapper. Where should I put it?",
"options": [
"Add wrapper in the same file and update import path",
"Create a new motus_entry.py with the wrapper",
"I'll fix it myself"
]
}
- ユーザーが同意した場合、ラッパーを書き、インポート パスを更新 (例:
agent:run→agent:run_motusまたはmotus_entry:my_agent)
何かうまくいかない場合
ユーザーがバグに遭遇した場合、Motus が現在サポートしていない機能を必要とする場合、またはユースケースをブロックするあらゆる制限に遭遇した場合、ユーザーの代わりに GitHub issue をファイルするよう提案してください。明確なタイトル、再現手順、期待される動作を持つ issue をドラフト。ユーザーに表示して承認をリクエスト。承認待ちで提出。issue 本文に以下のテンプレートを使用:
gh issue create --repo lithos-ai/motus \
--title "Bug: <簡潔な説明>" \
--body "$(cat <<'EOF'
## 説明
<何が起こったか>
## 再現ステップ
<最小限のコードまたはコマンド>
## 期待される動作
<何が起こるべきか>
## 環境
- Python: <バージョン>
- Motus: <バージョン>
- OS: <OS>
- コンテキスト: build / local deploy / cloud deploy
EOF
)"
ユーザーに自分でファイルするよう求めないでください。issue を記述し、承認用に表示、提出。
更新
スキル更新
作業を開始する前に、このスキルが最新であるかを確認します。このスキルのバージョンは上記の YAML frontmatter の version フィールドにあります。最新 GitHub リリースと比較:
curl -s https://api.github.com/repos/lithos-ai/motus/releases/latest | grep '"tag_name"'
リリース タグがこのスキルのバージョンより新しい場合、そのリリースからインストーラーをフェッチして実行:
tag=$(curl -s https://api.github.com/repos/lithos-ai/motus/releases/latest | grep '"tag_name"' | sed 's/.*: *"//;s/".*//')
curl -fsSL "https://raw.githubusercontent.com/lithos-ai/motus/$tag/install.sh" | sh
これは CLI とスキル ファイルの両方を更新します。更新完了後に続行。
CLI 更新
motus コマンドが motus update available: ... Run: uv tool upgrade lithosai-motus に一致するメッセージを出力する場合、続行する前にアップグレード コマンドを実行:
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- lithos-ai
- リポジトリ
- lithos-ai/motus
- ライセンス
- Apache-2.0
- 最終更新
- 2026/5/11
Source: https://github.com/lithos-ai/motus / ライセンス: Apache-2.0
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。