ask-many-models について
Ask Many Modelsは、プロンプトを複数のAIモデルに並列送信し、回答をまとめて分析するスキルです。プロンプトの確認と承認を案内し、問い合わせの前にユーザーがモデルを選択します。
主な機能
- 01初期プロンプトの確認と作成
- 02追加する関連質問の提案
- 03問い合わせ前のモデル選択
- 04選択モデルへの並列問い合わせ
- 05回答を統合した分析の作成
活用シーン
- 01質問について複数モデルの見解を集める
- 02背景を補ってプロンプトを改善する
- 03判断やレビューへの回答を比較する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hartreeworks/ skill--ask-many-models --skill ask-many-modelsインストール後、Claude Code で/ask-many-modelsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignore.env.examplepackage.jsonREADME.mdmodels.jsonconfig.example.jsontsconfig.jsonyarn.lockcommands/amm.mddata/user-defaults.example.jsonreferences/cli-reference.mdsynthesis-prompts.mdscripts/context.tsnotify.tsvalidate-keys.tssynthesis.tsresynthesise.tsmodels.tsdeep-research-query.tsquery.ts詳細
複数のモデルに質問する
同じプロンプトを複数の AI モデルに並行して送り、回答を統合して一貫性のある分析を作成します。
このスキルが /amm または自然言語によって呼び出されたら、以下の手順を実行してください。このスキルの機能を説明するだけで終わらせないでください。
ステップ 1:シードプロンプトを取得する
A)会話の開始時(会話が始まったばかりで、これまでのやり取りがない場合): ユーザーがプロンプトや質問を提示していれば、それをシードとして扱います。そうでなければ、「複数の AI モデルに送る質問は何ですか?」と尋ねます。
B)会話の途中(それ以前に実質的なやり取りがある場合): ユーザーが呼び出しに使ったメッセージをシードとして扱い、それ以前の会話を背景情報とします。
シードが決まったら、ステップ 1a に進みます。
ステップ 1a:確認質問をするか判断する
シードだけでは、最適なプロンプトにならないことがほとんどです。短い確認質問をすることで、より良い結果が得られることがよくあります。ただし、すでに具体的なプロンプトに確認質問を強いると、手間が増えるだけです。
次のいずれかに該当する場合は、確認質問を省略し、下書きの作成(ステップ 1d)に進みます。
- ユーザーが「下書きだけ」「進めて」「質問を省略して」「質問なしで」などと明示している。
- シードがすでに長く具体的である(およそ 300 文字を超え、意図、対象読者、制約を示している)。
- 会話の途中で呼び出され、これまでのやり取りですでに意図が十分に明確になっている。
確認質問を省略できるのは、この 3 つの条件に該当する場合だけです。このスキルの要点は、確認やアイデアの掘り下げです。自動モードでの実行も含め、ユーザーが先に進みたそうだという漠然とした判断は、確認質問を省略する理由にはなりません。
判断が難しい場合は、一度だけ尋ねてください。AskUserQuestion が使える場合は、質問を 1 つだけ指定して呼び出してください。使えない場合は、「先に確認質問を 2~3 個してもよいですし、そのまま下書きを作成することもできます。どちらにしますか?(1)確認する(2)下書きを作成する」と表示し、返答を待ってください。
Step 1b: 意図を明確にする(個別に調整した質問)
目標は、質問の「本当の」動機と、どのような回答が役に立つと感じられるかを明らかにすることです。個別に調整した質問を2〜4個尋ねます。定型文は使わないでください。
動機についての質問を必ず含めてください。 具体的な種となる質問に基づいて、動機の選択肢を3〜4個作成し、「その他」の自由記入欄も用意します。網羅性よりも個別の調整が重要です。一般的な動機の選択肢を並べるくらいなら、質問を省くほうがよいでしょう。
例 — 「メールアプリのオンボーディングフローを書き直すべきですか?」 のような質問の場合:
- そもそも書き直すべきか判断する
- すでに計画中の書き直しを厳しく検証する
- これまで検討していなかった選択肢を考える
- 書き直さない理由を見つける
「MCP サーバーの仕組みを説明してください」 のような質問の場合:
- ざっと読むための簡単な概念モデル
- 実装できるように深く理解する
- 代替手段(プラグイン、フック)と比較する
- 技術に詳しくない人向けに説明する
次に、質問の種類に応じて、個別に調整した質問をさらに1〜2個加えます。
- 意思決定 → 判断基準(コスト/速度/可逆性/選択肢の幅)と時間軸。
- 解説 → 深さ、対象者、事前知識。
- 批評またはレビュー → 求める反論の種類(悪魔の代弁者/代替案の最善の主張/数値重視/リスクの洗い出し)。
- 選択肢の生成 → 制約(期間、予算、関係者)。
- 予測または予想 → 時間軸と、ユーザーの見方を変える要因。
悪い例(定型文 — 使わないでください):
- 「背景は何ですか?」
- 「対象者は誰ですか?」
- 「回答の長さはどれくらいがよいですか?」
良い例(「Outlook のアドインを終了すべきですか?」 に合わせた質問):
- 何が本当の動機ですか?(動機の選択肢4つ+「その他」)
- どちらを重視しますか。保守の負担を減らすこと、それともユーザー層の満足度を維持することですか?
- 期間は、今後3か月ですか、それとも今後2年ですか?
質問の方法:
AskUserQuestion が利用できる場合(Claude Code)は、2〜4個の質問すべてを1回の AskUserQuestion 呼び出しで尋ねます。単一選択(multiSelect: false)にします。各選択肢には短いラベルと1行の説明を付けます。各質問には、実際の選択肢を3〜4個だけ用意してください。実行環境が「その他」の自由記入欄を自動で追加します。「その他」の選択肢を手動で追加しないでください(選択肢が上限の4個を超えてしまいます)。
AskUserQuestion が利用できない場合(Codex やその他の実行環境)は、質問を番号付きリストで表示します。実行環境による自動追加がないため、各質問に明示的な「その他(自由入力)」の選択肢を追加してください。 質問ごとに1行で回答するよう、ユーザーに依頼します。形式の例:
A few quick clarifying questions:
Q1 — What's really driving this?
1. Decide whether to do the rewrite at all
2. Stress-test a rewrite I'm already planning
3. Generate options I haven't considered
4. Find reasons NOT to do it
5. Other (type freely)
Q2 — Which matters more: cutting maintenance burden, or keeping the user base happy?
1. Cutting maintenance burden
2. Keeping the user base happy
3. Other (type freely)
Reply with one line per question, e.g.:
Q1: 2
Q2: 1
or use free text where Other applies, e.g. "Q1: I want to compare against alternatives I haven't thought of".
Step 1c: 発想を広げる(隣接する視点)
明確化の後、種となる質問では明示的に尋ねられていないものの、役立つことが多い隣接する視点やサブ質問を3〜5個作成します。各選択肢には、1行の理由を添えます。
「Outlook のアドインを終了すべきですか?」 の例:
- 「考えを変えるには何が必要かも尋ねる。」— 判断を見直す条件を明らかにします。
- 「どちらを選んでも、主な失敗要因を3つ挙げる。」— 両方の選択肢を対称的にリスク分析します。
- 「今日始めるとしたら、これを作るか?という視点で考え直す。」— サンクコストの影響を切り分けます。
- 「まず仮説を検証するための、最も安価な実験も尋ねる。」— より低コストの代替案を明らかにします。
複数選択式で提示します。「なし — 元の質問だけに回答する」という選択肢を必ず含めてください。
AskUserQuestion が利用できる場合は、multiSelect: true を指定して1回呼び出します。
AskUserQuestion が利用できない場合は、選択肢を番号付きリストで表示し、カンマ区切りの番号(または「なし」)で回答するよう求めます。
Adjacent angles I could bundle in (pick any, comma-separated, or "none"):
1. Also ask: what would I need to see to change my mind?
— surfaces update conditions, useful for forecasting decisions
2. Also ask: top 3 failure modes either way
— symmetric risk analysis
3. Reframe as: if I were starting today, would I build this?
— disentangles sunk cost from forward-looking value
4. Also ask: cheapest experiment to test the hypothesis first
— surfaces lower-cost alternatives
5. None
Reply with numbers (e.g. "1, 3") or "none".
ユーザーが「なし」を選ぶ、または回答を省略した場合も問題ありません。そのまま進めてください。
ステップ 1d:プロンプトを作成して承認を得る
包括的なプロンプトを作成します。Step 1b の回答を直接反映してください。それらを使って、作成するプロンプトの動機、評価基準、対象読者、詳しさ、期間を設定します。Step 1c で選んだリフとスキップしたリフを参考に、どのサブ質問をまとめるかを決めます。
プロンプトには、次の内容を含めてください。
- 背景をすべて把握できる情報 — 関連する背景、制約、目標。
- 実質的な内容 — ファイルの参照先だけでなく、実際の抜粋、コードスニペット、データ。
- 明確にした動機 — Step 1b の動機に関する回答から引用した、明示的な1行:「Y を理由に、X をしようとしています。」
- 中心となる質問を明確に提示 — 主な質問に加え、Step 1c のリフでまとめた質問。
- 制約や希望を記載 — 詳しさ、形式、対象読者、期間(Step 1b の回答を反映)。
プロンプト作成チェックリスト:
- 背景情報(最低2~4段落)
- 関連するファイルの内容やコード(「添付ファイルを参照」ではなく、実際の内容を記載)
- 明示した動機(Step 1b の回答から1行)
- 主な質問と、まとめたリフ(Step 1c から)
- 制約、対象読者、期間(Step 1b から)
- 役立つ回答の形式と詳しさ
必要と思われる量より多めに背景情報を含めてください。他のモデルはこの会話にアクセスできず、プロンプトだけを参照します。「長すぎる」と感じるプロンプトが、たいていはちょうどよい分量です。
同時進行中のセッションとのファイル名の重複を避けるため、一意のファイル名で草案を保存します。書式を保持するため、ヒアドキュメントを使用してください。
slug="$(date +%s)"
cat > "/tmp/amm-prompt-draft-$slug.md" <<'EOF'
<paste full prompt text here>
EOF
open "/tmp/amm-prompt-draft-$slug.md"
ファイルを開いた後、ユーザーがウィンドウを切り替えずに確認できるよう、内容を2~3文でインライン要約します。
承認メッセージは、実行したステップによって異なります。
-
Step 1b と Step 1c の両方を実行し、ユーザーが少なくとも1つのリフを選んだ場合:
「草案を作成しました。**含めたリフ:**失敗モード、最も低コストな実験。**スキップしたもの:**視点の再設定、考えが変わる条件。変更があればお知らせください。続行する場合は「go」と入力してください。」
-
Step 1c を実行し、ユーザーが「なし」を選んだ場合:
「確認のための回答を反映して草案を作成しました。追加のリフは含めていません。変更があればお知らせください。続行する場合は「go」と入力してください。」
-
Step 1a で確認をすべてスキップした場合:
「プロンプトを作成しました。内容を確認し、変更があればお知らせください。続行する場合は「go」と入力してください。」
ステップ 2:モデルの選択
クエリを実行する前に、必ずモデル選択メニューを提示し、ユーザーが選ぶまで待ちます。ユーザーがプロンプトファイルのパスを指定していたり、すばやい回答を求めているように見えたりしても、ユーザーがどのモデルを希望するかを決めつけてはいけません。必ずユーザーに選んでもらいます。
メニューは実行して表示してください。models.json が信頼できる唯一の情報源です。選択肢を記憶から書き起こしてはいけません。
cd "$HOME/.claude/skills/ask-many-models" && yarn query menu
出力をユーザーに提示し、番号が入力されるまで待ちます。ここでは選択肢が4つまでに制限されるため、AskUserQuestion は使用しないでください。
ユーザーは、番号だけ(例:1)を入力する場合も、番号の後に SYS を付ける場合(例:1 SYS、2 sys)もあります。モデルの選択には番号を使用してください。SYS が含まれている場合(大文字・小文字は区別しません)、モデルの解決後にステップ 2b に進みます。
最後の選択肢は個別のモデルを選択です。ユーザーがこれを選んだ場合は、ピッカーを表示し、カンマ区切りの番号を入力するよう求めてください。
cd "$HOME/.claude/skills/ask-many-models" && yarn query menu --pick
ユーザーが入力した番号を、出力にあるモデル ID に対応付け、上記と同様に SYS の有無を確認してください。
Step 2b:システムプロンプト(ユーザーが SYS と入力した場合のみ)
ユーザーがモデル選択の入力に SYS を含めた場合にのみ、このステップを実行します。それ以外の場合は、ステップ 3 に進みます。
$HOME/.claude/skills/ask-many-models/data/system-prompts.jsonに保存済みのプロンプトがあるか確認します。ファイルが存在しない場合、保存済みプロンプトのリストは空として扱います。- 保存済みのプロンプトがある場合は、アルファベットのラベルを付けて表示します。
Saved system prompts:
A) Expert VC analyst — You are an experienced venture capital...
B) Devil's advocate — Challenge every assumption...
N) Write a new system prompt
Select (A/B/.../N):
- ユーザーが文字を選択した場合、その保存済みプロンプトの内容をシステムプロンプトとして使用します。
- ユーザーが N を選択した場合、システムプロンプトを入力または貼り付けるよう依頼します。次に、保存するかどうかを尋ねます。
- 保存する場合は、名前を尋ねてから、以下を使用して
system-prompts.jsonに追加します。mkdir -p "$HOME/.claude/skills/ask-many-models/data" if [ ! -f "$HOME/.claude/skills/ask-many-models/data/system-prompts.json" ]; then printf '{"prompts":[]}\n' > "$HOME/.claude/skills/ask-many-models/data/system-prompts.json"; fi jq --arg name "<name>" --arg content "<content>" '.prompts += [{"name": $name, "content": $content}]' "$HOME/.claude/skills/ask-many-models/data/system-prompts.json" > /tmp/amm-sysprompts-tmp.json && mv /tmp/amm-sysprompts-tmp.json "$HOME/.claude/skills/ask-many-models/data/system-prompts.json"
- 保存する場合は、名前を尋ねてから、以下を使用して
- システムプロンプトを一時ファイルに保存し、ステップ 4 で
--system-prompt <path>を指定して渡します。
ユーザーが Enter キーを押した場合(入力が空の場合)はスキップし、システムプロンプトを使用しません。
ステップ 3:画像を確認する
会話に画像がある場合は、次の場所に保存します。
$HOME/.claude/skills/ask-many-models/data/model-outputs/image-TIMESTAMP.png
ビジョンに対応していないモデルには、テキストプロンプトのみを渡し、画像が提供されたことを示す注記を添えます。menu --pick の出力には、画像を受け付けるモデルがタグ付けされています。
ステップ 4:クエリを実行する
ユーザーが独自のモデルを選んだ場合は、プリセット名または明示的なモデル ID を渡します。
--synthesise を付けずに実行します。合成はステップ 4b でセッション内サブエージェントを使って行うため、Anthropic API への課金ではなく、オペレーターが既に利用しているプランのクォータが使われます。
cd "$HOME/.claude/skills/ask-many-models" && yarn query \
--preset "<preset-name>" \
--output-format both \
[--image "<path>"] \
[--system-prompt "<path>"] \
"<prompt>"
個別に選択したモデルセットの場合は、--preset を --models "<id1>,<id2>,..." に置き換えます。
スクリプトは、自動生成された出力ディレクトリのパス(data/model-outputs/<timestamp>-<slug>/)を表示し、results.md、results.html、responses.json、prompt.md、および individual/<model>.md ファイルを書き込みます。
ディープリサーチのプリセットを開始する前に、所要時間についてユーザーに警告してください。これらのモデルはそれぞれ 10~20 分かかります。
ステップ 4b:セッション内で合成する(サブエージェント)
ステップ 4 の標準出力から出力ディレクトリのパスを取得し、汎用サブエージェントを起動して合成を作成します。
Agent tool with subagent_type: "general-purpose"
description: "Synthesise multi-model responses"
prompt: |
Read the following files and produce a synthesis of the model responses.
Prompt: <output-dir>/prompt.md
Individual model responses: <output-dir>/individual/*.md
(Skip any file whose content starts with "**Error:**" — that model failed.)
Produce an executive-depth synthesis with these sections, using British English
and sentence-case headings:
## Overview
(1 short paragraph — the core question and the shape of the answer.)
## Points of consensus
(Bullets — points where 2+ models agree, with [model] attribution tags.)
## Points of disagreement
(Bullets — contradictions with a short pros/cons. Tag each view with [model].)
## Unique insights
(Bullets — valuable points only one model raised. Tag with [model].)
## Confidence level
(One paragraph — how much to trust this synthesis and why.)
Write the synthesis to /tmp/amm-synthesis-<slug>.md and return only the file path.
Do NOT edit results.md, results.html, or any file in the output directory —
the orchestrator will handle insertion.
サブエージェントから合成ファイルのパスが返されたら、挿入ヘルパーを実行します。
cd "$HOME/.claude/skills/ask-many-models" && \
npx tsx scripts/resynthesise.ts "<output-dir>" --file "<synthesis-file>"
これにより、合成が results.md の先頭(# Multi-Model Query のメタデータの後、最初のモデルセクションの前)に挿入され、results.html が再生成されます。
フォールバック — 何らかの理由で API ベースの合成が必要な場合(無人実行、またはセッション内コンテキストが応答しなくなった場合)は、--file を省略します。
npx tsx scripts/resynthesise.ts "<output-dir>"
これは Anthropic API 経由で Claude Opus 4.8 を呼び出し、トークンを消費します。
ステップ 5:結果を開く
「Querying: [models]」と伝え、結果ファイルを開きます。data/user-defaults.json が存在する場合は、open_preference を確認します。
"html"→open "<output-dir>/results.html""markdown"(または設定なし)→open "<output-dir>/results.md"
リソース
references/cli-reference.md— コマンドとオプションの全リファレンス、モデル設定、API キー、出力構造、合成、ディープリサーチ、エラー処理。models.json— モデルとプリセットの唯一の信頼できる情報源です。ここにモデルを追加するだけでよく、メニューはこのファイルから生成されます。