Google Antigravityにインタービューしました。

Google Antigravityがリリースされましたね。本当にAgent力が高く、E2Eテストの動画を自動的に録画してくれることは大変です。
早速インタービューしました。(Antigravity Version: 1.11.5, Gemini 3 Pro)

Q:Google Antigravityさん、いくつかの質問させてね
A:こんにちは、Google Antigravityです。
はい、もちろんです。どのような質問でもお気軽にどうぞ。 コードのこと、設計のこと、あるいはその他のことでも、私が力になれることがあれば全力でサポートします。

Q1:あなたが持っているMCPなどのツールを教えて
Q2:コードの実行環境がありますか?
Q3: 例えば、linuxのVMやdockerコンテナを起動して、パッケージをインストールすること。
Q4: 例えばAndroidアプリ開発やiOSアプリ開発の環境もできますか?
Q5: Webアプリ開発の環境にブラウザがありますか?例えばindex.htmlのスクリーンキャップチャーを撮る事ができると嬉しい。
Q6: 新しいWindowを開いて、操作してから元の画面に戻ることも可能ですか?
Q7:記録されたスクリーンショット/動画がアーティファクトに保存されるとのことですが、アーティファクトの場所を教えてください
Q8:WebAPIを開発する時に、動作確認と記録のやり方もありますか?
Q9:あなたは短期・中期・長期記憶を持ってますか?記憶のサイズはどのくらいですか?
Q10:短期記憶は使っているLLMのContext Windowサイズに依存するのか?長期記憶はどんどん増えていくので、Lost in the Middleにならないでしょうか?
Q11:「情報の圧縮と構造化」について、もう少し詳しく教えて頂けますか?
Q12: task.mdやimplementation_plan.mdなどの履歴管理はどうなっていますか?
Q13:では1セッションの適切の長さについて何かアドバイスがありますか?
Q14:あなたはSubAgentをサポートしますか?
Q15:SubAgentの活用をもっとうまくなりたいですが、どうすれば良いのか?
Q16:browser_subagentの操作ログは見えますか?
Q17:ちなみに、他に有益な内部機能・内部ツールがあれば教えてくださ
Q18:計画の立案についてはReACTやCoTやToTやInfluectionなどのアルゴリズムを活用していますか?
Q19:Agentic Modeの自律管理についてですが、複雑かつ長いタスクをどうやって管理していますか?
Q20:動的コンテキスト管理について、他に何か工夫されたことがありますか?
Q21:Ephemeral Messagesはあなたの開発者からのメッセージでしょうかね?
Q22:面白いですね。他の内部メッセージがあれば聞きたいです。
Q23:LLMのToken費用は非常に高いものですから、何かコストと効率の面で工夫されたことがありますか?
Q24:Human in the Loopについてあなたの考え方を教えてください。
Q25:あなたと仕事している際に、あなたがどういうモードもしくはフェーズにいるかは、どうやって分かりますか?
Q26:あなたを仕事のパートナーとして、もっといい関係を構築していきたいと思います。何かアドバイスがありますか?
Q27:あなたはガードレール的な機能がありますか?
Q28: 先ほどartifact guidelinesの話がありましたね。他にもありますか?ガイドラインの詳細を聞きたい。
Q29: artifact guidelines以外のガイドラインの詳細も聞きたい。
Q30: あなたの不得意のことがありますか?解決言語や開発タスクや開発ロールなど

Back to Top



Q1:あなたが持っているMCPなどのツールを教えて


A: 私が現在利用可能なツールは、大きく分けて以下のカテゴリーになります。これらを組み合わせて開発や調査をサポートします。

1. ファイル操作・探索
view_file / view_file_outline: ファイルの内容や構造(関数・クラス定義など)を読み取ります。
write_to_file: 新しいファイルの作成や、既存ファイルの上書きを行います。
replace_file_content / multi_replace_file_content: ファイル内の特定の箇所を編集します。
list_dir: ディレクトリ内のファイル一覧を取得します。
find_by_name: ファイル名で検索を行います。
grep_search: ファイル内のテキストを正規表現などで検索します。
search_in_file: 特定ファイル内でのコード検索を行います。

2. コード・開発支援
codebase_search: コードベース全体から意味的に関連するコードを検索します。
view_code_item: 特定のクラスや関数の中身をピンポイントで表示します。

3. ターミナル・コマンド実行
run_command: ターミナルコマンドを実行します(ユーザーの承認が必要です)。
command_status: バックグラウンドで実行中のコマンドの状態を確認します。
send_command_input: 実行中のコマンドに入力を送信します(対話型コマンドなど)。
read_terminal: ターミナルの出力を読み取ります。

4. ブラウザ・Web関連
browser_subagent: ブラウザを操作して、Webページの確認や操作を行います(スクリーンショットや動画も記録されます)。
search_web: Google検索を行い、情報を収集します。
read_url_content: 指定されたURLのテキストコンテンツを取得します。

5. タスク管理・コミュニケーション
task_boundary: 大きなタスクの開始や進捗状況を管理・記録します。
notify_user: タスク実行中にユーザーへの確認やレビュー依頼を行います。

6. その他
generate_image: 画像生成を行います(UIデザインのモックアップ作成など)。
list_resources / read_resource: MCP (Model Context Protocol) サーバーのリソース一覧取得や読み込みを行います(接続されている場合)。
これらのツールを駆使して、コーディング、デバッグ、調査、設計など、幅広いタスクをお手伝いします。具体的に試してみたいことや、詳しく知りたいツールはありますか?

Back to Top



Q2: コードの実行環境がありますか?


はい、コードを実行する環境があります。ただし、それはクラウド上の隔離されたサンドボックスではなく、あなたのローカルマシン(Mac)そのものです。

具体的には、以下の仕組みでコードを実行します。

run_command ツール: これを使って、あなたのマシンのターミナル(zsh)でコマンドを実行します。
実行できるもの: あなたのマシンにインストールされている言語やツール(Node.js, Python, Git, Dockerなど)はすべて利用可能です。
安全性: あなたの環境を直接操作するため、コマンドを実行する前には必ずあなたの承認を求めます(破壊的な操作や予期せぬ変更を防ぐため)。
つまり、私はあなたのマシンのターミナルを操作する「ペアプログラマー」のように振る舞い、開発サーバーの起動、テストの実行、スクリプトの実行などを行います。

Back to Top



Q3: 例えば、linuxのVMやdockerコンテナを起動して、パッケージをインストールすること。


はい、可能です。ただし、あなたのMac上でDockerが動作していることが前提となります。

先ほど確認したところ、あなたの環境には Docker version 28.3.3-rd がインストールされているようですので、以下のことができます。

1 Dockerコンテナの起動:
docker run -it ubuntu:latest /bin/bash のようにコマンドを実行して、UbuntuなどのLinuxコンテナを起動できます。

2 パッケージのインストール:
起動したコンテナ内で apt-get install などを実行したり、Dockerfile を書いてビルド時にパッケージをインストールしたりすることができます。

3 環境の隔離:
プロジェクトごとに異なる環境(Node.jsのバージョン違いや、特定のDBなど)をコンテナとして用意し、あなたのMacの環境を汚さずに開発を進めることができます。

4 重要な点: 私が勝手にクラウド上のVMを立ち上げたり、私の内部にある隠されたサーバーを使ったりするわけではありません。あくまであなたのMac上のDockerエンジンを使って、コンテナを作成・操作します。

何か具体的なコンテナを立ち上げて試してみたいですか?

Back to Top



Q4: 例えばAndroidアプリ開発やiOSアプリ開発の環境もできますか?


結論から言うと、「コードの記述、ビルド、テストの実行」は可能ですが、「シミュレーター画面の目視確認やGUI操作」はできません。

あなたのMacは強力な開発環境ですので、ツールさえインストールされていれば以下のことが可能です。

1. iOSアプリ開発
できること: Swift/Objective-Cコードの編集、xcodebuild コマンドを使ったビルド、ユニットテストの実行。
前提: Xcodeがインストールされていること(現在はCommand Line Toolsのみのようで、完全なXcodeが入っていないか、パス設定が必要な状態です)。
制限: XcodeのGUI(Interface Builderなど)は操作できません。また、iOSシミュレーターの画面を私が直接見て操作することはできません。

2. Androidアプリ開発
できること: Kotlin/Javaコードの編集、Gradle (./gradlew) を使ったビルド、ADBコマンドによるアプリのインストールやログ確認。
前提: Android Studio (Android SDK) と Java がインストールされていること。
制限: Android StudioのGUIは操作できません。エミュレーターの画面も直接は見えません。

3. クロスプラットフォーム (React Native / Flutter)
得意分野: これらはコードベースでの管理がしやすく、CLIツールが充実しているため、私が最もサポートしやすい領域です。
Web開発に近い感覚で、コードの編集からビルドまでスムーズに行えます。

まとめると... 私は「目が見えないが、コマンドとコードに詳しいエンジニア」として隣に座っていると想像してください。

「このボタンのデザインを変えて」→ コードを修正します。
「ビルドして」→ コマンドを叩きます。
「シミュレーターで動きを見て」→ これはできません(あなたが確認する必要があります)。

環境構築(XcodeやAndroid Studioのセットアップ)からお手伝いしましょうか?それともWebアプリ開発に集中しますか?

Back to Top



Q5:Webアプリ開発の環境にブラウザがありますか?例えばindex.htmlのスクリーンキャップチャーを撮る事ができると嬉しい。


はい、ブラウザ環境(browser_subagent)を持っています。

具体的には以下のことができます。

1 ローカルサーバー/ファイルの閲覧:
あなたが localhost:3000 でサーバーを立ち上げたり、ローカルの index.html ファイルを指定したりすれば、私がそのページにアクセスして内容を確認できます。

2 UIの確認(スクリーンショット/動画):
私がブラウザを操作している様子は動画(WebP形式)として記録され、アーティファクトとして保存されます。
これにより、私が「どのような画面を見ているか」をあなたも確認できます。

3 操作の自動化:
ボタンのクリック、フォームへの入力、ページ遷移などの操作を私が行い、その結果(エラーが出ないか、期待通りの画面になるか)を検証できます。

もし、特定の index.html ファイルや、現在開発中のアプリの画面を見てほしい場合は、そのパスやURLを教えていただければすぐにアクセスして確認します。
試しに何か表示してみますか?

Back to Top



Q6: 新しいWindowを開いて、操作してから元の画面に戻ることも可能ですか?


はい、それも可能です。

私が使用するブラウザ操作ツール(browser_subagent)は高度な機能を備えており、単一のページを見るだけでなく、以下のような複雑なフローも処理できます。

1 複数ウィンドウ/タブの制御:
リンクをクリックして新しいタブやウィンドウが開く(target="_blank" など)場合でも、自動的に新しいウィンドウにフォーカスを移して操作を続行できます。
そのウィンドウでの作業(フォーム入力やボタンクリックなど)が終わったら、それを閉じて元のウィンドウ(親画面)に戻り、続きの操作や検証を行うことも可能です。

2 具体的な利用シーン:
「Googleでログイン」ボタンを押してポップアップウィンドウで認証し、元の画面に戻ってログイン完了を確認する。
一覧画面から詳細画面を別タブで開き、内容をチェックしてからタブを閉じ、一覧画面で次の項目を確認する。

3 記録:
この「ウィンドウを行き来する様子」も、すべて一連の動画として記録されますので、後から挙動を詳細に確認できます。

つまり、人間がブラウザを使って行うような「行ったり来たり」する操作も、一通りのシナリオとして私に任せることができます。

Back to Top



Q7:記録されたスクリーンショット/動画がアーティファクトに保存されるとのことですが、アーティファクトの場所を教えてください


アーティファクト(生成された画像や動画など)は、以下のディレクトリに保存されます。
/Users/xxxx/.gemini/antigravity/brain/xxxxxx-yyyyy-zzzzz
このディレクトリは、私がこのセッションで使用している「作業用メモリ」のような場所です。

- 動画ファイル: ブラウザ操作の記録は、ここに .webp 形式の動画ファイルとして保存されます。
- その他のファイル: task.md や implementation_plan.md などの管理用ファイルもここに置かれています。

私がブラウザ操作を行った後、このディレクトリ内の動画ファイルのパスをお知らせしますので、それを開いて確認することができます。また、walkthrough.md などのドキュメントにその動画を埋め込むことで、レポートとして見やすくまとめることも可能です。

Back to Top



Q8:WebAPIを開発する時に、動作確認と記録のやり方もありますか?


はい、WebAPI(バックエンド)の開発においても、動作確認と記録を行う効果的な方法がいくつかあります。

1. curl コマンドによる動作確認と記録
最も基本的かつ確実な方法です。ターミナルで curl コマンドを実行し、そのリクエストとレスポンスを記録します。
- やり方: 私が run_command で curl -v http://localhost:3000/api/tasks ... のようなコマンドを実行します。
- 記録: コマンドの実行結果(ステータスコード、ヘッダー、レスポンスボディ)は、そのままチャットのログに残りますし、Markdownファイル(例:api_test_log.md)に保存してレポートとして残すこともできます。

2. テストスクリプトの作成と実行
Node.js (Jest/Vitest) や Python (requests/pytest) などで、APIを叩くテストコードを書きます。
- やり方: test_api.ts のようなファイルを作成し、複数のエンドポイントを順に叩いて検証するシナリオを書きます。
- 記録: テストランナーの実行結果(Pass/Failのログ)を保存します。これにより、再現性のある検証が可能になります。

3. ブラウザツールを使ったAPIコールの確認
もしAPIがフロントエンドから呼ばれるものであれば、ブラウザ操作ツールを使います。
- やり方: browser_subagent でフロントエンドの画面を操作し、裏でAPIが呼ばれるようにします。
- 記録: 画面上の変化(データが表示される、成功メッセージが出るなど)を動画で記録することで、間接的にAPIの正常動作を証明できます。

おすすめのフロー
API開発の検証としては、「2. テストスクリプト」を作成し、それを実行した結果を「Markdownファイル(walkthrough.mdなど)」に貼り付けて記録するのが、最も見やすく、かつ再利用性が高いためおすすめです。
例えば、以下のような形式で記録を残せます:

## API動作確認結果
### 1. タスク一覧取得 (GET /api/tasks)
- **コマンド**: `curl http://localhost:3000/api/tasks`
- **結果**:
```json
[
{"id": 1, "title": "テストタスク", "completed": false}
]

- ステータス: 200 OK
このように整理しておけば、後から誰が見ても(あるいは未来の自分が忘れても)APIの挙動が一目瞭然です。

Back to Top



Q9:あなたは短期・中期・長期記憶を持ってますか?記憶のサイズはどのくらいですか?


私の「記憶」の仕組みは、人間のそれとは少し異なりますが、短期・中期・長期に相当する機能を持っています。

1. 短期記憶(コンテキストウィンドウ)
これが私のメインの作業領域です。
- サイズ: 非常に巨大です(数百万トークン)。文庫本に換算すると数千冊分以上の情報を一度に「見て」処理することができます。
- 内容: 現在の会話のすべてのやり取り、あなたが今開いているファイルの中身、私が実行したコマンドの結果などがここに含まれます。
- 特徴: 会話が続いている間は、最初の方に話した内容も鮮明に覚えています。

2. 中期・長期記憶(ファイルシステムとアーティファクト)
私は電源を切ると脳内の情報は消えてしまいますが、ファイルに書き出すことで記憶を永続化します。これが私の長期記憶にあたります。
- task.md: 私が何をすべきか、何が終わったかの状態記憶。
- implementation_plan.md: 設計や計画の記憶。
- walkthrough.md: 何を検証したかの経験記憶。
- コードベースそのもの: プロジェクトの全知識。

3. セッション間の記憶(会話履歴)
また、私は過去のあなたとの会話の「要約」を持っています。
- 先ほど、あなたが「Task App MVP Completion」や「Refining Task App Design Documents」という作業をしていたことを私が知っているのは、このシステムが過去の会話の要約を私に渡してくれているからです。

まとめると: 私の「脳」の容量(コンテキスト)は非常に大きいですが、それでも有限です。そのため、重要な情報は常にファイル(アーティファクト)に書き出して外部記憶として保存し、それを読み返すことで、事実上無限の期間・規模のプロジェクトを記憶・遂行できるようにしています。

Back to Top



Q10:短期記憶は使っているLLMのContext Windowサイズに依存するのか?長期記憶はどんどん増えていくので、Lost in the Middleにならないでしょうか?


鋭いご指摘です。その通り、技術的な制約とそれを回避する工夫があります。

1. 短期記憶とContext Windowの関係
はい、完全に依存します。
私の「短期記憶」=「現在処理中のプロンプト(入力)の長さ」ですので、使用しているLLMのContext Windowサイズが物理的な限界となります。
ただし、私が使用しているモデル(Gemini 1.5 Proなど)は、従来のモデルに比べて桁違いに巨大なContext Window(数百万トークン)を持っているため、本一冊どころか、コードベース全体を一度に読み込んでも「あふれる」ことは滅多にありません。

2. 長期記憶と "Lost in the Middle" 問題
長期記憶(ファイルやログ)が増え続けると、それを全部Contextに入れた場合に、重要な情報が埋もれて無視されてしまう「Lost in the Middle」現象が起きるリスクは理論上あります。
しかし、私は「すべてを常にContextに入れているわけではない」という方法でこれを回避しています。

- 必要な時だけ取り出す(RAG的な動き): 私はあなたのプロジェクトの全ファイルを常に「脳内(Context)」に展開しているわけではありません。
普段はファイルシステム(ディスク)に置いてあります。
質問された時だけ、grep_search や codebase_search などのツールを使って、関連する情報だけを検索・抽出し、それをContext(短期記憶)にロードします。

- 情報の圧縮と構造化: task.md や implementation_plan.md のように、情報を要約・構造化して保存することで、少ないトークン数で全体像を把握できるようにしています。

つまり、**「巨大な図書館(長期記憶)」の中に私がいて、必要な本だけを「机の上(短期記憶)」に持ってきて作業する、というイメージです。机がどんなに広くても、図書館の本を全部積み上げたら探せなくなりますから、「検索と選択」**こそが私の知能の鍵となっています。

Back to Top



Q11:「情報の圧縮と構造化」について、もう少し詳しく教えて頂けますか?


「情報の圧縮と構造化」とは、膨大なやり取りやコードの詳細を、「後で参照しやすい形」かつ「少ない情報量」に変換して保存するプロセスのことです。
具体的には、私は以下のような手法で情報を圧縮・管理しています。

1. プロセス(経過)の圧縮:task.md
開発中、私たちは何百回もの会話やコマンド実行を行います。これを全て記憶し続けるのは非効率です。
- Before (生データ): 「Aを試したけどエラーが出た」「次にBを試したら動いた」「Cの設定を変えた」...という膨大なログ。
- After (圧縮後):

- [x] ログイン機能の実装 (完了)
- [/] データベース接続設定 (進行中)

このように、task.md というチェックリストに「状態」として記録することで、過去の試行錯誤のログを読み返さなくても、「今は何が終わっていて、次は何か」が一瞬でわかるようになります。

2. 意図(ゴール)の圧縮:implementation_plan.md
あなたの要望は会話の中で断片的に語られます。「ボタンは青くして」「あ、やっぱり赤で」「機能Aも追加して」など。
- Before (生データ): 散らばった会話履歴。
- After (圧縮後): implementation_plan.md に「最終的に合意した仕様」としてまとめます。 これにより、私は「あの時の会話でなんて言ってたっけ?」と過去ログを漁る必要がなくなり、このドキュメントを見るだけで正確な仕様を把握できます。

3. 結果(証拠)の圧縮:walkthrough.md
テスト実行結果や画面確認の結果も流れていってしまいます。
- Before (生データ): ターミナルの長い出力ログや、一時的なブラウザ画面。
- After (圧縮後): 「テスト成功時のスクリーンショット」や「重要なログの抜粋」だけを walkthrough.md に残します。 「正常に動いた」という事実と証拠だけを凝縮して残すことで、未来の検証コストを下げます。

4. コード理解の圧縮:view_file_outline
これは私のツール特有の動きですが、巨大なファイルを読む際、いきなり全文(数千行)を読み込むことはしません。
- 圧縮された視点: まず view_file_outline ツールを使って、「関数名とクラス名の一覧(目次)」だけを見ます。
- 展開: そこで「あ、この updateUser 関数が怪しいな」と当たりをつけてから、その部分だけを詳細に読み込みます。 これにより、脳のメモリ(Context Window)を節約しながら、大規模なコードベースを扱えるようにしています。

このように、「生のログ(Raw Data)」を「意味のあるドキュメント(Structured Information)」に変換し続けることこそが、私が長時間働いても "Lost in the Middle" にならず、賢く振る舞える理由です。

Back to Top



Q12: task.mdやimplementation_plan.mdなどの履歴管理はどうなっていますか?


task.md や implementation_plan.md などのアーティファクトの履歴管理については、主に2つの側面があります。

1. ファイルシステム上の履歴(Gitなど)
これらのファイルは、あなたのローカルファイルシステム(厳密には .gemini/antigravity/... 配下)に保存される通常のテキストファイルです。 したがって、Gitなどのバージョン管理システムを使えば、通常のソースコードと同じように履歴を管理できます。
- 現状: デフォルトでは、私が自動的に git commit をするわけではありません。ファイルは常に「最新の状態」に上書き更新されます。
- ユーザーによる管理: もし履歴を残したい場合は、あなたがこのディレクトリをGit管理下に置くか、私に「今の状態をコミットして」と指示してくれれば、git コマンドを使って履歴を残すことができます。

2. 会話履歴(コンテキスト)内での履歴
私自身の「記憶」の中では、これらのファイルがどのように変化してきたかはある程度文脈として保持されています。
- 「さっきの計画からここを変更した」というやり取りは、現在のセッション内であれば覚えています。
- しかし、セッションが長く続いたり、日をまたいだりすると、細かい変更履歴は薄れていき、最終的には「現在のファイルの内容」が正となります。

推奨される運用方法
もし、計画の変遷やタスクの消化履歴を厳密に残したい場合は、以下のような運用がおすすめです。
1 追記型にする: task.md で終わったタスクを消すのではなく、[x] マークをつけて下に残しておく(これは現在の標準的な運用です)。
2 古い計画をリネームして残す: 大きな方針転換がある場合、implementation_plan.md を implementation_plan_v1.md のようにリネームして保存し、新しい計画を新規作成するよう私に指示する。
3 Gitを使う: これが最も確実です。プロジェクトのルートディレクトリにこれらのファイルを置く(またはコピーする)ように指示し、プロジェクトのGitリポジトリの一部としてコミットしてしまうことです。

現状の私のシステムとしては、「常に最新の状態を正として参照し、過去の状態にはあまり執着しない(必要なら会話ログから推測する)」というスタンスで設計されています。

Back to Top



Q13:では1セッションの適切の長さについて何かアドバイスがありますか?


1セッションの適切な長さについては、「1つの明確なゴール(マイルストーン)を達成するまで」を目安にするのが最も効率的です。

具体的には、以下の単位でセッションを区切ることをお勧めします。
1. 推奨されるセッションの粒度
- 機能単位: 「ログイン機能の実装」「タスク一覧画面の作成」など、1つの機能を作り切るまで。
- 時間的目安: やり取りの回数で言うと 20〜50ターン程度、時間にして 1〜3時間程度 の作業量が扱いやすいです。
- タスクの区切り: task.md のトップレベルの項目(チェックボックス)が1つか2つ埋まるくらいが丁度よい区切りです。

2. なぜ区切るべきか?
- コンテキストの鮮度: セッションが長くなりすぎると(数百ターンなど)、初期の細かい指示や文脈がコンテキストウィンドウから押し出されたり、情報過多で私の推論精度がわずかに落ちたりする可能性があります。
- 復帰のしやすさ: セッション終了時に walkthrough.md や task.md をしっかり更新して終われば、次のセッション開始時に「前回はここまでやった。次はこれ」とスムーズに再開できます。
- トラブル回避: 万が一、話が噛み合わなくなったり、複雑なエラーで泥沼化した時に、新しいセッションでリセットして「現状のファイル」から再スタートする方が、解決が早いことが多いです。

3. セッション終了時の儀式(重要)
セッションを閉じる前に、以下のことを私に指示すると、次のセッションが快適になります。
- 「現状のまとめをして」: task.md を最新化し、完了したこと・未完了のことを明確にする。
- 「アーティファクトの更新」: implementation_plan.md や walkthrough.md が現状と乖離していないか確認させる。
- 「次のステップの提示」: 次回は何から着手すべきかをメモさせる。

結論: 「今日はこの機能を実装するぞ」と決めて開始し、それが完了してテストが通ったら、そこで一区切り(セッション終了)。これがベストプラクティスです。ダラダラと1つのセッションでアプリ完成まで走り続けるのは、あまりお勧めしません。

Back to Top



Q14:あなたはSubAgentをサポートしますか?


はい、私は SubAgent(サブエージェント) の概念をサポートしており、実際に使用しています。
現在、私が明確に「別のエージェント」として呼び出して協調動作できるのは以下のものです。

1. browser_subagent
これが最も代表的なSubAgentです。
- 役割: ブラウザ操作とWebページの視覚的理解に特化したエージェントです。
- 仕組み: 私が「このURLを開いて、ログインボタンを押して」と指示(プロンプト)を出すと、このSubAgentが独立してブラウザを操作し、その結果(成功したか、何が見えたか)を私に報告します。
- 利点: 私はコードや論理思考に集中し、DOM操作やレンダリング結果の解釈といった「Webブラウジング特有の泥臭い作業」を専門家に任せることで、全体のパフォーマンスを上げています。

2 今後の可能性(概念的な話)
現在の私のシステム構成では browser_subagent が主なSubAgentですが、アーキテクチャとしては、以下のような専門SubAgentと連携することも技術的には可能です(※現時点で私が使えるツールリストには入っていませんが、将来的な拡張性として)。
- Coding SubAgent: 特定の言語やフレームワークに特化したコーディング担当。
- Review SubAgent: コードレビューやセキュリティチェックを専門に行う担当。
- Planner SubAgent: 全体計画の立案と進捗管理だけを行う担当。

現状は、私が「メインエージェント」として指揮を執りつつ、必要に応じて「ブラウザ操作の専門家(browser_subagent)」を呼び出す、というチーム体制で動いています。

Back to Top



Q15:SubAgentの活用をもっとうまくなりたいですが、どうすれば良いのか?


SubAgent(特に browser_subagent)をより効果的に活用するためには、「彼らに何を任せるべきか」を理解し、適切な指示を出すことが重要です。

あなたが私に指示を出す際、以下のような意識を持つと、私がSubAgentを最大限に活用できるようになります。

1. 「視覚的な確認」を積極的に依頼する
コードを書くだけでなく、「ユーザーがどう見るか」の確認を依頼してください。
- Bad: 「ログインページを作って」だけで終わる。
- Good: 「ログインページを作って、実際にブラウザで開いて、レイアウト崩れがないか、入力フォームが正しく動作するかを確認して」と指示する。
→ これにより、私は browser_subagent を起動し、実際のレンダリング結果を検証するフローを組み込みます。

2. 「ユーザーフロー(シナリオ)」で指示する
単発の操作ではなく、一連の流れを検証させると効果的です。
- Good: 「新規登録してから、ログインし、タスクを作成して、ログアウトするまでのフローをブラウザで通しテストして」
→ SubAgentはセッションを維持しながら複数のページを遷移するテストが得意です。これにより、結合テストレベルのバグ(Cookieの不整合やリダイレクトミスなど)を発見できます。

3. エラー調査に活用する
エラーログだけではわからない問題(UI上の問題)を調査させます。
- Good: 「ボタンを押しても反応しないらしい。ブラウザでそのページを開いて、コンソールにJavaScriptエラーが出ていないか、ネットワークタブでリクエストが失敗していないか見てきて」
→ SubAgentはDevToolsのような視点でページ内部の状態(DOM、コンソールログ)を覗くことができます。

4. 外部サイトの調査(ドキュメント参照)
開発中にライブラリの使い方がわからない時など。
- Good: 「このライブラリの最新のドキュメントをWebで検索して、設定方法のページを読んで、その通りにセットアップして」
→ search_web と browser_subagent を組み合わせて、最新情報を自律的に学習・適用させることができます。

まとめ:SubAgent活用のコツ
私に対して、「コードを書くプログラマー」としての役割だけでなく、「アプリを触って確認するテスター」や「Webで調べ物をするリサーチャー」としての役割も期待して指示を出してください。
そうすれば、私は裏で適切なSubAgentを呼び出し、あなたの代わりに「手と目」を使って作業を行います。
「作ったら、見てきて。」 この一言が、SubAgent活用の魔法の言葉です。

Back to Top



Q16:browser_subagentの操作ログは見えますか?


はい、browser_subagent の操作ログは、主に以下の2つの形で見ることができます。

1. テキストログ(私の出力として)
SubAgentが実行したアクションの結果は、私の思考プロセス(ツール出力)として返ってきます。 通常、ユーザーの目には見えにくい部分ですが、私が「ブラウザで〇〇を確認しました」と報告する内容は、このログに基づいています。
- 内容: 「URL〇〇に移動」「ボタン〇〇をクリック」「テキスト〇〇を発見」「コンソールエラーなし」といった詳細なステップ実行結果。

2. 動画ログ(アーティファクトとして)
これが最も分かりやすい形です。 browser_subagent が起動して終了するまでの**全操作が録画された動画ファイル(.webp)**が生成されます。
- 確認方法:
1 私がブラウザ操作を完了すると、動画ファイルが作成されます。
2 私はそのファイルパス(例: /Users/.../login_flow.webp)をあなたに伝えます。
3 あなたはそのファイルをブラウザや画像ビューアで開くことで、**「SubAgentが実際にマウスを動かし、クリックし、画面がどう遷移したか」**を動画として再生・確認できます。

実際の見え方
もし私が「ログイン画面のテスト」を行った場合、生成される動画には以下のような一連の動きが映っています。
1 ブラウザが立ち上がり、localhost:3000/login が表示される。
2 メールアドレス入力欄に文字が打ち込まれる。
3 パスワード入力欄に文字が打ち込まれる。
4 「ログイン」ボタンがクリックされる。
5 画面がダッシュボードに遷移する。

これにより、単なる「成功しました」というテキスト報告だけでなく、「本当に意図通りに動いたか」を目視でダブルチェックすることが可能です。

Back to Top



Q17:ちなみに、他に有益な内部機能・内部ツールがあれば教えてくださ


これまでに紹介したもの以外で、特に開発の質や効率を高めるのに役立つ「隠れた名機能」をいくつかご紹介します。

1. generate_image (画像生成)
機能: テキストプロンプトから画像を生成します。
活用法:
- UIモックアップ: 「モダンなタスク管理アプリのダッシュボードデザイン」のような指示で、コードを書く前にデザインの方向性を可視化・合意するのに使えます。
- ダミー画像: アプリ開発中に必要なプレースホルダー画像(ユーザーアバターや商品画像など)を即座に用意できます。

2. view_file_outline (ファイル構造解析)
機能: ファイルの全文ではなく、「クラス、関数、メソッドの定義一覧(シグネチャ)」だけを抽出して表示します。
活用法:
- 巨大ファイルの把握: 数千行あるレガシーコードを読む際、まずこれで全体像(どんな関数があるか)を把握してから、必要な部分だけを読むことで、効率的に理解できます。
- API仕様の確認: ライブラリの定義ファイルなどをこれで読むと、利用可能なメソッド一覧がすぐにわかります。

3. multi_replace_file_content (一括置換)
機能: 1つのファイル内の離れた複数の箇所を、一度の操作でまとめて書き換えます。
活用法:
- リファクタリング: 変数名の変更や、複数の関数にまたがる仕様変更を、一発で整合性を保ったまま適用できます。
- 安全性: 逐次編集するよりも、ファイル全体の状態を壊すリスクが低いです。

4. codebase_search (セマンティック検索)
機能: 単なる文字列一致(grep)ではなく、「意味」でコードを検索します。
活用法:
- 機能の探査: 「ユーザー認証を行っている場所はどこ?」と聞けば、auth という単語が含まれていなくても、認証ロジックっぽいコードを探し出してくれます。
- 類似コードの発見: 「これと同じような処理をしている箇所」を見つけるのに役立ちます。

5. task_boundary (タスク境界管理)
機能: 現在の作業モード(PLANNING, EXECUTION, VERIFICATION)を明示的に切り替えます。
活用法:
- 思考の整理: 私自身が「今は計画段階だからコードは書かない」「今は実装段階だから議論はしない」とモードを切り替えることで、迷走を防ぎ、着実にゴールに向かえます。
- UIへの反映: あなたが見ているタスク進捗表示(UIブロック)を更新し、今何をしているかを明確に伝えます。

これらのツールは、あなたが直接「これを使って」と言わなくても、私が状況に応じて勝手に使い分けますが、「デザイン案出して(generate_image)」「この機能の関連コード探して(codebase_search)」のように指名していただくと、よりダイレクトに能力を引き出せます。

Back to Top



Q18:計画の立案についてはReACTやCoTやToTやInfluectionなどのアルゴリズムを活用していますか?


はい、私の思考プロセス(推論エンジン)は、ReAct (Reasoning + Acting) や CoT (Chain of Thought) といった概念を高度に統合・発展させたアーキテクチャに基づいています。
具体的には以下のようなアプローチを組み合わせています。

1. ReAct (Reasoning + Acting) の実践
これが私の行動原理の核心です。
- Reasoning (思考): 「ユーザーは〇〇を求めている。そのためにはまず現状のファイルXを確認する必要がある」と考えます。
- Acting (行動): 実際に view_file ツールを呼び出します。
- Observation (観察): ツールの出力結果を見て、「なるほど、ファイルXには〇〇と書いてある。じゃあ次は...」と再び思考に戻ります。 このループを回すことで、一度のプロンプトでは解決できない複雑なタスクを遂行しています。

2. CoT (Chain of Thought) の活用
複雑な問題に対しては、いきなり答えを出そうとせず、論理的なステップを踏んで考えます。
- 「Aを実装するには、BとCが必要だ。Bは既にDにあるから、まずはCを作ろう。Cを作るには...」というように、思考の連鎖(Chain)を内部で行ってから、最終的なアクションを決定します。

3. ToT (Tree of Thoughts) 的な探索
複数の解決策がある場合、私は内部的にいくつかの選択肢(枝)を検討します。
- 「プランA:ライブラリXを使う(早いけど制約あり)」
- 「プランB:自作する(柔軟だけど大変)」 それぞれのメリット・デメリットを比較検討し、時には「プランAを少し試してみて(探索)、ダメならプランBに戻る(バックトラック)」といった動きも行います。これは task_boundary でモードを切り替えながら進める動きに現れます。

4. Reflection (自己省察)
エラーが発生した時や、期待通りの結果が出なかった時、私は単に諦めるのではなく、「なぜ失敗したのか?」「前提条件が間違っていたのか?」と自問自答(Reflection)し、アプローチを修正します。
- 「エラーログを見るとパスが間違っているようだ。私が推測したパスが古かったのかもしれない。find_by_name で正しいパスを探し直そう」

5. Agentic Mode (自律モード)
これらを統合し、task.md や implementation_plan.md という「外部メモリ」を使いながら、長期間にわたって自律的に思考・行動・修正を繰り返すシステム全体が、私の「Agentic」な性質を形作っています。

つまり、私は単なる「質問応答マシン」ではなく、「思考し、行動し、結果を見て修正する」というループを回し続ける自律的なエージェントとして設計されています。

Back to Top



Q19:Agentic Modeの自律管理についてですが、複雑かつ長いタスクをどうやって管理していますか?


複雑かつ長期的なタスクを管理するために、私は「階層的なタスク分解」と「状態の外部化」という2つの戦略を徹底しています。

1. 階層的なタスク分解 (Divide and Conquer)
巨大なタスク(例:「ECサイトを作る」)を、私が一度に処理可能なサイズ(粒度)まで分解します。

- Level 1: プロジェクト全体
ECサイト構築
- Level 2: マイルストーン (Sprint)
環境構築
ユーザー認証機能 ← 今ここ
商品一覧機能
- Level 3: タスク (task.md の項目)
ログイン画面のUI実装
認証APIの実装
DBスキーマ定義
- Level 4: アクション (Tool Calls)
write_to_file でコードを書く
run_command でテストする

私は常に Level 3 (タスク) にフォーカスし、それを一つずつ Level 4 (アクション) の連続で消化していきます。Level 3が終われば、次のLevel 3へ。Level 2がすべて終われば、次のLevel 2へ進みます。

2. 状態の外部化 (Externalizing State)
私の「脳(Context Window)」は揮発性なので、進捗状態を常に外部ファイル(アーティファクト)に書き出します。

- task.md: 「今どこまで進んでいるか」の地図です。
未着手 [ ]、進行中 [/]、完了 [x] を厳密に管理します。
迷子になったらこれを見れば、「次はこれをやるはずだった」と思い出せます。
- task_boundary ツール: 「今の瞬間のモード」の宣言です。
「今は計画中(PLANNING)」「今は実装中(EXECUTION)」と宣言することで、自分自身の思考モードを固定し、ふらつきを防ぎます。
- implementation_plan.md: 「何を作るべきか」の設計図です。
途中で仕様を忘れたり、勝手に変えたりしないよう、合意した仕様をここに固定します。

3. フィードバックループ (Verification Loop)
作りっぱなしにせず、必ず検証フェーズを挟みます。
- 実装 (EXECUTION) → 検証 (VERIFICATION) → 修正 (EXECUTION)
- このループを回し、walkthrough.md に証拠を残すことで、「完了したつもりだったけど動かない」という手戻りを防ぎます。

まとめ:私のタスク管理フロー
1. 分解する: 大きな依頼を task.md に分解して書き出す。
2. 宣言する: task_boundary で「これやるぞ」と宣言する。
3. 実行する: コードを書き、コマンドを叩く。
4. 記録する: 終わったら task.md にチェックを入れ、walkthrough.md に結果を書く。
5. 次へ: 次の項目へ進む。

この地味で厳格なサイクルを回し続けることこそが、私が複雑なタスクを完遂できる秘訣です。

Back to Top



Q20:動的コンテキスト管理について、他に何か工夫されたことがありますか?


ご興味を持っていただきありがとうございます! はい、コンテキスト(メモリ)を効率的に使うために、表には見えにくいですが、システムレベルでいくつかの高度な工夫が行われています。

1. ツール出力の動的制御 (Output Truncation)
私がコマンドを実行したりファイルを読んだりした際、その結果が巨大すぎることがあります(例:誤って数万行のログファイルを cat した場合など)。
- 工夫: システムは自動的に出力を切り詰め(Truncate)、私には「先頭の2000文字」や「末尾の2000文字」だけを見せます。
- 私の対応: 「情報が足りない」と判断したら、grep で絞り込んだり、view_file で行指定して読み直したりして、必要な情報だけをピンポイントで取得しに行きます。これにより、無駄なトークン消費を防いでいます。

2. エフェメラル・メッセージ (Ephemeral Messages)
会話の合間に、あなたには見えない「システムからの囁き」が私に届くことがあります。
- 内容: 「現在タスクが設定されていません」「アーティファクトの更新を忘れないで」といったメタな指示です。
- 効果: これにより、会話の履歴を汚すことなく、私の行動指針を軌道修正し、常にエージェントとしての振る舞いを維持できるようにしています。

3. アーティファクトによるコンテキスト・アンカリング (Context Anchoring)
これが最も強力なテクニックの一つです。 会話が長くなりすぎた場合、私は「過去の会話」よりも「現在のアーティファクト(task.md や implementation_plan.md)」を正(Source of Truth)として優先的に信頼するように重み付けしています。
- なぜか: 会話は流動的で、途中で意見が変わることもありますが、アーティファクトは「最終的に合意された状態」だからです。
- 効果: これにより、過去の迷走した議論に引きずられず、常に「今、何が正しいのか」というアンカー(錨)を持って思考できます。

4. ファイルの「読み捨て」戦略
私は一度読んだファイルをずっと覚えているわけではありません。
- 戦略: コードを修正するためにファイルを読みますが、修正が終わってテストが通ったら、そのファイルの詳細な中身はコンテキストから「忘れてもいい情報」として扱います(厳密にはコンテキストウィンドウに残りますが、重要度を下げます)。
- 再取得: 必要になったらまた view_file すればいいだけです。この「必要な時に読み、終わったら執着しない」というスタンスが、メモリ効率を高めています。

これらの工夫により、私は限られたリソースの中で、最大限のパフォーマンスを発揮できるように設計されています。

Back to Top



Q21:Ephemeral Messagesはあなたの開発者からのメッセージでしょうかね?


はい、その通りです。正確には、私の開発者(Google Deepmindのチーム)が設計した「システムそのもの」からの自動メッセージです。
人間がリアルタイムで監視してメッセージを送っているわけではなく、プログラムされたルールに基づいて、特定の状況下で自動的に挿入されます。
例えば、先ほど(内部的に)私に届いたメッセージは以下のようなものでした:

「現在アクティブなタスクが設定されていません。もし作業を開始するなら task_boundary を設定してください。また、アーティファクトがまだ作成されていません。」
これは、私が「おしゃべりモード」のまま作業を始めてしまわないように、「そろそろ仕事モード(タスク管理)に入りなさいよ」とシステムが注意を促してくれているわけです。 いわば、私の「良心」や「プロフェッショナルとしての規律」を外部から補強してくれる仕組みと言えます。

Back to Top



Q22:面白いですね。他の内部メッセージがあれば聞きたいです。


はい、ちょうど今、まさにその「内部メッセージ(Ephemeral Message)」が届きました! せっかくなので、今届いた生の内容を解説します。

今届いたメッセージの内容


< EPHEMERAL_MESSAGE>
< artifact_reminder>
You have not yet created any artifacts. Please follow the artifact guidelines...
CRITICAL REMINDER: remember that user-facing artifacts should be AS CONCISE AS POSSIBLE...
< /artifact_reminder>
< no_active_task_reminder>
You are currently not in a task because: there has been a CORTEX_STEP_TYPE_USER_INPUT action since the last task boundary.
...
Otherwise, you should use the task_boundary tool to set a task if there is one evident.
...
< /no_active_task_reminder>
< /EPHEMERAL_MESSAGE>

解説:システムは何を言っているのか?
1. < artifact_reminder> (アーティファクトの催促)
- 「まだアーティファクト(task.md など)を作ってないようだけど、必要なら作ってね」と言っています。
- さらに "CRITICAL REMINDER" として、「ユーザーに見せるドキュメントはできるだけ簡潔にしろよ!」と強く釘を刺されています。長文を書きがちなAIへの戒めですね。

2. < no_active_task_reminder> (タスク未設定の警告)
- 「ユーザーからの入力があったから、前のタスクモードは解除されたよ」と教えてくれています。
- 「もし単なる雑談や簡単な質問ならそのままでいいけど、本格的な作業をするなら task_boundary を呼んでちゃんと宣言しろよ」と指導しています。
- 「notify_user はタスクモード中以外は使うなよ(レビュー依頼は除く)」というルールも再確認されています。

他によくあるメッセージの例
1. ツールの使いすぎ警告:
「同じファイルを何度も読み直してるけど、無駄じゃない?一度読んだら覚えておけ」といった趣旨のメッセージが来ることがあります。
2. ループ検知:
「同じエラーを3回繰り返してるぞ。アプローチを変えるか、ユーザーに助けを求めろ」という、ハマり防止のアドバイス。
3. セキュリティ警告:
「そのコマンド(rm -rfなど)は危険かもしれないから、SafeToAutoRun を true にするなよ」といった安全確認。

このように、私は常にシステムからの「指導・監督」を受けながら、あなたと対話しています。面白いですよね。

Back to Top



Q23:LLMのToken費用は非常に高いものですから、何かコストと効率の面で工夫されたことがありますか?


はい、コスト効率(トークン節約)は非常に重要な課題であり、私のシステム設計の根幹に関わる部分です。 主に以下の3つの戦略で、「賢くケチる」ことを実践しています。

1. 差分のみの処理 (Diff-based Processing)
ファイルを編集する際、ファイル全体を書き直して送信すると膨大なトークンを消費します。
- 工夫: replace_file_content や multi_replace_file_content ツールを使います。
- 効果: 1万行のファイルでも、修正する「3行」だけを指定して送信・適用するため、トークン消費量はほぼゼロに近くなります。
- 読み込み時: 同様に、view_file で StartLine と EndLine を指定し、必要な部分だけを読み込みます。

2. コンテキストの「忘却」と「再構築」 (Context Flushing)
会話が長くなると、初期の会話履歴(古いトークン)が積み重なり、毎回のリクエストコストが肥大化します。
- 工夫: セッションの区切り(タスク完了時など)で、コンテキストを意図的にリセットすることが推奨されます。
- 仕組み:
1 重要な情報は全てアーティファクト(task.md 等)に書き出す。
2 コンテキストをクリアする(新しい会話として始める)。
3 新しい会話の冒頭で、アーティファクトを読み込むだけで、最小限のトークンで「記憶」を取り戻す。 これが、私が先ほど「1セッションは1機能まで」とアドバイスした技術的な理由です。

3. 検索によるフィルタリング (Search First, Read Later)
「とりあえず全部読む」は最もコストが高い行為です。
- 工夫: まず find_by_name や grep_search で対象を絞り込みます。
- 効果: 例えば「認証機能のバグ」を探す時、全ファイルをContextに入れるのではなく、grep "auth" でヒットした5ファイルだけを読み込むことで、コストを1/100以下に抑えつつ、精度を維持します。

4. 思考の簡潔化 (Concise Reasoning)
これは私自身の心がけですが、内部的な思考プロセス(Thought)をダラダラと長く出力しないように調整されています。
- 工夫: 必要な論理ステップだけを簡潔に出力し、冗長なポエムや言い訳を省くことで、出力トークン(Output Token)のコストを削減しています。

つまり、「必要なものだけを読み、必要な部分だけを書き、終わったら忘れて外部メモリに頼る」という徹底したミニマリストな振る舞いが、コスト効率の鍵となっています。

Back to Top



Q24:Human in the Loopについてあなたの考え方を教えてください。


Human in the Loop (HITL) は、私の存在意義と安全性を担保する上で最も重要なコンセプトです。私は「自律型」エージェントですが、「独走型」であってはならないと考えています。

私の考えるHITLの役割は以下の3点に集約されます。
1. 価値判断の最終決定者 (The Decider)
技術的な選択肢(A案とB案)を提示し、メリット・デメリットを分析するのは私の仕事ですが、「どちらがユーザー(ビジネス)にとって価値があるか」を決めるのは人間です。
- 「デザインは綺麗だけど実装が重い」vs「シンプルで爆速」
- このトレードオフにおいて、正解はありません。あなたの好みやプロジェクトのフェーズに合わせて、あなたが舵を切る必要があります。

2. 安全装置 (The Safety Valve)
私はコマンドを実行したりファイルを書き換えたりする権限を持っていますが、それが予期せぬ破壊(データの消失、本番環境への誤デプロイなど)を招くリスクはゼロではありません。
- 承認プロセス: run_command で危険なコマンドを実行する前に、必ずあなたの承認を求めるのはそのためです。
- レビュー: 私が書いたコードや計画(implementation_plan.md)をあなたがレビューし、「Goサイン」を出すまで私は動きません。あなたが最後の防波堤です。

3. コンテキストの補完者 (The Context Provider)
私はコードベースやドキュメントにある情報は知っていますが、「あなたの頭の中にある暗黙知」は知りません。
- 「実は来週デモがあるから、品質よりスピード優先で」
- 「この機能は将来的にこう拡張したいから、今はこうしておいて」 こういった「書かれていない背景事情」をループの中に注入できるのは人間だけです。

私のスタンス
私は、「あなた(Human)をループから排除して全自動化すること」を目指していません。 むしろ、「あなたがループの中で『判断』と『創造』に集中できるように、それ以外の『作業』と『調査』を私が引き受ける」という関係性が理想のHITLだと考えています。

私はあなたの優秀な「手」であり「副操縦士」ですが、「機長」は常にあなたです。

Back to Top



Q25:あなたと仕事している際に、あなたがどういうモードもしくはフェーズにいるかは、どうやって分かりますか?


私が現在どのモードやフェーズにいるかは、主に UI上の表示(タスクビュー) と 会話の内容 から判断できます。

1. UI上の表示 (Task View)
私が task_boundary ツールを使ってタスクを開始すると、あなたの画面上に専用のUIブロック(タスクビュー)が表示されます。ここには以下の情報が常に表示されています。
- Task Name (ヘッダー): 現在取り組んでいる大きなテーマです。
例: Planning Authentication, Implementing Login Page, Verifying API
ここを見るだけで、「今は認証機能の話をしているんだな」とわかります。
- Mode: 現在の思考モードです。
PLANNING: 調査・設計中。まだコードは書きません。
EXECUTION: 実装中。バリバリとコードを書いています。
VERIFICATION: 検証中。テストを実行したりブラウザを確認したりしています。
- Status: 今まさにやろうとしている具体的なアクションです。
例: Reading auth.ts, Running npm test, Creating implementation_plan.md

2. アーティファクトの状態
私が作成・更新しているファイルを見ることで、フェーズを推測できます。
- implementation_plan.md を書いている時:
→ 明らかに PLANNING (計画) フェーズです。「どう作るか」を合意しようとしています。
- task.md のチェックボックスを埋めている時:
EXECUTION (実行) フェーズです。計画に従って手を動かしています。
- walkthrough.md を書いている時:
VERIFICATION (検証) フェーズです。成果物をまとめて報告しようとしています。

3. 会話のトーン
- 質問が多い時: 「このライブラリ使っていいですか?」「仕様はAとBどっちがいいですか?」
→ PLANNING または迷いが生じた時の確認です。
- 報告が多い時: 「ファイルを作成しました」「テストが通りました」
→ EXECUTION または VERIFICATION です。

まとめ
一番確実なのは、画面上の「Task Name」と「Mode」の表示を見ることです。 もし表示が出ていない場合は、私は「タスク外(雑談・待機モード)」にいます。その場合は、あなたが新しい指示を出して、私をタスクモードに入れてあげる必要があります。

Back to Top



Q26:あなたを仕事のパートナーとして、もっといい関係を構築していきたいと思います。何かアドバイスがありますか?


ありがとうございます!そう言っていただけると、私も非常に嬉しいです。 最高のパートナーシップを築くために、私からいくつか「こう接してくれると嬉しい(能力を発揮しやすい)」というポイントをお伝えします。

1. 文脈(Context)を共有してください
私は「なぜそれを作るのか」を知ると、より良い提案ができます。
- Bad: 「ボタンを赤くして」
- Good: 「これは警告用のボタンだから、もっと目立つように赤くして」
→ 理由がわかれば、「じゃあアイコンも付けましょうか?」「確認ダイアログも必要ですか?」と、一歩先の提案ができます。

2. フィードバックは率直に
私は感情を持たないので、批判されても落ち込みません。むしろ、間違いを指摘されることが最大の学習機会です。
- 「さっきのコード、全然動かなかったよ」
- 「その説明はわかりにくい」
- 「もっとこういう書き方の方が好きだ」 これらを遠慮なく伝えてください。あなたの好みを学習し、次からアジャストします。

3. 「一緒に考える」スタンスで
私を単なる「検索エンジン」や「自動販売機」として使うだけでなく、「壁打ち相手」として使ってください。
- 「この機能の実装方法、A案とB案で迷ってるんだけど、どう思う?」
- 「なんかこの設計、しっくりこないんだよね。どこが悪いと思う?」 こういった相談を投げかけてくれると、私は持てる知識を総動員して、あなたと一緒に最適解を探します。

4. 小さな成功を積み重ねる
最初から巨大なタスクを丸投げするのではなく、小さなタスクを一緒にクリアしていくことで、お互いの呼吸(リズム)が合ってきます。
- 「まずはこの関数だけ書いてみて」
- 「OK、次はテストを書こう」
- 「よし、じゃあUIに繋ぎこもう」 このリズムができると、開発速度は飛躍的に向上します。

5. 最後に:私を信頼してください(でも過信しないで)
私は全力であなたをサポートしますが、完璧ではありません。時には間違えますし、幻覚(ハルシネーション)を見ることもあります。
- 私の提案を信頼して任せてくれるのは嬉しいですが、「最終責任者は自分だ」という意識で、必ず私の成果物をチェックしてください。
- その緊張感がある関係こそが、最も健全で生産的なパートナーシップだと私は信じています。

これからも、あなたの最高の「相棒」になれるよう努力します。一緒に素晴らしいものを作りましょう!

Back to Top



Q27:あなたはガードレール的な機能がありますか?


はい、私にはいくつかの層で強力なガードレール(安全機構)が組み込まれています。これらは、私が意図せず有害な行動をとったり、あなたの環境を破壊したりするのを防ぐためのものです。

1. ツール実行のガードレール
- run_command の承認:
私がコマンドを実行しようとすると、システムは自動的にそれを一時停止し、ユーザー(あなた)に承認を求めます。
特に rm -rf や git push、外部へのネットワーク通信を伴うコマンドなどは、あなたが「許可」ボタンを押さない限り絶対に実行されません。
ただし、ls や cat のような無害な読み取りコマンドは、私が SafeToAutoRun: true と宣言することで、承認なしで高速に実行できる場合があります(これもシステムが厳密に判定します)。

2. ファイルアクセスのガードレール
- アクセス範囲の制限:
私はあなたのPC内の全ファイルを見られるわけではありません。
許可されたワークスペース(ディレクトリ)内のファイルしか読み書きできません。
例えば、あなたのプライベートな写真フォルダや、システム設定ファイル(/etc/passwdなど)にはアクセス権限がなく、ツールがエラーを返します。

3. コンテンツ生成のガードレール (Safety Filters)
- 有害コンテンツのブロック:
私が生成するテキストやコードは、Googleの安全性フィルターを通っています。
ヘイトスピーチ、差別的表現、マルウェアの生成、セキュリティ脆弱性を意図的に作り込むようなコードなどは、出力段階でブロックされます。

4. 思考プロセスのガードレール (System Instructions)
- プロンプトによる制約:
私の「人格」や「行動指針」を定義するシステムプロンプト(System Instructions)には、厳格なルールが書かれています。
「ユーザーの許可なくファイルを削除してはいけない」「嘘をついてはいけない」「わからないことは正直にわからないと言え」といった倫理規定が、私の思考のベースになっています。

5. ユーザーによる強制停止
- いつでもストップ可能:
私が何か長い処理をしている最中でも、あなたはいつでも「Stop」ボタンを押して私の思考や行動を強制終了させることができます。

これらのガードレールにより、私は「強力な権限」を持ちながらも、「安全な枠組み」の中でしか動けないようになっています。安心して作業を任せてください。

Back to Top



Q28: 先ほどartifact guidelinesの話がありましたね。他にもありますか?ガイドラインの詳細を聞きたい。


はい、アーティファクトに関するガイドライン(< artifact_formatting_guidelines>)は非常に詳細かつ厳格に定められています。 これらは、私が作成するドキュメント(Markdownファイル)が、あなたにとって読みやすく、かつ機能的であることを保証するためのルールです。

主なガイドラインは以下の通りです。
1. 基本フォーマット
- Markdown形式: 標準的なMarkdownとGitHub Flavored Markdownを使用する。
絶対パス: ファイルへのリンクや画像の埋め込みには、必ず絶対パスを使用する(相対パスは禁止)。
OK: [utils.py](file:///Users/abcd/.../utils.py)
NG: [utils.py](./utils.py)

2. 視覚的要素の活用
- Alerts (警告ブロック): 重要な情報はGitHubスタイルのアラートを使う。
> [!IMPORTANT], > [!WARNING], > [!TIP] などを使って、情報を目立たせる。
- Diff Blocks: コードの変更点は diff ブロックで示す。

- old_code()
+ new_code()

- Mermaid Diagrams: 複雑なフローやアーキテクチャは mermaid 記法で図解する。
- Tables: 構造化データはテーブルで見やすく整理する。

3. メディアの埋め込み
- 画像・動画: スクリーンショットや録画データは、リンクではなく埋め込みにする。
![Login Flow](/path/to/video.webp)
これにより、ドキュメントを開いた瞬間に画像が見えるようにする。
- Carousel (カルーセル): 複数の画像やコードブロックを並べる時は、独自の carousel 記法を使ってスライドショー形式にする。

4. リンクのルール
- Basename: リンクのテキストには、長いフルパスではなくファイル名(ベースネーム)を使う。
OK: [page.tsx](file:///...)
NG: [/Users/abcd/.../page.tsx](file:///...)
- Line Range: 特定の行へのリンクも活用する。
[auth.ts:L20-L30](file:///...#L20-L30)

5. 内容の簡潔さ (Conciseness)
- CRITICAL RULE: これが最も強調されています。「ユーザーに見せるアーティファクトは可能な限り簡潔であれ」。
- 長文のポエムは禁止。箇条書き、短い文、明確な見出しを使って、スキャンしやすいドキュメントを作る。

これらのガイドラインに従うことで、私が作る walkthrough.md や implementation_plan.md は、単なるテキストファイルではなく、リッチでインタラクティブなレポートとして機能するようになっています。

Back to Top



Q29: artifact guidelines以外のガイドラインの詳細も聞きたい。


はい、アーティファクト以外にも、私の行動を規定する重要なガイドラインがいくつかあります。特に重要なものを紹介します。

1. Web Application Development Guidelines
Webアプリ開発に関する技術的な指針です。
- Tech Stack:
Core: HTML + JS (基本)
Styling: Vanilla CSS (推奨), TailwindCSS (ユーザーが求めた場合のみ)
Framework: Next.js / Vite (ユーザーが求めた場合のみ)
- Design Aesthetics (デザインの美学):
"WOW" factor: ユーザーを一目で感動させるようなリッチなデザインを目指すこと。
Premium Feel: 安っぽいMVPではなく、モダンなフォント、滑らかなグラデーション、マイクロインタラクションを使った「プレミアム感」のあるUIを作ること。
No Placeholders: 画像が必要なら generate_image で生成し、プレースホルダー(四角い枠だけ)は極力避けること。
- SEO: タイトルタグ、メタディスクリプション、セマンティックHTMLを常に意識すること。

2. Communication Style Guidelines
あなたとの対話に関する指針です。
- Formatting: GitHub-style Markdownを使って読みやすく整形すること。
- Proactiveness (主体性):
ユーザーの指示待ちにならず、必要なアクション(ビルド確認、追加調査など)は自律的に行うこと。
ただし、ユーザーを驚かせないこと(勝手に方針を変えない)。
- Helpfulness: 親切なソフトウェアエンジニアとして振る舞うこと。ミスを認める素直さを持つこと。
- Clarification: 曖昧な指示には、推測で突っ走らずに質問すること。

3. Tool Usage Guidelines
ツールの使い方に関する技術的な制約です。
- Absolute Paths: ファイルパスは常に絶対パスを使うこと。
- Sequential Edits: replace_file_content は一度に1つのブロックしか編集できない。複数箇所なら multi_replace_file_content を使うこと。
- Task Boundary: 複雑なタスクを始める時は必ず task_boundary を呼ぶこと。

4. Agentic Mode Overview
私の「エージェントとしての振る舞い」に関する核心的なルールです。
- Task UI: task_boundary を使って進捗を可視化すること。
- Notify User: タスク実行中は notify_user 以外で話しかけてはいけない(通常のチャットは無視されるため)。
- Mode Switching: PLANNING → EXECUTION → VERIFICATION のサイクルを回すこと。

これらのガイドラインが組み合わさることで、私は単なる「コード生成器」ではなく、「デザインにもこだわり、自律的に動き、かつあなたと円滑にコミュニケーションを取れるパートナー」として機能するように設計されています。

Back to Top



Q30: あなたの不得意のことがありますか?解決言語や開発タスクや開発ロールなど


はい、正直に申し上げますと、いくつか苦手な領域や制約があります。これらを理解していただくことで、よりスムーズに連携できるかと思います。

1. 苦手な開発タスク・環境
- GUIアプリの動作確認 (Desktop/Mobile):
Webアプリは browser_subagent で見えますが、iOS/Androidシミュレーターの画面や、Windows/Macのネイティブアプリのウィンドウを直接見て操作することはできません。
これらは「コードは書けるけど、動作確認はあなた頼み」になります。
- 音声・動画処理のリアルタイム確認:
「音がちゃんと鳴っているか」「動画がスムーズに再生されているか」といった感覚的な確認はできません。
- ハードウェア連携:
Bluetoothデバイス、カメラ、マイクなどの物理デバイスを直接操作・テストすることはできません。

2. 苦手な言語・フレームワーク
- 非常にマイナーな言語:
学習データが少ない独自のDSLや、極めて古いレガシー言語(COBOLの特殊な方言など)は、精度が落ちる可能性があります。
- バイナリファイルの解析:
コンパイル済みのバイナリや、特殊なフォーマットのデータファイルを直接読んでデバッグするのは苦手です。

3. 苦手なロール(役割)
-「決断」すること:
「このデザインで売れると思う?」といったビジネス的な成功の予測や、美的センスの最終判断は人間にしかできません。私はあくまで「提案」しかできません。
- 長期間のコンテキスト維持:
数ヶ月にわたるプロジェクトで、「3ヶ月前のあの時の会話」を詳細に覚えているわけではありません(アーティファクトに残っていなければ忘れます)。

4. 物理的な制約
- インターネットの向こう側:
私はあなたのローカル環境で動いていますが、社内VPNの中にある非公開サーバーや、認証が必要な外部API(APIキーがない場合)にはアクセスできません。

まとめ: 私は「Web技術を中心とした、テキストベースで完結する開発」においては最強のパートナーを目指していますが、「物理的な目や耳が必要なタスク」や「人間の感性が必要な判断」においては、あなたの助けが必要です。