"Prints the operator's read-only morning view for the current GitHub repo in one pass — open counts per queue label (needs-triage / ready / needs-decision / needs-human), the gh-native merge-ready PR list, parked decisions with their RECOMMENDED lines, and loop-lane telemetry freshness (last-cycle age + flags). Use when: 'morning brief', 'morning view', 'ops dashboard', 'what needs attention', 'daily standup view', 'operator morning pass', 'queues and merge-ready'. Read-only and gh-based — never mutates issues, PRs, labels, or comments."
Resources
2Install
npx skillscat add melodic-software/claude-code-plugins/plugins-claude-ops-skills-morning-brief Install via the SkillsCat registry.
Pre-computed context
Repo: !gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || echo "unknown (run inside a gh repo or pass --repo)"
gh: !command -v gh >/dev/null 2>&1 && echo "present" || echo "MISSING (required)"
jq: !command -v jq >/dev/null 2>&1 && echo "present" || echo "MISSING (required)"
Variables
Arguments: $ARGUMENTS
Purpose
The 30-60 minute operator morning pass begins with the same hand-run gh queries
every day. This skill collapses them into a single 5-second picture for the current
repo, so the pass starts from a complete view instead of ad-hoc lookups.
Read-only and gh-based. It runs only gh read queries and never mutates
labels, comments, issues, or PRs. Owner/repo is derived from gh repo view (never
hardcoded), so it is reusable across repos.
Run it
bash "${CLAUDE_PLUGIN_ROOT}/skills/morning-brief/scripts/morning-brief.sh" $ARGUMENTSPrint the script's output verbatim — it is already the deliverable. Do not
re-query the sections by hand.
What each section reports
| Section | Source | Notes |
|---|---|---|
| Queues | gh issue list --label <queue> counts |
Defaults to melodic-software queue labels; live runs filter to labels that exist in the repo (pass --queue-labels to pin a custom set) |
| Merge-ready PRs | gh pr list filtered to non-draft + mergeStateStatus=CLEAN |
A light glance signal; reviewDecision shown but not required (repos without required review leave it empty) |
| Parked decisions | open issues with the decision label (default status: needs-decision) |
Surfaces each one's RECOMMENDED line — the uppercase marker wins over an incidental lowercase mention; a case-insensitive fallback catches lowercase markers; pass --decision-label to pin |
| Lane telemetry | the loop-lane telemetry issue's per-lane comments | Each lane's last-cycle age (marked STALE past --stale-hours, default 6) and any flags: |
| Stranded findings | merged PRs whose unresolved review threads were created after the merge | One line per PR at its worst severity, with a finding count; window is --stranded-days, default 3 |
A review that lands after a merge has nowhere to go: the ruleset'srequired_review_thread_resolution is a merge-time predicate that already passed, the babysit lane
works open PRs, and nothing on a merged PR surfaces its open threads. This section is the only
place they appear (#1777). The comment-vs-merge timestamp comparison is the discriminator — a thread
that predates the merge was visible to the gate and is an ordinary unresolved thread, not this
failure mode.
The telemetry issue is auto-discovered by title; pass --telemetry-issue N to pin it.
When no such issue exists (e.g. a consuming repo without loop-lane telemetry), that
section reports "no telemetry issue found" and the rest of the brief still renders.
Queue labels default to the melodic-software taxonomy and are filtered to labels
that actually exist in the target repo on live runs, so a consuming repo with a
different scheme does not show misleading 0/? rows. Pass --queue-labels to
pin a custom comma-separated set; pass --decision-label to pin the parked-decision
label. When none of the configured queue labels exist, the Queues section reports
"no queue labels found" and the rest of the brief still renders.
Cross-references
/source-control:babysit-prs— the authoritative PR merge gate and readiness
classification. The merge-ready list here is a fast gh-native glance, not a
substitute for that skill's per-PR gate./claude-ops:observability— reads locally captured telemetry (OTEL store, hook-event JSONL,
ccusage). This skill instead reads GitHub-side queue and PR state.
What this skill does NOT do
- Does not mutate anything — no label, comment, merge, or close writes.
- Does not classify PR merge-readiness authoritatively — use
/source-control:babysit-prs. - Does not read local telemetry stores — use
/claude-ops:observability.