対話コンテキストをテキストファイルにexport/importし、別のAI sessionに引き継ぐAgent Skill
conversation-context-exportおよびconversation-context-importとしてmarketplaceにリリース済みshokai.icon
from 1人あたり1日20プルリク出す世界を考える
pull requestにおいて、やらない事とその理由が、レビューにも、コードの自動改善にも重要だ
色々AIと検討したけど採用しなかった設計や、試したけどダメだったというAI対話コンテキストを、読みやすい章立てでテキストファイルに書き出すAgent Skill
記載するもの
目的や実装したものの挙動。ただしコード読めばわかる詳細は除外
実装しなかった別案とその理由
調査・設計・実装の中で言語化された、隠れた制約事項
あえて今回は対応しない事にした物事
注意が必要な難所
検討した事が実装者とAIの会話ログにしか残らないのはもったいない
やった事はコード読めばわかる
検討した上でやらなかった事こそ、設計のレビューに必要な情報である
AIで自動再調査できる
試したけどダメだった方法は、試し方がダメなのかもしれない
結果ではなくプロセスをレビューする
コードレビューは作業結果のダブルチェックではない
色々検討して決めたやらない事とその理由は、コードの自動改善を行う際の制約として使える
AIを使った統合テストの精度が上がる
sub PR全ての試行錯誤コンテキストを統合PRに取り込むと、別のbugも見つけつつ、方針に沿って自動修正できる
コードの自動改善には制約が重要である
特に、あえてやらない、と判断した物事が重要
検討し、採用しなかった設計や実装手段と、その理由
人間から、今回はやらなくていいと指示された事
Pull Request概要欄で、採用しなかった実装とその理由を説明しよう
やらない事とその理由がないと、あらゆる改善を受け入れる事になってしまう
やらない事リストが適切に引き継ぎできれば
feature PRでも、複数AI間の往復レビューを使って自動的なコードの改善ができる
しかし複数のsub PRを統合したfeature PRは、コンテキストが分断されている
AI session間でのcontext引き継ぎが必要だshokai.icon
1対1ではなく、1対多
feature PRのAIは、sub PRのAIたちが議論した内容を全て統合して理解しているべき
例 https://github.com/nota/scrapbox/tree/cba25758c1ba304ad220876f0cda2053b171a981/.dev/contexts
3つのsub PRで議論された事項がまとまっている
特に「やらなかった事」が書かれている
これを使って、3つのsub PRを統合したfeature PRでも自動コード改善ができる
新たなbugを発見し、自動改善できた
色々検討した結果あえて不自然な設計になっている箇所は、修正しない事を自動選択できた
GCSアップロード画像を正しいスケールで表示する機能を色々改善 #8211
3つのcontextをimport
https://scrapbox.io/files/6a258459601c8b4efdcf31af.png
bugハンティング開始
https://scrapbox.io/files/6a25845d601c8b4efdcf31b4.png
https://scrapbox.io/files/6a258461601c8b4efdcf31be.png
4番は、複数のsub PRの変更が合わさった結果server/clientでの実装に差異が出た事を報告しつつ、importしたcontextからこの差異が意図したものである事を理解し、修正対象ではないと弁護している
良い感じshokai.icon
1回のsessionに収まりきらないような長い開発でのAIとのcontextをどうやって集約して、統合レビュー時点のAIに渡すか
https://gyazo.com/87a3c3d70fac4f6bb1dfe0cf1f878aa7
https://gyazo.com/9c8054bd9428d6e4876f7a1bdc437dc5
なるほど弁護かshokai.icon
https://gyazo.com/a1a2ef4bd6cb76b5e0f5d557628ff76d
https://gyazo.com/0d5c74579b0be1129163c3b38d6bddfe
done.icon 対話コンテキストをテキストファイルにexport/importするAgent Skill #8202
conversation-context-exportというAgent Skillができた
ちょうど3つのsub PRがある開発タスクを対象にやってみようshokai.icon
cloudfunctionで生成するGCSアップロード画像のサムネイルの最大縦横サイズを、PNGのpHYsチャンクから読み取ったscaleに基づいて調整する #8199
https://github.com/nota/scrapbox/pull/8199/changes
Apple製品は72dpiを基準にPNG pHYsチャンクからのスケール計算するべきだが、Windows等は96dpiを基準に計算するべき #8200
https://github.com/nota/scrapbox/pull/8200/changes
GCSアップロードのサムネイル作成cloudfunctionを並列デプロイ可能にした #8201
https://github.com/nota/scrapbox/pull/8201/changes
結構うまく出てるように見えるshokai.icon
もしかしてこれって別のAIや、別の人間の開発者に引き継ぐ時にも有効な方法なのか?
prettierかける指示がSKILLに含まれている。これは各リポジトリのやり方に任せるべき
conversation-context-importも必要なので実装した
https://scrapbox.io/files/6a25848b601c8b4efdcf31f2.png
一旦ファイルとして書き出すと、対話コンテキストのレビューもできそうだなshokai.icon
このskillの開発プルリク自体の対話context
このブランチはfeature PRを経由しないので、commitに意図ファイルを含めない
代わりにコメントとして添付した
https://github.com/nota/scrapbox/pull/8202#issuecomment-4016383246
context exportの改善
https://scrapbox.io/files/6a258492601c8b4efdcf31fc.png
https://scrapbox.io/files/6a258497601c8b4efdcf3202.png
https://scrapbox.io/files/6a25849b601c8b4efdcf3206.png
概要欄の統合もできる
sub PRそれぞれの概要欄にある動作確認方法を統合して、feature PR用の動作確認方法を作成してください
mergeされた動作確認方法ができる
https://scrapbox.io/files/6a2584ac601c8b4efdcf3214.png
元の3つがまともかつ衝突しない内容なので、当然まともにできる
案の定、.dev/contexts/*.mdを削除し忘れたshokai.icon
exportしたAI対話contextを削除し忘れていた #8212
done.icon .dev/contexts/ディレクトリをmainブランチにmergeしないようCIでチェックする #8213で対応した
Claude CodeからCodex CLIを呼び出して相談させるAgent Skillと相性が良さそうshokai.icon
https://github.com/nota/scrapbox/pull/8215#issuecomment-4018537991
https://scrapbox.io/files/6a2584b2601c8b4efdcf321c.png
https://github.com/nota/scrapbox/pull/8217#issuecomment-4019101514
https://scrapbox.io/files/6a2584b6601c8b4efdcf321f.png
done.icon conversation-context-export/importスキルを修正 - ブランチ名サニタイズ、TEMPLATE.mdの相対パス明示、updatedに時分秒追加、PR番号更新 #8216
ブランチ名に/が含まれている時に、exportされたコンテキストファイルが深い階層に保存されてしまう
dependabot/npm_and_yarn/feed-5.2.0とか
ブランチ名の/は-に置換するべきだshokai.icon
「TEMPLATE.mdが見つからない」とよく言われる
SKILL.mdと同じディレクトリにある事がわからないようだ
skill-creatorではmarkdownの相対パス記法を使っている。真似しよう
https://code.claude.com/docs/en/skills#add-supporting-files
書き出し日時が年月日だけだが、時分秒まで付けるべき
一日に複数回書き出されて、上書きされる可能性があるので
「export時点でPR未作成」と記載した後、PRを作成しても更新されない
export済みファイルがPR番号なし状態の場合の、PR番号確認手順が書かれてない
Claude Code.iconのcontextをCodex CLI.iconに引き継ぐ
https://scrapbox.io/files/6a2584bc601c8b4efdcf322a.png
さらにmerge
https://scrapbox.io/files/6a2584c0601c8b4efdcf322f.png
https://github.com/nota/scrapbox/pull/8220#issuecomment-4028454364
https://scrapbox.io/files/6a258507601c8b4efdcf3281.png
色々調査して試した結果、採用しなかった方法が全て残っていて良いshokai.icon*2
長くなってきた
https://github.com/nota/scrapbox/pull/8219#issuecomment-4025913856
https://github.com/nota/scrapbox/pull/8217#issuecomment-4019101514
ちょっと冗長なので、ブラッシュアップする
https://scrapbox.io/files/6a258512601c8b4efdcf328e.pnghttps://scrapbox.io/files/6a258515601c8b4efdcf3298.pnghttps://scrapbox.io/files/6a258518601c8b4efdcf329d.pnghttps://scrapbox.io/files/6a25851c601c8b4efdcf32a3.png
なんか良い感じになってきたような気がするshokai.icon
export後に作業してさらにexportした場合のマージ戦略が足りない気がしているshokai.icon
例えば新事実の発見によって問題が解決したり、事実誤認が見つかったりして、書き直しをした方が良い項目が出る事もあると思う
項目内でそのまま書き直すとか、あるいは項目間で移動させるとか、最適な方法は都度都度違うと思うけども
現状のSkillだと、既存の記録の書き直しについて何か指示は書いてありましたっけ?
https://scrapbox.io/files/6a258532601c8b4efdcf32dc.png
https://scrapbox.io/files/6a258540601c8b4efdcf32ee.png
https://scrapbox.io/files/6a258546601c8b4efdcf32fd.png
https://scrapbox.io/files/6a25854d601c8b4efdcf3308.png
分類ミスや不要情報の混入を防ぐ、マージルールを精緻化したshokai.icon
https://github.com/shokai/agent-skills/pull/6
done.icon 対話コンテキストexportの改善 - 分類ミスや不要情報の混入を防ぐ、マージルールを精緻化 #8222
かなりよく、やる・やらない・その理由を別sessionのAIに引き継げるようになった
これを使えば、exportされた対話コンテキストを使ってpull requestを自動レビューするAgent Skillができるはず