gh-issue-sync
Manage GitHub issues locally as Markdown files. Use for triaging, searching, editing, and creating issues without leaving your editor or terminal.
$ インストール
git clone https://github.com/mitsuhiko/gh-issue-sync /tmp/gh-issue-sync && cp -r /tmp/gh-issue-sync/skill ~/.claude/skills/gh-issue-sync// tip: Run this command in your terminal to install the skill
name: gh-issue-sync description: "Manage GitHub issues locally as Markdown files. Use for triaging, searching, editing, and creating issues without leaving your editor or terminal."
gh-issue-sync
Syncs GitHub issues to local Markdown files in .issues/open/ and .issues/closed/.
Commands
gh-issue-sync init # Initialize in git repo
gh-issue-sync pull # Fetch open issues (--all for closed too)
gh-issue-sync push # Push local changes (--dry-run to preview)
gh-issue-sync list # List issues (supports gh issue list flags + --search)
gh-issue-sync new "Title" # Create issue (--label, --edit)
gh-issue-sync close 42 # Close (--reason completed|not_planned)
gh-issue-sync reopen 42
gh-issue-sync status # Show local changes
gh-issue-sync diff 42 # Show diff (--remote to re-fetch)
File Format
.issues/open/42-fix-login-bug.md:
---
title: Fix login bug
labels: [bug, priority:high]
assignees: [alice]
milestone: v1.0
state: open
# For closed: state_reason: completed|not_planned
# Optional: parent: 10, blocked_by: [11, 12], blocks: [15]
---
Issue body in Markdown.
Issue number is derived from the filename, not stored in frontmatter.
Temporary Issues
New issues get a T-prefixed ID (e.g., T1a2b3c). The filename must start with T:
.issues/open/T1a2b3c-my-new-issue.md
On push, the file is renamed to the real issue number (e.g., 42-my-new-issue.md) and number: in frontmatter is updated. Any #T1a2b3c references in other issues are also updated to #42.
Comments
To post a comment when pushing, create a .comment.md file next to the issue:
.issues/open/42.comment.md
.issues/open/42-fix-login-bug.comment.md
Content is plain Markdown. The file is deleted after the comment is posted.
Notes
- Pull skips conflicts; use
--forceto overwrite local
