agentleFS
Will-SW74Will-SW74/passdown-os/.claude/skills/spectra-apply/SKILL.md

spectra-apply

Skill0 starsChanged 4 months agoMITView on GitHub

Implement or resume tasks from a Spectra change

6 other projects use a version of this, 3 of them edited.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

49 rules. 27 are common, 5 are distinctive, and 17 are very specific to this project.

  • 27

    Common

    Most of the 4 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 17

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Common:

    If a name is provided, use it.

    line 24
  2. Very specific:

    If ambiguous, run spectra list --json AND spectra list --parked --json to get all available changes (including parked ones).

    line 27
  3. Very specific:

    Always announce: "Using change: <name>" and how to override (e.g., /spectra-apply <other>).

    line 29
  4. Very specific:

    Look for the change name in the parked array of the JSON output.

    line 45
  5. Common:

    Use the AskUserQuestion tool to ask whether to continue.

    line 48
  6. Common:

    Cancel: Stop the workflow

    line 51
  7. Common:

    If the user chooses to continue:

    line 53
  8. Common:

    If there is no AskUserQuestion tool available (non-Claude-Code environment): Inform the user that this change is currently parked(暫存)and …

    line 69
  9. Very specific:

    Wait for the user's response.

    line 71
  10. Very specific:

    If state: "blocked" (missing artifacts): show message, suggest using /spectra-propose to create the change artifacts first

    line 98
  11. Very specific:

    If state: "all_done": congratulate, suggest archive

    line 99
  12. Very specific:

    If the apply instructions JSON includes a preflight field, act on its status:

    line 104
  13. Common:

    Only show the lines that are relevant (skip drifted if none, skip staleness if not stale).

    line 114
  14. Common:

    If the user chooses "Stop", end the workflow.

    line 125
  15. Common:

    If there is no AskUserQuestion tool available: Display the same information as plain text and ask whether to continue or stop.

    line 127
  16. Common:

    Wait for the user's response.

    line 129
  17. Very specific:

    If the preflight field is absent (blocked or all_done states), skip this step.

    line 131
  18. Very specific:

    Run spectra analyze <change-name> --json to check cross-artifact consistency (Coverage, Consistency, Ambiguity, Gaps).

    line 135
  19. Distinctive:

    If there is no AskUserQuestion tool available, present options as plain text and wait for the user's response.

    line 144
  20. Distinctive:

    When the change has been dormant for more than 5 days AND the change directory has had zero commits in the past 3 days, surface a drift …

    line 148
  21. Very specific:

    Both conditions met: run spectra drift <change-name>, display the report, then use the AskUserQuestion tool:

    line 152
  22. Very specific:

    Read the files listed in contextFiles from the apply instructions output.

    line 166
  23. Very specific:

    Read .spectra.yaml in the project root.

    line 173
  24. Very specific:

    If tdd: true is set, apply TDD discipline throughout implementation:

    line 174
  25. Very specific:

    If audit: true is set, apply sharp-edges discipline throughout implementation:

    line 179
  26. Common:

    When designing APIs or interfaces, evaluate through 3 adversary lenses (Scoundrel, Lazy Developer, Confused Developer)

    line 180
  27. Common:

    When adding configuration options, verify defaults are secure and zero/empty values are safe

    line 181
  28. Common:

    When accepting parameters, check for type confusion and silent failures

    line 182
  29. Very specific:

    only names files to edit ("edit foo.rs", "update bar.svelte") with no behavior, contract, or verification target.

    line 204
  30. Distinctive:

    When this happens, pause. Either update the artifact (design or tasks) so the task names a concrete behavior and verification target, or …

    line 207
  31. Common:

    Before writing code, check:

    line 208
  32. Very specific:

    When TDD is enabled: derive the first failing test directly from the example's GIVEN/WHEN/THEN values

    line 214
  33. Distinctive:

    When TDD is not enabled: after implementing, verify the code handles the example's input→output correctly

    line 215
  34. Distinctive:

    Do NOT invent additional test values beyond what the spec examples provide without reason.

    line 217
  35. Common:

    Keep changes minimal and focused

    line 219
  36. Very specific:

    Parallel task dispatch: When consecutive [P]-marked tasks are found and parallel_tasks: true is configured (see Step 5), dispatch them as …

    line 225
  37. Common:

    After completing all tasks, re-run:

    line 252
  38. Common:

    If all done: suggest archive

    line 265
  39. Common:

    If paused: explain why and wait for guidance

    line 266
  40. Common:

    Keep going through tasks until done or blocked

    line 321
  41. Common:

    Always read context files before starting (from the apply instructions output)

    line 322
  42. Common:

    If task is ambiguous, pause and ask before implementing

    line 323
  43. Common:

    If implementation reveals issues, pause and suggest artifact updates

    line 324
  44. Common:

    Keep code changes minimal and scoped to each task

    line 325
  45. Common:

    Update task checkbox immediately after completing each task

    line 326
  46. Common:

    Use contextFiles from CLI output, don't assume specific file names

    line 328
  47. Common:

    If AskUserQuestion tool is not available, ask the same questions as plain text and wait for the user's response

    line 330
  48. Common:

    Can be invoked anytime: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions

    line 336
  49. Common:

    Allows artifact updates: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly

    line 337

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Implement tasks from a Spectra 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

    spectra status --change "<name>" --json

    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>" --json and 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 set spectra 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)
  3. Get apply instructions

    spectra instructions apply --change "<name>" --json

    This 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-propose to create the change artifacts first
    • If state: "all_done": congratulate, suggest archive
    • Otherwise: proceed to implementation

3b. Preflight check

If the apply instructions JSON includes a preflight field, act on its status:

  • "clean": silently continue — no output needed.
  • "warnings": display a brief summary, then continue automatically:
    ⚠ Preflight warnings:
    - Drifted files (modified after change was created): <list paths>
    - Change is <N> days old
    Continuing...
    Only show the lines that are relevant (skip drifted if none, skip staleness if not stale).
  • "critical": display missing files with their source artifact, then use the AskUserQuestion tool to ask the user:

    ⚠ Preflight: missing files detected
    - <path> (referenced in <source artifact>)
    - ...
    These files are referenced in the change artifacts but no longer exist on disk.

    Options: "Continue anyway" / "Stop" If the user chooses "Stop", end the workflow.

    If there is no AskUserQuestion tool available: Display the same information as plain text and ask whether to continue or stop. Wait for the user's response.

If the preflight field is absent (blocked or all_done states), skip this step.

3c. Artifact quality check

Run spectra analyze <change-name> --json to check cross-artifact consistency (Coverage, Consistency, Ambiguity, Gaps).

  • Zero findings: silently continue.
  • Warning/Suggestion only: display a one-line summary (e.g., "⚠ Artifact analysis: 2 warnings found") and continue automatically.
  • Critical findings: display each Critical finding (summary + location + recommendation), then use the AskUserQuestion tool:

    • Fix and continue — fix the artifact issues inline, then proceed
    • Continue anyway — skip fixes and start implementation
    • Stop — end the workflow

    If there is no AskUserQuestion tool available, present options as plain text and wait for the user's response.

3d. Drift dormancy check (passive trigger for stale changes)

When the change has been dormant for more than 5 days AND the change directory has had zero commits in the past 3 days, surface a drift report before tasks begin — the change is likely out-of-sync with the current codebase.

Detect dormancy from .openspec.yaml created and git log -1 --format=%at -- docs/specs/changes/<name>/:

  • Both conditions met: run spectra drift <change-name>, display the report, then use the AskUserQuestion tool:
    • Continue with apply — proceed to tasks (recommended for Light drift)
    • Refresh first — pause apply, run /spectra-ingest <change-name> to update artifacts, then resume
    • Stop — end the workflow
  • Either condition not met: silently continue, no output.

The trigger is guidance only — it MUST NOT block apply from proceeding when the user chooses to continue. Hard-blocking on dormancy would punish legitimate "I came back after a long weekend" cases.

(Threshold reasoning: AI-assisted commits are daily-cadence. ≥5 days dormant + ≥3 days no commit ≈ genuine stagnation, not normal pacing.)

If there is no AskUserQuestion tool available, present options as plain text and wait for the user's response.

  1. Read context files

    Read the files listed in contextFiles from 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
  2. Check project preferences

    Read .spectra.yaml in the project root. If tdd: true is 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: true is 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: true is 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.

  3. Show current progress

    Display:

    • Schema being used
    • Progress: "N/M tasks complete"
    • Remaining tasks overview
    • Dynamic instruction from CLI
  4. Implement tasks (loop until done or blocked)

    Reminder: Track progress by editing checkboxes in the tasks file only. Do not use any built-in task tracker.

    For each pending task:

    • Show which task is being worked on
    • Re-read the sections of design and spec files that are relevant to this task's scope — do not rely on memory from earlier in the conversation, as context may have been compressed
    • Read the Implementation Contract for this task before editing any source file. If design.md exists and contains an ## Implementation Contract section (or contract content under another heading the design uses), read the part of it that covers this task's scope. The contract names the observable behavior, interface or data shape, failure modes, acceptance criteria, and scope boundaries you must satisfy. Treat the contract as the durable handoff — it is what the task will be measured against, regardless of who started the change.
    • Detect unclear or path-only tasks before writing code. A task is unclear if it:
      • only names files to edit ("edit foo.rs", "update bar.svelte") with no behavior, contract, or verification target;
      • is vague ("handle edge cases", "wire it up", "make it work");
      • conflicts with the implementation contract (asks for behavior the contract excludes, or omits behavior the contract requires). When this happens, pause. Either update the artifact (design or tasks) so the task names a concrete behavior and verification target, or report the blocker and wait for guidance. Do NOT silently guess against unclear requirements.
    • Before writing code, check:
      1. Reuse — search adjacent modules and shared utilities for existing implementations before writing new code
      2. Quality — derive values from existing state instead of duplicating; use existing types and constants over new literals
      3. Efficiency — parallelize independent async operations; avoid unnecessary awaits; match operation scope to actual need
      4. No Placeholders in artifacts — if the design or spec for this task contains placeholder language (TBD, TODO, "add appropriate handling"), pause and fix the artifact first or flag to the user. Do not implement against vague requirements.
      5. Examples as verification — if the spec for this task's scope includes ##### Example: blocks, use them as concrete test cases:
        • When TDD is enabled: derive the first failing test directly from the example's GIVEN/WHEN/THEN values
        • When TDD is not enabled: after implementing, verify the code handles the example's input→output correctly
        • Example tables map to parameterized tests — one test per row Do NOT invent additional test values beyond what the spec examples provide without reason. The examples ARE the agreed specification.
    • Make the code changes required
    • Keep changes minimal and focused
    • Verify before marking done — re-read the task description from the tasks file AND the relevant Implementation Contract content from design.md. For each requirement stated in the task description and each contract item that covers this task's scope, confirm it is addressed by your changes. Confirm the verification target named by the task (test name, CLI invocation, analyzer check, or manual assertion) actually passes. If any contract item, task requirement, or verification target is missing or failing, implement/fix it now. Do not mark the task complete until every part of the description is covered and the contract for this task is satisfied.
    • Mark task complete by running: spectra task done --change "<name>" <task-id> This command marks the checkbox in tasks.md AND records which files were modified for this task.
    • Continue to next task

    Parallel task dispatch: When consecutive [P]-marked tasks are found and parallel_tasks: true is configured (see Step 5), dispatch them as parallel agents in a single message. If any [P] task fails, pause and report.

    Pause if:

    • Task is unclear → ask for clarification
    • Implementation reveals a design issue → suggest updating artifacts
    • Error or blocker encountered → report and wait for guidance
    • User interrupts

Rationalization Table

What You're ThinkingWhat You Should Do
"This task looks done, I'll mark it complete"Re-read the task description first. Check whether your diff covers every part of it. Incomplete tasks marked done are the #1 source of rework
"This task is trivial, I don't need to re-read the design"Re-read. Context compression loses details. 30s of reading saves 30min of rework
"I already know how this works, skip the code search"Search anyway. Someone may have added a utility since you last looked
"The test is obvious, I'll add it after implementation"If TDD is enabled, test first. If not, still write it before marking done
"This is just a small refactor, no test needed"Small refactors are how regressions sneak in. Write the test
"The artifact says X but Y makes more sense"Pause and suggest updating the artifact. Don't silently deviate
"I'll fix this other thing I noticed while I'm here"Finish current task first. Address the other thing separately
"The example values are just illustrations, I'll pick better ones"Use the spec example values exactly. They were chosen deliberately

  1. Final check

    After completing all tasks, re-run:

    spectra instructions apply --change "<name>" --json

    Confirm state: "all_done". If not, review remaining tasks and complete them.

  2. On completion or pause, show status

    Display:

    • Tasks completed this session
    • Overall progress: "N/M tasks complete"
    • If all done: suggest archive
    • If paused: explain why and wait for guidance

Output During Implementation

## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete

Output On Completion

## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! You can archive this change with `/spectra-archive`.

Output On Pause (Issue Encountered)

## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?

Guardrails

  • Keep going through tasks until done or blocked
  • Always read context files before starting (from the apply instructions output)
  • If task is ambiguous, pause and ask before implementing
  • If implementation reveals issues, pause and suggest artifact updates
  • Keep code changes minimal and scoped to each task
  • Update task checkbox immediately after completing each task
  • Pause on errors, blockers, or unclear requirements - don't guess
  • Use contextFiles from CLI output, don't assume specific file names
  • No external task tracking — do not use any built-in task management, todo list, or progress tracking tool; the tasks file is the only system
  • If AskUserQuestion tool is not available, ask the same questions as plain text and wait for the user's response

Fluid Workflow Integration

This skill supports the "actions on a change" model:

  • Can be invoked anytime: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
  • Allows artifact updates: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.