troykelly/claude-skills/project-status-sync

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use to keep GitHub Project fields synchronized with actual work state - updates status, verification, criteria counts, and other project-specific fields

Install

npx vskill@latest install troykelly/claude-skills/project-status-sync

SKILL.md

Project Status Sync

Overview

Keep GitHub Project fields in sync with actual work state.

Core principle: Project fields are the dashboard. Keep them accurate.

This skill is used throughout work, called by other skills.

Required Environment

bash
# Must have GITHUB_PROJECT set
echo $GITHUB_PROJECT
# Example: https://github.com/users/troykelly/projects/4

Project Field Reference

Standard Fields
FieldTypeValuesUpdated When
StatusSingle selectBacklog, Ready, In Progress, In Review, Done, BlockedWork state changes
VerificationSingle selectNot Verified, Failing, Partial, PassingVerification runs
Criteria MetNumber0-NCriteria checked off
Criteria TotalNumberNIssue created/updated
PrioritySingle selectCritical, High, Medium, LowPriority changes
TypeSingle selectFeature, Bug, Chore, Research, SpikeIssue created
Last VerifiedDateISO dateVerification runs
Verified ByTextagent/human/ciVerification runs

Getting Project IDs

To update project fields, you need various IDs:

bash
# Get project number from URL
# https://github.com/users/troykelly/projects/4 → PROJECT_NUMBER=4
# Get project ID
gh project list --owner @me --format json | jq -r '.projects[] | select(.number == 4) | .id'
# Get field IDs
gh project field-list [PROJECT_NUMBER] --owner @me --format json
# Get item ID for a specific issue
gh project item-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.items[] | select(.content.number == [ISSUE_NUMBER]) | .id'

Status Transitions

Valid Transitions
Backlog ──► Ready ──► In Progress ──► In Review ──► Done
│ │ │ │
│ │ │ │
└─────────┴────────────┴──────────────┴──► Blocked
│
▼
(any previous state)
When to Transition
FromToTrigger
BacklogReadyDependencies cleared, ready to work
ReadyIn ProgressWork begins on issue
In ProgressIn ReviewPR created
In ReviewDonePR merged, verification passes
AnyBlockedBlocker encountered
BlockedPreviousBlocker resolved

Updating Fields

Update Status
bash
# First, get the field ID for Status
STATUS_FIELD_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Status") | .id')
# Get the option ID for the desired status
OPTION_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Status") | .options[] | select(.name == "In Progress") | .id')
# Get the item ID for the issue
ITEM_ID=$(gh project item-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.items[] | select(.content.number == [ISSUE_NUMBER]) | .id')
# Update the field
gh project item-edit --project-id [PROJECT_ID] --id $ITEM_ID \
--field-id $STATUS_FIELD_ID --single-select-option-id $OPTION_ID
Update Verification Status
bash
# Similar pattern for Verification field
VERIFICATION_FIELD_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Verification") | .id')
PASSING_OPTION_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Verification") | .options[] | select(.name == "Passing") | .id')
gh project item-edit --project-id [PROJECT_ID] --id $ITEM_ID \
--field-id $VERIFICATION_FIELD_ID --single-select-option-id $PASSING_OPTION_ID
Update Number Fields
bash
# Update Criteria Met
CRITERIA_MET_FIELD_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Criteria Met") | .id')
gh project item-edit --project-id [PROJECT_ID] --id $ITEM_ID \
--field-id $CRITERIA_MET_FIELD_ID --number 3
Update Date Fields
bash
# Update Last Verified
LAST_VERIFIED_FIELD_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Last Verified") | .id')
gh project item-edit --project-id [PROJECT_ID] --id $ITEM_ID \
--field-id $LAST_VERIFIED_FIELD_ID --date "$(date -u +%Y-%m-%d)"
Update Text Fields
bash
# Update Verified By
VERIFIED_BY_FIELD_ID=$(gh project field-list [PROJECT_NUMBER] --owner @me --format json | \
jq -r '.fields[] | select(.name == "Verified By") | .id')
gh project item-edit --project-id [PROJECT_ID] --id $ITEM_ID \
--field-id $VERIFIED_BY_FIELD_ID --text "agent"

Batch Updates

After verification, update multiple fields at once:

bash
# After verification completes, update:
# - Verification status
# - Criteria Met count
# - Last Verified date
# - Verified By
PROJECT_ID="[PROJECT_ID]"
ITEM_ID="[ITEM_ID]"
# Update verification status
gh project item-edit --project-id $PROJECT_ID --id $ITEM_ID \
--field-id $VERIFICATION_FIELD_ID --single-select-option-id $PASSING_OPTION_ID
# Update criteria met
gh project item-edit --project-id $PROJECT_ID --id $ITEM_ID \
--field-id $CRITERIA_MET_FIELD_ID --number 4
# Update last verified
gh project item-edit --project-id $PROJECT_ID --id $ITEM_ID \
--field-id $LAST_VERIFIED_FIELD_ID --date "$(date -u +%Y-%m-%d)"
# Update verified by
gh project item-edit --project-id $PROJECT_ID --id $ITEM_ID \
--field-id $VERIFIED_BY_FIELD_ID --text "agent"

Verification to Status Mapping

VerificationRecommended Status
Not VerifiedIn Progress (still working)
FailingIn Progress (needs fixes)
PartialIn Progress (needs work)
PassingIn Review (ready for PR review)

Adding Issues to Project

When a new issue is created, add it to the project:

bash
# Add issue to project
gh project item-add [PROJECT_NUMBER] --owner @me --url [ISSUE_URL]
# Then set initial field values
# Status: Backlog or Ready
# Priority: as specified
# Type: as specified
# Criteria Total: count from issue
# Verification: Not Verified

Troubleshooting

IssueSolution
Can't find projectCheck GITHUB_PROJECT env var is set correctly
Field not foundVerify field exists in project (may need to create)
Permission deniedCheck gh auth has correct scopes
Item not in projectAdd issue to project first with item-add

Integration

This skill is called by:

  • issue-lifecycle - Status transitions
  • acceptance-criteria-verification - Verification field updates
  • issue-prerequisite - Initial field setup
  • issue-decomposition - Adding sub-issues to project

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
11
7-day trend score
12

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 23 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/troykelly/claude-skills/project-status-sync/badge)](https://verified-skill.com/skills/troykelly/claude-skills/project-status-sync)

Something wrong with this skill or its page? Tell us.