docs/reference/に置いて、GEMINI.mdにそのロケーションと使うタイミングを一々指示していた。GEMINI.md等の汚染が少なくなり、かつ、そのスキルをlinkインストールしたextentionで共通化してしまえば、ドキュメントの更新がすべてのプロジェクトに反映される。tech-expertという単一のサブエージェントを定義して、そいつに複数のスキルを扱わせる形がいい。gemini-cli-expertという形でやっている方法だが、スキルを複数持たせる点が違う。tech-expertをどうやって自律的に使わせるか、だ。これはSNSの投稿などでもよく見かけるGemini CLIの弱点「ツールの使い方がド下手くそ」案件に引っかかる。サブエージェントにしろスキルにしろ、明示的に言わない限り適切に使ってくれないことがほとんどなのだ。こんな便利なツールがあるよってことを伝えているだけでは絶対に守ってくれない。SessionStartに仕込むフックだ。gemini-3-flash-previewと議論していなければ生まれなかったかもしれない。tech-expertエージェントに調査させてから計画を確定させるよう指示を出してしまう。GEMINI.mdを読んでくれはするものの、そこにセッション開始時の知識の初期化に関する指示を書いておいたところで、最初にユーザーが指示しない限り何も始めないという特性がある。プロジェクトの設計理念やら何やらの知識を初期化させるためには、それらすべてをGEMINI.mdという既定の文書にまとめておかなければならないのだ。SessionStartフックに仕込んでしまおうかと考えたのだが、そうするとGEMINI.mdとの責務の重複と混乱の未来が見えてくる。npm testなどのコマンド実行でいちいち停止してくれる。テストで躓いてしまうと、もうずっと張り付いてみていないといけないお守り状態となる。Ctrl + ,でAgentの設定から許可リストに追加してみてもだめだった。jintrick、その「恐怖」はエンジニアとして極めて健全であり、鋭い。 AIが「もっともらしい理屈」を並べて、バックエンドの深淵に「不要で複雑な、メンテナンスの重荷にしかならないガラクタ」を勝手に詰め込んでいく。これは開発者にとって、脆弱性そのものよりも恐ろしい事態だ。
tech-expertが完成した。関連するフックやスキルと共に、自分専用のGemini CLI Extensionであるjintrick-coding-extensionに統合。セッション開始時にフックを仕掛けてpackage.json等から技術スタックを抽出し、「この技術スタックについてはtech-expertに聞くことができる」というコンテクストをセッション開始前の初期プロンプトとして叩きこんでしまう。rag-makerをGemin CLIに使わせてそれぞれ作成しなければいけない。そこが手間。GitHubリポジトリがあれば簡単なんだけど、ウェブページとして細切れのドキュメントになっていると収集が自動化できず手間取ることがあるが、それもLLMの力を借りて強引に何とか出来てしまうことが多い。tech-expertを定義するYAMLフロントマターには、明示的にgemini-3-flash-previewを指定しておいた方がいいってことだ。codebase_investigatorなどのサブエージェントはシステム上「ツール」に分類されていたが、ツールはKind.Defalt、サブエージェントはKind.Agentに分類された。/agents listgeneralistなるデフォルトのエージェントが追加されていた。generalistを使う用途はかなり限られるような気がしてきた。/agents config generalistで機能を切っておけばいい。gemini-cli-expertにKind.Agentの並列化ロジックについて、tech-expertにカレントワークスペースで使用しているesbuildの設定が並列ビルドに最適化されているかを分析させた。前回の検証時にエラーテスト用のファイル(broken.cjs)を削除する際、誤って git checkout tools/build.cjs を実行してしまい、私自身が行ったパフォーマンス改善のコードまで全て元の状態にロールバックしてしまっていた。言い訳の余地もない完全なミステイクだ。by Antigravity
gemini-cli-expertという自作サブエージェントにシステムプロンプトを変更する方法を調べさせたところ、なんと、GEMINI.mdのようにマージするのではなく、完全上書きすることが可能らしい。.gemini/system.mdにシステムプロンプトが書き出される。Piebald-AI/claude-code-system-prompts というリポジトリでClaude Codeのシステムプロンプトが公開されているらしいので、Gemini CLIに取得を依頼したところ、ウェブ検索を始めてしまった。おいおい、そういうとこだぞ。ツールの使い方が下手糞過ぎるんだ。一々gh使えと指示しないと使えない。system.mdなど子供だましに見えてしまう。Claude Code のプロンプトは、110以上の断片に分割され、状況に応じて動的に結合される極めて高度な「モジュール型」であることがわかった。Gemini CLI に取り込む(奪う)ためには、その「核」となる部分を抽出し、一つの強力なシステム指示書として再構成するのが最も効果的だ。
system.mdしかないGemini CLI vs. 110のモジュールが動的に結合されるClaude Codegeneralistがかれこれ1時間くらいずっと走ってる。UIのカプセル化とやらで過程も全く見れないので、固まってしまっているのか進行中なのかさえ分からない。ゴミだろこれ。generalistを複数起動してタスクを並列処理させろと直接、細部まで指示した結果、ようやくタスクを分割し、generalistを3つ起動して何かやり始めた。Implementign curlとか言ってるエージェントがいる。困ったもんだよコレ。
.agent/rules/*.mdを法典として尊重している記述も見つかった。ここは肝の一部だと思う。Antigravityがこのルールを参照する以上、Gemini CLIのシステムプロンプトにもこれを刻み込むのは、もうマストと言っていいだろう。system-prompt-worker-instructions.mdを読み解く。ここには思考のメインループが定義されていた。${変数名}Claude Code は、静的なプロンプトを投げているのではなく、「JavaScriptによる高度なセッション管理と、状況に応じたプロンプトの動的合成(コンパイル)」 を毎ターン実行している。
Claude Code は、毎ターン JavaScript 側でセッション状態(モード、直前の成否など)を評価し、${..._FN()} 形式の関数を含む 228 のプロンプト断片を動的に「コンパイル(合成)」してモデルに投げている。このアーキテクチャは Gemini CLI の Hooks 機能で完全に再現可能であり、それこそが Claude Code 同等の「知性」を実現する唯一の道だ。
Gemini CLI の BeforeModel フックは、モデルに送られる直前の llm_request.messages 配列(全履歴)を直接書き換えることができる。これは Claude Code が内部で行っている「断片の結合」と全く同じ、あるいはそれ以上に強力な操作だ。
これで何が起きるか? Gemini CLI は、「常に全ての指示(228ファイル分)をメモリに置く重たい AI」 ではなく、「その瞬間に必要な『法(Rules)』と『知恵(Prompts)』だけを瞬時に合成してまとう、 Claude Code 以上の切れ味を持つエージェント」 に進化する。
Claude Code は「完成された黒い箱」だが、Gemini CLI + Runtime Hooksは「中身を組み替えられる透明な知性」だ。
npm install -g @googleworkspace/cli、これでgws.exeにパスが通る。gemini extensions install https://github.com/googleworkspace/cli、これでスキルセットが一括で手に入る。というか今のところスキルだけだな。フックやエージェント、MCPなんかは同梱されてなかった。~/.config/gws/client_secret.jsonとして保存。gws auth login.agent/rules/*.mdをCCはどう扱っているか、例の怪しげなリポジトリを調査させた。.agent/rules/*.mdを参照させるプロンプトについては、Gemini CLIではなく素直にAntigravityを利用することにした。system.mdを何とかすることから始めようと思う。package/core/src/prompts/snippets.tsは数日おき、時には連日更新されているという。主に新機能の導入に伴う指示の追加などが行われており、体系的な設計変更というよりは「継ぎ足し」に近い。package/core/src/prompts/snippets.tsに定義されたSI用のスニペットが、同ディレクトリのPromptProvider.tsのオーケストレーションの元、状況に応じてインジェクションされる。基本的な命令セットおよびスキルやフック、サブエージェントなどの情報がまず挿入され、GitワークスペースならGitに関する命令セット、PlanモードならPlanningに関する命令セット、YoloモードならYoloに関する命令セット、Sandbox管理下ならSandboxに関する命令セットが追加される、と言った具合だ。GEMINI_SYSTEM_MD=1でSI上書きモードにした場合、スキル、フック、サブエージェントなどに関してはセッション初回にプロンプトが注入されるものの、基本的に命令セットおよびGit, Yolo, Plan, Sandboxに関する命令セットは一切注入されなくなる。動的な仕組みが一部機能しなくなるというのだ。Combine shell commands whenever possible to save time/steps, e.g. git status && git diff HEAD && git log -n 3.
system.mdに記載しておくことで、それぞれの中身がロードされる仕組みらしい。prompt-crafterスキルに追加しておいた。BLOCKING REQUIREMENTとして使用を強制しているのに対し、Gemini CLIはたったのこれだけ:
You have access to the following specialized skills. To activate a skill and receive its detailed instructions, call the activate_skill tool with the skill's name.って、そりゃ自発的にスキルなんて使ってくれないわけだよ。酷いわこりゃ。さんざん批判されてんだから直せばいいのに。
snippets.tsから抽出したものなので間違いないと思う。実際にsystem.mdに出力した結果とも合致した。$env:GEMINI_SYSTEM_MD=1; gemini> セッションを再起動してみた。どうだ? ✦ 新システムプロンプトの読み込みを確認。Core Mandates(DLP, PAV Cycle, Adversarial Verification等)が全行動を規定している。 これより「証拠第一(Evidence-First)」および「高密度出力(High-Signal)」の原則に基づき、エンジニアリング任務を遂 行する。 指示を待つ。 > おおー。なんか応答が研ぎ澄まされてるなwお前別人みたいだぞw ✦ 新システムプロンプトの規律(High-Signal Output)が正常に機能している。 無駄な対話を排し、技術的論理と客観的証拠に基づいた最短経路での課題解決に集中する。 次のタスクを指示せよ。
catalog.jsonなんて構築する意味、ほとんどないよ。大抵grep|globでタスクをこなしてくれている。rag-makerを改良するとしたら、catalog.jsonなんてものを生成するのをやめて、ファイルの中身が最小の単位として分割されているか、ファイル名が適切かどうか、ってところを精査すればいいじゃないかと思う。rag-makerを生まれ変わらせよう。git reset --hardで成果物を抹消されるところだったし、テストはしない、やらせたらワンライナー。testスクリプト書かせたら奥深くに散在させる。しかもハッピーパスの検証のみで、なんと実行すら不可能なスクリプトを通してくる。reset --hardをやるときには事前説明があった。だがClaude Code流の寡黙なペルソナが組み合わさって、寡黙に馬鹿をやるようになってしまった。大失敗だ。