sync-issues

Mirror BMAD epics and stories to GitHub milestones and issues idempotently.

Updated Sep 3, 2026
One-click install
npx skills add https://github.com/watchthelight/shatterfish --skill sync-issues-watchthelight
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: sync-issues
Source: https://github.com/watchthelight/shatterfish/tree/main/.claude/skills/sync-issues
Command: npx skills add https://github.com/watchthelight/shatterfish --skill sync-issues-watchthelight

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? Keeping GitHub issues and milestones aligned with BMAD planning artifacts (epics files and sprint-status.yaml) is tedious and error-prone when done by hand. This Skill automates the one-way mirror so GitHub always reflects the current plan without duplicate or stale issues. ## Core Features & Use Cases - Idempotent issue mirroring: Marker comments in issue bodies identify managed issues, so repeated runs create or update exactly what changed and never touch human-created issues. - Epic and story hierarchy: Creates one milestone per epic, one epic issue with a task list of story issues, and story issues with labels derived from the modules they mention (area, fairness, touches-upstream). - Status synchronization: Stories marked done in sprint-status.yaml close their issues; anything else keeps or reopens them, and docs/roadmap.md is refreshed afterward. - Use Case: After updating the epics file for a Shattered Pixel Dungeon engine project, run the dry run to review the create/update plan, then apply it to sync all milestones and issues in one pass. ## Quick Start Ask the assistant to sync issues by saying "sync issues" or "mirror the stories to GitHub", and it will dry-run scripts/sync_issues.py, review the plan, and apply it.

Frequently Asked Questions about sync-issues

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I sync GitHub issues from a Markdown epics file?

Run the sync_issues.py script with no arguments for a dry run that prints the create/update plan, then rerun with --apply to execute it. The script parses '## Epic N' and '### Story N.M' headings and mirrors them to milestones and issues via the gh CLI.

How does the skill avoid creating duplicate GitHub issues?

Each managed issue carries a marker comment like <!-- shatterfish:story <key> --> in its body, which serves as its identity. On every run the script lists all issues, matches markers, and updates existing issues instead of creating duplicates.

Can I use this with the GitHub CLI and a private repository?

Yes, it uses the gh CLI for all operations and always passes the repository explicitly with -R. You need gh authenticated with permission to create issues and milestones on the target repository.

What happens to GitHub issues when a story is removed from the epics file?

The issue is never deleted. The skill comments on the orphaned issue, adds a needs-triage note, and leaves it open so a human can decide what to do with it.

Why does the sync only create story issues for some epics?

Scope is limited to the current epic and the next one, controlled by the STORY_EPICS set in the script. Epic issues are created for every epic, but story issues appear only when their epic becomes current or next.