mcpField
G
gemini-agent-dev-support

gemini-agent-dev-support

github.com/drgarbage開発060 回インストール10 週間前に更新
リポジトリ

gemini-agent-dev-support について

Gemini API を使うアプリの開発・デバッグ向けスキルです。SDK の選択、認証情報、ツール呼び出し、会話履歴、表示処理、検証報告の実装ルールを示します。

主な機能

  1. 01最新 SDK の使用要件
  2. 02サーバー側での認証情報管理
  3. 03IME に配慮したメッセージ送信
  4. 04モデルと時刻の扱い方
  5. 05ツール・履歴のエラー処理
  6. 06検証・変更報告の形式

活用シーン

  1. 01Gemini API 実装の計画
  2. 02アプリの API キー管理の確認
  3. 03ツール呼び出しと会話ループの構築
  4. 04実装確認と残存リスクの報告

MCP 対応

最新の SDK 仕様を確認するため、Docs MCP の `search_docs` を使うか `llms.txt` を参照するよう指示しています。MCP サーバーについての説明はありません。

インストール

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

$npx skills add https://github.com/drgarbage/ag-course-index --skill gemini-agent-dev-support

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

同梱ファイルREADME.md

詳細

Gemini API 開発スキル

1. 計画フェーズ(定義前)

実装計画を提案する前に、次のアーキテクチャ上の制約を確認し、認識を合わせる必要があります。

  • メモリなし:最新の SDK 仕様を確認するには、Docs MCP の search_docs を検索するか、llms.txt を参照してください。
  • SDK のインポート:@google/genai(JS/TS)または google-genai(Python)のみを厳密に使用してください。レガシー SDK はインポートしないでください。
  • オリジン:Web アプリはローカル開発サーバー(例:localhost)で実行する必要があります。file:// での実行は絶対に避けてください。
  • 認証情報ポリシー:API キーと認証情報は、サーバー側/バックエンドプロキシに保持してください。クライアント側のコードでキーを公開しないでください。
  • 時間のグラウンディング:計画には、動的なシステム指示への時刻の注入を含める必要があります。
  • モック禁止:機能しない要素は無効化するか非表示にしてください。本番コードの実行経路に静的なスタブ応答を含めないでください。

2. コーディングとデバッグのフェーズ(標準パターン)

生成する本番コードにコメントを追加せず、常に次のクリーンコードパターンを使用してください。

A. IME と送信イベント
input.addEventListener('keydown', (e) => {
  if (e.key === 'Enter') {
    if (e.isComposing || e.keyCode === 229) return;
    if (!e.shiftKey) {
      e.preventDefault();
      handleSend();
    }
  }
});
  • 送信後、ただちに input.value をクリアしてください。
  • loading === true の間は、入力要素と送信ボタンを無効にしてください。
  • input.value.trim() === "" の場合は送信を防いでください。
  • 音声入力:マイクの権限要求、UI の状態表示(リスニング中、エラー、再試行)、テキスト入力へのフォールバックを実際に実装してください。マイクのアイコンだけを表示するプレースホルダーを使用しないでください。
B. モデルの選択と時間の認識
new GoogleGenAI({}).models.list();
const systemInstruction = `Current local time: ${new Date().toLocaleString()}`;
// API Key Validation (verify by listing models via SDK)
async function validateApiKey(apiKey) {
  try {
    const ai = new GoogleGenAI({ apiKey });
    await ai.models.list();
    return true;
  } catch {
    return false;
  }
}
C. ツールの組み合わせ(Gemini 2.x と 3.x)
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});

function adaptGenerateContent(options) {
  // call tools seperately
  // call official tools seperately
}

function withOfficial(options) {
  // append official tools
}

async function callGemini(modelName, userInput, tools = [], enableSearch = false) {
  const options = {
    model: modelName,
    contents: userInput,
    config: { tools }
  }
  return checkAllowToolCombine(modelName) ?
    await adaptGenerateContent(options) :
    await ai.model.generateContent(options);
}
  • ツールのグラウンディング:systemInstruction を動的に更新してください。検索が無効な場合は、次の文を追加してください:"Tool google_search is disabled. Do not attempt to call it."
D. ツールのエラー処理
{
  "functionResponse": {
    "name": "unknown_or_failed_tool",
    "response": {
      "error": "Error message for model auto-correction."
    }
  }
}
  • ツールの実行エラーや不明なツール名に対して、直接スローしないでください。上記の構造化されたエラー JSON を返してください。
E. 履歴スキーマ
  • 履歴オブジェクトに複数形の functionCalls フィールドを含めないでください。個々の functionCall を、対応する functionResponse にマッピングしてください。
  • ダイアログループでは、thought、(interactions context 内の)signature、およびサーバー側のツールコンテキストを保持してください。
F. エラー処理と安全なレンダリング
{
  "error": {
    "code": "API_LIMIT_EXCEEDED",
    "message": "Friendly error summary in Traditional Chinese.",
    "details": {
      "status": 429,
      "reason": "rate_limit_exceeded",
      "debug_info": "Debug stack trace without API keys."
    }
  }
}
import { marked } from 'marked';
import DOMPurify from 'dompurify';

const safetyHtml = DOMPurify.sanitize(marked.parse(markdown));

出力形式

検証ログ
  • Docs MCP/スキルのクエリーリンク:[例:search_docs のクエリー]
  • モデル:[例:gemini-2.5-flash]
チェックリスト
ID項目結果根拠
S1SDK/ツールPASS / FAIL / N/A[コード行またはテストのスクリーンショットリンク]
コード変更
  • [file path]:[変更内容]
スモークテストの出力
[test execution logs]
残存リスク
  • [未テストの機能、プロキシ、または「なし」]
再発防止
  • [防止メカニズムを記述:Rule / Hook / Test / Skill / 「不要」とその理由]

コメント