Microsoft Copilot Studio samples repo with a Just the Docs (Jekyll) site for navigation and search.
Live site: https://microsoft.github.io/CopilotStudioSamples/
├── authoring/ # Importable solutions and topic snippets
├── contact-center/ # ServiceNow, Salesforce, Genesys, skill handoff
├── extensibility/ # MCP servers, A2A protocol, M365 Agents SDK
├── guides/ # Implementation guide, workshop, playbook
├── infrastructure/ # VNet and deployment templates
├── sso/ # SSO with Entra ID, Okta, Chat API
├── testing/ # Functional (pytest) and load (JMeter) testing
├── ui/ # Custom UIs and platform embed samples
│ ├── custom-ui/ # Standalone chat frontends
│ └── embed/ # Widgets for ServiceNow, SharePoint, Power Apps, etc.
├── EmployeeSelfServiceAgent/ # Workday/facilities topics (pending deprecation)
├── _config.yml # Jekyll configuration
├── _layouts/ # Custom default.html (adds Browse source button)
├── _includes/ # source_link.html (Browse source / external link button)
└── Gemfile # Jekyll dependencies
- Create a folder under the appropriate category (e.g.,
ui/embed/my-sample/) - Add a
README.mdwith front matter:
---
title: My Sample
parent: Embed # Must match the parent page's title exactly
grand_parent: UI # Required for level 3 pages
nav_order: 8 # Position among siblings
---- Write the README with: description, prerequisites, setup steps, architecture notes
- Name the file
README.md(exact casing) — thejekyll-readme-indexplugin converts it toindex.html
Solutions follow the PnP format:
authoring/solutions/my-solution/
├── README.md # Description, screenshots, install steps
├── assets/ # Screenshots and diagrams
├── solution/ # Packaged .zip file(s) ready to import
└── sourcecode/ # Unpacked source (pac solution unpack)
Front matter:
---
title: My Solution
parent: Solutions
grand_parent: Authoring
nav_order: 7
---README should include:
- What the solution does and which Copilot Studio features it demonstrates
- Screenshots in
assets/(reference as) - Installation steps (import zip via make.powerapps.com > Solutions > Import)
- Any connection references or environment variables to configure
- Known issues or limitations
Update authoring/solutions/README.md Contents table after adding.
Add external_url to front matter — this replaces the "Browse source" button with "View sample in M365 Agents SDK repo":
---
title: Genesys Handoff
parent: Contact Center
nav_order: 4
external_url: "https://github.com/microsoft/Agents/tree/main/samples/dotnet/GenesysHandoff"
---Add a red label and caution callout at the top:
Deprecated
{: .label .label-red }
{: .caution }
> This sample is deprecated. Use [replacement](../path/) instead.Each category folder has a README.md with:
has_children: trueandhas_toc: falsein front matter- A manual
## Contentstable (preferred over JTD's auto-generated TOC) - Optional
## See alsosection for cross-references
GitHub > [!NOTE] alerts render as plain text in Jekyll. Use JTD callouts instead:
{: .note }
> This is a note.
{: .warning }
> This is a warning.
{: .tip }
> This is a tip.
{: .caution }
> This is a caution.
{: .important }
> This is important.- Link to other READMEs as directories, not files:
[My Sample](./my-sample/)not[My Sample](./my-sample/README.md) - Non-README markdown: strip the
.mdextension:[Setup Guide](./SETUP)not(./SETUP.md) - External links are fine as-is
New
{: .label .label-green }
Deprecated
{: .label .label-red }If markdown contains {% (e.g., URL-encoded params), wrap in raw tags:
{% raw %}
```
https://example.com?params={%22key%22:%22value%22}
```
{% endraw %}# Install dependencies (first time only)
bundle install
# Start dev server with live reload
bundle exec jekyll serve
# Site at http://127.0.0.1:4000/CopilotStudioSamples/
# Build without serving (CI check)
bundle exec jekyll buildVerify after changes:
- New page appears in sidebar nav
- Search finds the new sample (Ctrl+K)
- Internal links work (no 404s)
- Images render correctly
# Work on the docs branch
git checkout reorg/v1
# Make changes, then commit
git add -A
git commit -m "Add my-new-sample to ui/embed"
# Push to fork — GitHub Actions deploys automatically
git push origin reorg/v1Branch: reorg/v1 is the docs branch. GitHub Actions builds and deploys to Pages on every push.
To merge upstream: when ready, open a PR from reorg/v1 → main. Update .github/workflows/pages.yml to trigger on main instead of reorg/v1 before merging.
Remotes:
origin— your fork (microsoft/CopilotStudioSamples)upstream— source repo (microsoft/CopilotStudioSamples)
_config.ymlexclude patterns:*.js,*.ts,*.csetc. match recursively (*matches/in Jekyll's fnmatch)- Never add
*.htmlto exclude — it breaks theme layouts - Source
index.htmlfiles are excluded via*index.htmlsojekyll-readme-indexcan use README.md