OpenSpec × GitHub Issues

The issue is the spec.

Plan in OpenSpec, sync to issues and boards, and ship from one source of truth. Start spec-first or pull an existing board issue and plan implementation tasks locally.

npm npm install -g @androidand/specsync
go go install github.com/androidand/specsync/cmd/specsync@latest

Dogfooded here: every shipped change traces from OpenSpec plan to issue to release notes.

How it works

Two flows. One source of truth.

specsync supports both entry points: spec-first and issue-first (from your issue tracker). Start from either side, keep OpenSpec as the source of truth, and synchronize issue tracker issues/boards as work evolves.

Spec-first

Plan locally, project outward

Start in openspec/changes/, define proposal and tasks, then sync to the tracker when the plan is ready.

Issue-first

Pull inward, then evolve in spec

Start from an existing issue tracker issue via specsync pull, refine locally, and keep issue plus board state aligned.

Everything a spec workflow needs. Nothing heavyweight.

specsync is a small CLI binary: no daemon, no SDK lock-in, and no mandatory central config file. In GitHub mode it uses gh, with flags and env vars controlling behavior.

Plan

Spec-first or issue-first

Start from local proposal.md/tasks.md or pull an existing issue tracker issue with specsync pull.

Planning scan

specsync scan shows what already exists for an area — in-flight changes, loose issues, recent commits — before you plan.

Collaborate

Idempotent

Run specsync -slug my-change as often as needed. If the issue tracker issue already exists, specsync updates it (same identity marker) instead of creating a duplicate.

Workflow state management

Set stage explicitly with specsync set-stage my-change [active|blocked|in-review|complete] so progress is visible and committed in metadata.

Priority-driven dispatch

Set priorities (1-100) with specsync set-priority my-change 85. Agents respect priority when deciding what to work on next — humans direct focus.

Projects board sync

Project and sync with specsync -slug my-change -project my-org/6. Add -status-map "active=In Progress,complete=Done" to align board columns with change stages.

Ship

Release follow-up

specsync release-plan highlights shipped changes, loose/unlinked work, archive candidates, and advisory release impact from spec-level deltas.

Spec-driven changelog

specsync changelog writes a Keep a Changelog section from your shipped changes — one entry per change, release notes authored at planning time, never a raw commit dump.

In practice

Two commands, both directions.

Project a local plan outward, or pull an existing issue inward — either way you end up in the same loop.


Repository Evidence

specsync is dogfooded on specsync itself.

Not a staged demo — follow one real change, the v0.8.0 board projection, through every form it takes:

1 · Planning artifact openspec/changes/github-projects-compatibility/ Proposal and task checklist, written before any code. Pinned at the v0.8.0 tag so the link never rots. 2 · Tracker projection specsync#37 The issue specsync generated from that change — same body, live task checklist, closed when the work shipped. 3 · Shipped output v0.8.0 release notes The changelog entry derived from the same change, linking back to #37. The loop closes itself.


Changelog

Recent releases

v0.8.0 Jul 16, 2026
Added
  • add three-phase workflow state management for SpecSync 0ba30bd
  • phase 1 - implement SpecSource interface and OpenSpec implementation 1065b59
  • add SpecSourceFactory and --spec CLI flag 1094ca1
  • implement rich-change-state foundation 1ae74b8
  • add change-status commands (partial) 36c7dde
  • implement three-way merge reconciliation with human-move detection 4b7bc5a
  • add three-way merge infrastructure for board-state-reconciliation 8386fe9
  • add explicit archive-completed execution 8389873
  • rework changelog, hero, IA, and a11y per review feedback d0de2e5
  • complete change-status-cli with atomic writes and JSON output fe6e6a3
Changed
  • Breaking: repair set-stage/set-priority semantics; drop dead code and artifact docs 3cd81b7
Fixed
  • show unlinked-but-shipped commits too, not just spec-backed ones 07602bd
View complete release details on GitHub →
v0.7.0 Jul 14, 2026
Added
  • resolve refs live at release time, wire into release CI d057829
  • render changelog from CHANGELOG.md, not the GitHub API e2c18f8
Fixed
  • never let a failed build degrade committed content 9035465
  • stop reading bare #N in commit prose as issue evidence aeee62a
View complete release details on GitHub →
v0.6.0 Jul 14, 2026
Added
  • GitHub Projects (board) projection: opt-in -project owner/number (or $SPECSYNC_PROJECT) syncs an issue onto a GitHub Projects v2 board, maps the change's stage to the board's Status field, and assigns the acting viewer — unconfigured stays a complete no-op, zero board calls. #37
Fixed
  • Two-way sync no longer duplicates a GitHub issue after pull — the ref-cache key is now repo-stable, and a legacy pre-fix cache entry can no longer be mistaken for a different repo's issue and edited by accident. #35
View complete release details on GitHub →