CodeTutor: Emacs用AIペアプログラマー

CodeTutorは、オートコンプリートエンジンではなく、AIペアプログラミング・チューターとして機能するように設計されたEmacsパッケージです。ローカルAIアシスタントをEmacsエディタに統合し、概念的なガイダンスを提供し、保存後にコードの変更をレビューし、ユーザーのソースファイルを一切変更することなくアーキテクチャのアドバイスを提供します。

コアとなる哲学:実装よりも教育

CodeTutorは、すぐに貼り付けられるコードを提供するのではなく、ユーザーを解決策へと導くという原則に基づいて構築されています。このツールは、シニアまたはスタッフエンジニアのように振る舞い、基礎となる概念、リスク、およびアーキテクチャに焦点を当てるように設計されています。

実装の境界線

チューターとしての役割を維持するため、CodeTutorは厳格な境界を遵守します:

  • ソースの変更なし: このツールはプロジェクトファイルへの書き込み、パッチの生成、またはファイル全体の置換を行いません。
  • 概念的なガイダンス: コンパクトで例示的なコードサンプルを提供し、フィードバックの背後にある概念を説明しますが、特定のタスクのための完全な実装を渡すことは避けます。

機能的な能力

CodeTutorは、起動時のアセスメント、保存時のレビュー、手動プロンプト、およびフォローアップの質問という、4つの主要なインタラクション・ループを通じて動作します。

保存時のレビュー・ループ

codetutor-review-on-saveが有効な場合、パッケージはEmacsの保存プロセスにフックします。保存前のファイルのステートをキャプチャし、保存されたバッファテキストと比較して統合されたdiffを作成し、このdiffをプロジェクトのコンテキストと共にAIバックエンドに送信します。その結果得られる教育的なレスポンスは、右側のチューター・パネルに表示されます。

手動プロンプトとフォローアップ

ユーザーはcodetutor-askを使用して、ミニバッファ経由でチューターと対話できます。このリクエストには、現在のファイル、プロジェクトのコンテキスト、およびアーキテクチャのメモリが含まれます。ユーザーはその後、codetutor-follow-upを使用して、前の回答に関する明確化のための質問を投げることができ、会話のターンをまたいで継続性を維持できます。

プロジェクトのアセスメントと次のステップ

  • 起動時のアセスメント: codetutor-openを実行すると、プロジェクトのアセスメントがトリガーされ、どこから始めるべきか、コードを書く前にどのようなエンジニアリングの判断が必要かを特定します。
  • 次に行うこと: codetutor-what-nextコマンドは、利用可能なプロジェクトのコンテキストに基づいて、チューターに単一の最善の次のステップを推奨させるよう求めます。

技術的なアーキテクチャとコンテキストの収集

CodeTutorは、AIがアドバイスを行うために十分なコンテキストを持てるよう、いくつかのローカルなソースからデータを集約して包括的なプロンプトを構築します。

コンテキスト・ソース

Source Purpose
PROJECT.md / project.md 製品およびプロジェクトの方向性
spec/ directory 仕様書および設計ノート
.codetutor/ARCHITECTURE.md 永続的なプロジェクト・メモリ
Current file text 現在の編集コンテキスト
Tree-sitter/Imenu summary バッファの構文レベルの概要
Project file index チューターが他のファイルを調査するために特定するのを助ける
Diff since last save 前回保存時からの変更点
Open project buffers 現在のセッションでの近接した作業

アーキテクチャ・メモリ

CodeTutorは、永続的なメモリ・システムを実装しています。チューターがアーキテクチャに関する観察事項を特定した場合、それらをcodetutor-memoryブロックでラップします。パッケージはこれらの観察事項を自動的に抽出し、.codetutor/ARCHITECTURE.mdに追加します。これは、パッケージが自動的に書き込みを許可されている唯一のファイルです。

バックエンドの統合と安全性

CodeTutorは、2つのローカル・バックエンドをサポートしています:codexpiです。どちらも、AIがユーザーのファイルシステムを修正できないように構成されています。

バックエンド構成

  • Codex: codex execを、承認ポリシーがneverに設定され、エフェメラル・セッションを使用する読み取り専用サンドボックス内で使用します。
  • pi: read, grep, find, および lsに制限されたツールセットを使用する非対話型プリント・モードを使用します。

安全性レイヤー

安全性は、2つのレイヤーを通じて強制されます:ファイル編集を禁止するプロンプト・レベルの指示、およびAIを読み取り専用モードに制限するバックエンド・レベルのコマンド境界です。

インストールと要件

CodeTutorはEmacs 28.1以降を必要とし、組み込みのtree-sitterサポートのためにEmacs 29+を推奨します。

Doom Emacs用の構成

Doom Emacsユーザーの場合、パッケージはローカル・リポジトリ・レシピを使用してpackages.elを介して追加でき、以下のコマンドでconfig.elで構成できます:

  • codetutor-open
  • codetutor-what-next
  • cdetutor-follow-up
  • codetutor-refresh-architecture-memory

カスタマイズ

ユーザーは、コンテキスト・リミット(例:codetutor-max-project-context-bytes)やシステム・プロンプト(codetutor-system-prompt)を調整して、チューターの挙ッチョンの動作やAIバックエンドに送信される特定のデータ量に合わせてカスタマイズできます。

Sources