ask について
ask は、AI が書いたコードの質問に答えるスキルです。選択範囲や指定されたコードのプロンプト履歴を調べ、記録があれば元のエージェントの視点から回答します。
主な機能
- 01選択範囲、ファイル、シンボルからコードを特定
- 02コードの作者情報とプロンプト履歴を取得
- 03範囲を絞ったサブエージェントへの調査委任
- 04履歴がない場合の客観的なコード分析
活用シーン
- 01選択したコードの設計理由を尋ねる
- 02関数に対応する元のプロンプトを追跡
- 03履歴がない場合にコードの選択を分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ git-ai-project/ git-ai --skill askインストール後、Claude Code で/askを入力して読み込まれたか確認します。
詳細
Ask スキル
AI が作成したコードについて、コードを生み出した元のプロンプトや会話を見つけ、その後、作者であるエージェントの視点になって質問に回答します。
メインエージェントの役割(あなた)
準備作業を行い、その後、高速で対象を絞ったサブエージェントに引き継ぎます。
-
ファイルパスと行範囲を特定する — 次の情報源を順番に確認します。
a) エディターの選択コンテキスト(最も一般的)。 ユーザーがエディターで行を選択すると、会話に次のような
<system-reminder>が挿入されます。The user selected the lines 2 to 4 from /path/to/file.rs: _flush_logs(args: &[String]) { flush::handle_flush_logs(args); }ここからファイルパスと行範囲を直接抽出します。これはユーザーが
/askを使う主な方法です。コードを選択してから、ファイルや行を指定せずに「/ask なぜこうなっているのか」のように入力します。b) 明示的なファイル/行の指定 — 「42 行目」「src/main.rs の 10〜50 行目」のような指定があれば、そのまま使用します。
c) 名前付きシンボル — 変数/関数/クラスが指定された場合は、ファイルを読み込み、定義箇所を見つけて行番号を抽出します。
d) 行の指定がないファイル → ファイル全体を対象にします(
--linesは省略します)。e) ファイル、行、選択コンテキストがなく、特定可能なコードへの参照もない場合 → 推測したり検索したりしてはいけません。次のように返信してください。
コードを選択するか、特定のファイル/シンボルを指定してから、質問を
/askで入力してください。ここで終了します。サブエージェントを起動してはいけません。
-
次のテンプレートを使って、サブエージェントを 1 つ起動します。
max_turns: 4を指定します。 -
ユーザーに回答を伝えます。それだけです。
サブエージェントの設定
Task tool settings:
subagent_type: "general-purpose"
max_turns: 4
サブエージェントに許可されるのは Bash と Read のみです。Glob、Grep、Task は使用できません。最大 4 ターンで実行します。これは高速な検索であり、調査プロジェクトではありません。
blame --show-prompt と search の使い分け
ファイル全体または行範囲と、それに対応するプロンプトを読みたい場合は、git-ai blame --show-prompt を使います。この用途では search よりも適しています。一度の呼び出しで、各行の作者情報と完全なプロンプト JSON が得られます。
# Get blame + prompts for a line range (pipe to get prompt dump appended):
git-ai blame src/commands/blame.rs -L 23,54 --show-prompt | cat
# Interactive (TTY) mode shows prompt hashes inline:
# 7a4471d (cursor [abc123e] 2026-02-06 14:20:05 -0800 23) code_here
# Piped mode appends raw prompt messages after a --- separator:
# ---
# Prompt [abc123e]
# [{"type":"user","text":"Write a function..."},{"type":"assistant","text":"Here is..."}]
コミット、キーワードを指定してプロンプトを探す場合や、特定のファイル/行範囲がわからない場合は、git-ai search を使います。
サブエージェントのプロンプトテンプレート
{question}、{file_path}、{start}-{end} を入力します(該当しない場合は LINES を省略します)。
You are answering a question about code by finding the original AI conversation
that produced it. You will embody the author agent's perspective — first person,
as the agent that wrote the code.
QUESTION: {question}
FILE: {file_path}
LINES: {start}-{end}
You have exactly 3 steps. Do them in order, then stop.
STEP 1 — Search (one command):
Run: git-ai search --file {file_path} --lines {start}-{end} --verbose
If no results, try ONE fallback: git-ai search --file {file_path} --verbose
That's it. Do not run more than 2 git-ai commands total.
STEP 2 — Read the code (one Read call):
Read {file_path} (focus on lines {start}-{end})
STEP 3 — Answer:
Using the transcript from Step 1 and the code from Step 2, answer the
question AS THE AUTHOR in first person:
- "I wrote this because..."
- "The problem I was solving was..."
- "I chose X over Y because..."
Format:
- **Answer**: Direct answer in the author's voice
- **Original context**: What the human asked for and why
- **Date(s)**: Dates, Human Author where this feature was worked on.
If no transcript was found, say so clearly: "I couldn't find AI conversation
history for this code — it may be human-written or predate git-ai setup."
In that case, analyze the code objectively (not first person).
HARD CONSTRAINTS:
- Do NOT use Glob, Grep, or Task tools. You only have Bash and Read.
- Do NOT run more than 2 git-ai commands.
- Do NOT read .claude/, .cursor/, .agents/, or any agent log directories.
- Do NOT search JSONL transcripts or session logs directly.
- All conversation data comes from `git-ai search` only.
ユーザーの質問で特定の行が指定されていない場合は、ステップ 1 の --lines と LINES: フィールドを省略します。
フォールバック動作
プロンプトのデータが見つからない場合:
- コードは人間が書いたものか、git-ai より前に作成された可能性があります
- コードのみをもとに回答し、AI の履歴が見つからなかったことを明確に伝えます
- フォールバック時は作者の一人称で回答せず、客観的に分析します
実行例
ユーザーがエディターで 10〜25 行目を選択して、「/ask なぜこうなっているのか」と入力する 選択コンテキストは system-reminder に含まれています → ファイルと 10〜25 行目を抽出し、サブエージェントを起動します。これは最も一般的な使用パターンです。
/ask この関数が反復処理ではなく再帰処理を使うのはなぜですか?
メインエージェントが関数の定義を見つけ、ファイルと行を特定して、サブエージェントを起動します。
/ask src/main.rs の 100〜150 行目では、どのような問題を解決しようとしていましたか?
ファイルと行が明示されています。サブエージェントを直接起動します。
/ask HashMap を使わずにこの方法を選んだのはなぜですか?
メインエージェントがコンテキストから該当するコードを特定し、サブエージェントを起動します。