Contributing

Share what you build

Help someone else get started with a complete, documented Copilot sample. Share only code and assets you have permission to publish.

Read the contribution guide
  1. 1

    Fork and branch

    Start from the latest main branch. Use one branch and one pull request per sample.

  2. 2

    Complete a template

    Copy the matching project template. Include source, documentation, metadata, and a real screenshot.

  3. 3

    Test and submit

    Test your setup instructions, complete the PR template, and sign the Contributor License Agreement when prompted.

Required structure

One self-contained sample

samples/
└── <prefix>-<sample-name>/
    ├── assets/
    │   ├── sample.json
    │   └── screenshot.png
    ├── README.md
    ├── .gitignore
    └── <source and app package>

Use lowercase names with hyphens, not periods. Complete the template's README and metadata, replace every placeholder, and store screenshots in the sample's assets folder.

Add your sample to the root README samples table. Avoid unrelated changes outside your sample.

End the sample-root README with its view tracker, replacing the folder name:

<img src="https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/samples/<sample-folder>" />

Submission checklist

Make it easy to run and review

  • Document the scenario, prerequisites, setup, permissions, and expected results.
  • Complete assets/sample.json, including authors, dates, and a screenshot URL and alt text. The first image by ascending order is the gallery preview.
  • Use the latest published manifest schemas and Microsoft 365 Agents Toolkit guidance.
  • In m365agents.yml, set additionalMetadata.sampleTag to pnp-copilot-pro-dev:<sample-folder> and omit projectId.
  • Never commit secrets or tenant-specific IDs. Provide redacted .env.*.sample files instead.
  • Verify the sample from a clean checkout and include test details in your PR.

Start with the right structure

Templates by sample type

da-

Declarative agent

Include a Teams/M365 app package and a declarative agent manifest.

Use template

plugin-

Plugin

Use this prefix when manifest.json contains agentSkills or agentConnectors, even if copilotAgents is also present.

Use template

cea-

Custom engine agent

Include the agent source and a Teams/M365 app package.

Use template

mcs-

Copilot Studio

Include exported or cloned Copilot Studio source in src/.

Use template

For msgext- message extension samples, follow the full contribution guide and a high-quality sample of the same type; there is no dedicated template.

Sharing is caring

Share, learn, and build together

You do not need a new sample to help. Improve a README, replace a screenshot, review a contribution, or share your experience on a community call. First-time contributors and presenters are welcome.