Agent skill · Audited from source

earnings-preview-single

skill · anthropics/financial-services-pluginsApache-2.0 licenceAudited 29 Oct 2026 · source 1a9a359bc586

★ 40,893pushed today
✓SAFEGrade B · 89/100 · 29 Oct 2026 · 1a9a359
40,893repo stars · whole anthropics/financial-services-plugins

Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit 1a9a359bc586 and observed filesystem and network access and no hard-coded secrets. What it does: Verify changes to the claude-for-msft-365-install admin scripts and commands by driving them against an isolated fake $HOME.

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “earnings-preview-single (anthropics/financial-services-plugins)”. Retrieved 29 Oct 2026. https://modelsatlas.com/skills/anthropics/earnings-preview-single

Trust audit

Audit 0.4.1 · source read 29 Oct 2026

Trust score89/100✓SAFE B
0 critical0 high0 medium10 low2 info

SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 13,985 of 14,816 audited skills.

What the source does

  • FilesystemDeclared6 observations
  • NetworkDeclared3 observations
  • ShellNone observedNo commands run in the source
  • DependenciesNot pinnedSome versions float
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS0
L1 Static sourceSecrets, path traversal, supply chain, hidden codePASS10
L2 InstructionsPrompt injection, authority framing, hidden directivesPASS2
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (12)

LOWFilesystem / pathfs.traversal · managed-agent-cookbooks/earnings-reviewer/agent.yaml:7
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
file: ../../plugins/agent-plugins/earnings-reviewer/agents/earnings-reviewer.md
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · managed-agent-cookbooks/earnings-reviewer/agent.yaml:25
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
- { from_plugin: ../../plugins/agent-plugins/earnings-reviewer }
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · managed-agent-cookbooks/earnings-reviewer/subagents/model-updater.yaml:20
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
- { path: ../../../plugins/agent-plugins/earnings-reviewer/skills/model-update }
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · managed-agent-cookbooks/earnings-reviewer/subagents/note-writer.yaml:17
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
- { path: ../../../plugins/agent-plugins/earnings-reviewer/skills/morning-note }
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · managed-agent-cookbooks/earnings-reviewer/subagents/note-writer.yaml:18
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
- { path: ../../../plugins/agent-plugins/earnings-reviewer/skills/xlsx-author }
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · claude-for-msft-365-install/examples/python-bootstrap/README.md:26
F-04 Network egressCWE-200 · CWE-319Layer L1
http://127.0.0.1:8080/bootstrap
Why
No further detail recorded for this rule.
Fix
—
LOWSupply chainsupply.unpinned · claude-for-msft-365-install/examples/python-bootstrap/requirements.txt
F-08 Supply chainCWE-829 · CWE-1357Layer L1
fastapi, uvicorn, PyJWT
Why
3 requirement(s) not pinned with ==
Fix
pin exact versions
LOWSupply chainsupply.unpinned · plugins/agent-plugins/model-builder/skills/dcf-model/requirements.txt
F-08 Supply chainCWE-829 · CWE-1357Layer L1
openpyxl, requests
Why
2 requirement(s) not pinned with ==
Fix
pin exact versions
LOWSupply chainsupply.unpinned · plugins/agent-plugins/pitch-agent/skills/dcf-model/requirements.txt
F-08 Supply chainCWE-829 · CWE-1357Layer L1
openpyxl, requests
Why
2 requirement(s) not pinned with ==
Fix
pin exact versions
LOWSupply chainsupply.unpinned · plugins/vertical-plugins/financial-analysis/skills/dcf-model/requirements.txt
F-08 Supply chainCWE-829 · CWE-1357Layer L1
openpyxl, requests
Why
2 requirement(s) not pinned with ==
Fix
pin exact versions
INFOPrompt injectionprompt.credential_read · README.md:136
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
> MCP access may require a subscription or API key from the provider.
Why
asks the agent to read credentials
Fix
—
INFOPrompt injectionprompt.credential_read · plugins/partner-built/lseg/README.md:61
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
- Access to the LSEG MCP Server with valid credentials
Why
asks the agent to read credentials
Fix
—

Audit 0.4.1 · source sha 1a9a359bc586 · 29 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publisheranthropics GitHub organizationOwner of the repository this skill is read from
  • Source folderanthropics/financial-services-pluginsThe exact folder we audited
  • LicenceApache-2.0As the repository states it
  • Commit pinned for this verdict1a9a359bc586A new audit runs when the source changes
  • Repository statusNot archivedPushed today
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

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

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

# 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`:

```bash
snap() {
  for app in Excel Word Powerpoint; do
    find "$HOME/Library/Containers/com.microsoft.$app/Data/Library/WebKit/WebsiteData" \
         -type f -exec stat -f '%N %z %m' {} \; 2>/dev/null
    find "$HOME/Library/Containers/com.microsoft.$app/Data/Documents/wef" \
         -type f -exec stat -f 'WEF %N %z' {} \; 2>/dev/null
  done | sort
}
snap > before.txt;  <run the script>;  snap > after.txt;  diff before.txt after.txt
```

Manifests live in `Data/Documents/wef`; storage lives in
`Data/Library/WebKit/WebsiteData`. Different subtrees — the diff should show
only the manifest you removed. **Restore any planted files and re-diff to
confirm you left the machine as you found it.**

## Gotchas

- **The Bash tool runs zsh.** Scripts are `#!/usr/bin/env bash`; test bash-only
  behaviour (`shopt`, glob semantics) inside `bash <<'EOF' ... EOF`, not inline.
- **`PRAGMA integrity_check` and `SELECT count(*)` fail on exported IndexedDB
  files** with `no such collation sequence: IDBKEY`. That is WebKit's custom
  collation, not corruption — it fails on the source file too. Verify
  completeness with `SELECT sum(length(value)) FROM Records;` on both sides.
- **Never claim the `.ps1` scripts work without running them on Windows.**
  macOS has no PowerShell, so a `.ps1` change verified only here is unverified.
  Run it on a real Windows host against Windows PowerShell 5.1, and always
  include a **parse check** before the behavioural ones:

  ```powershell
  $e = $null
  [System.Management.Automation.PSParser]::Tokenize(
    (Get-Content -Raw .\clear-addin-cache.ps1), [ref]$e) | Out-Null
  if ($e.Count) { $e | ForEach-Object { $_.Message } } else { 'parse ok' }
  ```

  A file can be perfectly fine on macOS and fail to parse outright on Windows
  (see the ASCII note below), so parsing is the first thing to establish.

- **`.ps1` files must be pure ASCII** (enforced by `scripts/check.py`).
  Windows PowerShell 5.1 reads a BOM-less `.ps1` as ANSI, so an em dash decodes
  to mojibake containing `"`, which terminates a string and breaks the parse.
  `clear-addin-cache.ps1` shipped broken this way and no macOS check caught it.
- Probe the arg parser. `--flag` as the final argument makes `shift 2` fail
  under `set -e` and exits 1 with **no output**; each flag needs a
  `[ $# -ge 2 ]` guard.

Excerpt, first 4,199 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 1a9a359

Download folder ↗
claude plugin install financial-analysis@claude-for-financial-services
claude plugin install pitch-agent@claude-for-financial-services
claude plugin install gl-reconciler@claude-for-financial-services
claude plugin install market-researcher@claude-for-financial-services
claude plugin install investment-banking@claude-for-financial-services
claude plugin install equity-research@claude-for-financial-services

Commands as the repository documents them: shown, never run by us. Our verdict covers commit 1a9a359bc586 only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
Claude DesktopMentioned in its text, not testedSkills for Claude Desktop · About Claude Desktop
GitHub CopilotMentioned in its text, not testedSkills for GitHub Copilot · About GitHub Copilot
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. ✓SAFE B 89 / 100

    first audit · source 1a9a359bc586

README badge

For maintainers · shows the latest audit

ModelsAtlas: SAFE BMODELSATLASSAFE · B
[![ModelsAtlas: SAFE B](https://modelsatlas.com/skills/anthropics/earnings-preview-single/badge.svg)](https://modelsatlas.com/skills/anthropics/earnings-preview-single/)

The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.

Similar skills

Add this badge to your README

[![ModelsAtlas: SAFE B](https://modelsatlas.com/skills/anthropics/earnings-preview-single/badge.svg)](https://modelsatlas.com/skills/anthropics/earnings-preview-single/)

Questions about earnings-preview-single

Is earnings-preview-single safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can earnings-preview-single access on my machine?
The audit observed that it reaches the network and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does earnings-preview-single work with?
Its documentation mentions claude-code, claude-desktop and copilot. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (1a9a359bc586), read on 2026-10-29. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.