{"owner":"anthropics","repo":"financial-services","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"files":{"CLAUDE.md":"# Financial Services Plugins\n\nCowork plugins and Claude Managed Agent templates for financial services. Each named agent ships two ways from one source.\n\n## Repository Structure\n\n```\n├── plugins/\n│   ├── agent-plugins/               #   named agents — one self-contained plugin each\n│   │   └── <slug>/\n│   │       ├── .claude-plugin/plugin.json\n│   │       ├── agents/<slug>.md     #   ← canonical system prompt (one source, two wrappers)\n│   │       └── skills/              #   ← bundled copies, synced from vertical-plugins/\n│   ├── vertical-plugins/            #   FSI verticals — skill sources, commands, MCPs\n│   │   └── <vertical>/\n│   │       ├── .claude-plugin/plugin.json\n│   │       ├── commands/\n│   │       ├── skills/\n│   │       └── .mcp.json\n│   └── partner-built/               #   partner plugins (LSEG, S&P Global)\n├── managed-agent-cookbooks/         # CMA cookbooks (one dir per named agent)\n│   └── <slug>/\n│       ├── agent.yaml               #   system + skills → ../../plugins/agent-plugins/<slug>/...\n│       ├── subagents/*.yaml         #   depth-1 leaf workers\n│       ├── steering-examples.json\n│       └── README.md                #   security tier + handoff notes\n├── claude-for-msft-365-install/     # admin tooling for the Microsoft 365 add-in (separate from FSI plugins)\n└── scripts/                         # deploy-managed-agent.sh, check.py, validate.py, orchestrate.py, sync-agent-skills.py\n```\n\nRun `python3 scripts/check.py` before committing — it lints every manifest, verifies all `system.file` / `skills.path` / `callable_agents.manifest` references resolve, fails if any `agent-plugins/<slug>/skills/` copy has drifted from its `vertical-plugins/` source, and rejects non-ASCII bytes in a `.ps1` without a UTF-8 BOM.\n\n**Keep `.ps1` files pure ASCII.** Windows PowerShell 5.1 — still the default shell on managed Windows — decodes a BOM-less `.ps1` using the machine's ANSI code page, not UTF-8. An em dash or curly quote becomes mojibake that can contain a literal `\"`, which terminates a string and makes the whole script fail to *parse*. Write `--`, not `—`. This is invisible on macOS and fatal on Windows; `check.py` gates it. **Edit skills in `vertical-plugins/`**, then run `python3 scripts/sync-agent-skills.py` to propagate into the agent bundles.\n\n`check.py` also self-installs a `pre-commit` hook (`git config core.hooksPath .githooks` — no Husky/Node). The hook patch-bumps any plugin's `.claude-plugin/plugin.json` `version` so a branch ends up exactly one patch ahead of `main` (bumped once, not per commit — a plugin's `version` gates update delivery to already-installed users). The `version-bump` GitHub Action enforces the same rule on PRs as a backstop. Bypass a single commit with `git commit --no-verify`; bump logic lives in `scripts/version_bump.py`.\n\n## Key Files\n\n- `marketplace.json`: Marketplace manifest - registers all plugins with source paths\n- `plugin.json`: Plugin metadata - name, description, version, and component discovery settings\n- `commands/*.md`: Slash commands invoked as `/plugin:command-name`\n- `skills/*/SKILL.md`: Detailed knowledge and workflows for specific tasks\n- `*.local.md`: User-specific configuration (gitignored)\n- `mcp-categories.json`: Canonical MCP category definitions shared across plugins\n\n## Development Workflow\n\n1. Edit markdown files directly - changes take effect immediately\n2. Test commands with `/plugin:command-name` syntax\n3. Skills are invoked automatically when their trigger conditions match\n"}}