home / skills / phy041 / claude-agent-skills / ship-digest

ship-digest skill

/skills/ship-digest

This skill detects new GitHub repos and creates formatted ship announcements and social media drafts for review.

npx playbooks add skill phy041/claude-agent-skills --skill ship-digest

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.6 KB
---
name: ship-digest
description: Detect new GitHub repos and generate formatted ship announcements for social media. Monitors your GitHub profile for new repos pushed today, writes a technical digest, and drafts Twitter/Reddit posts for approval. Triggers on "ship digest", "new repos", "what did I ship", "github ship", or any shipping announcement request.
inputs:
  - name: github_username
    type: string
    required: true
    description: GitHub username to check for newly pushed repos
outputs:
  - name: new_repos
    type: list
    description: List of new repos detected today, each with {name, description, url, pushed_at, readme_summary}
  - name: social_drafts
    type: list
    description: Draft social posts for each repo, each with {hook_type, content, platform}
---

# Ship Digest Skill

Automatically detect new GitHub repos and turn them into social media announcements.

---

## Setup

```bash
export GITHUB_USERNAME="yourusername"
```

---

## How It Works

1. Fetch your GitHub repos sorted by `pushed_at`
2. Compare against a state file (`memory/ship-digest-state.json`)
3. For any new repo pushed today → analyze README + commits
4. Generate a technical digest + social media drafts
5. Send drafts for approval (NEVER auto-post)

---

## Workflow

### Step 1: Fetch New Repos

```bash
gh api /users/$GITHUB_USERNAME/repos?sort=pushed&per_page=10
```

Compare `pushed_at` timestamps against state file. A repo is "new" if:
- Not in state file at all, OR
- `pushed_at` is today and has 3+ new commits since last check

### Step 2: Analyze Repo Content

```bash
# README
gh api /repos/$GITHUB_USERNAME/{repo}/readme --jq .content | base64 -d

# Recent commits
gh api /repos/$GITHUB_USERNAME/{repo}/commits?per_page=5

# File tree (for tech stack detection)
gh api /repos/$GITHUB_USERNAME/{repo}/git/trees/HEAD?recursive=1 --jq '[.tree[].path] | join(", ")'
```

### Step 3: Generate Ship Digest

Output format:

```
🚢 Ship Digest — [date]

Caught a new repo: **{repo_name}**, pushed today.

**What you shipped:**
[2-3 sentence technical description based on README + commits]

📊 **{N} lines** in initial commit. [Tech stack summary].
→ github.com/{username}/{repo}

---

**✍️ DRAFT — Option A: [Hook type]**
[Twitter draft A]

**✍️ DRAFT — Option B: [Hook type]**
[Twitter draft B]

Reply "A" or "B" to post, or tell me what to change.
```

### Step 4: Await Approval

User picks Option A or B (or requests edits). Then post using `social-post` skill or `twitter-cultivate` skill.

NEVER auto-post without explicit user confirmation.

---

## Draft Generation Rules

### Voice
- First-person, authentic, no hype
- Lead with the problem solved OR the interesting technical choice
- Include one specific metric (lines of code, platforms supported, speed improvement)

### Hook Types to Try
1. **Contrarian Hook** — "Everyone says X, but actually Y"
2. **Data Hook** — "[Number] lines. [N] platforms. [capability]."
3. **Problem Hook** — "Every [person] hits [pain point] eventually..."
4. **Story Hook** — "Been thinking about [problem] for [time]. Finally shipped something."

### Banned Words
Never use: revolutionize, supercharge, game-changer, 10x, viral, hacks, disrupt, groundbreaking

---

## State File

Location: `memory/ship-digest-state.json`

```json
{
  "github_username": "yourusername",
  "last_checked": "ISO8601",
  "known_repos": {
    "repo-name": {
      "pushed_at": "ISO8601",
      "last_commit_count": 42,
      "announced": true
    }
  }
}
```

---

## Cron Schedule

Runs 2x daily: 09:00 and 16:00 (your local time).

If no new repos: reply `HEARTBEAT_OK`.

Overview

This skill detects new GitHub repositories you pushed today and turns them into concise, technical ship announcements ready for social media. It analyzes README, recent commits, and the repo file tree to produce a technical digest plus two draft posts (Twitter/Reddit style) for approval. The skill never auto-posts; it waits for your confirmation before sending to a posting skill.

How this skill works

It fetches your repos sorted by pushed_at and compares them to a local state file to identify new activity. For repos pushed today (or with 3+ new commits since last check) it extracts README content, recent commits, and file paths to infer purpose and tech stack. It then composes a short technical digest and two hook-driven social drafts, and returns them for your review.

When to use it

  • You want a daily summary of what you shipped on GitHub without manually inspecting repos.
  • You need ready-to-edit social announcements after a code push or release.
  • You maintain multiple projects and want automated detection of new work pushed today.
  • You prefer reviewing drafts before any social posting (no automatic publishing).

Best practices

  • Set GITHUB_USERNAME as an environment variable for reliable detection.
  • Keep README and recent commit messages clear to improve digest quality.
  • Run the cron schedule twice daily or trigger manually after a ship.
  • Review both draft options and pick edits that preserve first-person, authentic voice.
  • Avoid banned words in your final post; the skill excludes them by default.

Example use cases

  • A solo founder pushes a new microservice and wants a quick technical announcement for Twitter and Reddit.
  • An indie hacker releases a CLI tool and needs a compact digest including lines of code and supported platforms.
  • A growth engineer ships a performance tweak and wants a data-hook post highlighting the improvement metric.
  • A maintainer publishes a library update and wants two draft hooks (story and contrarian) to choose from.

FAQ

Will the skill ever post automatically?

No. It generates drafts and waits for your explicit approval before handing off to a posting skill.

How does it decide a repo is new?

A repo is new if it's not in the state file or if pushed_at is today and there are 3+ new commits since last check.