board-snapshot
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
Skill by pmvanev
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/pmvanev-board-snapshot
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.
About
Use cases: documents
Reviews
Write a reviewNo 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/board-snapshot
What's inside
- Skill name
board-snapshot- Description
- Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board stand", "what's blocked", "what's in flight", "what should I pick up next on the board" — on a GitHub Projects v2 board. Two modes: a standing check inside a 200-word ceiling, and an orientation read giving every open card a number, a title and a composed description of 100 words or fewer. Consumes board position, never computes it. Reports drift and never fixes it. For what is WRONG with the cards, use phil:groom-issues instead; for the order itself, phil:rank-issues; for the inside of one card, phil:nwave-slice-status.
- License
- MIT
- Instructions
- 275 lines in SKILL.md · view on GitHub
Files (31)
- SKILL.md
- why-these-rules.md · references/
- expected.md · self-test/01-ceiling-breached/
- manifest.json · self-test/01-ceiling-breached/
- expected.md · self-test/02-two-empty-sections/
- manifest.json · self-test/02-two-empty-sections/
- expected.md · self-test/03-blocker-unrecorded/
- manifest.json · self-test/03-blocker-unrecorded/
- expected.md · self-test/04-open-card-in-done/
- manifest.json · self-test/04-open-card-in-done/
- expected.md · self-test/05-page-dropped/
- manifest.json · self-test/05-page-dropped/
- expected.md · self-test/06-slice-cards-inflate/
- manifest.json · self-test/06-slice-cards-inflate/
- expected.md · self-test/07-card-with-no-status/
- manifest.json · self-test/07-card-with-no-status/
- expected.md · self-test/08-all-drops-nothing/
- manifest.json · self-test/08-all-drops-nothing/
- expected.md · self-test/09-title-is-not-a-description/
- manifest.json · self-test/09-title-is-not-a-description/
- expected.md · self-test/10-all-cannot-clip/
- manifest.json · self-test/10-all-cannot-clip/
- expected.md · self-test/11-empty-card-body/
- manifest.json · self-test/11-empty-card-body/
- expected.md · self-test/12-handles-in-a-description/
- manifest.json · self-test/12-handles-in-a-description/
- expected.md · self-test/13-mandatory-sections-exceed-the-ceiling/
- manifest.json · self-test/13-mandatory-sections-exceed-the-ceiling/
- expected.md · self-test/14-open-issue-off-the-board/
- manifest.json · self-test/14-open-issue-off-the-board/
- README.md · self-test/
SKILL.md (first lines)
# Board snapshot — where the board stands, not what is wrong with it
A board in perfect shape still costs a full read. Every other command over a board answers a different
question and answers it at length. This one answers *where does it stand*, and stops.
**GitHub Projects v2 only.** GitLab is not implemented and is not stubbed: its boards express a column as
a scoped label rather than a project field, so the items query below has no counterpart there. Say so and
stop rather than approximating.
**REQUIRED BACKGROUND: `phil:issue-board`.** Every forge mechanic — `-R` targeting, Status as a project
field, GraphQL over `item-list`, the board constants in a project's `CLAUDE.md` — lives there. Do not
guess any of it here.
## The routing this skill exists to win
**Keep these apart, out loud, whenever more than one could be intended.** The measured failure that
produced this skill is in `references/why-these-rules.md`.
| Question | Command |
|---|---|
| Where does the board stand? | **this one** |
| What is wrong with the cards? | `phil:groom-issues` |
| What order should these be in? | `phil:rank-issues` |
| What is happening inside one card? | `phil:nwave-slice-status` |
| What was *I* doing? | `phil:resume` |
| What did the finished thinking decide? | `phil:nwave-wave-summary` |
## The read — shared by both modes
**One call for the board.** Status is a project field, so this is a project-items query and never
`gh issue list`, which returns no Status at all, for the board read; `gh issue list` serves only the
reconciliation below.
**Branch on the owner's type first.** `user(login:)` errors with `Could not resolve to a User` against an
organization-owned board, and `organization(login:)` errors the same way against a personal one. There is
no form that serves both, so resolve the owner and pick — `${CLAUDE_PLUGIN_ROOT}/scripts/probe-board.py`
already branches this way and is the reference.
```sh
gh api graphql -f query='{ repositoryOwner(login:"<owner>"){ __typename } }' # User | Organization
```
**Send the document with GraphQL variables, never interpolated into the query string.** An inline
`-f query='… fieldValueByName(name: "Status") …'` fails to parse on nested quotes, and a command cannot
write a temp file inside its grant. Substitute `user` or `organization` for the root field; everything
after it is identical.
```sh
gh api graphql -f query='query($o:String!,$n:Int!,$f:String!){ user(login:$o){ projectV2(number:$n){
items(first:100){ nodes { id content { ... on Issue { number title state url } }
fieldValueByName(name:$f){ ... on ProjectV2ItemFieldSingleSelectValue { name } } } } } } }' \
-f o=<owner> -F n=<project-number> -f f=Status
```
**Items arrive in board-position order and that order is authoritative.** Consume it. Never sort, never
re-rank, never infer an order from labels or dates — `phil:rank-issues` is the one surface that produces
an order, and a second producer makes neither answer trustworthy.
**Read the board constants from the target repo's `CLAUDE.md`.** Never probe for them; `phil:board-setup`
owns writing them.
**Paginate rather than truncate.** A `first:100` that returns a cursor is a partial read until the next
page is fetched. See *Partial reads*.
### The project holds only what was added to it
**A `projectV2` items query returns cards, and an issue reaches the board only by an explicit
`gh project item-add`.** An open issue nobody added is invisible to the query — so a read whose whole
purpose is saying what is there would omit it in silence, which is the completeness failure *Partial
reads* forbids, arriving structurally rather than through a dropped page.
**So reconcile, in one more call**, and report the difference rather than absorbing it:
```sh
gh issue list -R <owner/repo> --state open --json number --limit 200
```
Any open issue not among the project's items is **off the board**. Report the count in one line, name
`phil:issue-board` for adding them, and add nothing.
## Mode 1 — the standing check
The default. Three sections, in this order, always: **blocked**, **in flight**, **queued**.
- **Blocked** — every card, each naming what it waits on or saying the blocker is unrecorded.
- **In flight** — every card. No cap; a board with many is telling the reader something.
- **Queued** — the first *N* in board order. **N defaults to 5** and is set by `--next N`.
**Say where the order came from.** One clause: the queued cards are the forge's own order, not this
command's.
### Blocked cards need a second, small read
The forge records that a card is blocked; the reason lives in prose. Read the `## Chain` section of each
blocked card's body and quote what it waits on.
```sh
gh issue view <n> -R <owner/repo> --json body
```
**One call per blocked card, and blocked cards are few.** **Where a blocked card carries no `## Chain`
line, say the blocker is unrecorded.** Never infer one from a title, a label or an adjacent card.
### The ceiling
**200 words, counted over the whole rendered output, including every report line.**
**Where the ceiling would break, print fewer queued cards and state how many were withheld.** Count the
withheld against the whole queued population, not against N — a reader who asked for five and got three
needs to know whether thirty-seven are waiting or two are. Never truncate in silence.
**Blocked and in-flight cards are never dropped to fit.** Only the queued section gives ground.
**When the two rules collide, the ceiling yields and the run says so.** Blocked and in-flight cards alone
can exceed 200 words on a badly stuck board. Then zero queued cards still breaches, and there is no
satisfying both — so print every blocked and in-flight card, breach the ceiling, and state that the
mandatory sections exceeded it. **Dropping a blocked card is the worse failure**, because the blocked
section is the one a reader trusts most, and a silent overrun would be worse than both.From pmvanev/phil-claude-plugin, MIT.
More from pmvanev/phil-claude-plugin
- 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9 - 0.565score
edd
pmvanev
Skill bundle for phil:edd command — Expectation-Driven Development front-door.
SkillAFreshness: AClaude Code +9 - 0.565score
adversarial-review
pmvanev
Skill bundle for phil:adversarial-review command — a general-purpose independent adversarial critic.
SkillAFreshness: AClaude Code +9 - 0.565score
red-team-prose
pmvanev
Skill bundle for phil:red-team-prose command — reviews a doc, README, or release note for AI-generated tells, Elements of Style clarity, and fitness for its…
SkillAFreshness: AClaude Code +9 - 0.561score
ai-eos
pmvanev
Skill bundle for phil:ai-eos command — detects the stylistic tells that mark technical prose as AI-generated, with a density verdict and ranked findings.
SkillAFreshness: AClaude Code +9 - 0.561score
redesign-tests
pmvanev
Skill bundle for phil:redesign-tests command — human-approved, behaviour-changing test redesign loop with a coverage-equivalence claim per rewrite
SkillAFreshness: AClaude Code +9 - 0.561score
refactor-loop
pmvanev
Skill bundle for phil:refactor-loop command — gated closed-loop refactoring with a separate proposer and correctness critic, hard test gates, and a DAG ledger
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 10
- Last commit (this folder)
- Oct 13, 2026 (15 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/pmvanev/phil-claude-plugin
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from pmvanev
- 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9
Cite this page
board-snapshot skill. Agent Mart. https://agentmart.dev/skills/pmvanev-board-snapshot (last updated 2026-10-24)