Prowler Changelog logo

Prowler Changelog

OrganizationPopular
prowler-cloud
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/, mcp_server/, or prowler/.

Overview

Publisherprowler-cloud
Repositoryprowler
Skill nameprowler-changelog
Stars
14.8K
Forks
2.4K
Bundled files
1
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by prowler-cloud on GitHub. Read the source before you install it.

Installation

Install the Prowler Changelog AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/prowler-cloud/prowler.git /tmp/prowler
mkdir -p .claude/skills
cp -r /tmp/prowler/skills/prowler-changelog .claude/skills/prowler-changelog
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Prowler Changelog in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Prowler Changelog on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Prowler Changelog is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

ComponentFragments directoryCompiled file
UIui/changelog.d/ui/CHANGELOG.md
APIapi/changelog.d/api/CHANGELOG.md
MCP Servermcp_server/changelog.d/mcp_server/CHANGELOG.md
SDKprowler/changelog.d/prowler/CHANGELOG.md

"What's unreleased" = "what's in changelog.d/". The compiled CHANGELOG.md files contain only released versions.

Fragment filename

text
<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>SectionUsage
added### 🚀 AddedNew features, checks, endpoints
changed### 🔄 ChangedModifications to existing functionality
deprecated### ⚠️ DeprecatedFeatures marked for removal
removed### ❌ RemovedDeleted features
fixed### 🐞 FixedBug fixes
security### 🔐 SecuritySecurity 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:

bash
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

text
# 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

text
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 TypeVersion BumpExample
Bug fixes, patchesPATCH (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, removalsMAJOR (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:

  1. Target fragment path (component, slug, type) or CHANGELOG.md edit.
  2. Exact entry text.
  3. 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)

bash
git diff master...HEAD --name-only | grep -E '^(ui|api|mcp_server|prowler)/' | cut -d/ -f1 | sort -u
Path PatternComponent
ui/**UI
api/**API
mcp_server/**MCP Server
prowler/**SDK
Root uv.lock / pyproject.tomlSDK (the gate requires a prowler/changelog.d/ fragment)
MultipleOne fragment per affected component

Step 2: Create the fragment(s)

bash
echo 'Entry text describing the change' > <component>/changelog.d/<slug>.<type>.md

Step 3: Check pending fragments

bash
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:

  1. REQUIRED: PRs touching ui/, api/, mcp_server/, or prowler/ MUST add (or fix) a fragment under the corresponding changelog.d/
  2. VALIDATED: added fragment filenames must match <slug>.<type>.md with a valid type
  3. 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
  4. SKIP: Add no-changelog label to bypass (use sparingly for docs-only, CI-only changes)

Release flow (compile)

  • At release time, the compile-changelogs workflow (manual dispatch: prowler_version + target_branch; per-component versions are auto-derived by mirroring the Prowler version — SDK mirrors it directly, UI is 1.<minor>.<patch>, API is 1.<minor + 1>.<patch>, and only the MCP Server derives from its pending fragment types — with optional explicit overrides or skip) resolves each fragment's PR from git history, runs the compiler per component, and opens a chore(changelog): vX.Y.Z PR (labeled no-changelog and skip-sync) that inserts the stamped ## [X.Y.Z] (Prowler vX.Y.Z) block into each CHANGELOG.md and deletes the consumed fragments. A human reviews and squash-merges it. prepare-release.yml then extracts the stamped sections exactly as before.
  • Minor release (X.Y.0): compile on master and merge the compile PR BEFORE cutting the v5.X branch.
  • Patch release (X.Y.Z): fixes are backported to v5.X with their fragment files (conflict-free); compile on v5.X and merge its PR there. The same workflow run automatically opens a second forward-sync PR against master (labeled no-changelog and skip-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 on v5.X are 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):

markdown
## [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

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Prowler Changelog AI 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/, mcp_server/, or prowler/.

Why use Prowler Changelog on TypingMind?

Because you install it once and use it with any model. Prowler Changelog is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Prowler Changelog in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/prowler-cloud/prowler/tree/master/skills/prowler-changelog. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Prowler Changelog?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Prowler Changelog?

As many as you like. As long as a model supports skills, you can use Prowler Changelog with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Prowler Changelog AI skill free?

Yes. It is published on GitHub by prowler-cloud under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇