
prowler-changelog
Manages changelog entries for Prowler components following keepachangelog.com format. Trigger: When creating PRs, adding changelog entries, or working with any CHANGELOG.md file in ui/, api/, mcpserver/, or prowler/.
- Installs
- 66
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/prowler-cloud/prowler --skill prowler-changelog- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads prowler-changelog automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
How changelog entries work: fragments
A PR never edits unreleased CHANGELOG.md content directly; use fragments instead. Released-block typo/correction fixes are the only direct-edit exception and are described below. For regular entries, add one small fragment file per entry under the component's changelog.d/ directory. Fragments are compiled into the component's CHANGELOG.md at release time (deleting the consumed fragments), so concurrent PRs never conflict on the changelog.
| Component | Fragments directory | Compiled file |
|---|---|---|
| UI | ui/changelog.d/ | ui/CHANGELOG.md |
| API | api/changelog.d/ | api/CHANGELOG.md |
| MCP Server | mcp_server/changelog.d/ | mcp_server/CHANGELOG.md |
| SDK | prowler/changelog.d/ | prowler/CHANGELOG.md |
"What's unreleased" = "what's in changelog.d/". The compiled CHANGELOG.md files contain only released versions.
Fragment filename
<slug>.<type>.md
<slug>is free-form ([A-Za-z0-9][A-Za-z0-9._-]*), chosen by the author, ideally descriptive of the change (e.g.securityhub-delegated-admin). The PR number is also a valid slug (e.g.11259) when it is already known; it is never required.<type>maps 1:1 to the keepachangelog sections:
<type> | Section | Usage |
|---|---|---|
added | ### 🚀 Added | New features, checks, endpoints |
changed | ### 🔄 Changed | Modifications to existing functionality |
deprecated | ### ⚠️ Deprecated | Features marked for removal |
removed | ### ❌ Removed | Deleted features |
fixed | ### 🐞 Fixed | Bug fixes |
security | ### 🔐 Security | Security patches, CVE fixes |
- A PR adds as many fragment files as entries it needs, freely mixing types: one file per entry. E.g. a PR touching Added, Changed and Fixed ships
kms-rotation-check.added.md+kms-metadata-cache.changed.md+kms-disabled-keys.fixed.md, and all compile with the same PR link into their own sections. - Several entries of the SAME type: a different slug per entry (
kms-rotation-check.added.md,kms-rotation-docs.added.md). - At least one fragment per touched component, same as the old one-entry-per-changelog rule.
Fragment content
The file contains ONLY the entry text, exactly as it should appear in the changelog, on a single line ending with a trailing newline:
echo '`securityhub_delegated_admin_enabled_all_regions` check for AWS provider, verifying that Security Hub has a delegated administrator, is active in all opted-in regions, and has organization auto-enable on' > prowler/changelog.d/securityhub-delegated-admin.added.md
Rules (same prose conventions as always):
- NEVER write the PR link in the text. It is attached automatically at compile time (the compile workflow resolves the PR that added the fragment from git history). Writing
[(#NNNN)](...)in a fragment produces a duplicated link. - No period at the end
- Do NOT start with redundant verbs (the section header already provides the action)
- Be specific: what changed, not why (that's in the PR)
- Keep entries readable: use spaces around inline code and product names, and wrap endpoints, commands, errors, task names, and file paths in backticks
- Avoid long run-on sentences; split complex changes into one concise result plus one concise context clause
Good fragments
# ui/changelog.d/provider-search-bar.added.md
Search bar when adding a provider
# api/changelog.d/scan-dispatch-race.fixed.md
`POST /api/v1/scans` no longer intermittently fails with `Scan matching query does not exist`; scan dispatch now publishes the `scan-perform` Celery task after the transaction commits
# ui/changelog.d/node-24-bump.security.md
Node.js from 20.x to 24.13.0 LTS, patching 8 CVEs
Bad fragments
Fixed bug. # Too vague, has period, redundant verb
Add search bar # Redundant verb (the section already says "Added")
Search bar [(#9634)](https://github.com/prowler-cloud/prowler/pull/9634) # NEVER include the PR link; it is added at compile time
Semantic Versioning Rules
Prowler follows semver.org:
| Change Type | Version Bump | Example |
|---|---|---|
| Bug fixes, patches | PATCH (x.y.Z) | 1.16.1 → 1.16.2 |
| New features (backwards compatible) | MINOR (x.Y.0) | 1.16.2 → 1.17.0 |
| Breaking changes, removals | MAJOR (X.0.0) | 1.17.0 → 2.0.0 |
CRITICAL: removed fragments MUST only ship in MAJOR version releases. Removing features is a breaking change.
Mandatory Human Confirmation Gate
Before creating or editing any changelog fragment or CHANGELOG.md file, the agent MUST stop and get explicit user confirmation. This applies even when the changelog gate is failing, the required file seems obvious, or the user asked to "fix the changelog".
Present the proposed action before writing:
- Target fragment path (component, slug, type) or CHANGELOG.md edit.
- Exact entry text.
- Reason the changelog entry is needed.
Only proceed after an explicit approval such as "confirm", "approved", "sí", or equivalent. If the user rejects or does not answer, do not create or edit anything. Offer alternatives such as adding no-changelog when appropriate.
Adding a Changelog Entry
Step 1: Determine Affected Component(s)
git diff master...HEAD --name-only | grep -E '^(ui|api|mcp_server|prowler)/' | cut -d/ -f1 | sort -u
| Path Pattern | Component |
|---|---|
ui/** | UI |
api/** | API |
mcp_server/** | MCP Server |
prowler/** | SDK |
Root uv.lock / pyproject.toml | SDK (the gate requires a prowler/changelog.d/ fragment) |
| Multiple | One fragment per affected component |
Step 2: Create the fragment(s)
echo 'Entry text describing the change' > <component>/changelog.d/<slug>.<type>.md
Step 3: Check pending fragments
ls prowler/changelog.d/ api/changelog.d/ ui/changelog.d/ mcp_server/changelog.d/
PR Changelog Gate
The pr-check-changelog.yml workflow enforces fragments:
- REQUIRED: PRs touching
ui/,api/,mcp_server/, orprowler/MUST add (or fix) a fragment under the correspondingchangelog.d/ - VALIDATED: added fragment filenames must match
<slug>.<type>.mdwith a valid type - LINTED: fragment content must NOT contain a hand-written PR link (
[(#N)](...)); the gate fails if one is found because the link is attached automatically at compile time - SKIP: Add
no-changeloglabel to bypass (use sparingly for docs-only, CI-only changes)
Release flow (compile)
- At release time, the
compile-changelogsworkflow (manual dispatch:prowler_version+target_branch; per-component versions are auto-derived by mirroring the Prowler version — SDK mirrors it directly, UI is1.<minor>.<patch>, API is1.<minor + 1>.<patch>, and only the MCP Server derives from its pending fragment types — with optional explicit overrides orskip) resolves each fragment's PR from git history, runs the compiler per component, and opens achore(changelog): vX.Y.ZPR (labeledno-changelogandskip-sync) that inserts the stamped## [X.Y.Z] (Prowler vX.Y.Z)block into eachCHANGELOG.mdand deletes the consumed fragments. A human reviews and squash-merges it.prepare-release.ymlthen extracts the stamped sections exactly as before. - Minor release (X.Y.0): compile on
masterand merge the compile PR BEFORE cutting thev5.Xbranch. - Patch release (X.Y.Z): fixes are backported to
v5.Xwith their fragment files (conflict-free); compile onv5.Xand merge its PR there. The same workflow run automatically opens a second forward-sync PR against master (labeledno-changelogandskip-sync) that inserts the same stamped block under master's marker and deletes the consumed fragments, so the next minor cannot re-release them; merge it right after. Fragments that only existed onv5.Xare skipped with a notice. No manual git is involved. - Entries within a section are ordered by PR number ascending (approximately chronological). Do not fight this ordering.
Fixing an already-released entry
Released version blocks in CHANGELOG.md are otherwise immutable, but typo/correction fixes to already-released entries are the one case where a PR edits CHANGELOG.md directly: make the edit and add the no-changelog label.
If a PR's entry shipped in the wrong released block (e.g. the PR merged after its release was cut), move the entry back to a fragment: delete it from the released block and recreate it as <component>/changelog.d/<PR>.<type>.md (label the PR no-changelog since it edits CHANGELOG.md).
Compiled CHANGELOG.md format (for reference)
The compiler renders, per release, into each CHANGELOG.md right under the <!-- changelog: release notes start --> marker (never remove that marker):
## [X.Y.Z] (Prowler vA.B.C)
### 🚀 Added
- Entry text [(#NNNN)](https://github.com/prowler-cloud/prowler/pull/NNNN)
### 🐞 Fixed
- Fix entry [(#NNNN)](https://github.com/prowler-cloud/prowler/pull/NNNN)
---
Section order is always: Added → Changed → Deprecated → Removed → Fixed → Security. X.Y.Z is the COMPONENT version; A.B.C is the Prowler release version. Every entry ends with its PR link; linking to /issues/N is forbidden (the issue↔PR mapping belongs in the PR body via Fixes #N).
Resources
- Templates: See assets/ for entry templates
- keepachangelog.com: https://keepachangelog.com/en/1.1.0/
FAQ
What does the prowler-changelog skill do?
Manages changelog entries for Prowler components following keepachangelog.com format. Trigger: When creating PRs, adding changelog entries, or working with any CHANGELOG.md file in ui/, api/, mcpserver/, or prowler/.
How do I install prowler-changelog?
Run npx skills add https://github.com/prowler-cloud/prowler --skill prowler-changelog in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/prowler-changelog/ (personal) or .claude/skills/prowler-changelog/ (project).
Which AI agents can use prowler-changelog?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is prowler-changelog safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains prowler-changelog?
It is published by prowler-cloud in prowler-cloud/prowler. It has 66 recorded installs.
More from prowler-cloud/prowler
zod-4
prowler-cloud/prowler
Zod 4 schema validation patterns. Trigger: When creating or updating Zod v4 schemas for validation/parsing (forms, request payloads, adapters), including v3 - v4 migration patterns.
zustand-5
prowler-cloud/prowler
Zustand 5 state management patterns. Trigger: When implementing client-side state with Zustand (stores, selectors, persist middleware, slices).
react-19
prowler-cloud/prowler
React 19 patterns with React Compiler. Trigger: When writing React 19 components/hooks in .tsx (React Compiler rules, hook patterns, refs as props). If using Next.js App Router/Server Actions, also use nextjs-16.
tailwind-4
prowler-cloud/prowler
Tailwind CSS 4 patterns and best practices. Trigger: When styling with Tailwind (className, variants, cn()), especially when dynamic styling or CSS variables are involved (no var() in className).
django-drf
prowler-cloud/prowler
Django REST Framework patterns. Trigger: When implementing generic DRF APIs (ViewSets, serializers, routers, permissions, filtersets). For Prowler API specifics (RLS/RBAC/Providers), also use prowler-api.
typescript
prowler-cloud/prowler
Open the skill to read its SKILL.md instructions.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.