---
name: "OpenSpec Project Status"
description: Show a human-readable summary of all OpenSpec changes — active, archived, artifact completion, and task progress
category: Workflow
tags: [workflow, status, openspec, reporting]
---

Show the full OpenSpec project status in a clear, human-readable format. No raw JSON — just a clean picture of where the project stands.

**Input**: No arguments required. Run `/openspec-project-status` at any time.

---

**Steps**

1. **Get all changes**

   Run:
   ```bash
   openspec list --json
   ```

   Separate results into:
   - **Active changes** (not in `archive/`)
   - **Archived changes** (in `archive/`)

   If the command fails or no changes exist, display a friendly empty state (see Output section).

2. **For each active change, gather full status**

   Run in parallel for all active changes:
   ```bash
   openspec status --change "<name>" --json
   ```

   Also read each change's `tasks.md` to extract:
   - Total task count
   - Completed tasks (`- [x]`)
   - Pending tasks (`- [ ]`)
   - Text of the **next pending task** (first `- [ ]` item)

   Also check for delta specs at `openspec/changes/<name>/specs/` — note if present.

3. **For archived changes**

   List them by archive date (newest first). No need to read full status — just show name and archive date from the folder name (`YYYY-MM-DD-<name>`).

4. **Render the human-readable status report**

   Use the output format defined below.

---

**Output Format**

```
## OpenSpec Project Status

### Active Changes (<count>)

────────────────────────────────────────
  <change-name>
────────────────────────────────────────
  Schema:    <schema-name>
  Phase:     <inferred from artifact state: Proposing | Designing | Ready to Implement | In Progress | Complete>

  Artifacts
    ✓ proposal       done
    ✓ design         done
    ◌ tasks          pending

  Tasks        <done>/<total> complete
    ████████░░░░░░░░  50%
    Next: "<text of next pending task>"

  Delta Specs  <present / none>

────────────────────────────────────────

<Repeat for each active change>

---

### Archived Changes (<count>)

  2026-03-20  add-initial-auth
  2026-03-15  setup-ci-pipeline
  2026-03-10  scaffold-project

---

### Summary

  Active changes:    <N>
  Ready to apply:    <N>   (all artifacts done, tasks pending)
  In progress:       <N>   (tasks partially complete)
  Complete:          <N>   (all tasks done, not yet archived)
  Archived:          <N>
```

**Phase inference rules** (from artifact + task state):
- `Proposing` — proposal artifact is not done
- `Designing` — proposal done, design not done
- `Speccing` — design done, tasks artifact not done
- `Ready to Implement` — all artifacts done, 0 tasks complete
- `In Progress` — all artifacts done, some tasks complete but not all
- `Complete` — all artifacts done, all tasks complete (not yet archived)

**Progress bar rules:**
- 16 chars wide: `█` per completed segment, `░` for remaining
- Show percentage after bar
- If 0 tasks: show `No tasks yet`
- If all tasks done: show `████████████████  100%  All done!`

---

**Output: No active changes**

```
## OpenSpec Project Status

### Active Changes (0)

  No active changes. Start one with /opsx:propose

---

### Archived Changes (<count>)

  2026-03-20  add-initial-auth
  ...

---

### Summary

  Active changes:  0
  Archived:        <N>
```

**Output: OpenSpec CLI unavailable**

```
## OpenSpec Project Status

  OpenSpec CLI not available. Cannot read change data.

  Make sure `openspec` is installed and accessible in your PATH.
```

---

**Guardrails**

- Never show raw JSON — always translate to human-readable output
- Never guess artifact or task state — always read from actual files and CLI output
- If a `tasks.md` file does not exist for a change, show `No tasks file` instead of 0/0
- Archived changes are display-only — never modify them
- Phase labels must be inferred strictly from actual artifact + task state, not assumed
- If `openspec status` fails for a specific change, show that change with `Status unavailable` and continue
