請負や企業内利用を想定した、コードを外部に出さない設計の AI コーディングエージェント IDE「Teaspoon IDE」の正式版 v1.0.0 をリリースしました。
9月の初公開から2週間弱、ほぼ毎日アップデートを重ねて v0.1.0 → v1.0.0 まで来ました。旧名 Forger から改名した経緯も含め、この記事では「Teaspoon IDE とは何か」から「正式版までに強化した点」までをまとめて紹介します。
Teaspoon IDE とは
ファイルエクスプローラー、Monaco エディター、AI チャット、Git 操作、真の TTY 対応ターミナルが一体になった Electron 製アプリです。VS Code フォークでも拡張機能でもない、単体で動く独立アプリです。
AI がファイルの一覧取得・読み込み・検索・編集を複数ステップで自律実行するエージェントループを持ち、書き込み・差分編集・コマンド実行はすべて承認ダイアログ経由。チェックポイント/ロールバックで AI の変更だけを安全に取り消せます。
なぜ作ったか
実務で AI コーディングツールを使おうとして感じた不満がきっかけです。
- 守秘義務情報を外部サーバーに送りたくない — 請負業務での成果物作成など、企業内での利用を考えると、コードやエンジニアリングの知見がベンダーのサーバーを経由する設計は避けたかった
- VS Code 拡張の呪縛 — 拡張機能は他の拡張と組み合わせられて便利な反面、GitHub Copilot との干渉・競合に悩まされます
- 入門者に分かりやすい UI が欲しい — AI エンジニアリングの入門者には、エクスプローラー・エディター・コンソール・AI チャットが独立したペインとして見えている方が圧倒的に分かりやすい
- 承認なしの書き換えは認知負荷が高い — AI が勝手にソースを書き換えると、レビュアーである人間の負担がとんでもないことになる。だから承認ダイアログとロールバックを必須にしました
- DinD 前提のツールは導入ハードルが高い — Docker-in-Docker で動く便利な OSS エージェントもありますが、入門者には辛い。単一 exe で動くものが欲しかった
- 高い課金ができない組織もある — 人月ビジネス脳から抜け出せない経営層の組織では、月額サブスクの AI IDE の導入自体が難しいのが現実です
ないものは作ってしまえ、ということで AI を使って作りました。
Forger → Teaspoon IDE への改名
初公開時の名前は「Forger」でしたが、同名・類似名のプロジェクトが多く検索性が悪かったため、v0.6.0 で Teaspoon IDE に改名しました(パッケージ名・リポジトリも forger-ide → teaspoon-ide)。
「ティースプーン」には「少量のトークンで実作業をこなす(a teaspoon of tokens)」という設計目標を込めています。コストを下げるためのトークン節約設計は、この名前の通りプロダクトの核です。
主な特徴
- アプリ自体は無料(BYOK) — Gemini API キーを自分で持ち込む方式。月額サブスクリプションも API 料金へのマージン上乗せもありません。使った分だけ Google に直接支払います
- 完全オフライン動作 — Ollama + Gemma などのローカル LLM を選べば、通信先は localhost のみ。コードが外部に出ません
- テレメトリーなし — 外部通信は自分が設定した LLM エンドポイントへのリクエストのみ。ソース公開なので「何が送られるか」を自分で検証できます
- 低コスト — Gemini の安価な Flash 系モデルにフォーカス。実測で「オセロを一から作らせてヒント機能追加まで」やって API 料金はおよそ $0.2 でした
- 安全な書き込み制御 — 書き込みはプロジェクト内に限定。作成・差分編集・コマンド実行はすべて承認制
- LiteLLM プロキシ対応 — 本物の API キーをクライアントに置かない運用も可能
- トークン節約設計 — ファイルツリーだけを先に送り、中身は AI が GREP/READ_FILE で必要分だけ取得します
- 日本語 UI — 設定画面からワンタッチで日本語化。メニュー・ネイティブダイアログ・エラーメッセージまで日本語になります
- 14 種のカラーテーマ — システム連動を含む多彩なテーマを内蔵(後述)
v0.1 → v1.0 で強化・改善した点
ここからが正式版までの積み上げです。機能追加と堅牢性向上を分けて列挙します。
AI エージェントの実用性
-
エージェントループの大幅な堅牢化 — 弱いローカルモデルが出しがちな「壊れたコマンド出力」への対処を網羅的に実装しました。
- マークダウン ``` フェンス内・
:::フェンス内のコマンド記述を正しく解釈/無害化 -
//プレフィックス忘れ、JSON blob 形式でコマンドを吐くモデルへの救済実行 - ファイルパスに文章が接着してくる問題への対処(CJK パスは温存)
- 失敗した WRITE_FILE / EDIT_FILE を「未解決」として追跡し、完了報告だけする嘘を防ぐ仕組み
- テスト失敗を「既存の失敗」と「自分が壊した退行」に区別させる
- コマンド失敗時に出力の末尾と解釈ヒントを返し、無駄な環境探査ループを防止
- 編集エラー連発時は差分構文を諦めて全量 WRITE_FILE に切り替えるよう促す
- マークダウン ``` フェンス内・
- 編集後テストの標準化 — テストスイートがあるプロジェクトでは、編集後に RUN_COMMAND でテスト実行し、退行を直してから完了報告する流れをプロンプトに組み込みました
- 長い会話の圧縮(compaction) — 直近 20 メッセージを超える会話は、古いターンを要約して送るローリングサマリー方式に。小さいモデルのコンテキスト上限を意識せずに長く作業できます
- プロジェクトなしでも動く — フォルダを開いていなくても会話が始められ、AI がファイルを書きたいタイミングで「プロジェクト作成ダイアログ」に誘導します
- CLOSE_PROJECT コマンド — 「プロジェクトを閉じて」という指示を AI が実行可能に
セキュリティ・プライバシー
-
ファイルアクセスの強制スコープ — ファイル系コマンドはプロジェクトルート内に解決される場合のみ受理。
..による脱出、絶対パスでの任意ファイル読み取り、解決失敗時のフォールバック読み込みをすべて塞ぎました -
LLM に絶対パスを送らない — コンテキストとコマンド結果はすべてプロジェクト相対パスに変換。
C:\Users\<名前>のような OS ユーザー名がクラウドプロバイダーに漏れません - API キークリアの2段階化 — 誤操作防止の確認ボタンを挟み、キー以外の設定(モデル選択・プロキシ URL 等)は削除しないように修正
チャット・UI
- アシスタント応答の Markdown レンダリング — 見出し・リスト・表・コードブロックが整形表示(marked + DOMPurify 経由でサニタイズ済み)
- Ollama のストリーミング応答 — ローカルモデルの回答がトークン単位で流れるように。キャンセルが実際に HTTP リクエストを中断します
- 応答時間・モデル名の表示 — 各回答に所要時間と使用モデルが付くので、モデルごとの速度比較が一目で分かります
- チャットフォーカスモード — Ctrl+Shift+B でサイドバー・エディター・ターミナルを隠し、チャットを全画面化。v0.9.0 で追加
- 会話リスト — フォーカスモード時に左のレールで過去の会話を一覧・切替・削除・新規作成
-
会話履歴の永続化 — localStorage から
userData/chat-historyの JSON ファイルへ移行。容量制限と喪失リスクを解消し、プロジェクト未オープンの会話も保存・復元されます - エクスプローラーの自動更新 — 外部エディタや git checkout による変更をファイル監視で即時反映。Git パネルも同じ信号で更新
- 右クリックメニュー — Electron 標準では存在しないコンテキストメニュー(コピー・ペースト等)を実装
- ターミナルの自動フォロー — スクロールアップで追従を一時停止、送信で再開。完了したコマンドブロックは1行に折りたたまれます
- 設定画面の折りたたみパネル化 — v1.0.0 で外観・AIコンテキスト・LLMプロバイダー・プロキシ・履歴を折りたたみ可能に整理
Git 連携
-
GUI で完結する Git — ステージ/コミット/Push・Pull に加え、リポジトリのクローン、リモート追加・更新、初回コミット、upstream 付き push、
user.name/user.email設定までダイアログで実行可能になりました - プロジェクトフォルダを OS で開く — エクスプローラーヘッダーから一発でファイルマネージャーを起動
組織モード(一元管理)
v0.5.0 で追加した、会社・学校向けの管理モードです。
- サインインゲート — 「組織のサインインを必須にする」を ON にすると、組織サーバーが発行したアカウントでのサインインまでアプリが使えません
- 仮想キー方式 — サインインするとサーバーからユーザー専用の仮想 API キーが発行され、AI リクエストは組織の LLM プロキシ経由に。本物の API キーは端末に届きません
- 予算バッジ — チャットヘッダーに割り当て予算の残量を%表示(金額は非表示)。20% 未満で警告色、0% で赤に
- モデル許可リスト — 使えるモデルはサーバーが制御。個人のモデル設定は組織モード中ロックされます
テーマ(全14種)
設定画面から選べるテーマが大幅に増えました。それぞれエディターの Monaco テーマも専用設計です。
- Dark / Light / System / Organic Light — 基本4種(旧 Quiet Light は暖色系の独自配色として改名)
- Muted Ocean — 深夜の海を思わせる落ち着いたブルー
- Ancient Console — 緑燐光CRTへのオマージュ。目に優しいくすんだ緑
- Walnut — 深い木目に金属的な文字色のウッディダーク
- Heritage — ベージュ筐体のレトロPC風ライト
- Rich Wine — バーのワイン棚のような赤みのあるダーク
- Violet Fizz — バイオレット・フィズのカクテル色。深い菫色に月光の黄
- Otegami — 生成りの和紙に墨の濃淡と落款の朱。日本の書簡をモチーフにしたライトテーマ
- Soda Float — 水色のソーダに白い泡のファンシー配色
- Modern Syntax eXtensible — レトロパソコンの青い画面に。略すと・・・
- Chaya — 深い茶畑の緑を背景世界にした有機的ダーク
- Coquette — リボンとレースのペールピンクライト
日本語 UI ではこれらも日本語名に翻訳されます(例: Otegami → お手紙、Modern Syntax eXtensible → 8bitの青春)。
国際化
-
日本語化の徹底 — v1.0.0 で
lang/ja.jsonを大幅拡充。アプリケーションメニュー・右クリックメニュー・ネイティブダイアログ(フォルダ選択・エクスポート保存)・IPC エラー・Gemini/Ollama/組織サインインのエラーメッセージまで日本語で統一されました -
翻訳ファイルはユーザー追加可能 —
lang/<言語コード>.jsonを置くだけで独自言語を追加できます
品質基盤
-
コマンドパーサーの単体テスト — 実際に遭遇した全ての壊れたモデル出力を
npm run test:parserで検証 -
E2E テストスイート — Playwright で実アプリを起動し、Gemini エンドポイントをスタブして承認フロー・パーサー・履歴保存を自動検証(
npm run test:e2e) -
サイト刷新 — 製品ページ・設定ガイド・利用例・テーマ一覧を
cuculhart.comに整備
技術スタック
Electron / React / TypeScript / Monaco Editor / Gemini API・Ollama / Vite / Playwright(E2E)
ライセンスについて
FSL-1.1-MIT(ソース公開型)です。MIT とは少し違いますが、通常の利用は無料で自由です。
- できる: ダウンロード・利用(個人・業務問わず)、改造・カスタマイズ、社内ツールとしての導入、ライセンス条文と著作権表示を残した上でのフォーク・再配布
- できない: Teaspoon IDE と競合する商用製品・サービスとしての利用(例: リネームしたクローンの販売)
- 各リリースは公開から 2 年後に自動的に MIT ライセンスへ移行します
使い方・リンク
ダウンロード(Windows ポータブル exe / Squirrel インストーラー / Linux deb):
https://github.com/cuculhart/teaspoon-ide/releases
設定ガイド(Gemini API キー、Ollama、OpenAI 互換 API、組織モード):
https://cuculhart.com/teaspoon-howto.html
利用例(AI にオセロを作らせる一連の流れ、実コストの記録付き):
https://cuculhart.com/teaspoon-usecase.html
テーマ一覧(全14種のスクリーンショット):
https://cuculhart.com/teaspoon-theme.html
フィードバック・不具合報告は GitHub Issues でお願いします。
https://github.com/cuculhart/teaspoon-ide/issues