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
Chalk Labs
Need help deploying board-snapshot?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
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 and code. Checked Nov 1, 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 and GitLab.** The reads below are GitHub's: a Projects v2 board keeps a column in a project
field. A GitLab board keeps it in a label, so where the forge line names GitLab, read
`${CLAUDE_PLUGIN_ROOT}/skills/board-snapshot/references/gitlab.md` whole and take its reads in place of
these — the project-items query, the reconciliation call and the per-card `gh issue view`. Both modes
and every other rule below stand; where that file and this one differ, that file governs on GitLab.
**REQUIRED BACKGROUND: `phil:issue-board`.** Every forge mechanic — `-R` targeting, Status as a project
field, GraphQL over `item-list`, a GitLab board's label columns, 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 theFrom 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 (29 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
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get board-snapshot running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
board-snapshot skill. Agent Mart. https://agentmart.dev/skills/pmvanev-board-snapshot (last updated 2026-10-24)