Use when the user explicitly invokes /comet-classic, asks to start or resume the permanent Comet Classic workflow, or repository evidence identifies one unambiguous active Classic change; route through the intent runtime and .comet.yaml.
OpenSpec and Superpowers orbit the same goal like a binary star system.
OpenSpec handles WHAT — outline, proposal, spec lifecycle, archive
Superpowers handles HOW — technical design, planning, execution, closingCore principle: brainstorming cannot be skipped. Every change must undergo deep design (except hotfix and tweak presets).
Agents need only read this section for decision-making. Refer to the Reference Appendix as needed.
Use the configured Comet artifact language as the output language for every OpenSpec and Superpowers artifact. The configured value is a normalized language id, en or zh-CN. For an existing change, read language from openspec/changes/<name>/.comet.yaml using comet state get <name> language. Before .comet.yaml exists, read classic.language from project .comet/config.yaml, then fall back to global ~/.comet/config.yaml; if neither exists, fall back to the current user request language. Include the resolved language explicitly in every prompt or ARGUMENTS passed to external OpenSpec/Superpowers skills.
Step 0: Active Change Discovery and Intent Resolution
comet/reference/scripts.md and ensure $COMET_INTENT is available.openspec list --json to collect active changes.CometIntentFrame from the user request, active change list, and necessary repository state.node "$COMET_INTENT" route --stdin to pass the frame JSON and get the runtime-normalized route. CometIntentFrame + runtime scorer is the source of truth; this prose is only for intent recognition slot extraction.hotfix → invoke /comet-hotfixtweak → invoke /comet-tweakfull → follow the active-change table to invoke /comet-open or ask for confirmationresume → continue to Step 1 and read the selected change .comet.yamlask_user → pause through comet/reference/decision-point.md and wait for the user's choiceout_of_scope → explain that the input is not a Comet workflow start/resume request and do not initialize a changeAfter the runtime route, Ambient Resume, or user choice resolves one explicit change, bind the current execution context before entering its phase Skill:
comet state select <change-name>When multiple active changes exist and the user has not selected one, do not bind early; keep the existing ask_user decision point.
When the user did not explicitly invoke /comet-classic, but this repository may already have an active Comet change, run the read-only probe before starting work that may need code changes or investigation:
node "$COMET_RESUME_PROBE" probe --stdinThe probe only reads repository state. Follow the returned action:
auto_resume: print one line, [COMET] Detected active change <name>; resuming via <nextCommand>., then enter nextCommand.ask_user: ask one short question and wait.out_of_scope or none: do not enter the Comet workflow.Never attach unrelated work to an active Comet change only because .comet.yaml exists.
Minimal CometIntentFrame Skeleton:
{
"schema_version": "comet.intent.v1",
"utterance": "<user request>",
"intent": { "name": "start_change", "confidence": 0.8 },
"slots": {
"requested_action": "start",
"workflow_candidate": "full",
"user_explicit_workflow": null,
"change_id": null,
"existing_behavior": null,
"new_capability": null,
"public_api_change": null,
"schema_change": null,
"cross_module_change": null
},
"context": {
"active_changes_count": 0,
"active_change_names": []
},
"evidence": [],
"proposed_route": {
"name": "ask_user",
"confidence": 0.5
}
}Intent Recognition Slot Extraction:
See comet/reference/intent-frame.md for complete field meanings; normal routing only needs the minimal skeleton above.
fix_bug + existing_behavior: true + no new capability/public API/schema/cross-module signal → prefer hotfix/comet-classic deep design/plan → prefer tweaktweakfullask_userask_user| Active changes | User input | Behavior |
|---|---|---|
| None | full route | → Invoke /comet-open |
| Exactly 1 | /comet-classic <description> | → Ask: continue this change or create a new change |
| Multiple | /comet-classic <description> | → Ask: continue existing or create new; if continuing, list changes for selection |
| Exactly 1 | /comet-classic with no description | → Auto-select, enter Step 1 |
| Multiple | /comet-classic with no description | → List changes for user selection |
Step 1: Read .comet.yaml state metadata
Prefer reading openspec/changes/<name>/.comet.yaml. If not available, fall back to openspec status --change "<name>" --json, tasks.md, and docs/superpowers/ file checks.
Resume rules:
comet/reference/dirty-worktree.md. That protocol defines checks, attribution, and prohibitions; this file does not repeat themphase: build, first check build_pause, plan, isolation, build_mode, tdd_mode, and review_mode (see details below):
build_pause: plan-ready but isolation, build_mode, tdd_mode, and review_mode are all already set, treat as stale pause: first output [COMET] Detected stale pause (build_pause=plan-ready but isolation/build_mode/tdd_mode/review_mode are set), auto-clearing and continuing, then run comet state set <name> build_pause null, then read the next unchecked task from tasks.md and resume execution per build_modebuild_pause: plan-ready and the plan file exists, but isolation, build_mode, tdd_mode, or review_mode is not yet set, return to the /comet-build plan-ready resume point, prompt the user to complete/confirm workspace isolation, execution method, TDD mode, and code review mode, and do not regenerate the planbuild_pause: plan-ready but the plan file is missing, return to /comet-build to handle corrupted state or regenerate the planisolation, build_mode, tdd_mode, or review_mode is unset, return to the corresponding /comet-build step to supplement before executingbuild_mode: subagent-driven-development, do not execute tasks directly in the main window; return to /comet-build's background subagent dispatch rules, main window only coordinates/comet-build's corresponding rulesverify_result: fail, read verify_failures. At 3 or fewer failures, invoke /comet-build directly to continue the recorded repair loop without re-asking. Above the automatic limit, return to /comet-verify for the exception decision. User input is required only to accept a WARNING/SUGGESTION deviation or choose a strategy after the retry limitphase: open but OpenSpec applyRequires is complete, run comet guard <change-name> open --apply to repair state, then continue detectionphase: archive, only invoke /comet-archive; confirm first, archive, commit exact archive paths, then handle the branch and run the archive guardStep 2: Phase Determination (check in order, first match wins)
archived: true or change moved to archive → Workflow completeverify_result: pass and archived is not true → Invoke /comet-archive (first perform final archive confirmation)verify_result: fail → Invoke /comet-build automatically to continue repair. If verify_failures exceeds the automatic limit, enter /comet-verify's retry-limit strategy decisionphase: verify or tasks.md all checked → Invoke /comet-verifyphase: build or has Design Doc but plan/execution incomplete → Route by workflow: hotfix → /comet-hotfix, tweak → /comet-tweak, full → /comet-buildphase: design or has change but no Design Doc → Invoke /comet-designphase: open or active change exists but .comet.yaml is missing → Invoke /comet-open/comet-openIf metadata conflicts with file state, use verifiable file state as source of truth and correct .comet.yaml before continuing.
hotfix/tweak scope assessment uses a three-layer division of labor, avoiding "using pure file count as a hard upgrade condition" that wrongly blocks normal small changes:
comet state scale only decides verify_mode (verification weight); it does not block the flow or trigger an upgradeUpgrade decision point (user chooses one of two):
/comet-classic (use comet state transition <name> preset-escalate to legally rewind to design and clear preset-only build settings; after the Design Doc, choose the full workflow configuration again in one joint decision)See the "Upgrade Assessment" section of each comet-hotfix / comet-tweak for detailed rules.
| Scenario | Handling |
|---|---|
openspec list --json fails | Check if openspec is installed, prompt user to run openspec init |
| Sub-skill unavailable | Stop workflow, prompt to install or enable the corresponding skill |
.comet.yaml missing | Enter the relevant preset's /comet-open initialization, then run comet state select; never skip initialization |
.comet.yaml malformed | Stop and report the parse error; repair from version control, backup, or verifiable artifacts, never overwrite it with comet state set |
| Build/test fails | Return to build phase for fixes, do not enter verify |
| Incomplete change directory structure | Fill missing files according to comet-open artifact requirements |
Flow chain: open → design → build → verify → archive
Continuous execution requirement: starting from the detected phase, the agent automatically continues through all later phases. But auto-advancing only applies at transition points without user decisions. When encountering user decision points, must use the current platform's available user input/confirmation mechanism to pause and wait for the user's explicit response. Must not use recommendation rules, defaults, or historical preferences to substitute for user confirmation, and must not just output a text prompt and then continue executing.
Distinguish phase advancement vs automatic handoff: each sub-skill runs phase guard --apply before exit to advance the .comet.yaml phase field. This step always happens and is not controlled by auto_transition. After that, the sub-skill runs comet state next <name> to resolve the next action: when auto_transition is not false, output is NEXT: auto (auto-invoke next skill); when auto_transition is false, output is NEXT: manual (do not invoke next skill; return control with HINT). NEXT: manual is not a user decision point and must not ask whether to continue. Therefore auto_transition only controls next skill invocation, not phase advancement. Regardless of auto_transition, genuine user decision points below remain blocking.
Decision points are blocking points: whenever reaching any of the following nodes, the current /comet-classic invocation must stop, and follow the comet/reference/decision-point.md protocol to obtain the user's explicit choice. Only after the user explicitly chooses can the corresponding state fields be written and operations executed, then auto-advance resumes.
Nodes requiring user participation (pause only at these nodes):
Agents should not skip these decision points; other unambiguous phase transitions must proceed automatically, must not exit midway. At decision points, must not skip user confirmation or choose automatically — must explicitly obtain the user's choice through the current platform's available user input/confirmation mechanism before continuing.
Red Flags — when these thoughts appear, STOP and check:
| Agent Thought | Actual Risk |
|---|---|
| "The user would probably agree with this approach" | Cannot decide for the user — use the current platform's user input/confirmation mechanism |
| "This is a small change, confirmation isn't needed" | Decision points have no size exception — blocking points must wait |
| "The user chose A last time, so A again" | Historical preference cannot substitute for current confirmation |
| "I explained the plan and the user didn't object" | No objection ≠ consent — must use tool to get explicit choice |
| "The flow has reached this point, should be fine" | Verification not passed ≠ passed — check verify_result |
| Command | Phase | Owner | Artifacts |
|---|---|---|---|
/comet-open | 1. Open | OpenSpec | proposal.md, design.md, tasks.md |
/comet-design | 2. Deep Design | Superpowers | Design Doc, delta spec |
/comet-build | 3. Plan and Build | Superpowers | Implementation plan, code commits |
/comet-verify | 4. Verify | Both | Verification report |
/comet-archive | 5. Archive and Close | OpenSpec | delta→main spec sync, design doc markup, archive commit, branch handling |
/comet-hotfix | Preset path | Both | Quick fix (skip brainstorming) |
/comet-tweak | Preset path | Both | OpenSpec-chained medium change (delta spec is first-class, skip brainstorming and full plan) |
/comet-classic
↓ Auto-detect
/comet-open ──→ /comet-design ──→ /comet-build ──→ /comet-verify ──→ /comet-archive
(OpenSpec) (Superpowers) (Superpowers) (Both) (OpenSpec)
/comet-hotfix (preset, skip brainstorming)
open ──→ build ──→ verify ──→ archive
↑ Upgrade-assessment signal hit → user chooses one of two (continue preset / upgrade full) → if upgrade, transition preset-escalate → supplement Design Doc → return to full workflow
/comet-tweak (lightweight preset, chains OpenSpec, delta spec is first-class)
open ──→ build ──→ verify ──→ archive
↑ Upgrade-assessment signal hit → user chooses one of two (continue preset / upgrade full) → if upgrade, transition preset-escalate → supplement Design Doc → return to full workflowbuild → verify, isolation must be branch or worktree; hotfix/tweak may truthfully use currentbuild → verify, build_mode must be selectedbuild_mode: subagent-driven-development must also have subagent_dispatch: confirmedtdd_mode must be selected as tdd or directreview_mode must be selected as off, standard, or thoroughbuild_mode: direct is allowed by default only for hotfix / tweak; full workflow requires direct_override: truebuild_pause is not an execution method and must not be written to build_modecomet guard <name> build --apply and comet state transition <name> build-completeSee comet/reference/comet-yaml-fields.md for complete field reference with examples and descriptions.
See comet/reference/file-structure.md for the complete directory layout and artifact organization.
See comet/reference/auto-transition.md for the complete automatic handoff workflow.
See comet/reference/context-recovery.md for structured recovery after context compression.
See comet/reference/decision-point.md for the complete user decision point protocol.
See comet/reference/debug-gate.md for the complete debug gate protocol.
Use the stable comet CLI for workflow state, guards, handoff, and archive. Locate internal launchers through comet/reference/scripts.md only for intent/resume probes that do not yet have a public subcommand. Key entry points:
comet guard <change-name> <phase> --apply # phase guard + state update
comet state transition <change-name> <event> # open-complete | design-complete | build-complete | verify-pass | verify-fail
comet state next <change-name> # NEXT: auto|manual|done + SKILL: <skill-name>
comet archive <change-name> # full archive in one command2945693
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.