Make your OpenSpec changes and your issue tracker the same thing.

An OpenSpec change and a tracker issue describe the same work in two forms — the rich, local, spec-driven form and the shareable, durable, human-facing form. specsync renders one into the other, idempotently. It is a single self-contained binary that depends only on the Go standard library, so it runs in any OpenSpec project regardless of that project's language.

This repo dogfoods itself: every issue here is generated from an OpenSpec change in openspec/changes/ by specsync — via the Sync specs → issues workflow. The backlog you see is the spec set: open any issue to read its proposal and live task checklist. That workflow is also a copy-pasteable reference for keeping your own repo's specs and issues in sync.

Why

OpenSpec keeps requirements out of chat history and in reviewable spec files. But teams often want those specs to also live where the rest of the world tracks work — a backlog, a board, a set of issues. Maintaining both by hand means writing intent twice and reconciling it forever. specsync removes the double-entry: write the spec once, and it appears (and stays current) as an issue.

Features

  • Sync specs to GitHub issues (idempotent)
  • Pull existing issues into local OpenSpec changes
  • Dry-run preview mode (always check first!)
  • Label management with stage: and priority: tags
  • Works with any language (Go stdlib only)
  • Dogfoods itself (repo's issues are the spec set)

How to start

specsync -dry-run
preview the gh commands + rendered issue bodies (safe)
specsync
create/update issues for every change
specsync pull -issue 42
issue-first: read issue, scaffold local change

Use cases

Spec-first workflow

Author local change in openspec/changes/<slug>/, then run specsync to project it as an issue. Both paths are first-class — spec-first and issue-first.

Team collaboration

Rich, local, spec-driven form and shareable, durable, human-facing form — two representations of the same work.

Any language

Single self-contained binary that depends only on the Go standard library — runs in any OpenSpec project regardless of that project's language.

Open source

Free forever, with a transparent roadmap and community-driven development. More providers planned.

Dogfood itself

Every issue here is generated from an OpenSpec change in openspec/changes/ by specsync — via the Sync specs → issues workflow.

Installation

npm i -g @androidand/specsync
go install github.com/androidand/specsync/cmd/specsync@latest
or grab a prebuilt binary from the Releases page
A Homebrew tap is on the roadmap.
Download prebuilt binary

Links