aai-cli Microsoft 365
aai-labs/agent-barn
Guides work with Outlook, OneDrive, SharePoint, Teams, Excel, To Do and Planner through aai-cli's Microsoft Graph commands, starting from which service owns the data.
Audits a SharePoint document library for names and paths that break OneDrive sync, File Explorer, and Teams file access.
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditor --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .claude/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .claude/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .agents/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .agents/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .cursor/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .cursor/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pnp/sharepoint-skills.git --path Skills/sync-blocker-auditor/sync-blocker-auditor--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .gemini/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .gemini/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .github/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .github/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pnp/sharepoint-skills sync-blocker-auditor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/Skills/sync-blocker-auditor/sync-blocker-auditor .opencode/skills/sync-blocker-auditor && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "sync-blocker-auditor" agent skill from https://github.com/pnp/sharepoint-skills/tree/main/Skills/sync-blocker-auditor/sync-blocker-auditor into .opencode/skills/sync-blocker-auditor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-blocker-auditor", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
sync-blocker-auditorAudits a SharePoint document library for names and paths that break OneDrive sync, File Explorer, and Teams file access.
Sync Blocker Auditor is an agent skill from pnp/sharepoint-skills. Audits a SharePoint document library for names and paths that break OneDrive sync, File Explorer, and Teams file access. Flags illegal characters, leading/trailing spaces, trailing periods, Windows reserved names, ""/"%" legacy characters, paths over the 400-character URL limit, excessive nesting, long-term checked-out files, and junk artifacts. Scores sync readiness, proposes a safe rename for every blocker, and saves a self-contained HTML report. It is strictly read-only — it never renames, moves, or deletes…
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Documents & Office, covering Cloud office suites. It works with Microsoft OneDrive and Microsoft SharePoint. The repository describes itself as: Skills for Copilot in SharePoint. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aa9eb14. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
support.microsoft.comlearn.microsoft.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sync Blocker Auditor loads about 3.9k tokens when it runs. Until then it costs about 206 tokens; SKILL.md has 2,059 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pnp/sharepoint-skills at commit aa9eb14, republished under its MIT licence (© pnp). 2,059 words, ~3,924 tokens.
.claude/skills/sync-blocker-auditor/SKILL.md (or your agent's skills folder).SharePoint accepts file and folder names that the OneDrive sync client, File Explorer, and the Teams Files tab later refuse to handle. The result is the classic "we can't sync this file" error that surfaces one user at a time, long after the content was uploaded, with no way to see how widespread the problem is.
This skill audits a document library against Microsoft's documented naming and path restrictions, scores its sync readiness, and produces a severity-ranked HTML report with a proposed safe name for every blocked item.
It is strictly read-only: it never renames, moves, deletes, checks in, or modifies any item. The only thing it writes is the HTML report file.
Activate this skill when the user says any of the following (or close variations):
Do not use this skill to actually rename or fix items. If the user asks for the fix to be applied, explain that this skill is read-only, hand them the rename plan from the report, and point them at a rename-capable skill or a bulk-rename tool.
Determine the audit scope from the user's request and the current context, in this order:
Only audit content the current user can already see. Never invent items, paths, or values.
list_items with recursive=true to enumerate files and folders, projecting at
minimum: FileLeafRef (name), FileRef (server-relative path), FileDirRef (parent path),
FSObjType (0 = file, 1 = folder), File_x0020_Size, Modified, Editor, and the
check-out fields (CheckoutUser / IsCheckedoutToLocal) when available.list_items call can exceed the response-size limit above roughly 1,000 items, which is
exactly the size of the migrated libraries this skill targets. If that happens, fall back to
walking one folder at a time and aggregating the running totals with execute_code. If a
read fails or returns partial data, record that plainly in the report's Limitations section
instead of guessing.Tell the user the scope and item count before analysing.
Do not evaluate the rules by eye. Use execute_code to do the character counting, pattern
matching, and aggregation — exact URL lengths, character-class matches, and per-rule totals must
be computed, not estimated.
An item can match several rules; record all matches, and rank the item by its highest severity. The Scope column says which item types a rule applies to.
| ID | Rule | Detection | Scope |
|---|---|---|---|
B1 | Illegal characters | Name contains any of `" * : < > ? / \ | ` |
B2 | Leading or trailing whitespace | Name starts or ends with a space or tab | files + folders |
B3 | Trailing period | The full name ends with ., or the base name (the text before the final extension) ends with .. A period between words, as in Q3.Budget.docx, is not a finding. | files + folders |
B4 | Reserved Windows device name | Base name (case-insensitive) is CON, PRN, AUX, NUL, COM0–COM9, or LPT0–LPT9 | files + folders |
B5 | Reserved SharePoint/OneDrive name | Name is .lock or desktop.ini; _vti_ appears anywhere in the name; a file or folder at the library root is named forms; a folder name begins with ゛ or ဧ | files + folders |
B6 | Leading tilde-dollar | Name starts with ~$ — an orphaned Office lock file, disallowed by OneDrive and SharePoint | files + folders |
B7 | URL over the SharePoint limit | Full decoded URL (https://<tenant>/<site>/<library>/<path>/<name>) exceeds 400 characters | files + folders |
B8 | Name segment too long | Any single file or folder name exceeds 255 characters — the per-name limit in File Explorer and Finder, not in SharePoint itself | files + folders |
| ID | Rule | Detection | Scope |
|---|---|---|---|
R1 | Characters hostile to legacy clients and tooling | Name contains #, %, &, {, }, or +. These have been fully supported by SharePoint Online since 2017 — modern sharing links encode them correctly. They remain a risk for hand-constructed REST/CSOM URLs, migration tools, third-party integrations, and on-premises clients. | files + folders |
R2 | Path over the Windows limit | Full path exceeds 260 characters — File Explorer and the Office desktop apps cannot open, rename, or move the item, and the local sync root adds a further 30–60 characters on top. This bites long before B7 does. | files + folders |
R3 | Deep nesting | Item is more than 8 folder levels below the library root | files + folders |
R4 | Long-term check-out | Checked out for more than 7 days — colleagues only ever receive the last checked-in version | files only |
R5 | Non-printable or bidirectional characters | Name contains control characters, zero-width characters, or RTL/LTR override marks | files + folders |
R6 | TMP files | Extension is .tmp or .temp — OneDrive does not sync TMP files at all | files only |
| ID | Rule | Detection | Scope |
|---|---|---|---|
I1 | Junk artifacts | Thumbs.db, .DS_Store, ehthumbs.db | files only |
I2 | Backup / leftover files | Extension is .bak, .old, .partial, .crdownload, or .laccdb | files only |
I3 | Zero-byte files | File size is 0 bytes | files only |
I1–I3 are advisory — never present them as sync failures. Never apply a files only rule
to a folder: folders report a size of 0 and would otherwise all be flagged by I3.
Do not flag names merely for being vague, generic, or unhelpful (Document.docx,
Untitled.xlsx, Misc), and do not flag leading-dot names such as .gitignore for having an
empty base name. Readability is a different problem, handled by other skills. This skill only
reports technical sync and URL blockers.
For each item with a Blocker, derive a suggested name — as a proposal only, never applied:
B1) with a single -.#, %, &, {, }, + with - only when the item already has a Blocker;
otherwise leave them and report as R1.- or spaces into one, then trim leading/trailing spaces, tabs, and
periods.B4 reserved device names, prefix the name with file- (CON.docx → file-CON.docx).
For B5/B6, first strip the reserved ~$ or _vti_ prefix, then add file-
(~$Proposal.docx → file-Proposal.docx) — never leave the reserved prefix in place.B7/B8, shorten the base name — keep the first meaningful words, drop filler,
and always preserve the original extension. State the new full-URL length. (2), (3), …Show both the original and the proposal so a human can approve each one.
Draft one self-contained HTML file:
#b3261e), Risk (amber #a16207),
Info (blue #1e40af).<div> at width: 62%),
coloured by the rule's severity.: — sync fails for every user", "Flatten
Projects/2026/Q3/... — 6 files are within 40 characters of the URL limit").Keep percentages as whole numbers and be consistent throughout the report.
Sync Reports folder in the site's default Documents library (or
Site Assets). Never write into the library under audit unless the user explicitly asks
— writing a report into the audited scope changes the very thing that was just measured, and
the reports accumulate as findings on the next run.Sync Reports folder only if it does not exist, and only to hold the report.Sync-Blocker-Audit-<Library>-YYYY-MM-DD-HHMM.html.After saving, reply with a compact Markdown summary and the report link:
# Sync blocker audit complete
[Open the report](<link>)
- Scope: <library / folder audited>
- Items scanned: <n> (<n> files, <n> folders)
- Sync readiness: <n>% (Blockers <n> · Risks <n> · Info <n>)
- Top blocker: <rule label> on <n> items
- Longest URL: <n> characters (limit 400)User: "Why won't the Project Files library sync?"
Agent response after processing:
I audited Project Files (412 items — 366 files, 46 folders) against the OneDrive sync and URL rules.
Metric Result Sync readiness 91% Blockers / Risks / Info 36 / 58 / 9 Top blocker Illegal characters ( B1) on 21 itemsLongest URL 438 characters (limit 400) The worst offender is
Clients/Northwind/Contracts/Q3: Signed & Approved/— the:in that folder name blocks every one of the 14 files inside it for every synced user.I saved the report to
Sync Reports/Sync-Blocker-Audit-Project-Files-2026-08-20-1130.html, including a proposed safe name for all 36 blocked items. Nothing was renamed.
Sync Reports folder to hold it).B7), 260 for Windows (R2).execute_code. Never estimate a character
count by inspection.` so trailing
spaces stay visible)..lock, desktop.ini, ~$…, _vti_, root forms) and the TMP-files behaviour behind B5, B6, and R6.B7), the 255-character per-name limit (B8), and the 260-character Windows limit (R2).The illegal-character, whitespace, and trailing-period rules (
B1–B3) are enforced by SharePoint and Windows at upload and rename time rather than being listed in the article above. They matter because content that arrived through migrations, the API, or third-party tools bypassed that enforcement — which is why these names exist in real libraries at all.
© pnp, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in Skills/sync-blocker-auditor/sync-blocker-auditor of pnp/sharepoint-skills.
Open the folder on GitHubat commit aa9eb14
Sync Blocker Auditor next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Sync Blocker Auditor this skillpnp/sharepoint-skills | 131 | — | ~3.9k | Automated safety check: Pass | MIT | |
| aai-cli Microsoft 365aai-labs/agent-barn | 109 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Add Excelmicrosoft/power-platform-skills | 972 | — | ~796 | Automated safety check: Notes | MIT | |
| Msgraphcodemie-ai/codemie-code | 294 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Workiqmicrosoft/work-iq | 1k | — | ~15k | Automated safety check: Pass | Custom licence | |
| Workiq Previewmicrosoft/work-iq | 1k | — | ~3.3k | Automated safety check: Pass | Custom licence |
aai-labs/agent-barn
Guides work with Outlook, OneDrive, SharePoint, Teams, Excel, To Do and Planner through aai-cli's Microsoft Graph commands, starting from which service owns the data.
microsoft/power-platform-skills
Adds Excel Online (Business) connector to a Power Apps code app.
codemie-ai/codemie-code
Work with Microsoft 365 services via the Graph API — emails, calendar events, SharePoint sites (read and write), Teams chats and channel messages, OneDrive files, OneNote notebooks, Planner task…
microsoft/work-iq
WorkIQ tools for Microsoft 365 workplace data and actions. An agent skill from microsoft/work-iq.
microsoft/work-iq
WorkIQ tools for Microsoft 365 workplace data and actions. An agent skill from microsoft/work-iq.
mukul975/Anthropic-Cybersecurity-Skills
Implements DLP policies using Microsoft Purview PowerShell cmdlets and the Graph API to protect data across Exchange Online, SharePoint, OneDrive, Teams, endpoints, and Power BI, including…
pnp/sharepoint-skills
Generates a polished, self-contained HTML heatmap scorecard — a weighted comparison matrix where entities (rows) are scored across dimensions (columns), with computed totals, rank badges, and a…
pnp/sharepoint-skills
Analyze the current SharePoint document library in read-only mode and produce a structured summary of files, folders, file types, recent activity, naming issues, and organization recommendations.
pnp/sharepoint-skills
Audits SharePoint pages, news posts, and hyperlink fields for broken or risky links and saves a self-contained HTML link-health report to the site.
pnp/sharepoint-skills
Analyze selected construction images, create missing object metadata columns, and write concise visual metadata back to SharePoint columns using explicit image-analysis, list-schema, list-update…
pnp/sharepoint-skills
Renders a polished, self-contained HTML briefing from any data source — SharePoint lists, uploaded documents, or a verbal description.
pnp/sharepoint-skills
Generates a polished, self-contained HTML executive report or dashboard from any data source — SharePoint lists, CSV exports, or a user description.
Works with
Categories
Audits a SharePoint document library for names and paths that break OneDrive sync, File Explorer, and Teams file access. Sync Blocker Auditor is an agent skill from pnp/sharepoint-skills. Audits a SharePoint document library for names and paths that break OneDrive sync, File Explorer, and Teams file access.
Sync Blocker Auditor fits situations like: tasks that involve Cloud office suites.
Run `npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a claude-code`. Or copy the skill folder (Skills/sync-blocker-auditor/sync-blocker-auditor in pnp/sharepoint-skills) into .claude/skills/sync-blocker-auditor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a codex`. Or copy the skill folder (Skills/sync-blocker-auditor/sync-blocker-auditor in pnp/sharepoint-skills) into .agents/skills/sync-blocker-auditor in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pnp/sharepoint-skills --skill sync-blocker-auditor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sync-blocker-auditor, .gemini/skills/sync-blocker-auditor, .github/skills/sync-blocker-auditor and .opencode/skills/sync-blocker-auditor in your project.
SKILL.md names no scripts, command-line tools or credentials: Sync Blocker Auditor is instructions for the agent only.
SKILL.md names 2 domains. As links in the text: support.microsoft.com and learn.microsoft.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Sync Blocker Auditor is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Sync Blocker Auditor: aai-cli Microsoft 365 (aai-labs/agent-barn, 109 stars), Add Excel (microsoft/power-platform-skills, 972 stars), Msgraph (codemie-ai/codemie-code, 294 stars) and Workiq (microsoft/work-iq, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pnp (a GitHub organization) maintains it in pnp/sharepoint-skills, which has 131 GitHub stars. The repository holds 51 skills in this directory. The repository was last updated on October 6, 2026.
Source: pnp/sharepoint-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.