Install
$ agentstack add skill-shopwarelabs-ai-coding-tools-changelog-summarizing ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Changelog Summary Post
Generate summary posts about repository changes since a given date. Produces two separate outputs: one formatted for Discord (markdown) and one for Slack (mrkdwn).
Requirements
- Working directory is this repository
- User provides a date (absolute or relative)
Hard Constraints
- Main branch only. Only analyze committed history on the
mainbranch. Ignore uncommitted files, staged changes, untracked files, and working tree state entirely. The skill operates as if in a clean checkout. - Repository URL:
https://github.com/shopwareLabs/ai-coding-tools. Use this for constructing plugin links.
Phase 1: Parse Date
Extract the date from the user's input. Accept absolute dates ("2026-04-01") and relative dates ("last Monday", "two weeks ago").
If no date is provided, ask:
> What date should I summarize changes from? (e.g., "2026-04-01" or "last Monday")
If the date is in the future, inform the user and stop.
Phase 2: Discover Commits
Commits on main matching the requested date:
```! if [ -z "$since" ]; then echo "(no date supplied at skill invocation)" else git log main --since="$since" --format="%H %s" --no-merges fi
If no commits are listed above, tell the user and stop:
> No commits found on main since .
If the listing reads "(no date supplied at skill invocation)", ask the user for a date (Phase 1) and re-invoke the skill with the date as the first argument.
Use the listed hashes as the input to Phase 3.
## Phase 3: Analyze Each Commit
For every commit hash from Phase 2, run:
```bash
git show
For each commit, extract:
- The full commit message (intent)
- The diff (actual code changes)
- The conventional commit scope from the subject line (if present)
Analyze both the message and the diff to understand what actually changed and why. The message states the intent; the diff confirms what happened. Use both to produce an accurate summary.
Phase 4: Group and Cluster
Group by scope: Parse type(scope): subject from each commit's subject line. Group commits by their scope value. Commits without a scope go into a "General" group.
Detect clusters: Within each group, identify commits that contribute to the same feature or initiative. Signals include:
- Sequential commits with related subjects
- PR numbers appearing in multiple commits
- Commits that build on each other's changes (visible in diffs)
Clusters get synthesized into a single narrative paragraph instead of being listed separately.
Phase 5: Synthesize
For each plugin group, write a short contextual paragraph. Follow these rules:
- Focus on user-facing changes: new features, bug fixes, changed behavior, new tools. Describe what changed and why it matters to someone using the plugin
- Internal changes (refactoring, extracting shared code, restructuring files, renaming internals) get skipped unless they change user-visible behavior
- If multiple commits in a group are part of the same feature, merge them into one narrative
- Contextualize changes in the broader project direction when a connection exists (e.g., "builds on the migration support from last week")
- The "General" section covers cross-cutting or unscoped changes
Phase 6: Anti-Slop Validation
Read [Anti-AI-Slop Rules](references/writing-rules-anti-ai-slop.md) and apply every rule to the draft post. Specifically:
- Search the entire draft for em dash (—) and en dash (–) characters. Remove every instance. This is the most common violation.
- Check every word against the banned vocabulary list. Replace with the plain alternative or delete.
- Check for banned sentence patterns, colon/semicolon overuse, hedging filler.
- Verify sentence rhythm varies (mix short and long sentences, no metronomic 15-20 word uniformity).
- Check for concreteness: no "improved X" when you can name the specific class, config key, or behavior.
- If any violations found, rewrite the affected text and re-check.
Phase 7: Format Output
Produce two separate outputs: one for Discord (markdown) and one for Slack (mrkdwn). Both carry the same content, but use each platform's native formatting for links, bold, and headers.
Plugin Links
Each plugin section header links to the plugin's directory on GitHub at main. Construct URLs as: https://github.com/shopwareLabs/ai-coding-tools/tree/main/plugins/
The "General" section doesn't get a link.
Emoji Section Headers
Each plugin group gets an emoji prefix for visual scanability. Use emojis consistent with the repository's README conventions:
- 🔌 dev-tooling
- 🧪 test-writing
- 🔍 chunkhound-integration
- 🚦 ci-failure-interpretation
- ✍️ contributor-writing
- 🐙 gh-tooling
- 🔧 General
For plugins not listed above, pick an emoji that fits the plugin's purpose.
Discord Format (markdown)
Discord supports standard markdown. Use **bold** for emphasis, [text](url) for links.
**Summary: Changes since **
**🔌 [dev-tooling](https://github.com/shopwareLabs/ai-coding-tools/tree/main/plugins/dev-tooling)**
**🧪 [test-writing](https://github.com/shopwareLabs/ai-coding-tools/tree/main/plugins/test-writing)**
...
**🔧 General**
...
Slack Format (mrkdwn)
Slack uses mrkdwn: *bold* for bold. No markdown headers. Place plugin URLs as plain text on the line below the bold header (Slack auto-links them).
*Summary: Changes since *
*🔌 dev-tooling*
https://github.com/shopwareLabs/ai-coding-tools/tree/main/plugins/dev-tooling
*🧪 test-writing*
https://github.com/shopwareLabs/ai-coding-tools/tree/main/plugins/test-writing
...
*🔧 General*
...
AI Transparency Footer
End every post with a short, funny, self-aware one-liner acknowledging LLM authorship. Must be different each time. Same vibe as the README note ("Yes, an AI wrote this README. And everything else as well."). Keep it to one or two sentences. Don't force it if nothing good comes to mind; a simple quip is better than a bad joke.
Tone
Casual and conversational. Like updating colleagues in Slack or a community in Discord. Use contractions ("don't", "isn't"). No marketing-speak, no enthusiasm ("exciting new feature"). Just describe what happened in a way that's quick to read.
Emojis appear in section headers only, not scattered through prose.
Phase 8: Adaptive Length
The post length should match the volume and significance of changes. A quiet week with 3 small fixes gets a short post. Two weeks with 20+ commits across 4 plugins gets a longer, more detailed one. Don't compress meaningful content just to hit an arbitrary target.
Slack: No hard character limit. Write what the changes need.
Discord: 2000-character message limit. If the Discord version exceeds 2000 characters, split it into multiple messages at natural section boundaries (between plugin groups). Each message must be self-contained and under 2000 characters. Mark split points clearly:
Message 1: title + first N plugin groups + "(continued...)"
Message 2: remaining plugin groups + footer
Count characters for each Discord message and verify all are under 2000.
Phase 9: Present
Present both versions in separate code blocks, clearly labeled. Show character counts for each Discord message.
## Discord
\`\`\`
\`\`\`
> Message 1: characters
> Message 2: characters (if split)
## Slack
\`\`\`
\`\`\`
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: shopwareLabs
- Source: shopwareLabs/ai-coding-tools
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.