pierreboissinot/openspec-status

로컬 루트와 공유 저장소에서 현재 OpenSpec 변경과 완료된 작업 수를 프롬프트 아래 상태 줄에 보여 주는 Claude Code 플러그인.
pierreboissinot/openspec-status

작업 중인 OpenSpec 변경과 체크된 작업 수를 프롬프트 아래 상태 줄에 유지하는 Claude Code mod입니다. 로컬 openspec/ 루트와 openspec/config.yaml의 store:로 선언한 공유 저장소에서 동작합니다. 세션의 OpenSpec 워크플로가 마지막으로 이름 붙인 변경 또는 현재 git 브랜치에서 활성 변경을 판단하고, 세션 시작, /clear 뒤, 작업 디렉터리 변경, 각 턴의 끝, /openspec 실행, 워크플로가 다른 변경을 이름 붙일 때 새로 고칩니다. openspec list --json와 git branch --show-current만 실행하며 디스크에 쓰지도 모델을 호출하지도 않습니다. 저장소 자체의 플러그인 marketplace를 통해 설치합니다.
먼저 작성자의 README에서 marketplace와 플러그인 이름을 확인하세요. 저장소 구조에 따라 명령어가 달라질 수 있습니다.
claude plugin marketplace add pierreboissinot/openspec-status claude plugin install openspec-status
A Claude Code mod that keeps the OpenSpec change you are working on, and how many of its tasks are ticked, in the status line under the prompt. It works with a local openspec/ root and with a shared store declared by store: in openspec/config.yaml.

In the OpenSpec repository, after /opsx:apply add-global-install-scope:
openspec add-global-install-scope 0/38 tasks
Claude Code draws the ⚠ openspec-status: prefix in front of every plugin's status line; it does not mean something is wrong.
The repository is its own plugin marketplace:
claude plugin marketplace add pierreboissinot/openspec-status
claude plugin install openspec-status@openspec-status
claude plugin marketplace update openspec-status picks up new releases.
To run it from a clone instead:
git clone https://github.com/pierreboissinot/openspec-status.git ~/src/openspec-status
claude --plugin-dir ~/src/openspec-status
Where no flag can be given (the desktop app, an SDK host), set CLAUDE_CODE_PLUGIN_DIRS to the same path, in the environment or in the env block of ~/.claude/settings.json:
{ "env": { "CLAUDE_CODE_PLUGIN_DIRS": "~/src/openspec-status" } }
PATH.git, for the current branch.claude plugin validate .claude-plugin/plugin.json from the plugin folder after an update.openspec CLI, as every /opsx workflow does: --change <name>, new change <name>, or an argument that is the name of a change (openspec validate <name>). Launchers such as npx, pnpm or env in front, and a versioned package (npx @fission-ai/openspec@latest), are recognized; openspec quoted inside another command's argument is not;/opsx:* command, when it is the name of a change.Changing directory or /clear forgets the workflow's change. A change created during the turn (openspec new change) shows up once it is listed. A Bash call you refuse at the permission prompt names nothing.
At session start, after /clear, after a change of working directory, at the end of every main-conversation turn, on /openspec, and as soon as a workflow names another change.
/openspecReads the changes again, updates the status line, and answers with a one-line summary:
| Context | Answer |
|---|---|
| Local root | openspec: local, 30 active changes |
| Declared store | openspec: store:team-plans, 12 active changes |
| Store declared but not registered on this machine | openspec: unknown store, <the fix the CLI suggests> |
| No root (after leaving an OpenSpec project) | openspec: no OpenSpec root resolved from <cwd> |
When the CLI call fails, the answer keeps the last known summary and ends with (refresh failed: <error>).
/openspec is registered only once an OpenSpec root has been resolved. Claude Code cannot unregister a command, so after moving to a directory without OpenSpec in the same session it stays listed.
openspec CLI, it shows nothing at all: no status line, no command.openspec list --json and git branch --show-current, in the session's working directory.claude plugin validate --strict .claude-plugin/plugin.json
claude plugin validate --strict .claude-plugin/marketplace.json
claude plugin test .
npx -p typescript@5 tsc -p .
The tests run against the engine's test kit with recorded openspec list --json outputs in hooks/fixtures/; they need neither the CLI nor git. tsc reads the engine's declarations from .claude-plugin/types/, which Claude Code writes the first time a session loads the mod from this folder.
The demo is regenerated with VHS, from the repository root:
vhs demo/demo.tape
It records a session against a throwaway project and Claude Code home built by demo/setup.sh, with only local commands, so it makes no API call.
.github/workflows/ci.yml runs the checks above on every pull request and push to main, against the pinned Claude Code version.
To release, bump version in .claude-plugin/plugin.json and merge to main. .github/workflows/release.yml runs CI, creates the openspec-status--v<version> tag with claude plugin tag, and publishes the GitHub release.
openspec doctor --json in the status line: a store checkout behind its upstream, an unregistered reference (change add-doctor-warning).openspec status --change <id> --json).affected_areas).