
Ghfs
- 28 installs
- 272 repo stars
- Updated June 26, 2026
- antfu/ghfs
ghfs is a Claude Code skill for managing a local .ghfs/ filesystem mirror of GitHub issues and pull requests, queuing and applying batch edits via execute.md, execute.yml, or per-item frontmatter.
About
This skill operates ghfs, a tool that mirrors GitHub issues and pull requests into a local .ghfs/ filesystem. A developer uses it to queue batch edits (close, label, assign, set-title, comment) in execute.md, execute.yml, or per-item Markdown frontmatter, then preview with ghfs execute and apply with --run. It translates user instructions into valid operations and validates issue and PR batch edits.
- Mirrors GitHub issues and pull requests into a local .ghfs/ filesystem
- Queues batch edits via execute.md, execute.yml, or per-item frontmatter
- Runs in report mode by default; --run applies edits to GitHub
Ghfs by the numbers
- 28 all-time installs (skills.sh)
- Ranked #362 of 733 Git & Pull Requests skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
ghfs capabilities & compatibility
- Capabilities
- github issue management · batch edit · pr management
- Works with
- github
- Use cases
- project management
What ghfs says it does
Use this skill to operate ghfs as a local filesystem mirror for GitHub issues and pull requests.
Default execute mode is report mode. Use `--run` to mutate GitHub.
npx skills add https://github.com/antfu/ghfs --skill ghfsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 28 |
|---|---|
| repo stars | ★ 272 |
| Last updated | June 26, 2026 |
| Repository | antfu/ghfs ↗ |
What it does
Batch-edit GitHub issues and pull requests through a local .ghfs/ mirror and apply them via ghfs execute --run.
Who is it for?
Queuing and applying batch edits to GitHub issues and PRs through local .ghfs artifacts
Skip if: One-off single-issue edits better done in the GitHub UI or gh CLI
When should I use this skill?
Tasks involve editing issues or PRs through .ghfs artifacts or reconciling sync state
What you get
Queued, validated batch edits applied to GitHub with sync history preserved
- Queued execute.md or execute.yml operations
- Applied GitHub issue and PR edits
By the numbers
- Maps user intent to 20+ named actions across issues and PRs
Files
Ghfs
Overview
Use this skill to operate ghfs as a local filesystem mirror for GitHub issues and pull requests.
ghfs syncmirrors remote content into.ghfs/.ghfs executemerges operations from.ghfs/execute.yml,.ghfs/execute.md, and per-item markdown frontmatter differences.- Default execute mode is report mode. Use
--runto mutate GitHub.
Key .ghfs files:
execute.md: queued commands (human-friendly)execute.yml: queued operations (YAML array)schema/execute.schema.json: schema forexecute.yml.sync.json: sync and execution run history (skip reading it)issues.md,pulls.md,repo.json: aggregated mirror viewsissues/**/*.md,pulls/**/*.md: per-item mirrors
Main Workflow
1. Sync first when local data may be stale: run ghfs sync. 2. Queue requested changes in one or more sources:
.ghfs/execute.mdfor quick command-style edits (recommended)..ghfs/execute.ymlfor explicit structured operations..ghfs/issues/**/*.mdor.ghfs/pulls/**/*.mdfrontmatter for direct per-item edits.
3. Validate and preview with ghfs execute. 4. Apply only on explicit user intent: ghfs execute --run. 5. Report results and remaining queued operations.
Execution behavior to remember:
- Merge order is
execute.yml->execute.md-> per-item generated operations. - Operations run in file order.
- On
--run, successful operations are removed from queued YAML/MD sources; failed and not-yet-run entries remain. - Per-item generated operations are recomputed from current frontmatter on each run.
- After run, ghfs runs targeted sync for affected numbers automatically.
Update .ghfs/execute.md Quickly
Use one command per line:
close #123 #124
set-title #125 "Improve sync summary output"
label #125 enhancement, cli
assign #126 octocat
comment #126 "Need more context"
close-comment #127 "Closing as completed"Rules:
- Action names are case-insensitive and aliases are accepted.
#and//line comments plus<!-- ... -->HTML comment blocks are supported and preserved.- Multi-target commands are supported for:
close,reopen,clear-milestone,unlock,mark-ready-for-review,convert-to-draft.
Common aliases:
open->reopencloses->closeclose-comment/comment-close/close-and-comment/comment-and-close->close-with-commentlabel/labels/tag/tags/add-tag->add-labelsassign/assignee/assignees->add-assigneestitle/retitle->set-titlecomment->add-commentready/undraft->mark-ready-for-reviewdraft->convert-to-draft
Update .ghfs/execute.yml Precisely
Keep root as a YAML array and include number + action for each entry.
# yaml-language-server: $schema=./schema/execute.schema.json
- number: 125
action: set-title
title: Improve sync summary output
- number: 125
action: add-labels
labels: [enhancement, cli]
- number: 126
action: request-reviewers
reviewers: [octocat]
ifUnchangedSince: '2026-03-05T04:10:00Z'Map user intent to action fields:
| User intent | action | Required extra fields |
|---|---|---|
| Close / reopen | close, reopen | none |
| Change title | set-title | title |
| Replace body | set-body | body |
| Add comment | add-comment | body |
| Close with comment | close-with-comment | body |
| Add/remove/set labels | add-labels, remove-labels, set-labels | labels (non-empty string array) |
| Add/remove/set assignees | add-assignees, remove-assignees, set-assignees | assignees (non-empty string array) |
| Set/clear milestone | set-milestone, clear-milestone | milestone for set |
| Lock/unlock conversation | lock, unlock | optional reason for lock |
| PR reviewer actions | request-reviewers, remove-reviewers | reviewers (non-empty string array) |
| PR draft state | mark-ready-for-review, convert-to-draft | none |
Rules:
numbermust be a positive integer.ifUnchangedSincemust be ISO datetime when present.request-reviewers,remove-reviewers,mark-ready-for-review, andconvert-to-draftare PR-only.- Keep operation order aligned with user intent because execution is sequential.
- Append operations unless user explicitly asks to replace or clear the queue.
Practical number resolution:
- Parse from filenames such as
.ghfs/issues/00123-foo.md->number: 123. - Use
.ghfs/issues.md/.ghfs/pulls.mdwhen matching by title.
Update Per-Item Markdown Frontmatter
Edit frontmatter in .ghfs/issues/**/*.md or .ghfs/pulls/**/*.md:
titlestate(open/closed)labelsassigneesmilestone
ghfs execute compares edited frontmatter against tracked state and generates operations automatically (with ifUnchangedSince safeguards).
Run Sync and Execute via CLI
Preferred commands:
ghfs sync
ghfs sync --full
ghfs sync --since 2026-03-01T00:00:00Z
ghfs execute
ghfs execute --runUseful flags:
--repo owner/namewhen repo cannot be auto-resolved.--non-interactivefor scripted runs.--continue-on-errorto keep applying later ops after a failure.
Related skills
FAQ
Does ghfs mutate GitHub by default?
No; the default execute mode is report mode. You must pass --run to mutate GitHub.
In what order do queued operations merge?
Merge order is execute.yml, then execute.md, then per-item generated operations, and operations run in file order.