بنقرة واحدة
changelog
Generate a user-facing changelog (Keep a Changelog format) from recent commits across watched repos
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Generate a user-facing changelog (Keep a Changelog format) from recent commits across watched repos
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Summary of the [REPLACE: CHANNEL_PLATFORM] channel [REPLACE: CHANNEL_NAME] — top [REPLACE: TOP_N_THREADS] threads + open questions
Price and volume tracker for [REPLACE: TOKEN_SYMBOL] with anomaly alerts above [REPLACE: ALERT_THRESHOLD_PCT]% movement
Watch Vercel deploys for [REPLACE: VERCEL_PROJECT] — alert on [REPLACE: ALERT_ON] in the last [REPLACE: LOOKBACK_HOURS] hours
Digest of the most interesting new posts on [REPLACE: TOPIC] from RSS feeds and the open web
Mention/keyword sweep on social platforms for [REPLACE: KEYWORDS] — trends, sentiment, top posts
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
| name | Changelog |
| description | Generate a user-facing changelog (Keep a Changelog format) from recent commits across watched repos |
| var | |
| tags | ["dev"] |
${var} — Repo (owner/repo) to scan. If empty, scans all watched repos.
A changelog is not a commit log. Raw commit dumps grouped by conventional prefix are the noise anti-pattern — users can't tell what matters. This skill produces a Keep a Changelog-style weekly summary: categorized, plain-English, breaking changes surfaced, internal churn filtered out.
Reads repos from memory/watched-repos.md. If the file doesn't exist, abort and notify: "changelog: memory/watched-repos.md missing — nothing to scan." Do not create it silently.
# memory/watched-repos.md
- owner/repo
- another-owner/another-repo
If ${var} is set to owner/repo, scan only that repo (skip the file list).
Read memory/MEMORY.md and the last 3 days of memory/logs/ for context (prior runs, known issues).
${var} is non-empty, scan only ${var}.memory/watched-repos.md and parse - owner/repo lines.For each repo, isolate failures — one broken repo must not kill the run. Track status in a sources dict (repo → ok|empty|fail).
Compute SINCE as UTC 7 days ago:
SINCE=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-7d +%Y-%m-%dT%H:%M:%SZ)
Detect the default branch (don't assume main):
BRANCH=$(gh repo view owner/repo --json defaultBranchRef --jq '.defaultBranchRef.name')
Fetch commits on the default branch since SINCE:
gh api -X GET "repos/owner/repo/commits" -f sha="$BRANCH" -f since="$SINCE" --paginate \
--jq '.[] | {sha: .sha, short: .sha[0:7], message: .commit.message, author: (.author.login // .commit.author.name), date: .commit.author.date, url: .html_url}'
Also fetch merged PRs in the window — PR titles/bodies are usually cleaner than raw commit messages:
gh pr list --repo owner/repo --state merged --limit 100 \
--search "merged:>=$SINCE" \
--json number,title,body,mergedAt,author,url,labels
Sandbox note: gh uses GITHUB_TOKEN internally and works in the sandbox. If gh fails, log fail for that repo and continue — do not fall back to WebFetch (public API is rate-limited and adds noise).
Exclude before classifying:
dependabot[bot], renovate[bot], claude[bot], github-actions[bot].Keep a per-repo count of filtered commits for the footer ("N internal/bot commits hidden").
Do not use Features/Fixes/Docs/Chores — those are for developers. Use:
| Category | Use for |
|---|---|
| ⚠️ Breaking | feat!: / fix!: / any commit whose body contains BREAKING CHANGE:. Also any removed public API. |
| Added | New user-visible features (typically feat: without !). |
| Changed | Modifications to existing functionality users will notice (behaviour, UX, defaults). |
| Fixed | Bug fixes users care about (fix: only if the bug was observable). |
| Security | security: prefix, CVE-, dependency bumps flagged as security, or commits touching auth/crypto with obvious security framing. |
| Internal | Everything else (chore, ci, build, test, refactor, style, docs unless docs are user-facing). Show only a one-line count, not full entries. |
Deprecated and Removed categories: include only if genuinely present — don't pad with empty sections.
Commit message → changelog line rules:
type(scope): prefix. Keep scope only if it clarifies (dashboard: add dark mode is fine; core: fix bug is not).feat(auth): add oauth2 pkce flow → OAuth 2 PKCE login is now supported.[#123](url)) over sha; fall back to short sha ([a1b2c3d](url)).Save to articles/changelog-${today}.md:
# Changelog — Week of ${today}
*Window: ${SINCE_date} → ${today} · Sources: repo1=ok, repo2=empty, repo3=fail*
## owner/repo
> **Highlights:** ≤2 sentences naming the most important user-facing change(s). If nothing user-facing, write "No user-facing changes this week; N internal commits."
### ⚠️ Breaking
- Plain-English breaking change description. Migration hint if obvious. ([#123](url))
### Added
- User-facing feature description. ([#124](url))
### Changed
- Behaviour/UX change. ([a1b2c3d](url))
### Fixed
- Bug that users would have hit. ([#125](url))
### Security
- Patch description, CVE if known. ([a1b2c3d](url))
*Internal: N commits hidden (chore/ci/build/refactor). Bots filtered: M.*
---
## owner/repo2
…
Rules:
sources[repo] == empty and no Highlights line is meaningful — but still list the repo in the sources line.sources[repo] == fail, include a stub: ## owner/repo\n\n*Could not fetch — see logs.*Send one concise paragraph via ./notify:
*Changelog — Week of ${today}*
${total_repos} repos: ${total_user_facing} user-facing changes (${breaking_count} breaking, ${added_count} added, ${fixed_count} fixed, ${security_count} security). Top: ${one_line_most_important_change}. Full: articles/changelog-${today}.md
If zero user-facing changes across all repos: send CHANGELOG_QUIET — no user-facing changes across ${N} repos this week.
If all repos failed: send CHANGELOG_ERROR — all ${N} repos failed to fetch. See logs. and exit non-zero.
Append to memory/logs/${today}.md:
### changelog
- Window: ${SINCE_date} → ${today}
- Repos: ${ok_count} ok, ${empty_count} empty, ${fail_count} fail
- User-facing: ${breaking} breaking, ${added} added, ${changed} changed, ${fixed} fixed, ${security} security
- Internal filtered: ${internal_count} commits, ${bot_count} bot commits
- Article: articles/changelog-${today}.md
- Notes: [anything surprising — e.g. big breaking change, repo with no activity, first run for a new repo]
!: commit under Added/Changed.gh CLI handles auth and works in the sandbox. If gh api fails for a repo, mark it fail in the sources dict and continue with other repos — don't abort the whole run, and don't fall back to unauthenticated WebFetch (rate limits will cascade failures).