mcpField
A
ask

ask

github.com/git-ai-project開発2.9k44 回インストール1 週間前に更新
リポジトリ

ask について

ask は、AI が書いたコードの質問に答えるスキルです。選択範囲や指定されたコードのプロンプト履歴を調べ、記録があれば元のエージェントの視点から回答します。

主な機能

  1. 01選択範囲、ファイル、シンボルからコードを特定
  2. 02コードの作者情報とプロンプト履歴を取得
  3. 03範囲を絞ったサブエージェントへの調査委任
  4. 04履歴がない場合の客観的なコード分析

活用シーン

  1. 01選択したコードの設計理由を尋ねる
  2. 02関数に対応する元のプロンプトを追跡
  3. 03履歴がない場合にコードの選択を分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/git-ai-project/git-ai --skill ask

インストール後、Claude Code で/askを入力して読み込まれたか確認します。

詳細

Ask スキル

AI が作成したコードについて、コードを生み出した元のプロンプトや会話を見つけ、その後、作者であるエージェントの視点になって質問に回答します。

メインエージェントの役割(あなた)

準備作業を行い、その後、高速で対象を絞ったサブエージェントに引き継ぎます。

  1. ファイルパスと行範囲を特定する — 次の情報源を順番に確認します。

    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 で入力してください。

    ここで終了します。サブエージェントを起動してはいけません。

  2. 次のテンプレートを使って、サブエージェントを 1 つ起動します。max_turns: 4 を指定します。

  3. ユーザーに回答を伝えます。それだけです。

サブエージェントの設定

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 を使わずにこの方法を選んだのはなぜですか? メインエージェントがコンテキストから該当するコードを特定し、サブエージェントを起動します。

コメント