Apply
Implement tasks from an OpenSpec change
---
name: Spectra: Apply
description: Implement tasks from an OpenSpec change
category: Workflow
tags: ["workflow", "artifacts"]
---
<!-- SPECTRA:START v1.0.1 -->
Implement tasks from an OpenSpec change.
**Input**: Optionally specify a change name (e.g., `/spectra:apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
**Task tracking is file-based only.** The tasks file's markdown checkboxes (`- [ ]` / `- [x]`) are the single source of truth for progress. Do NOT use any external task management system, built-in task tracker, or todo tool. When a task is done, edit the checkbox in the tasks file — that is the only way to record progress.
**Prerequisites**: This skill requires the `spectra` CLI. If any `spectra` command fails with "command not found" or similar, report the error and STOP.
**Steps**
1. **Select the change**
If a name is provided, use it. Otherwise:
- Infer from conversation context if the user mentioned a change
- Auto-select if only one active change exists
- If ambiguous, run `spectra list --json` AND `spectra list --parked --json` to get all available changes (including parked ones). Parked changes should be annotated with "(parked)" in the selection list. Use the **AskUserQuestion tool** to let the user select
Always announce: "Using change: <name>" and how to override (e.g., `/spectra:apply <other>`).
2. **Check status to understand the schema**
```bash
spectra status --change "<name>" --json 2>/dev/null
If the command fails: show the error and STOP.
If the command succeeds, check whether the change is parked (status can succeed even for parked changes):
spectra list --parked --json
Look for the change name in the parked array of the JSON output.
If the change IS in the parked list (it's parked): Inform the user that this change is currently parked(暫存). Use the AskUserQuestion tool to ask whether to continue. Two options:
- Continue: Unpark the change and proceed with apply
- Cancel: Stop the workflow
If the user chooses to continue:
spectra unpark "<name>"Then mark it as in-progress:
spectra in-progress add "<name>"This is a silent operation — do not show the output to the user.
Then re-run
spectra status --change "<name>" --jsonand continue normally.If there is no AskUserQuestion tool available (non-Claude-Code environment): Inform the user that this change is currently parked(暫存)and ask via plain text whether to unpark and continue, or cancel. Wait for the user's response. If the user confirms, run
spectra unpark "<name>", then setspectra in-progress add "<name>", and continue normally.If the change is NOT in the parked list: mark it as in-progress and proceed normally.
spectra in-progress add "<name>"This is a silent operation — do not show the output to the user.
Parse the JSON to understand:
schemaName: The workflow being used (e.g., "spec-driven")- Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)
Get apply instructions
spectra instructions apply --change "<name>" --jsonThis returns:
- Context file paths (varies by schema)
- Progress (total, complete, remaining)
- Task list with status
- Dynamic instruction based on current state
Handle states:
- If
state: "blocked"(missing artifacts): show message, suggest using/spectra:proposeto create the change artifacts first - If
state: "all_done": congratulate, suggest archive - Otherwise: proceed to implementation
Read context files
Read the files listed in
contextFilesfrom the apply instructions output. The files depend on the schema being used:- spec-driven: proposal, specs, design, tasks
- Other schemas: follow the contextFiles from CLI output
Check project preferences
Read
openspec/config.yamlin the project root. Iftdd: trueis set, apply TDD discipline throughout implementation:- For each task, write a failing test FIRST, then implement to make it pass
- Fetch TDD instructions by running
spectra instructions --skill tdd, then follow the Red-Green-Refactor cycle - For bug fixes, reproduce the bug with a failing test before fixing
If
audit: trueis set, apply sharp-edges discipline throughout implementation:- When designing APIs or interfaces, evaluate through 3 adversary lenses (Scoundrel, Lazy Developer, Confused Developer)
- When adding configuration options, verify defaults are secure and zero/empty values are safe
- When accepting parameters, check for type confusion and silent failures
- Fetch audit instructions by running
spectra instructions --skill audit, follow the discipline checklist (not the standalone 3-agent workflow)
If
parallel_tasks: trueis set, check whether consecutive pending tasks have[P]markers (format:- [ ] [P] Task description). You SHALL dispatch consecutive[P]tasks as parallel agents. Only fall back to sequential when tasks have a data dependency (one task's output is another's input) or when tasks modify overlapping regions of the same file. Targeting the same file alone is NOT a reason to skip parallel dispatch — if the modified regions are disjoint, dispatch in parallel. If the environment does not support parallel execution, ignore[P]markers and execute tasks sequentially.Show current progress
Display:
- Schema being used
- Progress: "N/M tasks complete"
- Remaining tasks overview
- Dynamic instruction from CLI
Implement tasks (loop until done or blocked)
**Reminder: Track progress by editing checkboxes in the tasks file only. Do not use any built-in ta
Maintain Apply?
Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.
[Apply on getagentictools](https://getagentictools.com/loops/cashwu-apply?ref=badge)