Brand Template Enforcer
The Brand Template Enforcer is a Microsoft Copilot Studio skill that ensures new PowerPoint presentations and Word documents are created from approved brand templates instead of blank files.
The skill supports:
- PowerPoint presentations and templates:
.pptx - Word documents and templates:
.docxand.dotx
PowerPoint format requirement:
.potxtemplate files do not work with this workflow. Open the.potxin PowerPoint and use Save As to create a.pptxbefore adding it to SharePoint orassets/. Renaming the extension is not sufficient.
The package supports templates provided through SharePoint agent knowledge or
bundled directly in the skill’s assets/ folder. The downloadable ZIP does not
include a PowerPoint or Word template, so add one through either supported route.
Quick start
If you do not need specific written brand guidance or multi-template routing, you do not need to edit the skill files or manifest:
- Download
brand-template-enforcer.zip. - Import it in Copilot Studio from Build > Add skill > Upload a skill.
The recommended approach is to make the approved PowerPoint or Word template available through SharePoint agent knowledge. The skill automatically discovers the compatible template and uses it when generating a file. Disabled starter manifest entries and unresolved placeholders do not interfere with this automatic discovery.
Bundling a template directly in the skill’s assets/ folder is also supported.
Use this option when a self-contained or offline package is more important than
central template management. You must extract the ZIP, add the template, and
repackage it before importing; the complete skill ZIP must remain within the
current 20 MB limit.
If you want more granular control, extract the ZIP and complete the applicable placeholders:
- Fill in the brand-guidance placeholders in
SKILL.mdto specify voice, fonts, colors, terminology, imagery, layout, legal language, and other brand rules. - Configure
assets/template-manifest.jsonto support multiple templates, explicit defaults, priorities, exact SharePoint sources, and predictable routing by deliverable type. - Repackage
SKILL.md,assets/, andreferences/at the ZIP root before importing the customized skill.
Recommended setup
Store production templates in SharePoint and add their location as agent knowledge. This is the preferred approach because the brand team can update the template in SharePoint without requiring the skill ZIP to be rebuilt and uploaded again. At runtime, the agent resolves the configured SharePoint file and uses the latest version available from that location.
You can bundle templates directly in assets/ when offline portability or a
self-contained package is more important. However, Copilot Studio skills in the
new experience are currently capped at 20 MB total, including all Markdown,
JSON, references, and template binaries.
The manifest is optional
The skill works without editing assets/template-manifest.json. If the
agent has one clearly identifiable template for the requested format in
assets/ or configured SharePoint knowledge, it discovers and uses that
template automatically. Disabled starter entries and unresolved manifest
placeholders are ignored; they do not block automatic discovery.
Configure the manifest when it provides a practical benefit:
| Scenario | Benefit of configuring the manifest |
|---|---|
| Multiple PowerPoint or Word templates | Routes executive summaries, deep dives, marketing decks, statements of work, formal letters, and other deliverables to different templates |
| A preferred fallback template | Defines an explicit default for PowerPoint or Word |
| Overlapping template purposes | Uses priority to determine which matching template wins |
| Users describe deliverables in different ways | Uses useWhen phrases such as executive briefing, marketing deck, or formal letter for predictable selection |
| Similar filenames or templates in several knowledge locations | Identifies the exact SharePoint URL, filename, and knowledge source |
| Image-heavy or slide-master PowerPoint templates | Stores explicit brandRules and enables master-layout-only inspection |
For a simple one-template setup, the recommended path is to leave the skill
unchanged and add the template through SharePoint agent knowledge. Alternatively,
place the template directly in assets/ and repackage the skill. For a
multi-template setup, configure and enable one manifest entry for each template.
Step-by-step setup
Step 1: Extract the skill
Extract brand-template-enforcer.zip. Confirm that the extracted directory
contains:
SKILL.md
assets/template-manifest.json
references/PPTX-GENERATION.md
references/TEMPLATE-SELECTION.md
Keep SKILL.md at the skill root.
Step 2: Upload approved templates to SharePoint
For each PowerPoint or Word template:
- Upload the approved
.pptx,.docx, or.dotxfile to a stable SharePoint location. - Copy the complete URL for the specific file.
- Record the exact filename, including its extension.
- Prefer replacing or versioning the file at the same configured location when the brand team publishes an update.
Step 3: Add the template as agent knowledge in SharePoint
In Copilot Studio:
- Open the agent.
- Open the Build tab.
- Add the SharePoint site, library, folder, or file as knowledge.
- Record the knowledge-source name exactly as it appears in the agent.
- Confirm that the agent identity has permission to retrieve the template.
Adding a URL to the manifest is not sufficient by itself; the SharePoint location must also be configured as knowledge.
Step 4: Optionally configure the template manifest
Skip this step for a simple one-template setup. Complete it when you need the multi-template routing, defaults, priorities, exact-source mapping, or image-template guidance described above.
Open assets/template-manifest.json and replace:
| Placeholder | Replace with |
|---|---|
{{POWERPOINT_TEMPLATE_SHAREPOINT_URL}} |
Complete SharePoint URL for the approved PowerPoint file |
{{POWERPOINT_TEMPLATE_FILE_NAME}} |
Exact PowerPoint filename, including .pptx |
{{SHAREPOINT_KNOWLEDGE_SOURCE_NAME}} |
Exact SharePoint knowledge-source name configured on the agent |
The starter manifest also contains disabled entries for common deliverables:
| Template type | URL placeholder | Filename placeholder |
|---|---|---|
| Executive-summary PowerPoint | {{EXECUTIVE_SUMMARY_PPT_SHAREPOINT_URL}} |
{{EXECUTIVE_SUMMARY_PPT_FILE_NAME}} |
| Deep-dive PowerPoint | {{DEEP_DIVE_PPT_SHAREPOINT_URL}} |
{{DEEP_DIVE_PPT_FILE_NAME}} |
| Marketing PowerPoint | {{MARKETING_PPT_SHAREPOINT_URL}} |
{{MARKETING_PPT_FILE_NAME}} |
| Statement-of-work Word document | {{SOW_DOCX_SHAREPOINT_URL}} |
{{SOW_DOCX_FILE_NAME}} |
| Formal-letter Word document | {{FORMAL_LETTER_DOCX_SHAREPOINT_URL}} |
{{FORMAL_LETTER_DOCX_FILE_NAME}} |
For each template you want the manifest to manage:
- Replace its URL and filename placeholders.
- Confirm its
knowledgeSourceName. - For an image-heavy or slide-master template, complete
brandRulesand setinspectionModetomaster-layout-only. - Change
enabledfromfalsetotrue. - Update
useWhenwith phrases users will actually say. - Delete unused starter entries if desired.
Then review:
id: Give each template a unique lowercase, hyphenated identifier.enabled: Enable only fully configured templates.defaults: Set the default PowerPoint and Word template IDs.format: Usepowerpointorword.inspectionMode: Useautonormally ormaster-layout-onlywhen OCR is not useful.brandRules: Declare per-template brand identity, fonts, colors, and guidance that cannot be extracted from image-heavy templates.priority: Higher values win when multiple templates match.useWhen: Add realistic phrases describing when the template applies.sources: List SharePoint and optional local sources in preferred order.
Add a separate manifest entry for every additional template.
Step 5: Complete the brand guidance in SKILL.md
Open SKILL.md and search for {{. Replace every applicable placeholder in
the Brand adherence guidance section.
Brand identity
| Placeholder | Information needed |
|---|---|
{{BRAND_NAME}} |
Organization or brand name |
{{BRAND_DESCRIPTION}} |
Short description of the brand |
{{LOGO_USAGE_RULES}} |
Approved logo placement, sizing, and exclusions |
{{TRADEMARK_TEXT}} |
Required trademark or attribution language |
Writing style
| Placeholder | Information needed |
|---|---|
{{BRAND_VOICE_AND_TONE}} |
Approved voice, tone, and personality |
{{DEFAULT_AUDIENCE}} |
Default reader or presentation audience |
{{READING_LEVEL}} |
Target reading level |
{{PREFERRED_TERMS}} |
Required product, service, and organizational terminology |
{{PROHIBITED_TERMS}} |
Words or phrases that must not be used |
{{CAPITALIZATION_RULES}} |
Heading, title, and product-name capitalization |
{{DATE_NUMBER_CURRENCY_RULES}} |
Date, number, time, and currency conventions |
{{REQUIRED_LEGAL_LANGUAGE}} |
Required legal, confidentiality, or compliance text |
Typography
| Placeholder | Information needed |
|---|---|
{{POWERPOINT_TITLE_FONT}} |
Approved PowerPoint title font |
{{POWERPOINT_BODY_FONT}} |
Approved PowerPoint body font |
{{WORD_HEADING_FONT}} |
Approved Word heading font |
{{WORD_BODY_FONT}} |
Approved Word body font |
{{FALLBACK_FONTS}} |
Approved fonts when the primary font is unavailable |
{{POWERPOINT_MIN_TITLE_SIZE_PT}} |
Minimum PowerPoint title size |
{{POWERPOINT_MIN_BODY_SIZE_PT}} |
Minimum PowerPoint body size |
{{WORD_BODY_SIZE_AND_SPACING}} |
Word body size, line spacing, and paragraph spacing |
Color, layout, and imagery
| Placeholder | Information needed |
|---|---|
{{PRIMARY_COLOR_HEX}} |
Primary brand color |
{{SECONDARY_COLOR_HEX}} |
Secondary brand color |
{{ACCENT_COLOR_HEX}} |
Accent color |
{{APPROVED_BACKGROUND_COLORS}} |
Approved background palette |
{{APPROVED_TEXT_COLORS}} |
Approved text palette |
{{PROHIBITED_COLOR_COMBINATIONS}} |
Color combinations that must not be used |
{{MINIMUM_CONTRAST_REQUIREMENT}} |
Accessibility contrast requirement |
{{IMAGERY_STYLE}} |
Approved photography or illustration style |
{{ICON_STYLE}} |
Approved icon style |
{{CHART_STYLE}} |
Approved chart colors, labels, and formatting |
{{CONTENT_DENSITY}} |
Desired amount of content per page or slide |
{{MARGIN_AND_WHITESPACE_RULES}} |
Required margins, spacing, and whitespace |
{{FOOTER_RULES}} |
Footer, classification, confidentiality, and page-number rules |
Remove optional placeholder lines that do not apply, or replace them with
Not specified; follow the selected template. Do not leave raw placeholders in
a production skill.
Brand placeholders in SKILL.md are optional explicit guidance. Unresolved
placeholders are ignored and must never appear in generated content. Manifest
placeholders need to be replaced only for entries you enable. Placeholders shown
in disabled starter entries or references/ can remain unchanged.
Do not rely on template inference for image-only or master-only presentations.
If text extraction returns no useful content or the master uses graphics the
runtime cannot render, declare the known fonts, colors, identity, and usage
rules in that template entry’s brandRules.
Step 6: Optionally bundle local templates
To use local templates instead of or in addition to SharePoint:
- Copy the template directly into
assets/. - Add an
assetsource before the SharePoint source:
{
"type": "asset",
"path": "assets/organization-slide-master.pptx"
}
- Keep the complete ZIP at or below 20 MB.
- Rebuild and re-upload the skill whenever the local template changes.
Step 7: Repackage and upload
Before packaging, ensure every enabled manifest entry is fully configured.
Placeholders can remain in SKILL.md and disabled starter entries; the skill
ignores them rather than printing them or allowing them to block template
discovery.
Create a ZIP with SKILL.md, assets/, and references/ at the root. Upload
the ZIP from Build > Add skill > Upload a skill in Copilot Studio.
Step 8: Test before production
Test at least:
- A PowerPoint request that should use the default template.
- A Word request if a Word template is configured.
- A request that should select a specialized template.
- A missing or inaccessible template.
- A read-only request that should not invoke the skill.
Confirm that the agent retrieves the correct binary, copies it to
/app/workspace/, invokes analyzing-pptx for PowerPoint inspection, preserves
the brand, and identifies the selected template source.
Manifest fields
version
Keep this set to:
"version": 1
defaults
Specifies which template to use when no useWhen rule matches.
"defaults": {
"powerpoint": "executive-deck",
"word": "standard-report"
}
Each value must match the id of an entry in templates.
Use null when there is no default:
"defaults": {
"powerpoint": null,
"word": null
}
id
A unique identifier for the template.
"id": "executive-deck"
Requirements:
- Use lowercase letters, numbers, and hyphens.
- Do not use the same ID for multiple templates.
- The ID does not have to match the filename, but matching names are easier to maintain.
enabled
Controls whether the template participates in selection:
"enabled": true
Keep starter or incomplete entries set to false. Enable an entry only after
its source placeholders and selection rules are complete.
format
Identifies the Office application that can use the template.
PowerPoint:
"format": "powerpoint"
Word:
"format": "word"
Do not use file extensions as the format value.
sources
An ordered list of locations from which the actual Office template can be retrieved.
"sources": [
{
"type": "asset",
"path": "assets/executive-deck.pptx"
},
{
"type": "sharepointKnowledge",
"url": "{{EXECUTIVE_DECK_SHAREPOINT_URL}}",
"fileName": "executive-deck.pptx",
"knowledgeSourceName": "{{SHAREPOINT_KNOWLEDGE_SOURCE_NAME}}"
}
]
Requirements:
- List sources in preferred resolution order.
- For
asset, the file must exist at the specified relative path. - For
sharepointKnowledge, provide the complete URL and exact filename. - Configure the SharePoint location as knowledge on the Copilot Studio agent.
- Never enable an entry while its source contains
{{PLACEHOLDER}}values. - Always use forward slashes
/for asset paths. - Do not use local absolute paths such as
C:\Templates\template.pptx.
priority
Controls which template wins when multiple useWhen rules match.
"priority": 100
Higher numbers have higher priority. A practical convention is:
| Priority | Recommended use |
|---|---|
100 |
Specialized template that should win when matched |
50 |
General-purpose template |
10 |
Fallback template |
If two matching templates have the same priority, the agent asks the user to choose.
useWhen
Lists natural-language situations in which the template should be selected.
"useWhen": [
"executive presentation",
"leadership review",
"steering committee"
]
Use terms that users are likely to include in requests. Describe the
deliverable, audience, or scenario rather than broad words such as
document or presentation.
Good rules:
executive steering committee presentationcustomer proposalinternal project status reportsales pitch deckformal business letter
Avoid overlapping rules unless priority clearly determines which template should win.
How template selection works
The skill selects templates in this order:
- A template explicitly requested by the user.
- Ignore entries where
enabledisfalse. - The highest-priority compatible template whose
useWhenrule matches. - The compatible enabled default declared in the manifest.
- The only compatible template discovered in
assets/or agent knowledge. - The discovered template whose filename and metadata best match the request.
- A user selection when multiple templates remain equally suitable.
After selecting a template, the skill resolves its sources in order:
- Use the local
assetwhen it exists. - Otherwise retrieve the exact binary from
sharepointKnowledge. - Stop if neither source can provide the actual Office file.
If no compatible template exists, the skill stops instead of silently creating an unbranded file. The user can explicitly approve an unbranded exception.