TL;DR: AIエージェント(Antigravity)との対話履歴は、単なるテキストではなく貴重な「知的資産」です。本記事では、履歴消失の危機をきっかけに構築した、バイナリログに依存しない「エージェント自身による自律型ロギングシステム」の裏側を公開します。
本稿は
さらばトークンイーター。1/15の視界で手に入れた「静かな開発」への転換
の続編に当たります
1. その日は突然やってきた:HTTP 400の絶望
AIエージェント「Antigravity」と複雑なプロジェクトを推進していたある日。いつものように指示を飛ばすと、返ってきたのは期待した回答ではなく、冷徹なエラーメッセージでした。
{
"error": {
"code": 400,
"message": "* GenerateContentRequest.tools[27].function_declarations[0].parameters.properties[args].items: missing field.\n",
"status": "INVALID_ARGUMENT"
}
}
このエラーは、会話履歴が積み重なりすぎたことによるコンテキストの限界を示していました。
2. 原因調査とトラブル:知能の欠損
調査を進めると、原因は履歴内に残存していた「解釈不能な文字列(不要なスクリプト片等)」が生成リクエストを阻害していることだと判明しました。
これを解消するには「履歴の削除」が不可避。しかし、その原因調査およびトラブルシュートのプロセス中にシステムがフリーズ。復旧したときには、直近の設計判断を含む重要な会話履歴の一部が失われていました。
設計資料や技術記事の多くを会話履歴から書き起こしていた私にとって、これは単なる「ログの欠損」ではなく、これまで積み上げた「設計意図」や「試行錯誤」という、物理的な成果物以上に重要な知的資産の消失を意味していました。
3. 試したこと:バイナリログというブラックボックスへの挑戦
まず試みたのは、Antigravityが内部で保持しているログ(バイナリ形式)から情報を直接パースすることでした。
しかし、現実は甘くありません。強固な難読化と暗号化に阻まれ、外部からの強制的な抽出は技術的に断念せざるを得ませんでした。
「システムが壊れれば、二度と知見は取り出せない」という、**プロプライエタリなバイナリログに依存するリスク(LLM Observabilityの欠如)**が浮き彫りになった瞬間でした。
4. 設計思想の転換:「解析」から「刻印」へ
「外からこじ開けられないなら、内側から自律的に書き出させればいい」
ここで発想を180度転換して、外部システムによるパースを諦め、AIエージェント自身に**「自分の思考と対話をリアルタイムでMarkdownに刻印する」**という行動規範を組み込むことにしたのです。
この「自己記録プロトコル(Full-Transcript Mirroring)」により、以下の3つの価値を実現します。
- 脱バイナリ: プレーンテキスト(Markdown)による万全の可搬性確保。
- LLM Observability: AIが「何を考え、どう行動したか」をブラックボックス化させない。
- 資産の再利用性: 記録をそのまま RAG(検索拡張生成)のデータソースへ直結。
5. 実装:Skills(規約)と Shell(エンジン)の融合
このシステムの核となる実装を紹介します。
5.1 エージェント・プロトコル (.antigravityrules)
AIに「いつ、何を、どのように記録すべきか」を定義した行動指針です。
# Agent Rich-Logging Protocol
- **トリガー**: タスクの設計(Planning)完了時、および最終回答の直前。
- **保存方法**: `./scripts/core/agent_logger.sh` を使用。
- **ミラー形式**: チャット画面を一字一句テキストで起こす。
5.2 記録エンジン (agent_logger.sh)
AIから渡される大規模なテキストデータを、特殊文字や改行の例外処理も含めて安全にファイルへ刻印します。
#!/bin/bash
# 追記処理:printf を使用して特殊文字入力を安全に処理
printf "\n## Entry at %s\n" "$TIMESTAMP" >> "$LOG_FILE"
printf "%s\n" "$CONTENT" >> "$LOG_FILE"
6. 成果:知能は「資産」として不滅化された
本システム(Antigravity Log Manager)の構築により、以下の成果が得られました。
- 100%の再現性: バイナリに依存せず、人間が読める形式で知見が永続化。
-
ポータビリティ:
realpathを用いた動的なパス紐付けにより、どの端末からでも閲覧可能なインデックスを自動生成。 - 知能ポータル: 蓄積されたログはそのまま Obsidian のVaultとして活用。強力な全文検索で過去の試行錯誤を横断的に発掘。
7. おわりに
AIエージェントとの対話は、使い捨ての「消費」ではありません。適切に管理・運用することで、それは一生使い続けられる「知的資産」となります。
今回の事案を通じて痛感したのは、「AIの知能をどう保護し、どう資産化するか」というインフラ設計の重要性です。皆さんも、自分のエージェントに「自分の履歴を刻印する」という術を与えてみてはいかがでしょうか。
付録:コピペで使えるフルスクリプト・スキル集
1. エージェント・プロトコル (.antigravityrules)
# Agent Rich-Logging Protocol
あなたは作業を行う際、自身の思考プロセスと対話の流れを「ユーザーの期待するイメージ」に沿って詳細に記録しなければなりません。
- **トリガー**:
1. タスクの設計(Planning)が完了した直後。
2. ユーザーへの最終的な回答を行う直前。
- **保存先**: `./scripts/core/agent_logger.sh` を使用。
## 記録プロトコル(チャット画面ミラー)
技術的な要約ではなく、チャット画面をテキストで起こす「ミラー形式」で記述してください。
2. 記録エンジン (scripts/core/agent_logger.sh)
#!/bin/bash
# Antigravity Rich Agent Logger
CONV_ID=$1
TITLE=$2
CONTENT=$3
LOG_DIR="./docs/markdown/conversations"
LOG_FILE="$LOG_DIR/${CONV_ID}.md"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
mkdir -p "$LOG_DIR"
# ... (初期化処理)
# 追記処理:printf を使用して特殊文字入力を安全に処理
printf "\n## Entry at %s\n" "$TIMESTAMP" >> "$LOG_FILE"
printf "%s\n" "$CONTENT" >> "$LOG_FILE"
3. 知能ポータル生成機 (scripts/presentation/organize_logs.sh)
#!/bin/bash
# find と realpath による堅牢なパス解決
find "$CONV_MD_DIR" -maxdepth 1 -name "*.md" -printf '%T@ %p\n' 2>/dev/null | sort -rn | while read -r time file_path; do
DATE=$(date -d "@${time%.*}" '+%m月 %d %H:%M')
REL_CHAT_LINK=$(realpath --relative-to="$PROJECT_ROOT/docs" "$file_path" 2>/dev/null)
echo "| $DATE | **$PROJECT_NAME** | [💬 View Chat Log]($REL_CHAT_LINK) |" >> "$INDEX_FILE"
done
プロジェクト名: Antigravity Log Manager
開発: akkyey & Antigravity
キーワード: Git, Obsidian, Shell Scripting, Agent Protocol, RAG




