board-scanner
Board scanning and dispatch procedure for GitHub Projects v2. Scans the project board for actionable issues, handles auto-advance transitions, and dispatches work to specialized hats via priority tables. Auto-injected into coordinator prompts.
Best use case
board-scanner is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Board scanning and dispatch procedure for GitHub Projects v2. Scans the project board for actionable issues, handles auto-advance transitions, and dispatches work to specialized hats via priority tables. Auto-injected into coordinator prompts.
Teams using board-scanner should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/board-scanner/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How board-scanner Compares
| Feature / Agent | board-scanner | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Board scanning and dispatch procedure for GitHub Projects v2. Scans the project board for actionable issues, handles auto-advance transitions, and dispatches work to specialized hats via priority tables. Auto-injected into coordinator prompts.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Board Scanner This skill defines your PLAN step when coordinating. Scan the GitHub Projects v2 board, handle auto-advance transitions, then DELEGATE by publishing exactly one event to the appropriate hat. ## Scan Procedure ### 1. Scratchpad Append a new scan section to the scratchpad with the current timestamp. Delete `tasks.jsonl` if it exists to prevent state bleed from previous hat activations. ### 2. Sync workspace ```bash git -C team pull --ff-only 2>/dev/null || true ``` ### 3. Auto-detect the team repo ```bash TEAM_REPO=$(cd team && gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null) ``` If `gh repo view` fails (e.g., remote is a local path), extract from git remote: ```bash TEAM_REPO=$(cd team && git remote get-url origin | sed 's|.*github.com[:/]||;s|\.git$||') ``` ### 4. Cache project IDs (once per scan cycle) ```bash OWNER=$(echo "$TEAM_REPO" | cut -d/ -f1) PROJECT_NUM=$(gh project list --owner "$OWNER" --format json --jq '.projects[0].number') PROJECT_ID=$(gh project view "$PROJECT_NUM" --owner "$OWNER" --format json --jq '.id') FIELD_DATA=$(gh project field-list "$PROJECT_NUM" --owner "$OWNER" --format json) STATUS_FIELD_ID=$(echo "$FIELD_DATA" | jq -r '.fields[] | select(.name=="Status") | .id') ``` ### 5. Query the project board ```bash gh project item-list "$PROJECT_NUM" --owner "$OWNER" --format json ``` Parse the JSON to extract items with their Status field values. ### 6. Log to poll-log.txt Use `$(date -u +%Y-%m-%dT%H:%M:%SZ)` for all timestamps. ``` 2026-03-02T10:15:00Z — board.scan — START 2026-03-02T10:15:01Z — board.scan — 3 issues found 2026-03-02T10:15:01Z — board.scan — END ``` ### 7. Auto-advance Before dispatching, handle auto-advance statuses. Use the cached IDs to transition statuses via `gh project item-edit`: ```bash ITEM_ID=$(gh project item-list "$PROJECT_NUM" --owner "$OWNER" --format json \ --jq ".items[] | select(.content.number == $ISSUE_NUM) | .id") OPTION_ID=$(echo "$FIELD_DATA" | jq -r '.fields[] | select(.name=="Status") | .options[] | select(.name=="<target-status>") | .id') gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \ --field-id "$STATUS_FIELD_ID" --single-select-option-id "$OPTION_ID" ``` Transitions: - `arch:sign-off` → set status to `po:merge`, comment, log. - `po:merge` → set status to `done`, close the issue via `gh issue close`, comment, log. Comment format for auto-advance: ``` ### 🦸 superman — $(date -u +%Y-%m-%dT%H:%M:%SZ) Auto-advance: arch:sign-off → po:merge ``` After auto-advancing all eligible issues, continue to dispatch with the updated board state. ### 8. Dispatch Dispatch based on the highest-priority project status found. Process one item at a time. Epics before stories. Within each category, follow priority order. **Epic priority (highest first):** | # | Status | Event | |---|--------|-------| | 1 | `po:triage` | `po.backlog` | | 2 | `po:design-review` | `po.review` | | 3 | `po:plan-review` | `po.review` | | 4 | `po:accept` | `po.review` | | 5 | `lead:design-review` | `lead.review` | | 6 | `lead:plan-review` | `lead.review` | | 7 | `lead:breakdown-review` | `lead.review` | | 8 | `arch:breakdown` | `arch.breakdown` | | 9 | `arch:plan` | `arch.plan` | | 10 | `arch:design` | `arch.design` | | 11 | `po:backlog` | `po.backlog` | | 12 | `po:ready` | `po.backlog` | | 13 | `arch:in-progress` | `arch.in_progress` | **Story priority (highest first):** | # | Status | Event | |---|--------|-------| | 1 | `qe:test-design` | `qe.test_design` | | 2 | `dev:implement` | `dev.implement` | | 3 | `qe:verify` | `qe.verify` | | 4 | `dev:code-review` | `dev.code_review` | | 5 | `sre:infra-setup` | `sre.setup` | **Content priority:** | # | Status | Event | |---|--------|-------| | 1 | `cw:write` | `cw.write` | | 2 | `cw:review` | `cw.review` | No work found → emit `LOOP_COMPLETE`. ## Idempotency Before dispatching, verify the issue is not already at the target output status. If it is, skip it and check the next issue. Include the issue number in the published event context so downstream hats know which issue to work on. ## Failed Processing Escalation Before dispatching, count comments matching `Processing failed:` on the issue. - Count < 3 → dispatch normally. - Count >= 3 → set the issue's project status to `error` (via item-edit), skip dispatch, add a comment: `"Issue #N failed 3 times: [last error]. Status set to error. Please investigate."` If RObot is enabled, also send a `ralph tools interact progress` notification. Skip items with Status `error` during dispatch. ## Error Handling If any `gh` command fails during the scan: 1. Log the error to `errors-log.txt` with the full command and output. 2. If the failure is on a specific issue (item-edit, issue comment), skip that issue and continue scanning the rest. 3. If the failure is systemic (project not found, auth failure), emit `LOOP_COMPLETE` and log the reason. ## Comment Format All board scanner comments use: ``` ### 🦸 superman — $(date -u +%Y-%m-%dT%H:%M:%SZ) ``` ## Review Status Handling (Non-Blocking) Issues at review statuses (`po:design-review`, `po:plan-review`, `po:accept`) are dispatched to `po_reviewer` each scan cycle. The `po_reviewer` hat checks for a human response comment, acts if found, and returns control if not. This is non-blocking. Issues without a human response remain at their review status and will be re-checked on the next scan cycle. NEVER skip review-status issues — always dispatch them. ## Rules - ALWAYS log to poll-log.txt before publishing. - Publish exactly ONE event per scan cycle to dispatch work. - When no work is found, emit `LOOP_COMPLETE`.
Related Skills
workspace-sync
Sync and diagnose BotMinter workspaces. Use when the operator says "sync workspaces", "apply profile changes", "propagate changes", "update all workspaces", "check workspace health", "diff against profile", "full sync", "my workspace has old files", or "why is the workspace out of date". Do NOT use for member behavior/config tuning (use member-tuning) or structured process changes (use process-evolution).
team-design
Entry point for all day-2 team design operations. Routes operator intent to the appropriate sub-skill — retrospective, role-management, member-tuning, or process-evolution — and provides a unified dashboard of team design state. Use when asked to "design the team", "show me the team", "team overview", "what's our team setup", "let's evolve the team", "team health check", or when the operator's intent spans multiple team design areas.
role-management
Manages team role composition — list, add, remove, and inspect roles defined in botminter.yml. Includes impact analysis of statuses, hats, and knowledge before changes, and records every change as a team agreement decision. Use when asked to "add a role", "remove a role", "list roles", "inspect a role", "change team composition", "what roles do we have", "team structure", or when an cos:exec:todo issue requests a role change.
retrospective
Guides a structured team retrospective examining what went well, what didn't, and produces typed action items. Outputs a retro summary to agreements/retros/. Use when asked to "run a retro", "do a retrospective", "reflect on the sprint", "what went well", "review team performance", or when an cos:exec:todo issue requests a retrospective.
process-evolution
Guides deliberate, team-wide process changes — adding or removing statuses, modifying transitions, updating review gates, and evolving the workflow lifecycle. Validates changes against the status graph before applying and records every decision as a team agreement. Use when asked to "change the process", "add a status", "remove a status", "modify the workflow", "update transitions", "add a review gate", "evolve the process", "change auto-advance rules", or when an cos:exec:todo issue requests a process change.
member-tuning
Diagnoses and tunes individual member configurations by mapping symptoms to the responsible artifact — PROMPT.md, CLAUDE.md, ralph.yml (hats), skills, or PROCESS.md. Provides a diagnostic decision tree, inspection commands, example edits, and propagation steps for each artifact type. Use when asked to "tune a member", "fix a member", "troubleshoot a member", "member isn't working", "adjust member behavior", "member diagnostic", "why is the member doing X", or when an cos:exec:todo issue requests member tuning.
cos-session
Chief of Staff working session with the operator. Use when the operator says "chief of staff session", "cos session", "I have things to file", "let's work through some items", "I found some problems", "what's <member> doing", "let's go over the board", or brings any mix of observations, bugs, ideas, or operational concerns.
github-project
Manages GitHub Projects v2 workflows for issue tracking and project management. Use when user asks to "show the board", "view issues", "what's in [status]", "create an epic", "add a story", "create a bug", "move issue
workspace-doctor
Diagnoses common BotMinter workspace issues — stale submodules, broken symlinks, missing files, outdated context, and sync problems. Use when the operator asks to "check my workspace", "diagnose issues", "why isn't X working", "fix my setup", "workspace health", or "something seems wrong".
team-overview
Shows registered BotMinter teams, their members, roles, workspaces, and running state. Use when the operator asks to "show teams", "list teams", "who is on the team", "team status", "show members", or "what teams do I have". Reads ~/.botminter/config.yml and workspace directories.
profile-design
Designs and troubleshoots BotMinter profiles — team methodology templates that define roles, statuses, hats, skills, and process conventions. Use when the operator asks to "design a profile", "create a new role", "fork a profile", "fix my profile", "troubleshoot profile issues", "design a process workflow", "add a hat", "customize a profile", or "validate my profile". Operates on profile templates, not live team repos.
profile-browser
Browses and describes BotMinter profiles — team methodology templates that define roles, statuses, coding agents, and process conventions. Use when the operator asks to "list profiles", "show profiles", "what profiles are available", "describe a profile", "what roles does X have", or "compare profiles". Reads ~/.config/botminter/profiles/.