# Pr Board

> Answers "how are my PRs?", "did I address the review?", "anything waiting on me?". Lectio-first via authored-PR activity (reviews/comments by others, excluding your own replies), falls back to gh for coverage gaps, joins to local worktrees, prints a board of what needs you. Read-only.

- Skill: `jamestexas/pr-board` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jamestexas/pr-board`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jamestexas/pr-board/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jamestexas (https://skillmd.com/u/jamestexas)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jamestexas/pr-board

---


# pr-board — what's new on the PRs I authored

The recurring question this answers: *"how are my PRs / did I address the
reviews?"* — asked constantly during review cycles, and usually answered by
hand-rolling `gh` because nothing makes the better tool the default reach.
lectio already has the answer: `memory_authored_activity` is purpose-built for
"reviews and comments by other people on PRs I authored, since I last looked,
excluding my own replies." This skill makes that the default, keeps it
**fresh**, and adds the cross-source join (PR ↔ local worktree ↔ notes) that
only lectio can do.

**Model:** lectio is the substrate; this skill is the *reach* + *freshness* +
*presentation* layer. lectio reports last-known state; the skill decides
whether that's fresh enough and refreshes if not (the "derive current state"
move). gh is the fallback for what lectio doesn't cover, never the first reach.

## Arguments

- `--since <dur>` — window for "new activity" (e.g. `24h`, `3d`). Default `24h`.
- `--pr <ref>` — focus one PR (`42090` or `chainguard-dev/mono#42090`); skips the board, deep-dives that PR's review thread + your reply status.
- `--no-refresh` — skip the freshness step (use lectio as-is; faster, possibly stale).

---

## Phase 0 — Freshness (derive current state)

lectio's answer is only as current as its last `gh` sweep. Before reading,
make it fresh — this is now safe to run alongside the launchd sweep timer
(WAL + busy_timeout, lectio bead fa895f), so it won't error on a lock.

1. Unless `--no-refresh`: `lectio sweep --source gh --if-stale 10m`
   (also `--source linear --if-stale 10m` if the question touches Linear).
   `--if-stale` no-ops when gh swept within 10 min, sweeps otherwise — cheap to
   call every time.
2. Optional sanity read: `lectio status --json` shows per-source
   `last_advanced_at` — if gh is hours stale and the refresh didn't move it,
   the sweep service may be wedged (see lectio bead 0618a0); say so rather than
   silently reporting stale data.

> If the `lectio` MCP / CLI isn't available at all, skip to Phase 3 (pure gh
> fallback) and say up front that this is gh-only, no cross-source join.

---

## Phase 1 — Ask lectio the authored-activity question

Call `memory_authored_activity` with `since_nanos` = now − `--since`
(default 24h). It resolves "mine" from your `[identity] gh_logins` (falls back
to `gh.authors`) — no need to pass authors. It returns, per PR you authored:
the PR (repo, number, title, state/merged), and the **new items** — reviews and
review-comments by people who aren't you, since the window — each with author,
path, preview, timestamp. Author attribution is present (lectio bead 380b79),
so "whose review" is answered without falling back to gh.

If it returns an empty/zero result, that's a real answer ("nothing new on your
PRs since <t>") — report it, don't go hunting in gh to manufacture activity.

---

## Phase 2 — Join each PR to your local context (lectio's edge)

For each PR with new activity, a quick `memory_search "<number>"` (and/or
`memory_traverse` on the PR URI) surfaces the cross-source threads lectio
uniquely holds: your local review worktree (`fs://…/<repo>-pr-<n>-review`),
notes files, the commits that touch the same files, prior turns where you
discussed it. This is the value over `gh` alone — gh knows the PR, the
filesystem knows your worktree, lectio has both joined on one graph.

For `--pr <ref>`: skip the board, deep-dive this one — full review timeline
(`memory_get_timeline` on the PR URI), each reviewer's comments, and crucially
**whether you replied after their latest comment** (compare your latest
authored item's timestamp vs the reviewer's). That's the literal
"did I address the review?" answer.

---

## Phase 3 — Present the board

One scannable block, sorted by what needs you most (unanswered reviews first):

```
PR board — new since <window>  (gh swept <freshness>)

chainguard-dev/mono#42090 — "title" — OPEN — ⚠ NEEDS REPLY
  • Mark: 3 review comments (src/foo.rs, src/bar.rs) — 2h ago — you haven't replied since
  • local: <worktree-path>/mono-pr-42090-review worktree, notes at <path>
chainguard-dev/mono#39311 — "title" — OPEN — ✓ replied
  • Carol: 1 approval — 1d ago
…
2 PRs with new activity · 1 needs your reply
```

- **What needs you:** the short list where a reply or decision is pending — the actual point of the board.
- **Attribution:** name the reviewer (Mark, Carol) — it's in the data now.
- **Cite URIs** for claims drawn from lectio (per its epistemic contract), and flag any answer that's from stale data if Phase 0 couldn't refresh.

**gh fallback (coverage gaps only):** if a PR you know exists isn't in lectio's
result, it's likely outside configured `gh` coverage (`memory_list_sources`
shows the scopes). For that specific gap, `gh pr view <ref> --json …` — and
note it's a coverage gap worth adding to `[[gh.repo]]` or `author_scoped`, so
next time lectio has it.

---

## Posture

Read-only. This skill answers a question; it never posts a reply, approves, or
comments. When the board says "#42090 needs a reply," handing off to compose
that reply is a separate, explicit step the user initiates.

