Skip to content
Agentmart
Submit a tool

launch-summary

Summarizes what shipped across the Atllas repos over a daily or weekly window, written for non-developers.

Skill by ptrandev

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/ptrandev-launch-summary

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Summarizes what shipped across the Atllas repos over a daily or weekly window, written for non-developers. Groups the result by product and credits who built and merged each change. Counts only PRs merged to each repo's default branch. Use for "what did we launch today", "weekly summary", or "launch recap".

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/launch-summary

What's inside

Skill name
launch-summary
Description
Summarizes what shipped across the Atllas repos over a daily or weekly window, written for non-developers. Groups the result by product and credits who built and merged each change. Counts only PRs merged to each repo's default branch. Use for "what did we launch today", "weekly summary", or "launch recap".
License
MIT
Instructions
205 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • allowed-tools: must be a space-separated string

Files (1)

  • SKILL.md

SKILL.md (first lines)

## Instructions

Generate a **non-developer-friendly launch summary** from merged pull requests across four GitHub repos: `Atllas-Inc/codebase`, `Atllas-Inc/aicc-queues`, `Atllas-Inc/neema-simple-hyzl`, and `Atllas-Inc/pointsgpt`.

The skill takes one argument, the window: `daily` or `weekly`. **If the user gives no argument, use `daily`.** The window sets the timeframe and nothing else. Every later step is shared.

### Step 1: Determine the date range

- `daily`: the last 24 hours, a rolling window ending now.
- `weekly`: the current calendar week, Monday 00:00 UTC through today.

If the user specified a different range, a specific day, or a specific week, use that instead.

### Step 2: Fetch merged PRs from every repo

Only PRs merged **into the repo's default branch** count. The `base:` filter excludes PRs merged into release branches and feature branches.

**Never hardcode `base:master`.** The default branch differs per repo: `codebase` and `aicc-queues` use `master`, `neema-simple-hyzl` and `pointsgpt` use `main`. Read it from `repos/<repo>` so a repo added later needs no edit here.

**Never use `gh pr list`.** It calls the GitHub GraphQL API, which Claude Code sessions block with a 403. Use the REST endpoints below.

`search/issues` filters on merge date server-side, so no `--limit` can drop a PR that was opened long ago and merged inside the window. It returns the author, but not the merger and not the changed files. Step 2 therefore calls `pulls/{n}` for every PR to read `merged_by`. It also calls `pulls/{n}/files` for each repo that ships a phone app, to tell Mobile PRs from App PRs.

Two repos ship one: `codebase` under `apps/atllas-app/`, and `pointsgpt` under `ios/`. The `mobile_prefix` function below holds the prefix per repo. An empty value means no phone app.

`product_name` holds the customer-facing name per repo. The summary is grouped by that name, so every repo needs a row.

`display_name` turns a GitHub login into a person's real name, and caches each lookup in `/tmp/ls_names.tsv` so one person costs one call.

Add a repo by appending it to the `for REPO in ...` list and giving it a `product_name` row. **Never put the repo list in a variable.** This block runs under `zsh`, which does not word-split an unquoted variable, so a list in a variable is read as one repo name.

Run the whole block in one Bash invocation so `SINCE` is computed once:

```bash
set -euo pipefail
WINDOW=daily   # daily | weekly

case "$WINDOW" in
  daily)
    SINCE=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d "24 hours ago" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null)
    [ -n "$SINCE" ] || { echo "ERROR: could not compute a 24-hours-ago timestamp with this system's date(1). Aborting." >&2; exit 1; }
    HEADER="## 🚀 Daily Launch Summary: $(date -u +%Y-%m-%d)"
    EMPTY="Nothing shipped in the last 24 hours."
    ;;
  weekly)
    WEEK_START=$(date -v-Mon +%Y-%m-%d 2>/dev/null || date -d "last Monday" +%Y-%m-%d 2>/dev/null)
    [ -n "$WEEK_START" ] || { echo "ERROR: could not compute the start of the week with this system's date(1). Aborting." >&2; exit 1; }
    SINCE="${WEEK_START}T00:00:00Z"
    HEADER="## 🚀 Weekly Launch Summary: Week of ${WEEK_START}"
    EMPTY="Nothing shipped this week."
    ;;
esac
UNTIL=""
NAMES=/tmp/ls_names.tsv
: > "$NAMES"
echo "Window starts: $SINCE"
echo "Header: $HEADER"
echo "Empty-result line: $EMPTY"

mobile_prefix() {
  case "$1" in
    codebase) echo '^apps/atllas-app/' ;;
    pointsgpt) echo '^ios/' ;;
    *) echo '' ;;
  esac
}

product_name() {
  case "$1" in
    codebase) echo 'Atllas' ;;
    aicc-queues) echo 'AI Calling' ;;
    neema-simple-hyzl) echo 'Hyzl' ;;
    pointsgpt) echo 'PointsGPT' ;;
    *) echo "$1" ;;
  esac
}

display_name() {
  [ -n "$1" ] || { echo ''; return; }
  local hit
  hit=$(awk -F'\t' -v l="$1" '$1==l {print $2; exit}' "$NAMES")
  if [ -z "$hit" ]; then
    hit=$(gh api "users/$1" --jq '.name // .login')
    printf '%s\t%s\n' "$1" "$hit" >> "$NAMES"
  fi
  echo "$hit"
}

search_prs() {
  gh api -X GET search/issues \
    -f q="repo:$1 is:pr is:merged base:$2 merged:>=$SINCE" \
    -f per_page=100 --paginate \
    --jq '.items[] | {number, title, mergedAt: .pull_request.merged_at, body, author: .user.login, labels: [.labels[].name]}'
}

: > /tmp/ls_prs.jsonl
for REPO in Atllas-Inc/codebase Atllas-Inc/aicc-queues Atllas-Inc/neema-simple-hyzl Atllas-Inc/pointsgpt; do
  NAME="${REPO#*/}"
  BASE=$(gh api "repos/$REPO" --jq .default_branch)
  PRODUCT=$(product_name "$NAME")
  PREFIX=$(mobile_prefix "$NAME")
  echo "$REPO: base $BASE, product $PRODUCT"
  search_prs "$REPO" "$BASE" | while read -r row; do
    n=$(jq -r .number <<<"$row")
    m=false
    if [ -n "$PREFIX" ]; then
      if gh api "repos/$REPO/pulls/$n/files?per_page=100" --paginate --jq '.[].filename' \
           | grep -q "$PREFIX"; then m=true; fi
    fi
    MERGER_LOGIN=$(gh api "repos/$REPO/pulls/$n" --jq '.merged_by.login // ""')
    AUTHOR=$(display_name "$(jq -r .author <<<"$row")")
    MERGER=$(display_name "$MERGER_LOGIN")
    jq -c --arg repo "$NAME" --arg product "$PRODUCT" --argjson m "$m" \
          --arg authorName "$AUTHOR" --arg mergerName "$MERGER" \
      '. + {repo: $repo, product: $product, mobile: $m, authorName: $authorName, mergerName: $mergerName}' <<<"$row"
  done >> /tmp/ls_prs.jsonl
done

jq -s --arg until "$UNTIL" '[.[] | select($until == "" or .mergedAt < $until)]' /tmp/ls_prs.jsonl

From ptrandev/agent-skills, MIT.

More from ptrandev/agent-skills

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
Sep 26, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ptrandev

Cite this page

launch-summary skill. Agent Mart. https://agentmart.dev/skills/ptrandev-launch-summary (last updated 2026-10-24)