framework-compliance-t…
Make a cloud account compliant with a security or industry framework using Prowler Cloud.
Create and maintain GitHub Agentic Workflows (gh-aw) for Prowler. Trigger: When creating agentic workflows, modifying gh-aw frontmatter, configuring safe-outputs, setting up MCP servers in workflows, importing Copilot Custom Agents, or debugging gh-aw compilation.
Claude Code
$ npx -y skills add prowler-cloud/prowler --skill gh-aw --agent claude-code
Codex
$ npx skills add prowler-cloud/prowler --skill gh-aw -a codex -y
Cursor
$ npx skills add prowler-cloud/prowler --skill gh-aw -a cursor -y
Gemini CLI
$ npx skills add prowler-cloud/prowler --skill gh-aw -a gemini-cli -y
GitHub Copilot
$ npx skills add prowler-cloud/prowler --skill gh-aw -a github-copilot -y
OpenCode
$ npx skills add prowler-cloud/prowler --skill gh-aw -a opencode -y
Windsurf
$ npx skills add prowler-cloud/prowler --skill gh-aw -a windsurf -y
name: gh-aw
description: >
Create and maintain GitHub Agentic Workflows (gh-aw) for Prowler.
Trigger: When creating agentic workflows, modifying gh-aw frontmatter, configuring safe-outputs,
setting up MCP servers in workflows, importing Copilot Custom Agents, or debugging gh-aw compilation.
license: Apache-2.0
metadata:
author: prowler-cloud
version: "1.1"
scope: [root]
auto_invoke:
- "Creating GitHub Agentic Workflows"
- "Modifying gh-aw workflow frontmatter or safe-outputs"
- "Configuring MCP servers in agentic workflows"
- "Importing Copilot Custom Agents into workflows"
- "Debugging gh-aw compilation errors"
allowed-tools: Read, Edit, Write, Glob, Grep, Bash, WebFetch---
.github/
├── workflows/
│ ├── {name}.md # Frontmatter + thin context dispatcher
│ └── {name}.lock.yml # Auto-generated — NEVER edit manually
├── agents/
│ └── {name}.md # Full agent persona (reusable)
└── aw/
└── actions-lock.json # Action SHA pinning — commit thisSee [references/](references/) for existing workflow and agent examples in this repo.
| Item | Value in `.github/workflows/issue-triage.md` | |------|----------------------------------------------| | Trigger | `issues: labeled` with `names: [ai-issue-review]`, gated by `status/needs-triage` | | Engine / strict | `engine: copilot`, `strict: false` (custom MCP domains) | | Agent | `imports: [../agents/issue-triage.md]` | | MCP servers | `prowler` (`https://mcp.prowler.com/mcp`, Hub + docs tools only), `context7` | | Writes | `safe-outputs.add-comment` only (label automation commented out) | | Compiled by | gh-aw v0.81.6 (header of `issue-triage.lock.yml`) |
---
Agent personas MUST NOT hardcode codebase layout, file paths, skill names, tech stack versions, or project conventions. All of this lives in the repo's `AGENTS.md` files and WILL go stale if duplicated.
**Instead**: Instruct the agent to READ `AGENTS.md` at runtime:
# In the agent persona: Read `AGENTS.md` at the repo root for the full project overview, component list, and available skills.
For monorepos with component-specific `AGENTS.md` files, include a routing table that tells the agent WHICH file to read based on context — but never copy the contents of those files into the agent:
| Component | AGENTS.md | When to read | |-----------|-----------|-------------| | Backend | `api/AGENTS.md` | API errors, endpoint bugs | | Frontend | `ui/AGENTS.md` | UI crashes, rendering bugs | | Root | `AGENTS.md` | Cross-component, CI/CD |
**Why this matters**: Agent personas are deployed as workflow files. When `AGENTS.md` updates (new skills, renamed paths, version bumps), agents that READ it at runtime get the update automatically. Agents that HARDCODE it require a separate PR to stay current — and they won't.
Workflow file = **config + context only**. Agent file = **all reasoning logic**.
The workflow imports the agent via `imports:` and passes sanitized runtime context. The agent contains the persona, rules, steps, and output format. This separation makes agents reusable across workflows.
Paths resolve **relative to the importing file**, NOT from repo root:
# From .github/workflows/my-workflow.md: imports: - ../agents/my-agent.md # CORRECT - .github/agents/my-agent.md # WRONG — resolves to .github/workflows/.github/agents/
NEVER pass raw `github.event.issue.body` to the agent. Use the sanitized activation output, as `.github/workflows/issue-triage.md` does (compiler v0.81.6):
## Sanitized Issue Content
${{ steps.sanitized.outputs.text }}Title and number (`${{ github.event.issue.title }}`, `#${{ github.event.issue.number }}`) are fine to pass as context.
Workflows run read-only. Writes go through `safe-outputs`:
# GOOD
permissions:
issues: read
safe-outputs:
add-comment:
hide-older-comments: true
# BAD — never give the agent write access
permissions:
issues: write`strict: true` (default) enforces: no write permissions, explicit network config, no wildcard domains, ecosystem identifiers required. **IMPORTANT**: `strict: true` rejects custom domains in `network.allowed` — only ecosystem identifiers (`defaults`, `python`, `node`, etc.) are permitted. Workflows using custom MCP server domains (e.g., `mcp.prowler.com`) MUST use `strict: false`. This is an intentional tradeoff, not a development shortcut.
Prevent double footers with `messages.footer`:
safe-outputs:
messages:
footer: "> 🤖 Generated by [{workflow_name}]({run_url}) [Experimental]"Variables: `{workflow_name}`, `{run_url}`, `{triggering_number}`, `{event_type}`, `{status}`.
Always use `allowed` to restrict tools. Add domains to `network.allowed`:
network:
allowed:
- "mcp.prowler.com"
mcp-servers:
prowler:
url: "https://mcp.prowler.com/mcp"
allowed:
- prowler_hub_get_check_details
- prowler_hub_get_check_code
- prowler_docs_search---
gh-aw provides substrate-level and plan-level security automatically. The workflow author controls configuration-level security. Apply ALL of the following:
| Layer | How | Why | |-------|--
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…
Strict JSON:API v1.1 specification compliance. Trigger: When creating or modifying API endpoints, reviewing API responses, or…
Next.js 16 App Router patterns. Trigger: When working in Next.js App Router (app/), Server Components vs Client Components,…
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…