github-sync
BMADの計画情報をGitHub Projects v2と双方向で連携させ、ストーリーの作成やステータスの同期、プロジェクトボードの管理などを円滑に進め、GitHub上でBMADの成果物を管理・追跡するSkill。
📜 元の英語説明(参考)
Bidirectional sync between BMAD planning artifacts and GitHub Projects v2. Use this skill whenever the user says "sync to github", "push stories", "pull status from github", "set up github project", "github sync", "onboard github project", "create github issues from stories", "update stories from github", "sync status", or wants to manage BMAD artifacts in GitHub Projects. Also trigger when user mentions "gh project", "github board", "sprint board", "project roadmap", "relationship field", "blocked by", or "parent issue" in the context of BMAD artifacts. Trigger on implicit cues like "I want to track stories in github", "let's set up a project board", "what's out of sync", "push the sprint to github".
🇯🇵 日本人クリエイター向け解説
BMADの計画情報をGitHub Projects v2と双方向で連携させ、ストーリーの作成やステータスの同期、プロジェクトボードの管理などを円滑に進め、GitHub上でBMADの成果物を管理・追跡するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o github-sync.zip https://jpskill.com/download/23716.zip && unzip -o github-sync.zip && rm github-sync.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/23716.zip -OutFile "$d\github-sync.zip"; Expand-Archive "$d\github-sync.zip" -DestinationPath $d -Force; ri "$d\github-sync.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
github-sync.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
github-syncフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 5
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] github-sync
GitHub Sync — BMAD から GitHub Projects v2 へ
Markdown ファイルとして保存された BMAD の計画成果物(エピック、ストーリー、スプリント計画)と、視覚的なプロジェクト追跡のための GitHub Projects v2 との双方向同期です。
クイックナビゲーション
ghCLI コマンド、GraphQL クエリ →references/gh-commands.md- Issue 本文テンプレート、フィールドマッピング、ラベル、マイルストーン →
references/content-mapping.md- 設定ファイル形式 →
references/config-schema.md- 成果物パーサースクリプト →
scripts/parse-artifacts.py
4つのルール(これらを破ってはいけません)
-
自動同期は決して行いません。 すべての変更操作(Issue の作成、フィールドの更新、ファイルの変更)は、まず同期レポートを生成し、ユーザーに提示し、明示的な承認を待ってから実行する必要があります。ユーザーは、何が変更されるかを正確に確認できなければなりません。
-
フィールドレベルの信頼できる情報源。 各フィールドには、BMAD ファイルまたは GitHub のいずれか一方の所有者がいます。同期中、所有者側が常に優先されます。所有者のデータを上書きしてはいけません。
- BMAD が所有するもの: ストーリー本文、受け入れ基準、タスク、スプリント割り当て、エピックのグループ化、依存関係
- GitHub が所有するもの: ステータス、開発者割り当て、タスクチェックボックスの完了、ストーリーポイント、優先度
-
冪等な操作。 同じ同期を2回実行しても、同じ結果が生成されます。リンクバック識別子(ストーリーファイルの H1 タイトルリンク、計画フロントマターの
gh_item_url)は、重複作成を防ぎます。作成する前に、常に既存の同期状態を確認してください。 -
スクリプトで Issue 本文を自動解析してはいけません。 Issue 本文の生成には、Read ツールで各ストーリーファイルを直接読み込み、
references/content-mapping.mdのテンプレートに従って手動で本文を作成する必要があります。自動解析スクリプトは、微妙な方法でサイレントに失敗します。書式設定の前提が間違っているとタスクリストを削除したり、コードブロックを削除して開発者メモを台無しにしたり、空のセクションヘッダーを生成したりします。一度の誤ったプッシュで、27個すべての Issue が一度に汚染されます。ファイルを読み込み、本文を書き込みます。近道はありません。
フロー検出
| ユーザーの指示 | ワークフロー | 設定が必要ですか? |
|---|---|---|
| "github project をセットアップ", "オンボーディング", "github を初期化" | オンボーディング | いいえ(設定を作成します) |
| "github にプッシュ", "同期プッシュ", "issue を作成" | プッシュ | はい |
| "github からプル", "同期プル", "github から更新" | プル | はい |
| "同期ステータス", "何が同期されていませんか" | ステータスチェック | はい |
プロジェクトルートに .github-sync.yaml が存在しない場合は、常に最初にオンボーディングにルーティングしてください。
前提条件チェック(すべてのワークフローの前に実行)
どのワークフローの前にでも、これらを順番に確認してください。最初の失敗で停止します。
Step 1: gh --version
→ 不足している場合: "GitHub CLI をインストールしてください: https://cli.github.com/"
Step 2: gh auth status
→ 認証されていない場合: "実行してください: gh auth login"
Step 3: gh auth status ("project" がスコープにあるか確認)
→ 不足している場合: "実行してください: gh auth refresh -s project"
Step 4: (プッシュ/プル/ステータスのみ) .github-sync.yaml が存在するか確認
→ 不足している場合: "最初にオンボーディングを実行してください: 'set up github project' と言ってください"
オンボーディングワークフロー
これは初回セットアップです。GitHub Project を作成または接続し、カスタムフィールド、ラベル、フェーズベースのマイルストーンを作成します。
ステップ 1: BMAD 成果物を検出
パーサーを実行して、何が存在するかを検出します。
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode scan \
--stories-dir .artifacts/implementation-artifacts
また、以下のファイルが存在することも確認してください。
.artifacts/planning-artifacts/epics.md.artifacts/planning-artifacts/sprint-plan.md
注: 成果物パス
.artifacts/はプロジェクトによって異なる場合があります。実際のディレクトリ構造を確認してください。一部のプロジェクトでは_bmad-output/を使用しています。ユーザーと正しいパスを確認し、それらを全体を通して使用してください。それに応じて設定のpaths.*を更新してください。
カウントを報告します。「N 個のストーリーファイル、M 個のエピック、K 個のスプリントが見つかりました。」
ステップ 2: GitHub の詳細を収集
現在のリポジトリを自動検出します。
gh repo view --json owner,name --jq '.owner.login + "/" + .name'
既存のプロジェクトをリストし、ユーザーにそれらを使用するか、新規作成するかを尋ねます。
gh project list --owner {owner} --format json
検出された所有者/リポジトリと既存のプロジェクトを提示します。続行する前に確認を求めます。
ステップ 3: エピックとスプリントのデータを解析
今すぐ references/content-mapping.md を読んでください — セクション 7(ラベルスキーム)、8(マイルストーンスキーム)、および 12(エピックの派生)。正確なオンボーディングレポートを作成するためにこれらが必要です。
次に、実際の成果物を解析します。
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode epics \
--file .artifacts/planning-artifacts/epics.md
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode sprints \
--file .artifacts/planning-artifacts/sprint-plan.md
ステップ 4: オンボーディングレポートを生成
作成されるすべてを示すレポートを提示します。
=== GITHUB SYNC — オンボーディングレポート ===
リポジトリ: {owner}/{repo}
プロジェクト: #{N} "{title}" (既存) または新規プロジェクト "{title}"
作成/検証するもの:
カスタムフィールド (7):
- Story ID (TEXT)
- Epic (SINGLE_SELECT: 12 オプション、レインボーカラー)
- Sprint (SINGLE_SELECT: Sprint 01–12、レインボーカラー + スプリント目標の説明)
- Dev (SINGLE_SELECT: All, Dev 1, Dev 2, Dev 3, Dev 1+2)
- Sprint Start (DATE)
- Sprint End (DATE)
- Story Points (NUMBER)
設定する組み込みフィールド:
- Start date (DATE, 既存) ← Sprint Start と同じ日付
- Target date (DATE, 既存) ← Sprint End と同じ日付
- Status (単一選択、既存)
{N} 個のラベル:
- エピックラベル (エピックごとに1つ、例: epic:1-foundation ... epic:12-testing)
- フェーズラベル (例: phase:poc, phase:hardening)
- レイヤーラベル (オプション、プロジェクト固有のアーキテクチャレイヤー)
{K} 個のマイルストーン (フェーズベース、スプリントごとではありません):
- PoC (期限: {sprint_6_end}) スプリント 1–6
- Production Hardening (期限: {sprint_12_end}) スプリント 7–12
注: "Phase" カスタム f 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
GitHub Sync — BMAD to GitHub Projects v2
Bidirectional sync between BMAD planning artifacts (epics, stories, sprint plan) stored as markdown files and GitHub Projects v2 for visual project tracking.
Quick navigation
ghCLI commands, GraphQL queries →references/gh-commands.md- Issue body template, field mapping, labels, milestones →
references/content-mapping.md- Config file format →
references/config-schema.md- Artifact parser script →
scripts/parse-artifacts.py
Four Rules (Never Break These)
-
Never sync automatically. Every mutating operation (create issues, update fields, modify files) requires generating a sync report first, presenting it to the user, and waiting for explicit approval before executing. The user must see exactly what will change.
-
Field-level source of truth. Each field has one owner — either BMAD files or GitHub. During sync, the owner side always wins. Never overwrite the owner's data.
- BMAD owns: story body, acceptance criteria, tasks, sprint assignment, epic grouping, dependencies
- GitHub owns: status, dev assignment, task checkbox completion, story points, priority
-
Idempotent operations. Running the same sync twice produces the same result. Link-back identifiers (H1 title links in story files,
gh_item_urlin planning frontmatter) prevent duplicate creation. Always check for existing sync state before creating. -
Never auto-parse issue bodies with a script. Issue body generation requires reading each story file directly with the Read tool and crafting the body manually following the template in
references/content-mapping.md. Auto-parsing scripts fail silently in subtle ways: they strip task lists when formatting assumptions are wrong, gut dev notes by removing code blocks, and produce empty section headers. One bad push contaminates all 27 issues at once. Read the file. Write the body. No shortcuts.
Flow Detection
| User Says | Workflow | Config Required? |
|---|---|---|
| "set up github project", "onboard", "initialize github" | Onboarding | No (creates config) |
| "push to github", "sync push", "create issues" | Push | Yes |
| "pull from github", "sync pull", "update from github" | Pull | Yes |
| "sync status", "what's out of sync" | Status Check | Yes |
If no .github-sync.yaml exists at project root, always route to Onboarding first.
Prerequisite Check (Run Before Every Workflow)
Before any workflow, verify these in order. Stop at first failure.
Step 1: gh --version
→ If missing: "Install GitHub CLI: https://cli.github.com/"
Step 2: gh auth status
→ If not authenticated: "Run: gh auth login"
Step 3: gh auth status (check for "project" in scopes)
→ If missing: "Run: gh auth refresh -s project"
Step 4: (For push/pull/status only) Check .github-sync.yaml exists
→ If missing: "Run onboarding first: say 'set up github project'"
Onboarding Workflow
This is the first-time setup. It creates or connects to a GitHub Project, creates custom fields, labels, and phase-based milestones.
Step 1: Detect BMAD Artifacts
Run the parser to discover what exists:
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode scan \
--stories-dir .artifacts/implementation-artifacts
Also check that these files exist:
.artifacts/planning-artifacts/epics.md.artifacts/planning-artifacts/sprint-plan.md
Note: The artifacts path
.artifacts/may differ per project. Check the actual directory structure — some projects use_bmad-output/. Confirm the correct paths with the user and use them throughout. Updatepaths.*in the config accordingly.
Report the count: "Found N story files, M epics, K sprints."
Step 2: Gather GitHub Details
Auto-detect the current repo:
gh repo view --json owner,name --jq '.owner.login + "/" + .name'
List existing projects and ask the user whether to use one or create new:
gh project list --owner {owner} --format json
Present detected owner/repo and existing projects. Ask for confirmation before proceeding.
Step 3: Parse Epic and Sprint Data
Read references/content-mapping.md now — sections 7 (Label Scheme), 8 (Milestone Scheme),
and 12 (Epic Derivation). You need these to build an accurate onboarding report.
Then parse the actual artifacts:
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode epics \
--file .artifacts/planning-artifacts/epics.md
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode sprints \
--file .artifacts/planning-artifacts/sprint-plan.md
Step 4: Generate Onboarding Report
Present a report showing everything that WILL be created:
=== GITHUB SYNC — ONBOARDING REPORT ===
Repository: {owner}/{repo}
Project: #{N} "{title}" (existing) OR new project "{title}"
Will create/verify:
Custom fields (7):
- Story ID (TEXT)
- Epic (SINGLE_SELECT: 12 options, rainbow colors)
- Sprint (SINGLE_SELECT: Sprint 01–12, rainbow colors + sprint goal descriptions)
- Dev (SINGLE_SELECT: All, Dev 1, Dev 2, Dev 3, Dev 1+2)
- Sprint Start (DATE)
- Sprint End (DATE)
- Story Points (NUMBER)
Built-in fields to set:
- Start date (DATE, pre-existing) ← same dates as Sprint Start
- Target date (DATE, pre-existing) ← same dates as Sprint End
- Status (single-select, pre-existing)
{N} labels:
- Epic labels (one per epic, e.g., epic:1-foundation ... epic:12-testing)
- Phase labels (e.g., phase:poc, phase:hardening)
- Layer labels (optional, project-specific architecture layers)
{K} milestones (phase-based, NOT per-sprint):
- PoC (due: {sprint_6_end}) Sprints 1–6
- Production Hardening (due: {sprint_12_end}) Sprints 7–12
Note: No "Phase" custom field — the milestone covers phase membership.
Proceed with onboarding? [Y/N]
HALT HERE. Wait for user approval.
Step 5: Execute Setup
Read references/gh-commands.md now — you need the exact commands for every operation below.
If approved, execute in this order:
- Create or connect GitHub Project (section 2) — if using existing, just get its node ID
- Create custom fields (section 3) — Story ID, Epic, Sprint, Dev, Sprint Start, Sprint End, Story Points
- Query all field IDs (section 4) — including the pre-existing Start date, Target date, Status fields
- Apply rainbow colors + sprint goal descriptions to Sprint and Epic fields (section 13)
- Sprint options: cycle RED→ORANGE→YELLOW→GREEN→BLUE→PURPLE→PINK, repeat
- Sprint description = sprint objective from sprint-plan.md
- Epic options: RED→ORANGE→YELLOW→GREEN→BLUE→PURPLE→PINK→RED→ORANGE→YELLOW→GREEN→BLUE
- Create labels (section 5) — 17 labels total
- Create phase-based milestones (section 6) — PoC and Production Hardening
Critical: After calling
updateProjectV2Fieldto set colors/descriptions, the single-select option IDs CHANGE (the mutation replaces the options list). Always re-query option IDs after calling this mutation and use the new IDs in the config.
Step 6: Write Config
Read references/config-schema.md now — you need the exact YAML format.
Create .github-sync.yaml at project root with all populated IDs following that schema.
Note: No phase field in field_ids or option_ids — Phase was replaced by milestones.
Step 7: Report Completion
Onboarding complete!
Project: https://github.com/orgs/{owner}/projects/{number}
Config: .github-sync.yaml
Next: Run "push stories to github" to create issues.
Push Workflow (Files → GitHub)
Pushes BMAD story files to GitHub as issues, adds them to the project, sets all fields, sets date fields, and establishes relationships.
Step 1: Load Config
Read .github-sync.yaml. Verify all field IDs are populated. If any are empty, re-query
field IDs from GitHub (the IDs may have been lost).
Step 2: Scan Stories
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode scan \
--stories-dir .artifacts/implementation-artifacts
For each story, determine create vs edit mode:
- H1 is plain
# Story X.X: Title(no link) → CREATE - H1 contains
# [Story X.X: Title](url)→ UPDATE (already synced)
Step 3: Handle Partial Sync (Optional)
If the user specified a filter (e.g., "push stories 1.1 1.2", "push epic 1", "push sprint 2"), filter the story list before proceeding. If no filter, push all stories.
Step 4: Read Story Files and Build Issue Content
⚠️ Rule 4 applies here: Read each file with the Read tool. Build bodies manually. No scripts.
For each story:
- Read the file using the Read tool
- Read
references/content-mapping.md— sections 1–4 and 9 for the exact format - Build the issue body following the template:
- User story blockquote
- AC as one-line Then-clause summaries (checkboxes)
- Full task list (Task 2+ only — exclude agent-only tasks by reading content, not by position)
- Dependencies with
#NGitHub issue numbers - Collapsible dev notes: tables, config snippets, architecture patterns — NOT code skeletons, NOT ASCII trees, NOT "What NOT to Do" lists, NOT references
- Look up sprint/dev/epic from sprint-plan.md (NOT from the story file body)
Step 5: Generate Sync Report
=== GITHUB SYNC — PUSH REPORT ===
Generated: {timestamp}
--- CREATES ({count} new issues) ---
[CREATE] {story_id} {short_title}
File: {story_file_path}
Epic: {epic_label} | Sprint: {sprint} | Dev: {dev} | Phase: {phase}
Labels: epic:{N}-{name}, phase:{phase}
Milestone: {PoC | Production Hardening}
--- UPDATES ({count} existing issues) ---
[UPDATE] {story_id} {short_title} (#{issue_number})
Changes: body updated
--- SKIPPED ({count} items) ---
[SKIP] {story_id} {short_title} — already synced, no local changes
--- SUMMARY ---
Creates: {N} | Updates: {N} | Skips: {N}
Proceed? [Y/N]
HALT HERE. Wait for user approval.
Step 6: Execute Push
If approved, for each CREATE:
- Write issue body to a temp file (
/tmp/issue-{story_id}.md) gh issue create --title "..." --body-file /tmp/... --label "epic:X-name" --label "phase:poc" --milestone "{PoC|Production Hardening}"- Extract issue URL from output
gh project item-add {project_number} --owner {owner} --url {issue_url} --format json- Extract item ID from JSON output
- Set all project fields using
gh project item-edit:- Story ID (text)
- Epic (single-select option)
- Sprint (single-select option, e.g., "Sprint 01")
- Dev (single-select option)
- Sprint Start (date from sprint-plan.md)
- Sprint End (date from sprint-plan.md)
- Status (Backlog)
- Start date (same date as Sprint Start — pre-existing field)
- Target date (same date as Sprint End — pre-existing field)
- Write link-back to local file: replace H1 with
# [Story X.X: Title](issue_url)
For each UPDATE:
- Write updated body to temp file
gh issue edit {number} --body-file /tmp/... --milestone "{phase_milestone}"- Update project fields if sprint/epic changed
Step 7: Set Up Relationships
After all issues are created, establish GitHub native relationships.
Read references/gh-commands.md section 12 for the exact GraphQL mutations.
7a. Epic tracking issues as parents
Create one epic tracking issue per epic (if not already created). See
references/content-mapping.md section 10 for the body template. Then for each story,
set its epic tracking issue as its parent:
mutation {
addSubIssue(input: {
issueId: "{epic_tracking_issue_node_id}"
subIssueId: "{story_issue_node_id}"
replaceParent: true
}) {
issue { number }
subIssue { number }
}
}
7b. Blocked-by dependencies
Read the dependency table from sprint-plan.md (the Dependencies column in each sprint's
story table). For each dependency A → B (story A depends on story B):
mutation {
addBlockedBy(input: {
issueId: "{story_A_node_id}"
blockingIssueId: "{story_B_node_id}"
}) {
issue { number }
blockingIssue { number }
}
}
Always source dependencies from sprint-plan.md, not from story file bodies. The sprint plan is the authoritative dependency record.
Get issue node IDs via:
gh api graphql -f query='
query {
repository(owner:"{owner}", name:"{repo}") {
issues(first:50, orderBy:{field:CREATED_AT, direction:ASC}) {
nodes { number id title }
}
}
}
'
Step 8: Report Completion
Push complete!
Created: {N} issues
Updated: {N} issues
Skipped: {N} items
Relationships set: {N} parent, {M} blocked-by
Config updated: last_synced = {timestamp}
Pull Workflow (GitHub → Files)
Pulls status, assignees, and task completion from GitHub back into local BMAD files.
Step 1: Load Config and Query GitHub
Read .github-sync.yaml. Then read references/gh-commands.md section 9 to get the full
GraphQL items query. Execute it to fetch all project items.
Step 2: Match Items to Local Files
For each GitHub item that has a "Story ID" field value:
- Find the matching local story file (by story ID → filename pattern)
- Compare GitHub state with local file state:
- Status: GitHub status vs local
Status:line - Assignee: GitHub assignee vs local dev mapping
- Task checkboxes: GitHub issue body checkboxes vs local file checkboxes
- Status: GitHub status vs local
Step 3: Generate Sync Report
=== GITHUB SYNC — PULL REPORT ===
Generated: {timestamp}
--- FILE UPDATES ({count} items) ---
[UPDATE] {story_filename}.md
Status: ready-for-dev → done (from GitHub #{issue_number})
Assignee: (none) → @{username}
--- NO CHANGES ({count} items) ---
[OK] {story_filename}.md — in sync
--- GITHUB-ONLY ({count} items) ---
[WARN] GitHub #{N} "{title}" — no matching local file
--- SUMMARY ---
File updates: {N} | No changes: {N} | Warnings: {N}
Proceed? [Y/N]
HALT HERE. Wait for user approval.
Step 4: Execute Pull
If approved, for each file update:
- Read the story file
- Update the
Status:line with the mapped BMAD status - Write the file back
- Update config
last_synced
Status Check (Read-Only)
Compare local files with GitHub state without making any changes. No approval needed.
# Scan local files
python3 .agents/skills/github-sync/scripts/parse-artifacts.py --mode scan \
--stories-dir .artifacts/implementation-artifacts
# Query GitHub items (full field values)
# Use GraphQL query from references/gh-commands.md section 9
Output a comparison table:
=== GITHUB SYNC — STATUS ===
| Story | Local Status | GitHub Status | Sprint | Synced? | Issue |
|-------|--------------|---------------|--------|---------|-------|
| 1.1 | ready-for-dev | Done | 01 | NO | #1 |
| 1.2 | ready-for-dev | Ready | 01 | YES | #2 |
| 2.1 | backlog | (not synced) | 02 | NO | — |
Summary: {N} in sync, {M} out of sync, {K} not yet pushed
Partial Sync Filters
| Filter | Example | Effect |
|---|---|---|
| By story IDs | push stories 1.1 1.2 1.3 |
Only these stories |
| By epic | push epic 3 |
All stories in Epic 3 |
| By sprint | push sprint 2 |
All stories assigned to Sprint 2 |
| By status | push unsynced |
Only stories not yet pushed |
| All | push or push all |
All stories (default) |
Error Handling
| Error | Action |
|---|---|
gh command returns non-zero exit code |
Show the error output, suggest fix, halt |
| Field ID missing from config | Re-query field IDs via section 4 of gh-commands.md |
| Rate limit hit (HTTP 429) | Show warning, suggest waiting 60 seconds, halt |
| Story file has unexpected format | Skip with warning in the sync report |
| Milestone already exists | Skip creation (idempotent) |
| Label already exists | Skip creation (idempotent) |
| Issue already exists for story | Switch to update mode |
| Single-select option IDs stale | Re-query after any updateProjectV2Field call — the mutation replaces all options and issues new IDs |
addBlockedBy payload field error |
Return field is blockingIssue (not blockedByIssue) |
updateProjectV2Field rejects projectId |
This mutation takes only fieldId, not projectId |
updateProjectV2Field rejects option id |
Options use name/color/description only — no id field |
Reference File Index
| File | Read When |
|---|---|
references/gh-commands.md |
You need exact gh CLI commands or GraphQL queries |
references/content-mapping.md |
You need to build issue body, map fields, or check label/milestone scheme |
references/config-schema.md |
You need to create or read .github-sync.yaml |
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (18,033 bytes)
- 📎 references/config-schema.md (6,071 bytes)
- 📎 references/content-mapping.md (17,637 bytes)
- 📎 references/gh-commands.md (17,916 bytes)
- 📎 scripts/parse-artifacts.py (15,505 bytes)