こんにちは。強です。
私は長らく無課金開発で粘ってきたのですが、ついに課金してしまいました。
ChatGPT Plusです。
5月頃にはGitHub Copilot Freeも少し使っていました。どのAIベンダーがよいか、どのツールが優れているかなど、いろいろな意見があると思いますが、とりあえず私はChatGPT Plusを選びました。
最近は、AIに実装から検証までを繰り返させる「ループエンジニアリング」のような話をよく見かけます。
一方、私はまだプロンプトを入力して、返ってきた応答を確認しながら進める開発をしています。
セッションを切り替えるのが面倒だった
AIコーディングツールを使っていると、
「セッションは細かく区切ったほうがよい」
という話をよく見かけます。
長いセッションを続けるよりも、作業単位でセッションを分けたほうが、コンテキストが整理されて応答も安定しやすい、という考え方です。
たしかにその通りなのですが、実際にセッションを切り替えようとすると、次の問題が出てきます。
セッションを切り替えたい
↓
現在の状態や次にやることをまとめる
↓
次のセッションへ貼り付ける
私が知っていた方法は、主に次の2つでした。
- 自分で現在の状態や、次にやることをまとめる
- 前のセッションの最後に「引き継ぎ資料をまとめて」とCodexへ依頼する
そして、まとめた内容を次のセッションへ貼り付けます。
ほかの方法を知らなかったので、毎回このようにしていました。
ただ、毎回同じことをするのは面倒です。
セッションを切り替えるたびに、自動で最低限の引き継ぎ情報が作られ、そのまま次のセッションで読み込まれてほしいと思いました。
欲しかったもの
そこで、自分が欲しいものを整理しました。
プロジェクト名は llmctx です。
目標は、できるだけ軽いCLIツールにすることです。
欲しかった機能は次のようなものでした。
- 導入が軽い
- セッション切り替え時に、次のセッションへ渡す簡単な情報を自動生成する
-
SessionStart、UserPromptSubmit、StopなどのHookをトリガーにする - 会話内容の保存、引き継ぎ情報の生成、読み込みを自動化する
- ワークスペースごとに情報を分離する
- 一つのワークスペースに含まれる複数リポジトリを横断して扱う
長期記憶や高度な検索システムを作りたいわけではありません。
次のセッションで、
- 今、何をしているのか
- 次に何をするのか
- 何に注意する必要があるのか
が分かれば十分です。
既存ツールも調べてみた
作り始めたあとで、似たようなツールがないか調べてもらいました。
特に近かったのが claude-mem です。
比較すると、次のような違いがあります。
| llmctx | claude-mem | |
|---|---|---|
| 主目的 | 作業の再開地点を残す | 長期記憶を構築する |
| 保存単位 | user/assistantターン | ツール操作を含む観測 |
| 出力 | session.md |
DB+検索結果+要約 |
| データ構造 | Markdown+JSONL | SQLite+ベクトルDB |
| LLM依存 | MVPではほぼ不要 | 要約や検索で強く使用 |
| 導入負荷 | 軽い | 比較的重い |
| 人間による確認 | ファイルを直接読める | UIや検索経由が中心 |
| 方向性 | 「現在地」 | 「過去を思い出す」 |
似たようなことを考えている人は、やはりいるのだなという印象でした。
ただ、私が欲しいのは長期記憶ではありません。
過去の情報を大量に蓄積して検索するというより、作業を再開するための小さな引き継ぎファイルが欲しいだけです。
そのため、llmctxではMarkdownとJSONLを中心にして、できるだけ単純な構成にしています。
Codexで実装しました
せっかくChatGPT Plusへ課金したので、実装にはCodexを使いました。
そして、ひとまずMVPが完成しました。
GitHubで公開しています。
詳しい使い方はREADMEに書いてあります。
大まかな流れとしては、ビルドしたバイナリを適当な場所へ置き、initコマンドを実行します。
そこで、使用するワークスペースやリポジトリ、logや引き継ぎ情報を保存するディレクトリなども設定します。
設定後はHookを通して、会話内容の保存やsession.mdの生成、次のセッション開始時の読み込みが行われます。
別のワークスペースで再びinitを実行すると、そのワークスペースも別のコンテキストとして登録されます。
たとえば、ワークスペースAとワークスペースBを行き来した場合でも、それぞれに対応したsession.mdが生成され、保存され、読み込まれます。
また、一つの開発対象が複数リポジトリに分かれている場合でも、同じワークスペースのコンテキストとしてまとめて扱えます。
あくまで簡易的な引き継ぎツールです
llmctxは、何でも記憶してくれる高度なAIメモリシステムではありません。
あくまで、セッションを切り替えたあとに作業を再開しやすくするための、簡易的な引き継ぎツールです。
内部で生成しているsession.mdも、人間が直接読んだり編集したりできます。
データベースや常駐サーバーを用意せず、できるだけ小さく、壊れたときにも中身を確認できる構成を目指しました。
まだMVP段階ですが、同じようにCodexのセッション切り替えを面倒に感じている人がいれば、試してもらえるとうれしいです。
興味のある方は、どうぞ使ってみてください。