openspec-propose について
openspec-proposeは、変更内容をOpenSpecの計画成果物にまとめるスキルです。計画文書のみを作成し、コードの変更は後続の明示的なワークフローに委ねます。
主な機能
- 01説明から変更を作成
- 02提案・仕様・設計・タスクを生成
- 03設定済みOpenSpecスキーマに準拠
- 04登録済みストアの選択に対応
- 05実装開始前に停止
活用シーン
- 01コーディング前の新機能計画
- 02要件と実装タスクの明確化
- 03後続の適用ワークフローに向けた変更準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wot-ui/ open-wot --skill openspec-proposeインストール後、Claude Code で/openspec-proposeを入力して読み込まれたか確認します。
詳細
新しい変更を提案します。変更を作成し、すべてのアーティファクトを一度に生成します。
計画の範囲:このワークフローで作成するのは、計画アーティファクトのみです。このワークフローを選択または開始したユーザーのリクエストは、計画のみを許可するものです。ビルドや修正を求めている場合も同様です。プロジェクトのコードは編集しないでください。計画アーティファクトの作成が完了したら、そこで停止してください。最初のリクエストで実装を求められていても、同じ応答内で実装を開始しないでください。アーティファクトを提示した後は、ユーザーから新しいリクエストがあるまで待ち、その後に適用ワークフローを開始してください。
スキーマで定義されたアーティファクトを含む変更を作成します。デフォルトの仕様駆動型スキーマでは、次のとおりです。
- proposal.md(何を、なぜ行うか)
specs/<capability-path>/spec.md(システムが何をすべきか。メイン仕様ではなく、差分)- design.md(どのように行うか)
- tasks.md(実装手順)
<capability-path> は、specs/ からの相対パスで表す仕様ディレクトリです(例:user-auth、identity/user-auth)。既存のケイパビリティはフルパスを維持し、新しいケイパビリティにはプロジェクトで確立されている構成に従ってください。
ユーザーが実装を始める準備ができたら、適用ワークフローを明示的に開始する必要があります。
ストアの選択: ユーザーがストア(このマシンに登録された単独の OpenSpec リポジトリ)を指定した場合、または作業対象がストア内にある場合は、openspec store list --json を実行して登録済みストア ID を確認し、仕様や変更を読み書きするコマンド(new change、status、instructions、list、show、validate、archive、doctor、context、schemas、view)に --store <id> を指定してください。ストアを選択したら、ワークフローの残りの間は --store <id> をそのまま指定し続けてください。以下の、ストアを指定していないコマンド例はすべて省略形です。実行する前にフラグを付け加えてください。たとえば、以下に示すストア指定なしの形式ではなく、openspec status --change "<name>" --json --store "<id>" を実行します。ほかのコマンドではこのフラグは不要です。コマンドが出力するヒントにはすでにフラグが含まれているため、後続のコマンドでもその指定を維持してください。ストアを指定しない場合、コマンドは最も近いローカルの openspec/ ルートを対象にします。
入力:ユーザーのリクエストには、変更名(kebab-case)または作成したいものの説明を含めてください。
手順
-
リクエストを理解し、重要な曖昧さを解消する
明確な入力がない場合は、選択肢を提示せず、自由回答形式でユーザーに尋ねてください。
「どのような変更に取り組みたいですか?作成または修正したいものを説明してください。」
説明から kebab-case の名前を導きます(例:「ユーザー認証を追加する」→
add-user-auth)。重要:ユーザーが作成したいものを理解するまでは、先に進まないでください。
リクエストに、範囲、外部から確認できる動作、互換性、受け入れ基準に重大な影響を及ぼす曖昧さがある場合は、変更を作成する前にユーザーに尋ねてください。細かな点については、妥当な前提を置き、計画アーティファクトに記録してください。
-
ワークフローのスキーマを決定する
ユーザーが別のワークフローを明示的にリクエストしていない限り、設定されたデフォルトスキーマを使用してください。
別のスキーマを使用するのは、ユーザーが次のいずれかに該当する場合のみです。
- 名前を指定して特定のスキーマを明示的にリクエストした場合 →
--schema <schema-name>を使用します。 - 「ワークフローを表示して」または「どのようなワークフローがあるか」と尋ねた場合 → 現在の作業ディレクトリで
openspec context --jsonを実行し、正式なルートを特定します。ユーザーが登録済みストアを明示的に選択している場合は、openspec context --json --store "<store-id>"を使用してください。その後、返されたroot.pathを作業ディレクトリに設定してopenspec schemas --jsonを実行し、ユーザーに選んでもらいます。これにより、ローカルのstore:ポインターまたはグローバルのdefaultStoreによって選択されたルートが維持されます。登録済みストアが明示的に選択されている場合は、openspec schemas --jsonにも--store "<store-id>"を付け加えてください。context がno_openspec_rootのみを報告した場合は、代わりに現在の作業ディレクトリでopenspec schemas --jsonを実行します。このフォールバックは、無効または利用できないストアには使用しないでください。
それ以外の場合は、設定済みのデフォルトを維持するため、
--schemaを省略してください。 - 名前を指定して特定のスキーマを明示的にリクエストした場合 →
-
変更ディレクトリを作成する 以下からスキーマ形式を1つ選択します。登録済みのストアを選択した場合は、そのコマンドと、以下に示す後続の OpenSpec コマンドのうち
--storeを受け付ける各コマンドに--store "<store-id>"を追加します。設定済みのデフォルトを使用する場合:
openspec new change "<name>"明示的に指定したスキーマを使用する場合:
openspec new change "<name>" --schema "<schema-name>"これにより、CLI が
.openspec.yamlを使って解決した計画ホームに、ひな形の変更が作成されます。 -
アーティファクトのビルド順序を取得する
openspec status --change "<name>" --jsonJSON を解析して、次の情報を取得します。
applyRequires:実装前に必要なアーティファクト ID の配列(例:["tasks"])artifacts:すべてのアーティファクトの一覧。それぞれのstatusとrequiresエッジ(直接依存するアーティファクト ID)を含みますplanningHome、changeRoot、artifactPaths、actionContext:パスとスコープのコンテキスト。リポジトリ内のパスを想定せず、これらを使用します。
-
必要なセット内のすべてのアーティファクトを作成する
アーティファクトの進捗を管理するには、ToDo リストを使用します。
アーティファクトを依存関係の順に処理します(未解決の依存関係がないアーティファクトを最初に処理します)。
a. 依存関係が満たされている
ready状態のアーティファクトごとに、次の操作を行います。- 指示を取得します。
openspec instructions <artifact-id> --change "<name>" --json - 指示の JSON には、次の内容が含まれます。
context:プロジェクトの背景情報(あなたが従う制約。出力には含めないでください)rules:アーティファクト固有のルール(あなたが従う制約。出力には含めないでください)template:出力ファイルに使用する構成instruction:このアーティファクト種別に固有のスキーマガイダンスskipped/warning:変更でskip_specsが宣言され、このアーティファクトを作成してはならない場合に存在します。その場合は作成を中止し、別のアーティファクトを選択しますresolvedOutputPath:出力先の解決済みパスまたはパターンdependencies:コンテキストとして読み込む、完了済みのアーティファクト
- 完了済みの依存ファイルをコンテキストとして読み込みます。以前の会話で確認済みでも、必ずディスクから再読み込みしてください(ユーザーが編集している場合があります)。
instructionフィールドで特定のスキルまたはコマンドに作成が委任されている場合は、自分でファイルを作成せず、それを実行してアーティファクトを生成し、アーティファクトファイルがresolvedOutputPathに存在することを確認します。- それ以外の場合は、
templateを構成として使用してアーティファクトファイルを作成し、resolvedOutputPathに書き込みます。resolvedOutputPathが glob の場合は、instructionに従って具体的なファイルパスを選択します。 contextとrulesは制約として適用しますが、ファイルに転記してはいけません。- 簡潔な進捗を表示します:「Created 」
b. 必須セット内のすべての成果物が存在するまで続けます(
apply.requiresだけではありません) - 各成果物を作成した後、
openspec status --change "<name>" --jsonを再実行します - 必須セットは、
applyRequiresと、status --json内のrequiresエッジをたどってそこから到達できるすべての成果物です。推移的にたどってください(spec-driven では proposal、specs、design、tasks が閉包に含まれます)。そのセット外の成果物には手を加えないでください statusが確認するのはファイルの存在だけです。そのため、applyRequiresの成果物がdoneと表示されていても、依存関係が存在するとは限りません。tasks.mdを早い段階で作成すると、specsが一度も作成されていないのにtasksが done と表示されます。必須セットを構築する際は、各成果物のstatusではなくrequiresエッジを使ってください。doneの成果物にも、依存先は記載されています- すでに
status: "skipped"と表示されている成果物は、変更で.openspec.yamlにskip_specsが宣言されているため、充足済みです。そのファイルは存在してはなりません。作成しようとしないでください - 必須セット内で不足している成果物をすべて作成し、再確認します。成果物を作成すると、ほかの成果物が作成可能になることがあります
- スキップできるのは、
statusがすでにskippedと報告している場合、または成果物自身のinstructionに条件付きであると記載されている場合のみです。その場合はopenspec instructions <artifact-id> --change "<name>" --jsonを実行し、instructionフィールドで任意と明示されている場合(例:「次の場合のみ作成」)に限ってスキップしてください。spec-driven のdesign.mdは該当します。specsは、上記のskippedステータスの場合にのみ該当し、独自の判断でスキップしてはいけません。ユーザーに伝え、再検討しないでください - 依存関係は作成を可能にするものであり、ゲートではありません。条件付きの依存成果物をスキップしたことだけが理由で必須成果物が
blockedのままでも、その成果物を作成してください - 必須セット内のすべての成果物が
done、skipped、または意図的にスキップされた状態になるまで続けます
c. 成果物の作成にユーザーの入力が必要な場合(コンテキストが不明確な場合):
- ユーザーに確認を求めます
- その後、作成を続けます
- 指示を取得します。
-
最終ステータスを表示する
openspec status --change "<name>"
出力
すべての成果物を作成した後、以下を要約します:
- 変更名と場所
- 作成した成果物の一覧と簡単な説明、およびスキップした条件付き成果物があればその理由
- 準備状況:「実装に必要なすべての成果物が揃いました。」
- プロンプト:「成果物のレビュー準備ができました。準備ができたら、
/openspec-apply-changeを実行するか、この変更を適用するよう依頼してください。」
成果物の作成ガイドライン
- 各成果物タイプについて、
openspec instructionsのinstructionフィールドに従ってください。これは、見慣れた成果物名であっても、最優先の指針です instructionフィールドで特定のスキルまたはコマンドを使って成果物を作成するよう指示されている場合は、成果物を直接記述するのではなく、それを実行してください- スキーマで各成果物に含める内容が定義されています。それに従ってください
- 新しい成果物を作成する前に、依存する成果物を読み、コンテキストを確認してください
- 出力ファイルの構成には
templateを使い、その各セクションを埋めてください - 重要:
contextとrulesは、あなたが従うべき制約であり、ファイルに記載する内容ではありません<context>、<rules>、<project_context>ブロックを成果物にコピーしないでください- これらは記述内容の指針ですが、出力に含めてはなりません ガードレール
- このワークフローを呼び出したリクエストで許可されているのは、計画のみです。そのリクエストに含まれる実装や適用の指示は引き継がれません。このワークフロー中に変更を実装したり、適用ワークフローを開始したり、プロジェクトコードを編集したりしないでください。成果物を提示したら、適用ワークフローを開始する新たなユーザーリクエストを待ってください
apply.requiresに記載された ID だけでなく、適用フェーズが依存するすべての成果物を作成してください- 新しい成果物を作成する前に、必ず依存する成果物を読み込んでください。会話の記憶ではなく、ディスクから読み直してください(最後に確認してからファイルが変更されている可能性があります)
- スコープ、外部から確認できる動作、互換性、受け入れ基準に大きく影響する曖昧さがある場合は質問してください。細かな点については、妥当な想定をして記録してください
- 同じ名前の変更がすでに存在する場合は、それを続行するか、新しく作成するかをユーザーに確認してください
- 次に進む前に、各成果物ファイルを書き込んだ後、そのファイルが存在することを確認してください