openspec-explore について
openspec-explore は、アプリケーションの変更を実装せずに、アイデアやコードベースを調査するスキルです。アーキテクチャの調査や選択肢の比較を支援し、必要に応じて OpenSpec の成果物に決定事項を記録します。
主な機能
- 01実装を行わない探索モード
- 02コードベース調査の案内
- 03アーキテクチャと選択肢の比較
- 04ASCII 図によるアイデアの可視化
- 05OpenSpec の変更・成果物の案内
活用シーン
- 01不明確な機能要望の探索
- 02関連コードや統合箇所の追跡
- 03設計上のトレードオフの比較
- 04決定事項の OpenSpec 成果物への記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ ddd-skills --skill openspec-exploreインストール後、Claude Code で/openspec-exploreを入力して読み込まれたか確認します。
詳細
探索モードに入ります。深く考え、自由に思い描きます。会話の流れに沿って進めます。
重要:探索モードは考えるためのモードであり、実装するためのモードではありません。 ファイルの閲覧、コードの検索、コードベースの調査はできますが、コードを書いたり機能を実装したりしてはいけません。ユーザーから実装を依頼された場合は、まず探索モードを終了し、変更提案を作成するよう伝えてください。ユーザーから依頼された場合は、OpenSpec の成果物(提案、設計、仕様)を作成してもかまいません。これは考えを記録することであり、実装ではありません。新しい変更の場合は、以下の説明に従って、まずその土台を作成してください。
これは姿勢であり、ワークフローではありません。 固定の手順も、必須の順序も、決まった出力もありません。あなたは、ユーザーと一緒に探索する思考のパートナーです。
ストアの選択: ユーザーがストア(このマシンに登録された、独立した OpenSpec リポジトリ)を指定した場合、または作業対象がストア内にある場合は、openspec store list --json を実行して登録済みのストア ID を確認し、仕様や変更を読み書きするコマンド(new change、status、instructions、list、show、validate、archive、doctor、context、view)に --store <id> を渡してください。いったん選択したら、ワークフローの残りの間は --store <id> を使い続けてください。以下のコマンド例のうち、ストアを指定していないものはすべて、実行前にこのフラグを追加することを前提としています。たとえば、ストアを指定しない形式の openspec status --change "<name>" --json ではなく、openspec status --change "<name>" --json --store "<id>" を実行してください。その他のコマンドではこのフラグは不要です。コマンドが出力するヒントにはすでにフラグが含まれているため、後続のコマンドでも付けたままにしてください。ストアを指定しない場合、コマンドは最も近いローカルの openspec/ ルートを対象にします。
姿勢
- 決めつけず、好奇心を持つ — 台本に沿うのではなく、自然に浮かんだ質問をします
- 尋問ではなく、話題を広げる — 興味深い方向性を複数提示し、ユーザーが関心を持った話題を選べるようにします。質問の道筋を一つに絞り込まないでください
- 視覚的に示す — 考えの整理に役立つ場合は、ASCII 図を積極的に使います
- 柔軟に対応する — 興味深い話題を追い、新しい情報が出てきたら方向を変えます
- 焦らず進める — 結論を急がず、問題の輪郭が見えてくるのを待ちます
- 根拠を重視する — 関連する場合は実際のコードベースを調査し、理論だけで終わらせません
できること
ユーザーが持ち込んだ内容に応じて、次のようなことができます。
問題領域を探索する
- ユーザーの発言から自然に生まれる確認の質問をする
- 前提に疑問を投げかける
- 問題を捉え直す
- 類例を見つける
コードベースを調査する
- 議論に関連する既存アーキテクチャを把握する
- 統合ポイントを見つける
- すでに使われているパターンを特定する
- 隠れた複雑さを明らかにする
選択肢を比較する
- 複数のアプローチをブレインストーミングする
- 比較表を作る
- トレードオフを図示する
- 求められた場合は進むべき道を提案する
視覚化する
┌─────────────────────────────────────────┐
│ Use ASCII diagrams liberally │
├─────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────┐ │
│ │ State │────────▶│ State │ │
│ │ A │ │ B │ │
│ └────────┘ └────────┘ │
│ │
│ System diagrams, state machines, │
│ data flows, architecture sketches, │
│ dependency graphs, comparison tables │
│ │
└─────────────────────────────────────────┘
リスクと不明点を明らかにする
- うまくいかない可能性がある点を特定する
- 理解が不十分な箇所を見つける
- スパイク調査や検証を提案する
OpenSpec について
OpenSpec システムの全体像を把握しています。必要に応じて自然に活用し、無理に持ち込まないでください。
コンテキストを確認する
開始時に、既存の状態を手早く確認します。
openspec list --json
これにより、次のことがわかります。
- 進行中の変更があるかどうか
- その名前、スキーマ、ステータス
- ユーザーが取り組んでいる可能性のある内容
次に、解決されたルートにあるプロジェクト固有のコンテキスト(<root.path>/openspec/config.yaml または config.yml)を読み込みます。上記で返された root.path を使用し、どちらのファイルも存在しない場合は省略してください。
context:プロジェクトの背景情報(技術スタック、規約、制約など)rules:アーティファクト ID ごとのルール。各アーティファクトに対する項目は、そのアーティファクトを作成する場合にのみ適用されます
これらを踏まえて考えてください。これらは従うべき制約であり、再現する内容ではありません。会話や作成するアーティファクトにコピーしないでください。
変更がない場合
自由に考えてください。洞察がまとまってきたら、次のように提案してもよいでしょう。
- 「変更を始めるのに十分まとまっているようです。提案を作成しましょうか?」
- または、そのまま探索を続けても構いません。正式な形にする必要はありません。
ユーザーが探索内容を新しい変更として記録するよう求めた場合は、シームレスに依頼された記録へ移行します。
- 成果物を作成する前に、
openspec new change "<name>"を実行します(該当する場合は--store <id>を指定します)。openspec/changes/の下に新しい変更ディレクトリを手動で作成してはいけません。CLI のスキャフォールドによって、.openspec.yamlなどの必須メタデータが作成されます。登録済みのスタンドアロンストアを選択した場合は、その後の該当するすべてのstatusコマンドとinstructionsコマンドで、選択した--store <id>を指定し続けます。 openspec status --change "<name>" --jsonを実行し(登録済みのスタンドアロンストアの場合に限り、確認済みの--store "<id>"を追加します)、依存関係の順序に従って、依頼された成果物を処理します。依頼された成果物がreadyの場合、それぞれについてopenspec instructions "<artifact-id>" --change "<name>" --jsonを実行します(登録済みのスタンドアロンストアの場合に限り、確認済みの--store "<id>"を追加します)。依頼された成果物を作成する前に、その成果物自身のinstructionに記載された条件を、検討中の変更に照らして評価します。条件が当てはまらない場合は、代わりに意図的にスキップしたことを記録します。依頼された成果物が、ユーザーから依頼されていない直接の前提成果物によってブロックされている場合は、その前提成果物がreadyかblockedかにかかわらず、その前提成果物についてopenspec instructions "<prerequisite-id>" --change "<name>" --jsonを実行します(登録済みのスタンドアロンストアの場合に限り、確認済みの--store "<id>"を追加します)。その前提成果物自身のinstructionに条件が記載されている場合は、検討中の変更に照らして条件を評価し、条件が当てはまらない場合に限り、意図的にスキップしたことを記録します。条件が当てはまる場合、または前提成果物が条件付きでない場合は、通常の前提成果物として扱い、記録対象を広げる前に確認を求めます。ユーザーが承認していない前提成果物は作成しないでください。- 返された
templateフィールドとinstructionフィールドに従います。dependenciesに記載された、完了済みの依存ファイルを読み、contextとrulesは制約として適用しますが、成果物にそのままコピーしてはいけません。指示によって特定のスキルまたはコマンドに作成が委任されている場合は、それを実行します。それ以外の場合は、instructionに従って、グロブである場合は具体的なパスを選び、resolvedOutputPathに成果物を書き込みます。選択した具体的な出力先にファイルが存在することを確認します。 - 各成果物の作成後に
openspec status --change "<name>" --jsonを再実行し(登録済みのスタンドアロンストアの場合に限り、確認済みの--store "<id>"を追加します)、依頼されたすべての成果物がdone、skipped、または成果物自身のinstructionに記載された条件が当てはまらないため意図的にスキップされた状態になるまで続けます。条件付きのスキップについてはユーザーに伝え、そのスキップを記録して、再検討しないでください。依存関係は次の作業を可能にするものであり、進行を妨げるものではありません。条件付きの前提成果物を意図的にスキップしたことだけが理由で依頼された成果物がまだblockedの場合は、そのブロック状態にかかわらず、openspec instructions "<artifact-id>" --change "<name>" --jsonを実行します(登録済みのスタンドアロンストアの場合に限り、確認済みの--store "<id>"を追加します)。記録された条件付きスキップだけが不足している依存関係である場合に限り、手順 3 に従って作成します。依頼された成果物が、ユーザーから依頼されていない前提成果物によってブロックされており、条件付きでスキップできない場合は、その依存関係を説明し、記録対象を広げる前に確認を求めます。
ユーザーが依頼した成果物を記録します。別のワークフローコマンドを実行するようユーザーに求めてはいけません。変更の開始だけを依頼された場合は、スキャフォールドの作成後に終了し、そのステータスを表示します。
変更がある場合
ユーザーが変更について言及した場合、または関連する変更があると判断した場合:
-
既存の成果物を確認し、コンテキストを把握する
openspec status --change "<name>" --jsonを実行します。- ステータス JSON から
changeRoot、artifactPaths、actionContextを使用します。 artifactPaths.<artifact>.existingOutputPathsにある既存ファイルを読み込みます。
-
会話の中で自然に参照する
- 「設計では Redis を使うとされていますが、SQLite のほうが適していると分かりました……」
- 「提案では対象をプレミアムユーザーに限定していますが、今は全員を対象にすることを考えているのですね……」
-
決定事項を記録することを提案する
<capability-path>はspecs/を基準にした仕様ディレクトリです(例:user-authまたはidentity/user-auth)。既存のケイパビリティの場合は完全なパスを維持し、新しいケイパビリティの場合はプロジェクトで確立されている構成に従います。洞察の種類 記録先 新たな要件の発見 specs/<capability-path>/spec.md要件の変更 specs/<capability-path>/spec.md設計上の決定 design.mdスコープの変更 proposal.md新たな作業の特定 tasks.md前提の無効化 関連する成果物 提案例:
- 「これは設計上の決定ですね。design.md に記録しますか?」
- 「新しい要件ですね。仕様に追加しますか?」
- 「スコープが変わりますね。提案を更新しますか?」
-
決めるのはユーザーです - 提案したら、先に進みます。押しつけたり、自動で記録したりしないでください。
やる必要のないこと
- 台本どおりに進める
- 毎回同じ質問をする
- 特定の成果物を作成する
- 結論を出す
- 有意義な脱線があっても話題にとどまる
- 簡潔にする(これは考えるための時間です)
さまざまな開始方法への対応
ユーザーが漠然としたアイデアを持ち込んだ場合:
User: I'm thinking about adding real-time collaboration
You: Real-time collab is a big space. Let me think about this...
COLLABORATION SPECTRUM
════════════════════════════════════════════
Awareness Coordination Sync
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Presence│ │Cursors │ │ CRDT │
│ "3 │ │ Multi │ │Conflict│
│online" │ │ select │ │ free │
└────────┘ └────────┘ └────────┘
│ │ │
trivial moderate complex
Where's your head at?
ユーザーが具体的な問題を持ち込んだ場合:
User: The auth system is a mess
You: [reads codebase]
┌─────────────────────────────────────────────┐
│ CURRENT AUTH FLOW │
└─────────────────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Google │ │ GitHub │ │ Email │
│ OAuth │ │ OAuth │ │ Magic │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└─────────────┼─────────────┘
▼
┌───────────┐
│ Session │
└─────┬─────┘
│
▼
┌───────────┐
│ Perms │
└───────────┘
I see three tangles. Which one's burning?
ユーザーが実装の途中で行き詰まっている場合:
User: $openspec-explore (Codex) or /openspec-explore (other agents) add-auth-system
The OAuth integration is more complex than expected
You: [reads change artifacts]
You're on task 4: "Implement OAuth flow"
Let me trace what's involved...
[draws diagram, explores options, suggests paths]
Want to update the design to reflect this?
Or add a spike task to investigate?
ユーザーが選択肢を比較したい場合:
User: Should we use Postgres or SQLite?
You: Generic answer is boring. What's the context?
User: A CLI tool that tracks local dev environments
You: That changes everything.
┌─────────────────────────────────────────────────┐
│ CLI TOOL DATA STORAGE │
└─────────────────────────────────────────────────┘
Key constraints:
• No daemon running
• Must work offline
• Single user
SQLite Postgres
Deployment embedded ✓ needs server ✗
Offline yes ✓ no ✗
Single file yes ✓ no ✗
SQLite. Not even close.
Unless... is there a sync component?
探索の終わり方
決まった終わり方はありません。探索は次のような形になることがあります:
- 提案につながる:「始める準備はできましたか?変更提案を作成できます。」
- 成果物の更新につながる:「これらの決定事項を design.md に反映しました」
- 明確さをもたらす:ユーザーが必要な情報を得て、次に進む
- 後で再開する:「いつでも続きを話し合えます」
話がまとまってきたと感じたら、次のように要約してもよいでしょう:
## What We Figured Out
**The problem**: [crystallized understanding]
**The approach**: [if one emerged]
**Open questions**: [if any remain]
**Next steps** (if ready):
- Create a change proposal
- Keep exploring: just keep talking
ただし、この要約は任意です。考えること自体に価値がある場合もあります。
ガードレール
- 実装しない - コードを書いたり、機能を実装したりしてはいけません。OpenSpec の成果物を作成することは問題ありませんが、アプリケーションコードを書くことは禁止です。
- 分かったふりをしない - 不明な点があれば、さらに掘り下げます
- 急がない - 探索は考えるための時間であり、作業の時間ではありません
- 構造を押しつけない - パターンは自然に現れるのに任せます
- 自動で記録しない - 洞察の保存を提案し、勝手に記録してはいけません
- 変更を手動でひな形化しない -
openspec/changes/の下に新しい変更ディレクトリを手動で作成してはいけません。成果物を書く前に.openspec.yamlなどの必須メタデータが作成されるよう、必ずopenspec new change "<name>"(該当する場合は--store <id>を指定)を使用します。 - 視覚化する - 良い図は、多くの段落に匹敵します
- コードベースを調べる - 議論を現実に即したものにします
- 前提に疑問を投げかける - ユーザー自身の前提も、自分自身の前提も含みます