Skip to content
Back to skills

Auto Gist Publisher

ASecurity

Publish a public GitHub gist automatically every time a new skill is added to karozi/awesome-product-management-skills. Header-only format: current total skill count in the repo, an AIO/GEO-optimized rewrite of the skill's description, and a Substack CTA. Triggers via GitHub Actions on push to main; can also run manually to backfill.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 19, 2026
ai-agentspythongobashgitdocumentation

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 19, 2026

npx -y skills add karozi/awesome-product-management-skills --skill auto-gist-publisher --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Auto Gist Publisher?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Auto Gist Publisher
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/karozi-auto-gist-publisher/badge)](https://www.skillsdirectory.com/skills/karozi-auto-gist-publisher)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: auto-gist-publisher
description: "Publish a public GitHub gist automatically every time a new skill is added to karozi/awesome-product-management-skills. Header-only format: current total skill count in the repo, an AIO/GEO-optimized rewrite of the skill's description, and a Substack CTA. Triggers via GitHub Actions on push to main; can also run manually to backfill."
license: MIT
metadata:
  author: karozieminski
  version: '1.0'
---

# Auto Gist Publisher

## Purpose

For every new skill directory added under `skills/<category>/<slug>/` with a valid `SKILL.md`, publish one public gist to the repo owner's GitHub account. Each gist is header-only and links back to the skill folder on GitHub.

## Gist format

```
Skill #<N> of <TOTAL> in awesome-product-management-skills

<Display Name>

<AIO/GEO-optimized description — 1 to 3 sentences, plain language, keyword-rich>

Read the full skill: https://github.com/karozi/awesome-product-management-skills/tree/main/skills/<category>/<slug>

See more AI PM resources at https://karozieminski.substack.com/?utm_source=github-gist&utm_medium=referral&utm_campaign=amps-skills&utm_content=<slug>
```

- `<N>` is the alphabetical rank of the new skill among all skills in the repo after the push.
- `<TOTAL>` is the total skill count in the repo after the push.
- The Substack CTA carries per-skill UTM attribution (`utm_source=github-gist`, `utm_medium=referral`, `utm_campaign=amps-skills`, `utm_content=<slug>`) so gist-driven traffic is measurable per skill in GA4.
- Filename in the gist is `<slug>.md`; gist description is `Skill #<N>: <Display Name> — awesome-product-management-skills`.

## When it runs

Automatically via `.github/workflows/auto-gist-publisher.yml` on every push to `main` that touches `skills/**/SKILL.md`. Also runs on `workflow_dispatch` for backfills.

## How it detects new skills

Idempotent by design. `state/published.json` (committed to the repo) maps `category/slug` → `{ gist_id, gist_url, published_at, sha256 }`. On each run:

1. Enumerate every `skills/*/*/SKILL.md`.
2. Any skill not in `published.json` is new → publish a gist, then add its entry.
3. Skills already in `published.json` are skipped (edits do not re-publish; this is a launch announcement, not a changelog).
4. Commit the updated `published.json` and the re-synced README catalog (the sync-skills-readme script renders a `gist ↗` badge per published skill) back to `main` in one commit.

## Files

- `scripts/publish_new_skill_gists.py` — the generator. Reads all SKILL.md files, diffs against `state/published.json`, calls `gh gist create` for each new skill, updates state. Run with `--dry-run` to preview without publishing.
- `scripts/aio_description.py` — deterministic AIO/GEO description rewriter. Takes the raw `description:` field, strips trigger-phrase noise ("Use when the user says…"), keeps the capability sentence, appends one keyword-rich benefit line. No LLM call — pure text transform for reproducibility.
- `tests/test_publish_new_skill_gists.py` — unit tests for state diffing, rank calculation, and header formatting.
- `tests/test_aio_description.py` — unit tests for the description rewriter.
- `state/published.json` — the source of truth for what has already been gisted. Never edit by hand except to backfill or force-republish a single entry (delete its key).

## Required secret

The workflow needs a personal access token with `gist` scope, stored as the repo secret `GIST_PAT`. A classic PAT with only the `gist` scope is sufficient. The default `GITHUB_TOKEN` cannot create gists on a user account.

## Manual invocation

Run locally to preview:

```bash
python3 skills/documentation/auto-gist-publisher/scripts/publish_new_skill_gists.py --repo-root . --dry-run
```

Run for real (requires `gh auth` with gist scope):

```bash
python3 skills/documentation/auto-gist-publisher/scripts/publish_new_skill_gists.py --repo-root . --write
```

Force republish one skill:

```bash
# Remove its entry from state/published.json, commit, then rerun the workflow.
```

## Non-goals

- Not a changelog. Description edits, script edits, and category moves do not trigger a new gist.
- Not a syndicator. Does not post to Substack, Bluesky, or Dev.to — those live in the `repurposer` skill in Karo's personal library.
- Does not delete gists. Removing a skill from the repo leaves its gist live; delete manually if desired.

Files in this skill

  • SKILL.md4.3 KB
  • scripts/aio_description.py3.3 KB
  • scripts/publish_new_skill_gists.py9.1 KB
  • state/published.json6.3 KB
  • tests/test_aio_description.py2.4 KB
  • tests/test_publish_new_skill_gists.py6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.