framework-compliance-t…
Make a cloud account compliant with a security or industry framework using Prowler Cloud.
Creates new Prowler providers (built-in or external plug-in) or adds services to existing providers. Trigger: When adding a new provider to the Prowler SDK, building an external provider plug-in (prowler.providers entry point), implementing the Provider contract (from_cli_args,
Claude Code
$ npx -y skills add prowler-cloud/prowler --skill prowler-provider --agent claude-code
Codex
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a codex -y
Cursor
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a cursor -y
Gemini CLI
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a gemini-cli -y
GitHub Copilot
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a github-copilot -y
OpenCode
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a opencode -y
Windsurf
$ npx skills add prowler-cloud/prowler --skill prowler-provider -a windsurf -y
name: prowler-provider
description: >
Creates new Prowler providers (built-in or external plug-in) or adds services to existing providers.
Trigger: When adding a new provider to the Prowler SDK, building an external provider plug-in (prowler.providers entry point), implementing the Provider contract (from_cli_args, get_scan_arguments, get_credentials_schema), or adding a new service to an existing provider.
license: Apache-2.0
metadata:
author: prowler-cloud
version: "1.1"
scope: [root, sdk]
auto_invoke:
- "Adding new providers"
- "Adding services to existing providers"
allowed-tools: Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch, TaskChoose the provider type first (`docs/developer-guide/provider.mdx`): **SDK** (official Python SDK, e.g. AWS, Azure, GCP, Kubernetes), **API** (direct REST calls, e.g. NHN, MongoDB Atlas), **Hybrid** (e.g. M365, GitHub), or **Tool/Wrapper** (delegates to an external tool: `iac`, `image`, `llm`).
prowler/providers/{provider}/
├── __init__.py
├── {provider}_provider.py # class {Provider}Provider(Provider)
├── models.py # identity/session models, {Provider}OutputOptions
├── {provider}_regions_by_service.json # regional providers only
├── exceptions/exceptions.py # provider-specific exception codes
├── lib/
│ ├── arguments/arguments.py # init_parser(self), optional validate_arguments(), SENSITIVE_ARGUMENTS
│ ├── mutelist/mutelist.py # {Provider}Mutelist(Mutelist).is_finding_muted()
│ └── service/service.py # base service class
└── services/{service}/
├── {service}_service.py
├── {service}_client.py
└── {check_name}/ # see prowler-sdk-check# prowler/providers/{provider}/services/{service}/{service}_client.py
from prowler.providers.common.provider import Provider
from prowler.providers.{provider}.services.{service}.{service}_service import {Service}
{service}_client = {Service}(Provider.get_global_provider())The client is a module-level singleton created on first import; the service fetches everything in `__init__` and checks only read attributes. A service may read another service's client, but never instantiate another provider SDK client for it. Templates: [assets/service.py](assets/service.py), [assets/client.py](assets/client.py).
Verified against `stackit` and `alibabacloud`; grep an existing provider name across `prowler/` and `tests/` to catch anything new.
| File | Change | |------|--------| | `prowler/providers/{provider}/` | Provider package (layout above) | | `prowler/providers/common/provider.py` | `elif arguments.provider == "{provider}":` branch in `init_global_provider` mapping CLI args to the constructor (exact equality, not substring) | | `prowler/lib/cli/parser.py` | Add to `known_providers`, the `usage=` string and the epilog provider list | | `prowler/__main__.py` | Import and build `{Provider}OutputOptions`; compliance output branch if the provider ships frameworks | | `prowler/config/config.py` | `Provider` enum value | | `prowler/config/config.yaml` + `prowler/config/schema/{provider}.py` + `registry.py` | Only if the provider has configurable checks | | `prowler/config/{provider}_mutelist_example.yaml` | Example mutelist | | `prowler/lib/check/models.py` | `CheckReport{Provider}(Check_Report)` dataclass | | `prowler/lib/outputs/finding.py` | Provider branches filling `auth_method`, `account_uid`, `account_name`, `resource_uid`, `region`, ... | | `prowler/lib/outputs/outputs.py` | `stdout_report` detail field | | `prowler/lib/outputs/summary_table.py` | Entity type and audited entities | | `prowler/lib/outputs/html/html.py` | `get_{provider}_assessment_summary()` | | `prowler/compliance/{provider}/__init__.py` | When the provider ships compliance frameworks (`prowler-compliance
Prowler is the world’s most widely used Open-Source Cloud Security Platform that automates security and compliance across any cloud environment.
Make a cloud account compliant with a security or industry framework using Prowler Cloud.
Vercel AI SDK patterns for the installed major (ui/package.json: `ai` 6.x, `@ai-sdk/react` 3.x). The skill name is historical;…
Django REST Framework patterns. Trigger: When implementing generic DRF APIs (ViewSets, serializers, routers, permissions,…
Reviews Django migration files for PostgreSQL best practices specific to Prowler. Trigger: When creating migrations, running…
Create and maintain GitHub Agentic Workflows (gh-aw) for Prowler. Trigger: When creating agentic workflows, modifying gh-aw…
Strict JSON:API v1.1 specification compliance. Trigger: When creating or modifying API endpoints, reviewing API responses, or…
Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication,…
Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys)…
Clean and finalize authorized natural-language text intended for readers by auditing suspicious invisible Unicode and rewriting…