commerce-merchant-operations について
`MerchantBackend` を通じてバックオフィスの担当者と協働する、マーチャント運用向けエージェントスキルです。業績、商品リスト、在庫、価格、プロモーション、キャンペーンを扱い、変更のステージングとガードレール、設定可能なホスト承認を経て書き込みます。
主な機能
- 015 種類のマーチャント運用ワークフロー
- 02変更のステージング、プレビュー、適用、破棄
- 03価格、プロモーション、キャンペーンのガードレール
- 04ホストによる変更承認
- 05フェンスで保護されたツール結果と指標カード
- 06任意で利用できる読み取り専用分析デリゲート
活用シーン
- 01業績を確認して指標を提示
- 02商品リスト、在庫、価格の更新を準備
- 03承認に向けてプロモーションやキャンペーンをステージング
- 04分析用の制限付き読み取り専用クエリを実行
MCP 対応
ホスト型エージェントは MCP サーバーを通じてマーチャント運用ツールを公開します。プラットフォームへの変更を適用する前に、書き込みはステージングされ、ガードレールと承認設定の対象となります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ anthropics/ commerce-agents --skill commerce-merchant-operationsインストール後、Claude Code で/commerce-merchant-operationsを入力して読み込まれたか確認します。
詳細
Merchant agent
参照リポジトリ内のパス:merchant_agent/ は merchant-agent/core/merchant_agent/、merchant_agent_runtime/
は merchant-agent/runtime-messages-api/merchant_agent_runtime/、merchant_agent_sdk/ は
merchant-agent/runtime-agent-sdk/merchant_agent_sdk/、commerce_common/ は commerce-common/commerce_common/ です。
機能
merchant agent は、1 つの MerchantBackend(merchant_agent/backend.py)を介して、バックオフィスでオペレーターと連携します。
5 つのフローは、merchant-agent/skills/ にあるスキル、performance-insights、catalog-listings、inventory-operations、
pricing-promotions、marketing-campaigns です。commerce_common/ の仕組みは共有されていますが、プロンプト、ツール、ゲート、
エグゼキューターは独自のもので、すべてのツール結果は MERCHANT_FENCE(merchant_agent/fencing.py)内に返されます。
ステージ済み変更の契約
- すべての書き込みは
stage_*ツール(stage_listing_update、stage_price_update、stage_inventory_action、stage_promotion、stage_campaign)を使用します。各ツールはステージ済みレコードと注記を返し、change_updateイベントを発行します。また、stage_shows_previewが有効な場合(デフォルトでは有効。merchant_agent/config.py)、ランナーが使用するpresent_change_previewを通じてchange_previewカードを発行します(MerchantToolExecutor、merchant_agent/executor.py)。 MCP サーバーでは、エグゼキューターのイベントがオペレーターに届かないため、この機能を無効にします。そのため、ホスト型エージェントはpresent_change_previewを呼び出します。このツールは以前の変更も再表示します。apply_changeがプラットフォームに書き込むまで、 ライブ状態は変更されません。 - ステージングで受け付けるのは、このセッション中にツールが返したリスティング ID とキャンペーン ID のみです。コンテンツを編集する場合は、
get_listingによる読み取りも必要です。apply_changeとdiscard_changeが受け付けるのは、ステージングまたはget_pending_changesが返した変更 ID のみです(merchant_agent/gates.py)。プレビューカードを表示しても、承認済みにはなりません。 merchant_agent/changes.pyのcheck_guardrailsは、変更のステージング時(ChangeLedger.stageまたはバックエンドの同等処理)と、check_apply_change(merchant_agent/gates.py)内での再確認時に実行されます。再確認には、適用時点で有効な設定が使われます。 上限はmerchant_agent/config.pyのmax_items_per_change、max_price_delta_pct、max_promotion_discount_pct、max_restock_quantity、max_campaign_budget、max_listing_field_charsです。デフォルト値はデモ用です。protected_fieldsはステージングできません。price_bearing_fieldsは価格上限の判定対象となるフィールドです。listing_update_blocked_fieldsは、自由形式のリスティング更新に含めることができません。別の名称で価格を設定するドメイン (1 泊料金、月額料金、ティア価格など)では、これらのタプルを置き換えずに項目を追加します。require_host_approvalのデフォルトはTrueです。apply_changeが成功するのは、MerchantSessionState.approved_change_idsに含まれる ID のみです。この値を書き込めるのはホストコードだけです。リポジトリ内の 3 つの承認方法は、ポータルの/changes/{change_id}/applyルート (examples/demo_common/merchant.py)、MerchantToolset.host_approve(merchant_agent_sdk/merchant_tools.py。merchant-agent/runtime-agent-sdk/main.pyが 変更ごとにプロンプトで確認)、およびホスト型マニフェストのapply_changeに対するalways_askです。最後の方法では、MCP サーバーの設定でrequire_host_approval=Falseが設定されています(default_configがそうなっています)。渡す設定でも同様に設定しないと、すべての適用が保留されます。 チャットに承認を入力しても、何も設定されません。require_host_approvalとapproval_surfaceは静的プロンプトと拒否メッセージに反映されるため、デプロイごとに設定します。どちらかを変更した場合は再デプロイが必要です(commerce-prompt-caching)。approval_surfaceには実際の承認方法を指定してください。- システムがサポートしていない変更種別では、
ChangeNotApplicable(merchant_agent/changes.py)が発生し、エグゼキューターがそれを中継します。ツールの登録は解除されません。適用済みおよび破棄済みの変更も監査証跡として引き続き参照でき、それぞれにMerchantSessionContext.operatorのオペレーターが記録されます。本番環境のホストでは、認証情報をもとにこの値を設定します。
グラウンディングと後続処理
- パフォーマンスに関する質問では
get_business_snapshotが必須となり、変更リクエストに適用を示すフレーズが含まれていて、今のセッションで変更が何もステージングされていない場合はget_pending_changesが必須となります(merchant_agent/grounding.pyのGROUNDING_RULES、merchant_agent/config.pyの語彙とフラグ。これらは追加のみで、置き換えられることはありません)。 change_requestedに一致したターンが、stage_*の試行もpresent_suggestionsによる終了処理もなく、通常のテキストだけで終わった場合は、ユーザーメッセージとしてSTAGING_FOLLOWTHROUGH_REMINDERが一度送られます(merchant_agent/gates.py。merchant_agent_runtime/orchestrator.pyとmerchant_agent_sdk/agent.pyで適用)。このリマインダーのテキストはメモリ抽出から除外されます。present_metricsは、スナップショット、クエリされた系列、キャンペーン、または記録された分析のいずれかに各項目を照合し、それ以外は注記を添えて除外します(merchant_agent/enrichment.pyのresolve_metrics)。そのため、カードにモデルが生成した数値が含まれることはありません。
分析デリゲート
- デフォルトでオフの
enable_analysisを有効にすると、merchant_agent_runtime/analysis.pyのbuild_analysis_delegateが構築するDelegateExtensionであるrun_analysisが登録されます。デリゲートのツールは、送信ツール、進捗確認ツール、ANALYSIS_READ_TOOLS(merchant_agent/analysis.py)、およびバックエンドがMerchantBackend.execute_analysis_queryを実装している場合のクエリツールです(その場合、analysis_sql_onlyによって系列ごとの読み取りはオフになります)。デリゲートはステージングツールを持たず、その結果はseen_analysesに記録され、独立したメトリクスカードとして表示されます。 - バックエンドで実行される前に、
check_analysis_sqlはコメントを含まない単一の SELECT 以外をすべて拒否します。読み取り専用ロールとマーチャントのスコープ設定はバックエンドが担います。analysis_query_timeout_sとcap_analysis_table(max_analysis_rows、max_analysis_table_chars)が各クエリを制限し、analysis_timeout_s、max_analysis_iterations、max_delegate_calls_per_turnが実行を制限します。 analysis_use_code_executionはホスト型サンドボックスをマウントし、Anthropic API でのみ動作します(Anthropic 上でホストされる Foundry デプロイメントを含む)。クエリメソッドはどこでも動作します(docs/deployment.md)。Agent SDK では、同じ契約を、ツールが読み取り専用ツールに限定されたサブエージェントとして実装します(merchant_agent_sdk/agent.pyのbuild_analysis_agent)。- スケジュールされたダイジェストは、同じエージェントによるヘッドレスの1ターンです(
merchant-agent/managed-agents/scheduled-digest/run_morning_digest.py)。
メモリとコンポーネント
- メモリは
merchant_idをキーにします(merchant_agent/executor.pyのmemory_subject)。merchant_agent/memory.pyの抽出プロンプトでは、オペレーターが業務の運営について述べた内容のみを許可し、出品情報、レビュー、購入者のメッセージ、メトリクスに由来する情報と、特定可能な顧客に関する情報は除外します。書き込みフィルター、保持期間、削除、消去、enable_memoryは共通ルールです(commerce-trust-safety)。 - 組み込みコンポーネント(
merchant_agent/enrichment.py)はpresent_metrics、present_digest、present_change_preview、present_suggestionsです。ホストの承認が必要な場合、プロンプトでは、どのチップも承認や適用を行わないと説明します。各業種では、垂直分野固有のコンポーネント(例ではpresent_occupancy_calendar、present_plan_mix、present_event_pacing)を拡張機能として追加します(commerce-ui-tools)。
マーケットプレイス
- 多数の販売者のコンテンツには、共通のフェンスが適用されます。販売者ごとのラベルはなく、フェンスを回避できる販売者もいません。ショッピングのデプロイメントでは、販売者は検索軸(
SearchFilters.attributes)であり、コンポーネントに表示されます。また、プラットフォームと販売者の規約が異なる場合、search_policiesの結果には、どちらの規約なのかが示されます。 - 出所情報と上限はセッションごとに設定されるため、セッションでは、そのセッション内のツールが返した出品情報に対してのみ変更をステージングできます。
- 購入者と販売者のメッセージは、フェンスで区切られた内容としてモデルに渡されます。変更が承認されたと書かれたメッセージがあっても、承認済みの印は付きません。
- メモリの対象は、
merchant_idをキーとするオペレーター自身のビジネスです。買い物客の情報は、その買い物客をキーにします。