con un clic
standup
Generate standup notes from GitHub PR activity
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Generate standup notes from GitHub PR activity
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Identify unlabeled GitHub issues and external PRs that may belong to a specific team, and normalize conventional title scopes to the team's canonical short form
Monitor CI checks after pushing, detect flaky vs legit failures, and auto-fix
Reference for GitHub PR review endpoints and resolving review threads via gh CLI. Use when replying to a PR review comment, posting a new review comment, or resolving review threads.
PostHog repo-specific workflow, database access rules, production architecture notes, and SDK repository locations. Use when working in posthog/posthog or any PostHog SDK repo.
Plan, implement, and iteratively review a task end-to-end using Claude + Copilot reviewers in a linear flow.
One sweep over all of my open PRs — check CI, handle new review comments, fix and push — tracking state so reruns skip already-handled work. Designed to be driven by /loop.
| name | standup |
| description | Generate standup notes from GitHub PR activity |
| disable-model-invocation | true |
| model | haiku |
Generate standup notes for PostHog standups (Monday, Wednesday, Friday).
Every standup, you need to report:
posthog[bot]) that I reviewed, fixed up, and merged since last standup. Grouped separately so authorship is honest. Omit the section entirely when there are none.Run the helper script to get standup dates:
~/.claude/skills/standup/scripts/standup-dates.sh
This returns tab-separated: <today>\t<last_standup_date>\t<new_file_path>
Store these values:
today - Today's date (for the new standup file)last_standup_date - When the previous standup was (for PR queries)new_file_path - Where to write the new standup notesRun the helper script to find previous standup notes:
~/.claude/skills/standup/scripts/standup-find.sh
This returns tab-separated: <status>\t<path>\t<date>\t<posted_at>
If status is "found":
<path><posted_at> (the file's modified time in UTC ISO 8601, e.g. 2026-06-17T16:00:00Z) as the merge cutoff for Step 3, not the mechanical last_standup_date from Step 1. This is the moment you last posted, so PRs merged after it are picked up next time even when they landed the same day (post at 9am, merge at 10am → the 10am PR shows up in the next standup), while PRs merged before it aren't double-counted. It also covers skipped days: if you didn't work Friday, Monday's standup reaches back to Wednesday's standup, not to Friday.cutoff to <posted_at> for use in Step 3.If status is "new", set cutoff to last_standup_date (date only).
Only include PRs from PostHog/* repos. Personal repos (e.g. haacked/*) are excluded; standup is a PostHog work update, and personal tooling work isn't relevant to teammates. The org:PostHog qualifier in the search queries enforces this.
Completed and Side-quest PRs (merged since the cutoff from Step 2):
gh api search/issues --method GET -f q="author:haacked org:PostHog is:pr is:merged merged:>=${cutoff}" --jq '.items[] | {number, title, url: .html_url, repo: (.repository_url | sub(".*/repos/"; "")), merged_at: .pull_request.merged_at}'
${cutoff} is <posted_at> from Step 2 (a full UTC ISO timestamp like 2026-06-17T16:00:00Z); the merged: qualifier accepts time-of-day, so this excludes PRs already reported and includes ones merged later the same day. Fall back to the date-only last_standup_date only when Step 2 returned "new". Split the merged results into Completed (core feature-flags product work) and Side quests (internal dev tooling, infra side-projects, cross-team contributions) by judging each PR's repo and title; merged side quests get state Completed.
Note: gh search prs --merged is unreliable for date filtering; it returns stale results. Always use gh api search/issues with the merged: qualifier instead, which returns accurate merged_at timestamps.
PRs you merged but didn't author: the author:haacked query misses two flavors of your work entirely: cloud-agent PRs authored by posthog[bot] (branches like posthog-code/*, with docs follow-ups by inkeep[bot]), and other people's PRs you shepherded to merge. Run a second search for merged PRs you were involved in but didn't author:
gh api search/issues --method GET -f q="org:PostHog is:pr is:merged merged:>=${cutoff} involves:haacked -author:haacked" --jq '.items[] | {number, title, url: .html_url, repo: (.repository_url | sub(".*/repos/"; "")), author: .user.login, merged_at: .pull_request.merged_at}'
GitHub search has no merged-by qualifier, so verify each result in one Bash call and keep only PRs where mergedBy is haacked (drop the rest — PRs you merely reviewed or commented on, then the author merged themselves):
for pr in "owner/repo#number" "owner/repo#number"; do
repo="${pr%%#*}"; num="${pr##*#}"
echo -e "$repo#$num\t$(gh pr view "$num" --repo "$repo" --json mergedBy --jq '.mergedBy.login')"
done
Route the surviving PRs by author: bot-authored (login ends in [bot]) to Agent-authored (reviewed & landed by me), human-authored to Shepherded (external PRs I reviewed & merged). Neither goes in Completed. Combine each docs follow-up with the code PR it documents. Caveat: involves: requires authorship, assignment, a mention, or a comment; a bot PR merged without ever commenting on it won't match. If one seems missing, retry the search with reviewed-by:haacked in place of involves:haacked.
Active PRs (open PRs across all PostHog repos), including draft status:
gh api search/issues --method GET -f q="author:haacked org:PostHog is:pr is:open" --jq '.items[] | {number, title, url: .html_url, repo: (.repository_url | sub(".*/repos/"; "")), draft: .draft, updatedAt: .updated_at}'
Note: This single query replaces per-repo gh pr list calls and also covers the "recently updated" signal via updatedAt. Filter to items updated since last_standup_date to identify PRs with recent activity. Route core (feature-flags domain) open PRs to Working on; route non-core open PRs to Side quests with state In progress. The search API does not return review requests; for non-draft open PRs, fetch them in one Bash call:
for pr in "owner/repo#number" "owner/repo#number"; do
repo="${pr%%#*}"; num="${pr##*#}"
echo -e "$repo#$num\t$(gh pr view "$num" --repo "$repo" --json reviewRequests --jq '[.reviewRequests[].login] | join(",")')"
done
Build standup content and produce two outputs: a plain text archive file and HTML for the clipboard.
Completed items:
<code> (HTML) for method/code namesAgent-authored items:
Agent-authored (reviewed & landed by me): and it sits directly after CompletedShepherded items:
Shepherded (external PRs I reviewed & merged): and it sits directly after Agent-authored (or after Completed when there are no agent PRs)(by @handle)Combining related PRs:
<a>; in the plain text archive place each link's URL in parentheses immediately after the phrase it belongs to.Working on items:
for pr in "owner/repo#number" "owner/repo#number"; do
repo="${pr%%#*}"; num="${pr##*#}"
echo -e "$repo#$num\t$(gh pr view "$num" --repo "$repo" --json state,mergedAt --jq '[.state, (.mergedAt // "")] | @tsv')"
done
Then apply these rules to each row:
If MERGED since last standup: move to Completed (deduplicate by PR number; carry-over is the safety net for PRs the merged search may miss)
If CLOSED: drop it entirely
If OPEN: keep in Working on
Determine PR status from the Step 3 data:
draft: true → link text is "draft"For non-PR work items: plain text description only
Side-quest items:
Discussion:
Write to new_file_path for archival. Every item is a plain line. URLs appear in parentheses after the description.
Completed:
Added `getFeatureFlagResult` method for efficient flag + payload retrieval (https://github.com/PostHog/posthog-js/pull/2920)
Added bin scripts for setup, build, and test (https://github.com/PostHog/posthog-js/pull/2824)
Added keep-first dedup for `$feature_flag_called` events (https://github.com/PostHog/posthog/pull/62793) with dedicated redis (https://github.com/PostHog/charts/pull/12362) (shadowed it (https://github.com/PostHog/charts/pull/12370) and then turned it on for team 211871 (https://github.com/PostHog/charts/pull/12428))
Agent-authored (reviewed & landed by me):
Matched mobile app versions in semver flag conditions (https://github.com/PostHog/posthog/pull/69118) with docs (https://github.com/PostHog/posthog.com/pull/18438)
Stopped stale parent prop from resetting rollout to 0% (https://github.com/PostHog/posthog/pull/68484)
Shepherded (external PRs I reviewed & merged):
Bulk copy flags to other projects from the flags list (by @rubychilds) (https://github.com/PostHog/posthog/pull/69044)
Working on:
Simplify readiness probe to prevent cascade failures (https://github.com/PostHog/posthog/pull/46589 - draft)
Add source field to feature flag created analytics (https://github.com/PostHog/posthog/pull/46782 - needs review)
Add HyperCache support to flag definitions cache (https://github.com/PostHog/posthog/pull/44701 - needs review)
Completing migration of celery tasks to dedicated flags queue
Side quests:
Resolved worktree path from stored value, not derived from name (Completed) (https://github.com/PostHog/code/pull/2709)
Add retry helper to the deploy script (In progress) (https://github.com/PostHog/code/pull/2741)
Discussion:
Zilch
Every section uses <p><b>Header:</b></p> followed by <ul>. Every item, without exception, is an <li> inside the <ul>, regardless of whether it contains a link.
<p><b>Completed:</b></p>
<ul>
<li><a href="https://github.com/PostHog/posthog-js/pull/2920">Added <code>getFeatureFlagResult</code> method for efficient flag + payload retrieval</a></li>
<li><a href="https://github.com/PostHog/posthog-js/pull/2824">Added bin scripts for setup, build, and test</a></li>
<li><a href="https://github.com/PostHog/posthog/pull/62793">Added keep-first dedup for <code>$feature_flag_called</code> events</a> with <a href="https://github.com/PostHog/charts/pull/12362">dedicated redis</a> (<a href="https://github.com/PostHog/charts/pull/12370">shadowed it</a> and then turned it <a href="https://github.com/PostHog/charts/pull/12428">on for team 211871</a>)</li>
</ul>
<p><b>Agent-authored (reviewed & landed by me):</b></p>
<ul>
<li><a href="https://github.com/PostHog/posthog/pull/69118">Matched mobile app versions in semver flag conditions</a> with <a href="https://github.com/PostHog/posthog.com/pull/18438">docs</a></li>
<li><a href="https://github.com/PostHog/posthog/pull/68484">Stopped stale parent prop from resetting rollout to 0%</a></li>
</ul>
<p><b>Shepherded (external PRs I reviewed & merged):</b></p>
<ul>
<li><a href="https://github.com/PostHog/posthog/pull/69044">Bulk copy flags to other projects from the flags list</a> (by @rubychilds)</li>
</ul>
<p><b>Working on:</b></p>
<ul>
<li>Simplify readiness probe to prevent cascade failures (<a href="https://github.com/PostHog/posthog/pull/46589">draft</a>)</li>
<li>Add source field to feature flag created analytics (<a href="https://github.com/PostHog/posthog/pull/46782">needs review</a>)</li>
<li>Add HyperCache support to flag definitions cache (<a href="https://github.com/PostHog/posthog/pull/44701">needs review</a>)</li>
<li>Completing migration of celery tasks to dedicated flags queue</li>
</ul>
<p><b>Side quests:</b></p>
<ul>
<li><a href="https://github.com/PostHog/code/pull/2709">Resolved worktree path from stored value, not derived from name</a> (Completed)</li>
<li><a href="https://github.com/PostHog/code/pull/2741">Add retry helper to the deploy script</a> (In progress)</li>
</ul>
<p><b>Discussion:</b></p>
<ul>
<li>Zilch</li>
</ul>
Copy to clipboard using the shared helper script:
swift ~/.dotfiles/bin/copy-html-to-clipboard.swift <<'EOF'
<p><b>Completed:</b></p>
<ul>
<li>...</li>
</ul>
EOF
Display: