From gsd-beads
Use when a repo has .gsd-beads/sync.json with an enabled backend — mirrors bd (beads) issues two-way (hub-and-spoke) to GitHub Issues, Jira, Asana, and/or Azure Boards. bd is the hub/source of truth. PUSH fires on bd lifecycle events; PULL reconciles external edits back to bd on demand. Complements the gsd-beads skill.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gsd-beads:gsd-beads-syncThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Two-way, **hub-and-spoke** sync. bd (beads) is the hub and source of truth;
Two-way, hub-and-spoke sync. bd (beads) is the hub and source of truth;
every external tool syncs to bd, never tool-to-tool. Extends the gsd-beads
integration with mirroring to GitHub Issues, Jira, Asana, and Azure Boards.
Apply this skill only when .gsd-beads/sync.json exists in the repo AND has
at least one backend with "enabled": true. Otherwise ignore it (bd-only). If
the file is missing, the user has not opted in — do not create it implicitly;
point them at /gsd-beads:sync-config.
| Direction | When | Command |
|---|---|---|
| PUSH bd → tools | on each bd lifecycle event | bash ${plugin}/scripts/gbsync.sh <create|update|close> <bd_id> |
| PULL tools → bd | on demand (you, or a cron) | /gsd-beads:sync-pull → gbsync.sh pull |
${plugin} = ${CLAUDE_PLUGIN_ROOT} when running as a hook/command, else the
plugin's install path.
When following the gsd-beads lifecycle, run the matching mirror right after
the bd write succeeds:
/gsd:new-project issue creation):
gbsync.sh create <bd_id>/gsd:execute-phase):
after bd update <id> --claim, run gbsync.sh update <bd_id>bd close <id>, run gbsync.sh close <bd_id>The dispatcher fans the event to every enabled backend and records the
bd-id ↔ external-id mapping in .gsd-beads/id-map.json. A failing backend is
logged and skipped; it does not block the others or the bd write.
Run /gsd-beads:sync-pull (or gbsync.sh pull) when someone may have edited
issues in an external tool. For each mapped item the dispatcher asks the adapter
for the tool's current state and applies last-writer-wins by updated_at:
bd update)..gsd-beads/conflicts.json (with the LWW resolution). Review that file and
fix by hand if the auto-resolution was wrong.After a pull, review .gsd-beads/conflicts.json and surface any entries to
the user.
.gsd-beads/)sync.json — backend config (committed; contains ENV VAR NAMES, never secrets)id-map.json — { bd_id: { backend: external_id } }state.json — pull watermarks { last_pull: { backend: iso8601 } }conflicts.json — append-only log of both-sides-changed reconciliationsAdapters read API tokens from environment variables named in sync.json
(e.g. token_env, pat_env). Never put a token in sync.json or any committed
file. Confirm the env vars are exported before running a sync; if a token is
missing the adapter exits nonzero and the dispatcher logs it.
Drop a new executable in adapters/ implementing the contract in
adapters/_contract.md (stdin event → external id for push; stdin pull → JSON
array of states), then add a backend block to sync.json. No dispatcher
changes needed.
npx claudepluginhub bigjiggity/claude-plugins --plugin gsd-beadsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.