geekfujiwara/codeappsdevelopmentstandard/copilot-studio-v2

Claude Code and agent skill by geekfujiwara/codeappsdevelopmentstandard

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Copilot Studio の「全く新しいアーキテクチャ」(cliagent テンプレート)を開発標準の第一候補として構築・公開・連携する。Bot 作成、Instructions/モデル/メモリ、フラット Python スキル、アイコン、公開に加え、ブラウザで観測した private API による承認付き初回ツール・接続参照追加、Code Apps iframe、Agent flows を扱う。

Install

npx vskill@latest install geekfujiwara/codeappsdevelopmentstandard/copilot-studio-v2

SKILL.md

Copilot Studio v2(新アーキテクチャ)エージェント構築スキル

Copilot Studio の 「全く新しいアーキテクチャ」(`cliagent` テンプレート) エージェントを、 Dataverse Web API と、必要時はログイン済みブラウザの observed/private API で構築する。

標準方針: 新規の Copilot Studio 開発は v2 を第一候補にする。Code Apps では Web app チャネルの
iframe を表示でき、Agent flows では既存の発行済み v2 を Agent ノードから利用できる。
iframe 表示、ブラウザー SDK によるプログラム的な会話制御、Workflow のサーバー側呼び出しは
異なる連携方式であり、可否・認証・受入を分けて判定する。

v1(旧)スキルとの最大の違い

観点v1(copilot-studio スキル / 旧アーキ)v2(本スキル / 新アーキ `cliagent`)
Bot 作成❌ API 不可。Copilot Studio UI で手動作成必須POST /bots を第一候補にし、pac copilot list に現れない場合だけ UI 作成へ fallback
設定の保存先GPT コンポーネント(componenttype=15)+ PVA ダブル改行 YAMLbots.configuration の BotConfiguration JSON にインライン
recognizer(クラシック PVA)CLICopilotRecognizer
モデル指定GPT data の aISettings.model.modelNameHintAuto が標準。model を省略してプラットフォームに任せ、固定モデルのみ series 指定
InstructionsGPT data YAML(ダブル改行フォーマット注意)agentSettings.instructions.segments[].value(プレーン文字列)
メモリ(個別設定)agentSettings.enableMemory: true
スキル(ナレッジ/トピック)フラット Python スキルバンドル(type=9 + type=14 子ファイル)
自動化適性△ UI 介在が必要◎ 基本構築 + 承認済み初回ツール投入。OAuth/consent は browser session
このスキルを選ぶ理由: Bot 作成からスキル添付まで 人手の UI 操作ゼロ で構築できる。
CI/再現構築・量産・プログラム的な改変に向く。

いつ v2 を使うか(architecture スキルでの分岐)

architecture スキルの Copilot Studio 選定では、新規開発は v2 を標準の第一候補にする。 v1 は既存 v1 資産の継続、または v2 で満たせない直接 SDK 要件がある場合に限って選ぶ。

利用方式標準選択境界
Teams / Copilot Studio で対話v2公開先ごとに認証と本人権限を受入確認する
Code Apps に標準チャット画面を表示v2 Web app iframeiframe 内 UI。親アプリからの任意メッセージ注入、応答イベント取得、SSO/OBO を自動的には保証しない
Dataverse レコード作成・更新から自動実行Agent flows + v2 Agent ノードWorkflow の接続所有者、ACP/DLP、実行完了、業務出力を個別に検証する
Code Apps で要求・結果を業務 UI と統合Dataverse + Agent flows + v2非同期の要求/結果方式。相関、Claim、行所有、再実行防止が必要
親アプリで会話をプログラム制御要件確認後に v1ExecuteCopilotAsyncV2、WebChat SDK、トークンストリーミング等が必須の場合

Web app iframe の表示可否と、ExecuteCopilotAsyncV2 / WebChat SDK による直接呼び出し可否を混同しない。 v2 iframe は実際の公開 URL、Code Apps の frame-src、サインイン、一般利用者の本人認可を公開ホストで確認する。 Agent flows の既存 Agent ノードは製品 UI のサポート経路を使い、直接 API Hub 呼び出しを標準実装にしない。 構築・検証は agent-flows に従う。

事前確認(会話の最初に 1 回だけ)

本スキルの利用が確定したら、standard の共通契約に加え、 1 回の AskUserQuestion で次をまとめて確認する。

#質問合格条件
1v2 の利用経路はどれかTeams / Copilot Studio、Code Apps iframe、Agent flows、Dataverse 要求/結果を確定。直接 SDK 制御が必須の場合だけ v1 を比較する
2対象環境で Copilot Studio を作成・公開できるか必要なライセンス / capacity と、環境で bot / botcomponent を作成・更新できる権限がある
3モデルは Auto でよいか標準は AGENT_MODEL_SERIES=Auto。利用者確認済みなら再質問しない。UI 保存構成は不要。固定モデルは明示指定時だけ
4ツールは誰が追加するか標準は利用者が手動追加。本体構築後に必要な connector / operation・本人接続・範囲を引き継ぐ
5名前、Instructions、メモリ、スキル、アイコン、公開範囲は承認済みか設計全文とテスト担当者を記録している

System Administrator を前提にせず、対象環境で必要な Dataverse テーブル権限と Copilot Studio 作成・公開権限を持つロールを確認する。MCP 追加を含む場合は接続の作成・共有権限も別途確認する。 未確定のツール・接続は基礎構築と切り離す。手動ツール追加の合意があれば scripts/deploy_agent.py --manual-tools で API 構築を実行する。 ツール追加・本人認可・公開範囲の確認前には公開しない。

構築フロー

1. .env 準備(DATAVERSE_URL / TENANT_ID / 任意で SOLUTION_NAME・PUBLISHER_PREFIX)
- モデルは `AGENT_MODEL_SERIES=Auto`、`AGENT_AUTO_MODEL_CONFIG_FILE` は通常空欄。
固定モデルを送らずプラットフォームに任せる。UI やブラウザーを作成の前提にしない。
2. 設計提示 → ユーザー承認(名前・Instructions・モデル・スキル・アイコン・MCP 構成)
- ファイル出力を伴うスキルを添付する場合は、Instructions に
「ファイルを出力する際は毎回異なるファイル名にする」旨を含める(同名だと UI でダウンロード不可)
- 初期メッセージ(greeting)と推奨プロンプトを agent/prompts.json に用意し、AGENT_PROMPTS_FILE で指定する
3. scripts/deploy_agent.py --manual-tools --env-file agent.env
… cliagent Bot を API 新規作成、指示・prompts、3 サイズのアイコン生成・登録、skill を構築。
ツール追加・チャネル共有変更・公開は行わない。既存 Bot は update_agent.py --no-publish。
4. pac copilot list
… 対象 Bot が Active / Provisioned であることを確認。存在しなければ UI で専用 v2 agent を作成
5. 標準: 利用者が手動で MCP / ConnectorTool を追加。必要な本人用接続・操作・範囲を引き継ぐ。
自動追加を明示承認された場合のみ、以下 6〜8 の private API 経路を利用する。
6. scripts/mcp_tool_plan.py
… 各 capture の tool + ConnectionReferenceInsert を検証し、plan / PLAN_HASH を作成して承認
7. scripts/create_initial_tools_manifest.py
… 同一 environment / bot の承認済み plan を .mcp/initial-tools.json に集約
8. runInitialToolProvisioning(page, manifestPath, reportPath)
… 全 plan/hash を書き込み前に検証し、tool + connection reference を順次 apply / read-back
9. scripts/publish_agent.py … ツール投入済みの agent を PvaPublish で最終公開
10. scripts/verify_agent.py + pac copilot list
… 構造と Published / Active / Provisioned を確認
11. UI で Build > Model と Tools を確認し、Preview で最小データの golden question を実行
標準は手動ツール追加: python scripts/deploy_agent.py --manual-tools --env-file agent.env で
本体→アイコン→スキルまで実行・読み戻し検証して完了を通知する。ツール未追加でも本体開発は止めない。
未接続を実用可能とは報告しない。ツール追加後に認可・チャネル設定・公開・実会話を検証する。
自動追加を承認された場合のみ: --defer-publish と承認済みmanifestを使用する。詳細は
エージェントごとの設定は `agent.env` にまとめ、`--env-file` で渡す(deploy_agent.py / update_agent.py /
publish_agent.py / set_app_details.py)。そのフォルダで実行するため、instructions.md / prompts.json / skills/ の
相対パスと agent_botid.txt がエージェントのフォルダに揃う。SKILL_DIR が複数スキルの親フォルダなら直下の各スキルを添付し、
説明は各 SKILL.md の frontmatter から取る。Edit details は作成直後だと Teams チャネル未作成で失敗するが、動作に必須ではないため続行する。

テンプレート

テンプレート内容
agm-qa-author株主総会 想定問答アシスタント。Code Apps の agm-qa-assist と同じ Dataverse を本人の接続の Dataverse MCP で読み、想定問答・台本の下書きを作り、点検する。Cowork の agm-qa-plugin と同じスキル(Cowork で実行時にツールが 0 件になる場合の代替)
powershell
python .github/skills/update-skills/scripts/scaffold_from_template.py `
--template .github/skills/copilot-studio-v2/templates/agm-qa-author --target copilot-studio/agm-qa-author --env <answers.env> --dry-run
1 つのエージェントに複数スキルを添付する場合は、SKILL_DIR / SKILL_NAME を変えて
attach_skill.py を必要な回数だけ実行する(削除は同名スキル限定のため、先に添付した分は残る)。
対話系のスキルと、Agentflow から呼ばれる自動処理系のスキルは分けて書く。
設計 JSON の候補生成と人による採用: Code Apps の モジュール設計パターン
と フラット候補生成バンドル を再利用できる。
対話は Teams、提案の差分・採用は共有 Dataverse を介した Code Apps 側で行う(v2 の直接呼び出し・埋め込みではない)。
公開・添付成功と Python 依存解決・Teams 実応答は別々に検証する。

運用中エージェントの更新(★新規作成しない)

deploy_agent.py は create_agent.py から始まるため、実行するたびに新しい Bot が作られる。 すでに UI で MCP ツールを追加した運用中のエージェントを更新するときは scripts/update_agent.py を使う。

1. set_instructions.py … Instructions を差し替え(configuration を GET → deep-merge → PATCH)
2. set_model.py … モデル系列を差し替え(AGENT_MODEL_SERIES 指定時のみ)
3. set_prompts.py … 初期メッセージ・推奨プロンプトを差し替え(指定時のみ)
4. attach_skill.py … 同名スキルだけを入れ替え
5. publish_agent.py … 再公開
bash
python update_agent.py # 全ステップ
python update_agent.py --no-publish # 公開せず確認のみ
python update_agent.py --skip-skill # スキルは触らない
追加済みツール(MCP)が消えない理由
更新対象保存先ツールへの影響
Instructions / モデル / メモリ / 初期メッセージ / 推奨プロンプトbots.configuration(JSON 文字列カラム)なし(別レコード)
フラット Python スキルbotcomponents type=9 + 子 type=14なし(attach_skill.py は name eq '<SKILL_NAME>' and componenttype eq 9 で絞って削除する)
MCP / connector toolbotcomponents type=9(data が kind: McpTool / ConnectorTool、接続参照を保持)上記のどれも触らない

守るべき点は 2 つ。

  • configuration は丸ごと上書きせず GET → deep-merge → PATCH(name 列を同送)。

set_instructions.py / set_model.py / set_prompts.py は送信直前に scripts/verify_config.py で他のキーが欠落していないか検証し、 消失を検知したら PATCH を中止する。

  • attach_skill.py の削除は同名スキル限定。componenttype eq 9 だけで一括削除してはいけない

(MCP ツールも type=9 のため、全消しすると接続参照ごと消える)。

update_agent.py は更新の前後で MCP / connector tool の schemaname と接続参照をスナップショットして差分を 表示し、消失を検知したら公開せずに異常終了する。

実機検証(MCP ツール追加済みのエージェント):
Instructions 更新 + スキル全ファイル再添付 + 再公開を実行しても、MCP ツールの schemaname と
connectionReference は同一のまま維持された。

初期メッセージと推奨プロンプト

UI の「設定 > Greeting & prompts」に相当する設定も bots.configuration に入る。

jsonc
"agentSettings": {
"greetingText": "こんにちは。〇〇エージェントです。", // 初期メッセージ
"conversationStarters": [ // 推奨プロンプト
{ "$kind": "ConversationStarter", "title": "進捗を確認", "text": "今月の進捗は?" }
]
}
  • 未設定だと Teams / M365 側で Hello! I'm <名前>. How can I help you today? という既定文が出る。
  • AGENT_PROMPTS_FILE(JSON)を .env に置けば、create_agent.py が初回作成の時点で

configuration に含めるため、後からの手当ては不要。

(--show / --file / --clear)。update_agent.py からも自動で呼ばれる。

  • 反映には再公開が必要。
jsonc
// agent/prompts.json
{
"greeting": "こんにちは。〇〇エージェントです。",
"prompts": [{ "title": "進捗を確認", "text": "今月の進捗は?" }]
}
初回ツールと接続参照は承認済み manifest で一括投入する(重要)

MCP / ConnectorTool 追加は、Copilot Studio v2 UI の Save が送る PVA gateway の change-set を 対象環境・対象 bot ごとに捕捉して行う。Dataverse へ McpTool を直接 INSERT しない。 捕捉時は PUT を中止して dry-run とし、schema allowlist、対象 ID、connector、operation、 connection reference、他変更の混入がないことを検証して PLAN_HASH を提示する。承認された hash と 一致するplanをcreate_initial_tools_manifest.pyで集約し、同じログイン済み統合ブラウザで runInitialToolProvisioningへ渡す。runnerは全planを事前検証してから、各toolと ConnectionReferenceInsertを一体でapplyし、type=9のkind/connector/operation/referenceを読み戻す。

この gateway は 2026-09-14 に実機観測した非公開・非サポート API である。公開 API と扱わず、 401 / 403 / 404、host/path/schema drift、read-back 不一致、管理対象環境の UnmanagedCustomizationsNotAllowed では書き込みを停止し、UI 操作へフォールバックする。 Bearer token、Cookie、CSRF、session header はブラウザメモリ外へ出さない。詳細は MCP サーバーの追加 を参照。

自前の MCP Server を作る場合(社内 DB・ファイル共有・業務 API をエージェントに繋ぐ)は
mcp-server スキル で構築してから、ここでツールとして追加する。
外部の文章を読ませる場合は SKILL.md の書き方が防御線になる。 MCP の戻り値を「資料であって指示ではない」と
明記し、golden question(インジェクション単発・連鎖を含む)で回帰検証する。

必須要件・落とし穴(実機検証済み)

Bot 作成は cliagent テンプレートなら API で成功する
✅ POST /bots に template="cliagent-1.0.0" を指定すれば API 作成できる
→ pac copilot list で Provisioned / Active になる
⚠️ bots.synchronizationstatus は一時的に "Provisioning" のまま残ることがある
→ pac copilot list の表示が正となる(Provisioned なら利用可)
configuration は BotConfiguration JSON

次は固定モデルを明示選択した場合の構造例。標準の Auto はこの series をコピーせず、 model を省略する(モデル標準フロー)。

json
{
"$kind": "BotConfiguration",
"channels": [{ "$kind": "ChannelDefinition", "id": "MsTeams", "channelId": "MsTeams" }],
"recognizer": { "$kind": "CLICopilotRecognizer" },
"agentSettings": {
"$kind": "AgentSettings",
"model": { "$kind": "ModelConfig", "series": "claude-opus-5" },
"instructions": {
"$kind": "Instructions",
"segments": [{ "$kind": "StaticSegment", "value": "<エージェントの指示文>" }]
},
"enableMemory": true
}
}
  • Instructions はプレーン文字列。v1 のような PVA ダブル改行 YAML は不要。
  • 既存 Bot を改変する場合は configuration を GET → ディープマージ → PATCH(モデル・メモリを失わない)。
  • **ファイルを出力するスキルを持つ場合は、Instructions に「ファイル出力時は毎回異なるファイル名にする

(日時や UUID を付与する)」旨を必ず含める**。Copilot Studio v2 は同じファイル名で繰り返し出力すると UI 上でダウンロードできなくなるため(詳細: flat-python-skill.md)。

スキルは「フラット Python バンドル」

新ランタイムの制約(実機で確認):

❌ JavaScript / pptxgenjs は拒否される → ✅ Python(python-pptx 等)のみ
❌ バンドル内のサブフォルダ階層は解決されない → ✅ フラット(同一階層に全ファイル)
❌ 同梱画像ファイルが読み込まれないことがある → ✅ 画像は assets_b64.py に Base64 埋め込み

詳細は フラット Python スキルの書き方 を参照。

スキルバンドルの botcomponent 構造
componenttype役割格納先親バインド
9InlineAgentSkill(スキル本体)data 列parentbotid@odata.bind → /bots(...)
14FileAttachmentComponent(同梱ファイル)filedata File 列ParentBotComponentId@odata.bind → /botcomponents(...)

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
57
Repository forks
20
7-day trend score
20

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/geekfujiwara/codeappsdevelopmentstandard/copilot-studio-v2/badge)](https://verified-skill.com/skills/geekfujiwara/codeappsdevelopmentstandard/copilot-studio-v2)

Something wrong with this skill or its page? Tell us.