# Verify

Verify changes to the claude-for-msft-365-install admin scripts and commands by driving...

- Repository: https://github.com/anthropics/financial-services (40971 stars)
- Category: AI and agents
- License: Apache-2.0
- Last updated: 2026-10-28
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add anthropics/financial-services --skill verify -g -a claude-code -y`
Codex: `npx skills add anthropics/financial-services --skill verify -g -a codex -y`
Cursor: `npx skills add anthropics/financial-services --skill verify -g -a cursor -y`
Gemini CLI: `npx skills add anthropics/financial-services --skill verify -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add anthropics/financial-services`

## Description

Verify changes to the claude-for-msft-365-install admin scripts and commands by driving them against an isolated fake $HOME.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Verifying claude-for-msft-365-install

This plugin is **admin CLI tooling**, not an app. There is nothing to build and
no server to boot. The surface is the terminal: `scripts/*.sh` on macOS,
`scripts/*.ps1` on Windows.

## Lint gate

```bash
python3 scripts/check.py           # from the REPO ROOT, not the plugin dir
bash -n claude-for-msft-365-install/scripts/<script>.sh
```

`check.py` lints every manifest and self-installs the pre-commit hook that
patch-bumps `.claude-plugin/plugin.json`. Run it before committing.

## Drive the scripts against a fake $HOME

Every macOS script resolves Office paths from `$HOME`, so overriding it gives a
throwaway sandbox, you can exercise the destructive `--apply` paths without
touching real Office data.

```bash
S=<scratchpad>/sandbox
for app in Excel Word Powerpoint; do
  mkdir -p "$S/Library/Containers/com.microsoft.$app/Data/Documents/wef"
done
printf '<x/>' > "$S/Library/Containers/com.microsoft.Excel/Data/Documents/wef/aaaaaaaa-1111-1111-1111-111111111111.manifest-a.xml"

HOME=$S ./scripts/clear-addin-cache.sh                      # list
HOME=$S ./scripts/clear-addin-cache.sh --id <GUID>          # dry-run
HOME=$S ./scripts/clear-addin-cache.sh --id <GUID> --apply  # destructive
```

Seed at least **two IDs across two apps**, with **mixed upper/lowercase**. Both
properties have caught real bugs: cross-app blast radius, and a case-sensitive
glob that reported "already clear" and sent admins to a folder-wide wipe.

## Prove storage is retained

The load-bearing claim of this plugin is that clearing a manifest never touches
the user's chat history. Verify it by snapshot-diffing both trees around the
operation, against the **real** `$HOME`:

The rest: https://github.com/anthropics/financial-services/blob/HEAD/claude-for-msft-365-install/.claude/skills/verify/SKILL.md
