service-itsm-agentic-setup-agent-runtime-access-assign
service-itsm-agentic-setup-agent-runtime-access-assign について
有効化済み ITSM エージェントにランタイム権限と Agent Access を付与する Salesforce スキルです。Salesforce CLI で状態を確認し、明示的な選択と一括確認を経て書き込み、結果を再確認します。
主な機能
- 01プロビジョニング済み権限の検出
- 02機能ごとの権限レベル選択
- 03選択したユーザーへのアクセス付与
- 04Agent_Access の作成または再利用
- 05書き込み後の割り当て確認
活用シーン
- 01有効化済み ITSM エージェントのアクション実行
- 02指定した Salesforce ユーザーへのランタイム権限付与
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-itsm-agentic-setup-agent-runtime-access-assignインストール後、Claude Code で/service-itsm-agentic-setup-agent-runtime-access-assignを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cli-invocation.mdhelper-contracts.mdpermset-topology.mdscripts/classify-activated-agents.mjsclassify-agent-access-state.mjsclassify-assignment-state.mjsclassify-platform-permset-availability.mjsgate-unified-catalog-tiers.mjsrank-candidate-users.mjsresolve-target-user.mjs詳細
アクティベート済みITSMエージェントにランタイムアクセスを付与する
ITSMエージェント(Fulfiller または Employee)は作成してアクティベートしても、開いた瞬間に失敗することがあります。そのアクションが、ユーザーには実行できないプラットフォーム機能を呼び出すためです。このスキルは、アクティベーション後に、1回の確認を経て書き込み可能な次の2つの手順でその問題を解消します。
- ランタイムのアクション実行権限。 プロビジョニング済みの機能権限セットを検出し、ユーザーが機能ごとに階層(ユーザー/エージェントまたは管理者)と、付与するユーザーを選択できるようにしてから割り当てます。ライセンスが必要な場合は、先にライセンスを割り当てます。
- カスタムの「Agent Access」権限セット。 Agent Accessを作成(または再利用)し、ユーザーが選択したアクティベート済みエージェントに付与します(エージェントごとに
SetupEntityAccessを1つ作成)。その後、同じユーザーに割り当てます。
検証済みの機能 → 階層 → 権限セットの対応表はreferences/permset-topology.mdにあります。すべての機能が揃っている組織はありません。プロビジョニング済みのものだけを割り当て、残りは利用不可として報告します。機能が存在しなくても、決して失敗させないでください。
すべての読み取りと書き込みは**Salesforce CLI(sf)**を通じて行います。メタデータ XML、トークンの抽出、MCPは使用しません。
対象範囲
- 対象:プロビジョニング済みのプラットフォーム機能権限セットの検出、機能ごとの階層選択、付与対象ユーザーの確認(実行ユーザーも提示しますが、無断で選ぶことはありません)と特定、ライセンスが必要な階層のPSL→権限セットの冪等な割り当て、カスタム
Agent_Access権限セットの作成/再利用、選択されたアクティベート済みエージェントごとのSetupEntityAccess付与の追加、Agent_Accessのユーザーへの割り当て、読み戻しによる割り当ての検証。 - 対象外(担当スキルを括弧内に記載):Agentforce for IT ServiceのGoトグル/Studio設定(
service-itsm-agentic-setup-agentforce-studio-configure);Employeeエージェント(service-itsm-agentic-setup-employee-agent-configure)またはFulfillerエージェント(service-itsm-agentic-setup-fulfiller-agent-configure)の作成またはアクティベーション;Fulfillerアクティベーションにおけるアクション表示の問題(作成/アクティベーション時のもので、ここで扱うランタイムの問題ではありません。service-itsm-agentic-setup-itsm-agentforce-permset-assign);CMDBアクセス(service-itsm-agentic-setup-cmdb-access-assign);ITSM以外の一般的な権限セット割り当て;機能権限セットの作成/編集。
すべての決定論的な判断を担うヘルパースクリプト(すべてBash経由で実行)(A9)
I/Oコントラクトの全文はreferences/helper-contracts.mdにあります。
scripts/classify-platform-permset-availability.mjs— プロビジョニング済みの機能、各階層のpresentとneedsPsl、および各階層に対する組織独自の表示ラベル。scripts/resolve-target-user.mjs— APIルートのidentityURLから取得する実行ユーザーのId(形式が不正な場合は処理を中止)。scripts/rank-candidate-users.mjs— 提示する、実在する最大5名の非サービスユーザー候補。対象者に応じて順位付けします(Fulfillerエージェントでは標準ライセンスを優先し、EmployeeエージェントではUnified Employeeを優先)。scripts/gate-unified-catalog-tiers.mjs— 付与対象ユーザーごとに、提示するUnified Catalogの階層を決定します(Community User → Unified Employee、Admin → System Administrator)。それ以外の場合、そのユーザーにはUCを提示しません。scripts/classify-activated-agents.mjs— アクティベート済みエージェント候補のリスト(1つ以上のActiveなBotVersionを持つBotDefinitionInternalCopilot)。scripts/classify-agent-access-state.mjs—Agent_Accessを作成する必要があるか、および選択されたエージェントのうち付与がまだ必要なものを判定します(冪等性)。scripts/classify-assignment-state.mjs— ユーザーと権限セットの組み合わせごとの冪等性を判定します。選択した階層のneedsPsl:falseの場合は、センチネルNO-PSLを渡します。
前提条件
sfCLIがインストールされ、対象組織で認証済みであること(sf org display -o <alias>でConnectedと表示されること)。すべての呼び出しで--target-org <alias>を使用します。アクセストークンを手作業で抽出したり渡したりしてはいけません。- API v67.0以降。
- PATH上に**
node≥ 18**があること。
前提条件を満たさない場合、sfは認証エラーまたは401/403/404を返します。生のレスポンスをそのまま報告して停止してください。状態を捏造してはいけません。
確認事項
会話から推測できないことだけを質問します。
- 対象組織 —
sfエイリアスです。未設定の場合はsf config get target-orgを既定値にします。 - 対象ユーザー — 暗黙の既定値は決して使いません。指定されていない場合は、
AskUserQuestionで質問します(フェーズ 2 を参照)。指定されている場合は、その指定に従います。 - プロビジョニングする機能ごとのティア — プロビジョニングする機能ごとに、どのティアにするか(軽量な ユーザー/エージェント向けか、完全な 管理者向けか)を質問します。自動選択は決してしません。
- 有効化するエージェント — 有効化済みエージェントの一覧から複数選択します。有効化済みのものが 1 つだけの場合も、必ず確認します。
- 書き込みの確認 — すべての書き込みをまとめて 1 回で確認します。書き込みを行う前に、
AskUserQuestionを使って明示的な「はい」を得る必要があります。
ワークフロー
すべての呼び出しは sf を介して行います。<alias> は対象組織に置き換えてください。各スクリプトのパスには、必ずスキルの絶対ディレクトリを使用してください。正確なコマンド形式については、references/cli-invocation.md を参照してください。
フェーズ 1 — 読み取り:何がプロビジョニングされ、何が有効化されているか?
-
6 つのプラットフォーム機能の権限セットをクエリし、ファイルに保存して分類します。
sf data query \ -q "SELECT Id, Name, Label, LicenseId FROM PermissionSet WHERE Name IN ('EinsteinGPTPromptTemplateUser','EinsteinGPTPromptTemplateManager','GenieUserEnhancedSecurity','GenieAdmin','UnifiedCatalogCommunityUser','UnifiedCatalogAdmin')" \ --target-org <alias> --json > /tmp/itsm-platform-permsets.json 2>/tmp/itsm-platform-permsets.err || true node "<skill_dir>/scripts/classify-platform-permset-availability.mjs" /tmp/itsm-platform-permsets.json分類器は
{ features, provisionedFeatures, absentFeatures, verdict }を返します。verdict:"ASSIGNABLE"⇒ 1 つ以上の機能がプロビジョニングされています。verdict:"NONE-PROVISIONED"⇒ 割り当て可能な機能の権限セットはありません(それでも Agent Access に関する確認には進みます)。verdict:"CANNOT-CONFIRM"⇒ 生のエラーを提示して停止します。 -
有効化済みエージェント(BotDefinition とアクティブバージョンの子クエリ)をクエリし、保存して分類します。
sf data query \ -q "SELECT Id, DeveloperName, MasterLabel, (SELECT Status FROM BotVersions WHERE Status='Active') FROM BotDefinition WHERE Type='InternalCopilot'" \ --target-org <alias> --json > /tmp/itsm-agents.json 2>/tmp/itsm-agents.err || true node "<skill_dir>/scripts/classify-activated-agents.mjs" /tmp/itsm-agents.jsonverdict:"AGENTS-FOUND"⇒ 複数選択用にactivatedAgents[]を提示します。verdict:"NONE-ACTIVE"⇒Agent_Accessでアクセス権を付与できるものはありません(その旨を報告します。NONE-PROVISIONEDも該当する場合は作業がないため停止します)。
フェーズ 2 — 対象ユーザーの選択(暗黙の既定値は使わない)
-
実行ユーザーを解決して名前付きの選択肢として提示し、組織内のアクティブユーザーをクエリして、ヘルパーが実在する非サービスユーザーの候補を順位付けし、すぐ選べる候補として提示できるようにします。明示されていない既定値で処理を進めることは決してしません。
sf api request rest "/services/data/v67.0/" --method GET --target-org <alias> > /tmp/api-root.json 2>/tmp/api-root.err || true node "<skill_dir>/scripts/resolve-target-user.mjs" /tmp/api-root.json sf data query -q "SELECT Name, Profile.Name, Profile.UserLicense.Name FROM User WHERE Id='<userId>'" --target-org <alias> --json > /tmp/itsm-running-user.json 2>/dev/null || true sf data query -q "SELECT Id, Name, Username, Profile.Name, Profile.UserLicense.Name FROM User WHERE IsActive = true ORDER BY LastLoginDate DESC NULLS LAST LIMIT 25" --target-org <alias> --json > /tmp/itsm-candidate-users.json 2>/dev/null || true node "<skill_dir>/scripts/rank-candidate-users.mjs" /tmp/itsm-candidate-users.json <audience> <userId>verdict:"RESOLVED"の場合はuserIdを保持し、ラベル用に/tmp/itsm-running-user.jsonからNameを取得します。CANNOT-CONFIRMの場合は理由を提示して停止します。プロンプトで対象ユーザーがすでに指定されている場合(「自分に付与して」/ユーザー名など)は、質問せずその指定に従います。それ以外の場合は、この権限付与の対象となるエージェントに基づいて<audience>を設定します。fulfiller(標準ライセンスのユーザーを優先)またはemployee(Unified Employee ユーザーを優先)、どちらにも該当しなければanyとします。リクエスト/引き継ぎで指定されたエージェント、またはフェーズ 1 の有効化済みエージェント一覧から推測します。rank-candidate-users.mjsは、実在する非サービスユーザーの候補を対象に、指定された対象者向けに順位付けした最大 5 名を返します。これらのユーザーを直接選択肢として提示するAskUserQuestion(複数選択)を必ず使用してください。ユーザー名を通常の文章で尋ねる方法は使いません。実行ユーザー(ラベルは 「Me — 」、または 「Me」。こちらを推奨)と、上位候補を提示します。選択画面には 4 つの選択肢を提示できるため、「Me」と順位上位 3 名の候補を提示します。組み込みの 「Other」 から、一覧にない任意のユーザー名を入力できます。選択または入力された各ユーザーはUsernameで解決します(クエリ形式はreferences/cli-invocation.mdを参照し、それぞれ専用のファイルに保存します)。非アクティブまたは不明なユーザーはスキップし、その旨を注記します。以下のすべての割り当てには、確認済みのユーザー ID を使用します。
フェーズ 3 — 選択(書き込みなし)
- プロビジョニング済みの各機能について、
AskUserQuestionでティア(ユーザー/エージェントまたは管理者)を尋ね、選択したティアの{ name, Id, LicenseId, needsPsl }を記録します。存在しない機能はそれぞれ「この組織ではプロビジョニングされていないためスキップ」として報告します。Unified Catalog は選択したユーザーごとにライセンス形状による制約があります —scripts/gate-unified-catalog-tiers.mjsを、各ユーザー自身のキャプチャを使ってユーザーごとに 1 回実行し、そのoffer[]のティアのみを提示します。Community User は Unified Employee ユーザーにのみ、Admin は System Administrator にのみ提示します。omitの場合、そのユーザーについて Unified Catalog を「このユーザーのライセンス/プロファイルには該当しないためスキップ」としてスキップします。提示されていないものは、書き込み失敗にはなりません。 - 有効化済みエージェントのうち、
Agent_Accessに追加するものをAskUserQuestionで尋ねます(複数選択可)。それらの BotDefinition Id をカンマ区切りのリストとして記録します。
フェーズ 4 — 冪等性の読み取り(書き込みなし)
-
Agent Access の状態。
Agent_Accessの permset をクエリし、存在する場合に限り、その既存のBotDefinition付与をクエリします(キャプチャ先は/tmp/agent-access.jsonと/tmp/sea.json。クエリ形状はreferences/cli-invocation.md→ フェーズ 4 を参照)。次に、選択したエージェント Id と照合して分類します。node "<skill_dir>/scripts/classify-agent-access-state.mjs" /tmp/agent-access.json <sea.json|NO-PERMSET> "<chosenAgentIds-csv>"Agent_Accessがまだ存在しない場合は、第 2 引数にNO-PERMSETを渡します。分類結果は{ permsetExists, permsetId, missingAgentIds, needsCreate, needsGrants, verdict }です。 -
ユーザーと permset の組み合わせごと。 対象ユーザー ×(選択した各機能ティア および
Agent_Access)について、既存の割り当てを読み取り(PermissionSetAssignment、およびneedsPsl:trueの場合に限りPermissionSetLicenseAssign。形状はreferences/cli-invocation.mdを参照)、分類します。Agent_Accessは単独です(needsPsl:false→NO-PSL)。機能ティアは、その行のneedsPslを使用します。ステップ 6 でAgent_Accessが存在しない(needsCreate:true)と判定された場合は、キー指定のPermissionSetAssignmentの読み取りをスキップします — permset がないため、判定結果はNEEDS-WRITEです。フェーズ 6 で作成した後、名前で割り当てます。Agent_Accessのキー指定の読み取りは、ステップ 6 で既存のpermsetIdが返された場合に限り実行します。node "<skill_dir>/scripts/classify-assignment-state.mjs" /tmp/psa.json </tmp/psla.json|NO-PSL>
フェーズ 5 — 書き込み前の確認チェックポイント(必須)
- 統合サマリーを 1 つ提示します — 対象ユーザー全員、割り当てる各機能ティア(およびスキップする各機能)、
Agent_Accessを作成するかどうかと付与するエージェント、さらにすべての permset 割り当てを含めます。AskUserQuestionで明示的な「はい」の回答を必須とします。「いいえ」の場合は停止し、書き込みを行わずに予定状態を報告します。ライセンスで制限されるティアを割り当てると、ライセンスシートを消費し、ライブセッションに反映されます。
フェーズ 6 — 書き込み(フェーズ 4 で必要と判定されたもののみ)
-
Agent Access 権限セット(1 回のみ):
needsCreateの場合、/sobjects/PermissionSetに{"Name":"Agent_Access","Label":"Agent Access"}を POST し、新しいidを取得します。次に、missingAgentIdsの各 ID について、/sobjects/SetupEntityAccessに{"ParentId":"<permsetId>","SetupEntityId":"<agentId>"}を POST します —SetupEntityTypeは送信しないでください(作成可能な項目ではなく、0Xxキーのプレフィックスから導出されます)。付与時にDUPLICATE_VALUEが返された場合 ⇒ すでに付与済みとして成功扱いにします。 -
機能階層(ユーザーごと):フェーズ 4 の判定が
NEEDS-WRITEだった各階層について、needsPslの順に処理します。needsPsl:true— まず、その階層独自のLicenseIdを使用して/sobjects/PermissionSetLicenseAssignに PSL を POST し、その後sf org assign permset --name <tierName>を実行します(実行中のユーザーの場合:--on-behalf-ofを省略します。名前指定のユーザーの場合:--on-behalf-of "<username>"を指定します)。needsPsl:false— PSL の POST は省略し、sf org assign permsetのみを実行します。
-
Agent Access の割り当て(ユーザーごと):フェーズ 4 の判定が
NEEDS-WRITEの場合、sf org assign permset --name Agent_Accessを実行します(実行中のユーザーの場合:--on-behalf-ofを省略します。名前指定のユーザーの場合:--on-behalf-of "<username>"を指定します)。--on-behalf-ofはUsernameで解決され、005ID や$USERNAMEシェル変数では解決されません(references/cli-invocation.mdを参照)。レスポンスの処理(すべての書き込み):成功 ⇒ 完了。
DUPLICATE_VALUE/already has⇒ 冪等な成功。PSL の POST でINSUFFICIENT_ACCESS/座席数不足が発生 ⇒ 停止し、利用可能な座席がないことをユーザーに伝えます。その他のエラー ⇒ 原文のまま提示し、FAILED とします。(詳しい分類はreferences/cli-invocation.mdを参照。)
フェーズ 7 — 検証と集計
- 書き込んだ割り当て(対象ユーザーの
PermissionSetAssignment/PermissionSetLicenseAssign、Agent_AccessのSetupEntityAccess)を再読み込みし、意図した各レコードが存在することを確認します。その後、集計結果を 1 つ報告します。- ASSIGNED — 書き込みが 1 件以上行われ、読み戻しですべて確認できた場合。
- ALREADY-ASSIGNED — 書き込みが必要なものはなく、意図した状態がすでにすべて存在していた場合。
- PARTIAL — 一部の割り当てには成功したものの、少なくとも 1 件が FAILED になった、または読み戻しで確認できなかった場合。該当するものを列挙します。
- NONE-PROVISIONED — 機能が 1 つもプロビジョニングされておらず、エージェントも有効化されていないため、割り当てるものがない場合。作成/有効化スキルを案内します。
- FAILED — 試行したすべての書き込みで、重複以外のエラーが返された場合。エラーをそのまま報告します。
ルール/制約
| 制約 | 理由 |
|---|---|
| 割り当てる前にプロビジョニング済みの機能を検出し、存在しない機能は失敗扱いにせず、「プロビジョニングされていません」と報告する | 3 つすべてがそろっている組織はありません。存在しない権限セットを割り当てようとするとエラーになり、実際の状態が隠れてしまいます |
| プロビジョニング済みの機能ごとに、ユーザー/エージェントと管理者のどちらのティアにするかを確認し、自動選択しない | 機能の利用には、より権限の少ないティアで十分です。管理者ティアでは過剰な権限を付与してしまいます |
| Fulfiller エージェントには standard-license のユーザーを、Employee エージェントには Unified Employee のユーザーを提示する。ランカーはサービスアカウント/ボットアカウントを除外する | 対象の組み合わせが間違っていると、そのエージェントを実行できないユーザーが提示されます |
Unified Catalog ティアは、そのティアを保持できるユーザーにのみ提示する(Community User → Unified Employee、Admin → System Administrator)。それ以外の場合は、そのユーザーについては省略する。scripts/gate-unified-catalog-tiers.mjs を使用する | UC PSL はライセンス構成によって制限されます。対象外のティアはシート不足ではなく、書き込み時の致命的なエラーになります |
| 利用可否/冪等性/有効化に関する判断はすべてヘルパースクリプトで行い、文章による判断は行わない | 書き込み/成功の可否はスクリプトが判定します。スクリプトは決定論的ですが、文章はそうではありません(A9) |
needsPsl は選択したティア自身の LicenseId から行ごとに読み取り、その LicenseId を PSL の POST に使用する。PSL 名をハードコードしない | 組織によってライセンス構成が異なります。誤った PermissionSetLicenseId を指定すると、別のシートが POST されます |
needsPsl:true の場合は、権限セットより先に PSL を割り当てる | 権限セットはライセンスに紐付いているため、先にシートを確保します |
Agent_Access がアクセスを付与するのは有効化済みのエージェントのみとし、BotDefinition の Id を SetupEntityId とする SetupEntityAccess 行を介して付与する | Apex クラスへのアクセスと同様に、エージェントごとに 1 行のアクセス付与が必要です |
SetupEntityAccess の POST には ParentId と SetupEntityId のみを指定し、SetupEntityType は指定しない | 作成不可です。SetupEntityId のキー接頭辞から導出されるため、指定するとエラーになります |
Agent_Access は、標準データ API で /sobjects/PermissionSet に POST して作成し、Tooling/Metadata XML は使わない | データ API では Name と Label だけで作成でき、デプロイは不要です |
| いかなる書き込みよりも前に、書き込みに対する確認を一度にまとめて行う | シートの消費数やライブセッションへの影響を含む全計画について、一度の承認を得る必要があります |
すべての書き込みで DUPLICATE_VALUE/already has は冪等な成功として扱う | 再実行しても安全である必要があります。重複は状態がすでに反映されていることを意味します |
ASSIGNED と報告する前に、読み戻して検証する | POST の戻りコードだけでは、行が存在することを証明できません |
| アクセストークンを決して取り出さず、MCP ディスパッチャーも使用しない | トークンを取り出すと、ベアラー認証情報が漏えいします |
| CLI の応答に含まれるエラーテキストを正確に報告する | サポート担当者が失敗の原因を診断しやすくなります |
検証チェックリスト
- プロビジョニング済みの機能は
scripts/classify-platform-permset-availability.mjsで分類され、存在しない機能は失敗ではなく「プロビジョニングされていません」と報告された。 - プロビジョニング済みの機能ごとに、ユーザー/エージェントと管理者のどちらのティアにするかが選択され、自動選択されなかった。Unified Catalog のティアは
scripts/gate-unified-catalog-tiers.mjsによりユーザーごとに判定された。 - 有効化済みエージェントは
scripts/classify-activated-agents.mjsで分類され、アクティブバージョンのエージェントのみが提示された。 - 対象ユーザーが確認された。ユーザー名が指定されていない場合は、黙って選択せず、
AskUserQuestionを通じて確認された(実行ユーザー +scripts/rank-candidate-users.mjsによる対象者別の順位付けユーザー +「その他」)。実行ユーザーはscripts/resolve-target-user.mjsで特定され、指定ユーザーはUsernameで特定された。 -
Agent_Accessの作成/付与はscripts/classify-agent-access-state.mjsで判断され、SetupEntityAccessの POST にはParentIdとSetupEntityIdのみが指定された。 - 書き込み前に、ユーザーと権限セットの組み合わせごとの冪等性が
scripts/classify-assignment-state.mjsで分類された。 -
needsPsl:trueの場合、選択したティア自身のLicenseIdに基づいて PSL が POST され、権限セットより先に POST された。 - すべての書き込みより前に、書き込みに対する確認を一度にまとめて行うゲートが実行された。
-
DUPLICATE_VALUE/already hasは成功として扱われ、その他のエラーはそのまま提示された。 - 割り当ては読み戻して検証され、集約した判定が 1 つ報告された(フェーズ 7 を参照)。
出力形式
ITSM Agent Runtime-Access Assignment (via service-itsm-agentic-setup-agent-runtime-access-assign)
Org: <org-alias> (API v67.0)
Target user(s): <username> (<userId>)[, ...]
Runtime action permissions:
Prompt Templates ...... <tier chosen: User | Manager | skipped | not provisioned> -> <assigned | already-had | FAILED>
Data Cloud ............ <tier chosen | skipped | not provisioned> -> <assigned | already-had | FAILED>
Unified Catalog ....... <tier chosen | skipped | not provisioned> -> <assigned | already-had | FAILED>
Agent Access permission set:
Permission set ........ <created | already existed>
Agents granted ........ <comma-separated agent names, or none>
Assigned to user(s) ... <assigned | already-had | FAILED>
Verdict: ASSIGNED | ALREADY-ASSIGNED | PARTIAL | NONE-PROVISIONED | FAILED
Reason: <plain-language explanation, or empty on success>
Next steps:
- <If ASSIGNED / ALREADY-ASSIGNED: "The user can now open and exercise the agent(s) in Agentforce Studio — action calls should no longer fail on missing permissions.">
- <If PARTIAL: list which assignments succeeded and which failed, verbatim.>
- <If NONE-PROVISIONED: nothing to assign — create/activate an agent and enable its features first.>
- <If FAILED: list the observed error(s) verbatim + remediation.>
レコード ID、HTTP コード、DUPLICATE_VALUE、オブジェクト名や開発者向け名称などの内部用語は、ユーザー向けの出力に含めないでください。
参照ファイルの一覧
| ファイル | 読むタイミング |
|---|---|
references/permset-topology.md | 機能/ティアのマトリックスを変更する場合は必ず読みます。6 つのプラットフォーム権限セット、そのティア、PSL、および Agent_Access / SetupEntityAccess によるエージェントアクセスの仕組みについて説明しています |
references/cli-invocation.md | すべてのフェーズで読みます。sf data query / sf api request rest の POST / sf org assign permset の正確な呼び出し形式、--json のルール、トークンを絶対に抽出しないルール、レスポンスのエンベロープ、エラーの分類について説明しています |
references/helper-contracts.md | 7 つすべてのヘルパースクリプトの入出力形式と、それぞれの判定結果の解釈方法について説明しています |