Claude-skill-registry board-manager
Manage GitHub Project board items - add issues, update status, move between columns. Use when user asks to add issues to board, change status, or organize the project.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/board-manager" ~/.claude/skills/majiayu000-claude-skill-registry-board-manager && rm -rf "$T"
manifest:
skills/data/board-manager/SKILL.mdsource content
Board Manager Skill
Purpose
Add issues to the project board and update their status. This skill has write permissions for board operations.
When to Use This
- User asks "add this issue to the board"
- User asks "move #X to In Progress"
- User asks "update status of issue"
- After creating a new issue (auto-add to board)
- After completing work (move to Done)
Project Board Configuration
Project: code-graph-mcp Development (#8) URL: https://github.com/users/joeczar/projects/8
IDs Reference
| Resource | ID |
|---|---|
| Project ID | |
| Status Field ID | |
Status Option IDs
| Status | Option ID | Description |
|---|---|---|
| Todo | | Not started |
| In Progress | | Currently working |
| Done | | Completed |
Commands
Add Issue to Project Board
gh project item-add 8 --owner joeczar --url https://github.com/joeczar/code-graph-mcp/issues/<number>
Get Item ID for an Issue
gh project item-list 8 --owner joeczar --format json | \ jq -r '.items[] | select(.content.number == <issue-number>) | .id'
Or via GraphQL:
gh api graphql -f query=' query { user(login: "joeczar") { projectV2(number: 8) { items(first: 100) { nodes { id content { ... on Issue { number } } } } } } }' | jq -r '.data.user.projectV2.items.nodes[] | select(.content.number == <issue-number>) | .id'
Update Issue Status
gh api graphql \ -f projectId="PVT_kwHOAbYJAM4BM5GY" \ -f itemId="<item-id>" \ -f fieldId="PVTSSF_lAHOAbYJAM4BM5GYzg8C2zk" \ -f optionId="<option-id>" \ -f query='mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) { updateProjectV2ItemFieldValue(input: { projectId: $projectId itemId: $itemId fieldId: $fieldId value: { singleSelectOptionId: $optionId } }) { projectV2Item { id } } }'
Remove Issue from Project
gh project item-delete 8 --owner joeczar --id <item-id>
Helper Functions
Move Issue to Status
move_issue_status() { local issue_number=$1 local option_id=$2 # f75ad846=Todo, 47fc9ee4=InProgress, 98236657=Done local status_name=$3 # Get item ID local item_id=$(gh project item-list 8 --owner joeczar --format json | \ jq -r '.items[] | select(.content.number == '$issue_number') | .id') if [ -z "$item_id" ]; then echo "Issue #$issue_number not found on project board" return 1 fi # Update status gh api graphql \ -f projectId="PVT_kwHOAbYJAM4BM5GY" \ -f itemId="$item_id" \ -f fieldId="PVTSSF_lAHOAbYJAM4BM5GYzg8C2zk" \ -f optionId="$option_id" \ -f query='mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) { updateProjectV2ItemFieldValue(input: { projectId: $projectId itemId: $itemId fieldId: $fieldId value: { singleSelectOptionId: $optionId } }) { projectV2Item { id } } }' echo "Moved #$issue_number to $status_name" } # Usage: # move_issue_status 12 "47fc9ee4" "In Progress" # move_issue_status 12 "98236657" "Done"
Workflow Integration
Start Working on Issue
- Add issue to project (if not already)
- Set status to "In Progress"
# Add to project gh project item-add 8 --owner joeczar --url "https://github.com/joeczar/code-graph-mcp/issues/<number>" # Get item ID and move to In Progress ITEM_ID=$(gh project item-list 8 --owner joeczar --format json | \ jq -r '.items[] | select(.content.number == <number>) | .id') gh api graphql \ -f projectId="PVT_kwHOAbYJAM4BM5GY" \ -f itemId="$ITEM_ID" \ -f fieldId="PVTSSF_lAHOAbYJAM4BM5GYzg8C2zk" \ -f optionId="47fc9ee4" \ -f query='mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) { updateProjectV2ItemFieldValue(input: { projectId: $projectId itemId: $itemId fieldId: $fieldId value: { singleSelectOptionId: $optionId } }) { projectV2Item { id } } }'
Complete Issue
Set status to "Done" (PR merge will auto-close issue).
Status Mapping
| Action | Status | Option ID |
|---|---|---|
| New issue, not started | Todo | |
| Started work | In Progress | |
| PR merged | Done | |
Query Current IDs (if they change)
gh api graphql -f query=' query { user(login: "joeczar") { projectV2(number: 8) { id field(name: "Status") { ... on ProjectV2SingleSelectField { id options { id name } } } } } }'
Output Format
After operations, confirm:
**Board Update:** Issue #X moved to [Status] **URL:** https://github.com/users/joeczar/projects/8