home/dot_agents/skills/github-projects/SKILL.md
# GitHub Projects Management Skill GitHub Projects (ProjectV2) の操作を行うスキルです。issueのステータス管理やプロジェクト情報の取得を行います。 ## 使用可能な操作 ### 1. プロジェクト一覧の取得 組織のプロジェクト一覧を取得します。 ```bash gh project list --owner <org-name> --format json | jq '.projects[] | {number: .number, id: .id, title: .title}' ``` ### 2. プロジェクトのフィールド情報取得 プロジェクトのStatusフィールドとその選択肢を取得します。 ```bash gh api graphql -f query=' query { node(id: "<PROJECT_ID>") { ... on ProjectV2 { fields(first: 20) { nodes { ... on Pro
npx skillsauth add kryota-dev/dotfiles home/dot_agents/skills/github-projectsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
GitHub Projects (ProjectV2) の操作を行うスキルです。issueのステータス管理やプロジェクト情報の取得を行います。
組織のプロジェクト一覧を取得します。
gh project list --owner <org-name> --format json | jq '.projects[] | {number: .number, id: .id, title: .title}'
プロジェクトのStatusフィールドとその選択肢を取得します。
gh api graphql -f query='
query {
node(id: "<PROJECT_ID>") {
... on ProjectV2 {
fields(first: 20) {
nodes {
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}' --jq '.data.node.fields.nodes[] | select(.name == "Status")'
出力例:
{
"id": "PVTSSF_xxxxx",
"name": "Status",
"options": [
{"id": "485d3f18", "name": "Icebox"},
{"id": "f75ad846", "name": "New"},
{"id": "82702c42", "name": "Backlog"},
{"id": "6130c3ec", "name": "In Progress"},
{"id": "3b3bbb74", "name": "Review"},
{"id": "98236657", "name": "Done"}
]
}
特定のissueがどのプロジェクトに属しているか、そのステータスを取得します。
# 方法1: gh issue viewコマンド(簡易版)
gh issue view <issue-number> --json projectItems --jq '.projectItems[] | select(.title == "<PROJECT_NAME>") | {id: .id, status: .status.name}'
# 方法2: GraphQL API(詳細版)
gh api graphql -f query='
query {
repository(owner: "<OWNER>", name: "<REPO>") {
issue(number: <ISSUE_NUMBER>) {
projectItems(first: 10) {
nodes {
id
project {
title
id
}
fieldValues(first: 10) {
nodes {
... on ProjectV2ItemFieldSingleSelectValue {
name
field {
... on ProjectV2SingleSelectField {
name
}
}
}
}
}
}
}
}
}
}' --jq '.data.repository.issue.projectItems.nodes[] | select(.project.title == "<PROJECT_NAME>") | .id'
issueのプロジェクト内でのステータスを更新します。
必要な情報:
projectId: プロジェクトのID(例: PVT_kwDOA7Zc084AqojJ)itemId: プロジェクトアイテムのID(例: PVTI_lADOA7Zc084AqojJzgjM7PE)fieldId: Statusフィールドのid(例: PVTSSF_lADOA7Zc084AqojJzgh2QOQ)singleSelectOptionId: 更新先のステータスのOption ID(例: 6130c3ec)gh api graphql -f query='
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: "<PROJECT_ID>"
itemId: "<ITEM_ID>"
fieldId: "<FIELD_ID>"
value: {
singleSelectOptionId: "<OPTION_ID>"
}
}) {
projectV2Item {
id
}
}
}'
# Step 1: プロジェクトIDを取得
PROJECT_ID=$(gh project list --owner <org-name> --format json | jq -r '.projects[] | select(.title == "<project-name>") | .id')
# Step 2: Statusフィールド情報を取得
FIELD_INFO=$(gh api graphql -f query="
query {
node(id: \"$PROJECT_ID\") {
... on ProjectV2 {
fields(first: 20) {
nodes {
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}" --jq '.data.node.fields.nodes[] | select(.name == "Status")')
FIELD_ID=$(echo "$FIELD_INFO" | jq -r '.id')
OPTION_ID=$(echo "$FIELD_INFO" | jq -r '.options[] | select(.name == "In Progress") | .id')
# Step 3: issueのProject Item IDを取得
ITEM_ID=$(gh api graphql -f query="
query {
repository(owner: \"<org-name>\", name: \"<repo-name>\") {
issue(number: <issue-number>) {
projectItems(first: 10) {
nodes {
id
project {
title
}
}
}
}
}
}" --jq '.data.repository.issue.projectItems.nodes[] | select(.project.title == "<project-name>") | .id')
# Step 4: ステータスを更新
gh api graphql -f query="
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: \"$PROJECT_ID\"
itemId: \"$ITEM_ID\"
fieldId: \"$FIELD_ID\"
value: {
singleSelectOptionId: \"$OPTION_ID\"
}
}) {
projectV2Item {
id
}
}
}"
#!/bin/bash
# 設定
ORG="<org-name>"
REPO="<repo-name>"
PROJECT_NAME="<project-name>"
TARGET_STATUS="In Progress"
ISSUE_NUMBERS=(100 101 102 103 104 105)
# プロジェクトIDを取得
PROJECT_ID=$(gh project list --owner $ORG --format json | jq -r ".projects[] | select(.title == \"$PROJECT_NAME\") | .id")
# Statusフィールド情報を取得
FIELD_INFO=$(gh api graphql -f query="
query {
node(id: \"$PROJECT_ID\") {
... on ProjectV2 {
fields(first: 20) {
nodes {
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}" --jq '.data.node.fields.nodes[] | select(.name == "Status")')
FIELD_ID=$(echo "$FIELD_INFO" | jq -r '.id')
OPTION_ID=$(echo "$FIELD_INFO" | jq -r ".options[] | select(.name == \"$TARGET_STATUS\") | .id")
echo "Project ID: $PROJECT_ID"
echo "Field ID: $FIELD_ID"
echo "Option ID for '$TARGET_STATUS': $OPTION_ID"
echo ""
# 各issueを更新
for issue_num in "${ISSUE_NUMBERS[@]}"; do
echo "Processing issue #$issue_num..."
# Project Item IDを取得
ITEM_ID=$(gh api graphql -f query="
query {
repository(owner: \"$ORG\", name: \"$REPO\") {
issue(number: $issue_num) {
projectItems(first: 10) {
nodes {
id
project {
title
}
}
}
}
}
}" --jq ".data.repository.issue.projectItems.nodes[] | select(.project.title == \"$PROJECT_NAME\") | .id")
if [ -n "$ITEM_ID" ]; then
# ステータスを更新
result=$(gh api graphql -f query="
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: \"$PROJECT_ID\"
itemId: \"$ITEM_ID\"
fieldId: \"$FIELD_ID\"
value: {
singleSelectOptionId: \"$OPTION_ID\"
}
}) {
projectV2Item {
id
}
}
}")
if echo "$result" | jq -e '.data.updateProjectV2ItemFieldValue.projectV2Item.id' > /dev/null 2>&1; then
echo "✓ Issue #$issue_num: Status updated to '$TARGET_STATUS'"
else
echo "✗ Issue #$issue_num: Update failed"
fi
else
echo "✗ Issue #$issue_num: Not found in '$PROJECT_NAME' project"
fi
echo ""
done
GitHub CLI のトークンに以下のスコープが必要です:
project: プロジェクトの読み書き(ステータス更新に必要)repo: リポジトリアクセスread:org: 組織の読み取り権限が不足している場合は以下のコマンドで追加:
gh auth refresh -s project
エラー: "INSUFFICIENT_SCOPES"
project スコープが不足gh auth refresh -s project を実行エラー: "Invalid ARIA attribute value"
itemId または optionId が間違っているdevelopment
`cc-code-review` エージェントを起動して独立したコンテキストでコードレビューを実行する。 現在のセッションのバイアスのないフレッシュな視点で、プロジェクトの CLAUDE.md を踏まえたレビューを行う。 トリガー: "cc-code-review", "ccでレビュー", "別の視点でレビュー", "セカンドオピニオン" 使用場面: (1) PRのコードレビュー (2) ブランチ差分のレビュー (3) 特定ファイルのレビュー (4) 現在の変更のレビュー
tools
Comprehensive guide for the `wtp` (Worktree Plus) CLI by satococoa — an enhanced Git worktree manager. Use this whenever the user wants to create, list, remove, or navigate Git worktrees with wtp, mentions `wtp add`/`wtp cd`/`wtp list`/`wtp remove`/`wtp exec`, asks about automatic worktree paths from branch names, post-create hooks (copy/symlink/command) in `.wtp.yml`, branch tracking for worktrees, or shell integration (`wtp shell-init`, `wtp hook`, tab completion, auto-cd). Trigger this even when the user just describes the workflow — e.g. 'spin up a worktree for this feature branch', 'jump to my auth worktree', 'clean up the worktree and its branch' — without naming wtp explicitly, as long as wtp is the available tool.
tools
Use when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector).
data-ai
Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations.