Prospero: より文明的な時代のための新しいコーディングハーネス
Prospero: A new coding harness for a more civilized age (nullprogram.com)
要約
nullprogram.com の著者は、メモリ消費量が膨大でウェブスタックベースの既存のコーディングハーネスに不満を感じ、軽量な C++ 製ハーネス「Prospero」を開発しました。Prospero は、AI エージェントがツールと対話したり、サブエージェントを生成したり、リモートシステムで動作したりする機能を、従来のハーネスの数百分の一のリソースで提供します。また、タイムアウト、プロセス管理、デスクトップ制御などの革新的な機能により、AI エージェントの効率と信頼性を向上させています。
全文翻訳
Prospero: より文明的な時代のための新しいコーディングハーネス
2026年10月31日
私は数年前からローカルLLMに魅了されています。より優れたオープンウェイトモデル、特に一般的なハイエンドコンシューマーハードウェアで許容可能な速度で推論できるものは、簡単なプログラミングタスクを処理できるほど信頼性が高くなりました。これにはコーディングハーネスが必要ですが、今年のこれまでのところ、すべてのハーネスの提供に失望しています。説明のつかない理由で、ほとんどがウェブスタックで構築されており、膨大な量のメモリを消費します。本質的に、コーディングハーネスは popen() に curl を貼り付けたようなものです。これにギガバイトのRAMが必要なはずがありません。そこで私は自分で作りました: Prospero。これは私のC++スタイルで書かれており、軽快なDear ImGuiドッキングインターフェースを備えています。機能性を犠牲にすることなく、他のハーネスよりも2桁少ないリソースしか消費しません。
[画像: ダークモードのインターフェース]
ダークモード愛好家にも対応しています:
[画像: ダークモードのインターフェース]
Prospero には、モデルプロバイダーは組み込まれていません。自分で用意する必要があります。例えば、職場でのオンプレミスモデルである llama.cpp や、OpenRouter、Anthropic API、OpenAI API などです。(Claude のサブスクリプションは使用できません。)
コーディングハーネスに慣れていない方のために説明します:チャットインターフェースでは、あなたとAIが交互にメッセージをやり取りします。コーディングハーネスはこの概念を拡張し、AI がハーネスが提供するツールと「対話」できるようにします。ツールは出力で「応答」します。ツールはファイルの読み書きやシェルコマンドの実行を行うことができます。AI は、ツール呼び出しからツール呼び出しへと自律的に進み、結果をループさせます。このようなAIはエージェントと呼ばれます。時折、AI は進捗状況を通知したり質問したりするためにあなたにメッセージを送信し、チャットインターフェースは依然としてそこにあります。
Prospero を含む一部のハーネスでは、エージェントがサブエージェントを生成して指示を実行させ、並列処理を行ったり、コンテキストをクリーンに保ったりできます。つまり、ワーキングメモリをサブタスクで埋めないようにします。エージェントは互いにメッセージを送り、タスクを調整できます。別のマシンへの SSH アクセスがあれば、またはプレーンな WSL 経由で、Prospero は他のホストにヘッドレスコピーを展開できるため、エージェントはそれらのシステム上で操作できます。Professional Edition は、macOS、Windows、Linux 上の x86/x86-64 および ARM64 の組み合わせ用のエンジンを組み込んでいます。Windows x86 エンジンは Windows XP でも動作し、尋ねればソリティアやマインスイーパをプレイすることもできます。
後者は、Prospero がデスクトップ制御機能を持つ数少ないハーネスの1つであるためです。モデルがビジョンをサポートしている場合(使用する価値のあるモデルならどれでも)、デスクトップを「見て」操作できます。GUI アプリケーションをライブでテストおよびデバッグするために、特殊なアプリごとの MCP アシストなしで、クリック、タイピング、ドラッグが可能です。
このヘッドレスエンジンがあるため、TUI は不要です。ハーネスエンジンはヘッドレスシステム上で実行され、UI はデスクトップまたはラップトップ上で実行されます。少し追加の設定を行うことで、ハーネスは GUI から完全に独立して実行できるようになり、GUI システムが接続されていなくても継続し、後で再接続できるようになります。
Prospero は非常に軽量であるため、ファズキャンペーンを、特にヘッドレスシステム上で、Linux の OOM Killer がメモリを食い尽くすハーネスではなく、それを引き起こした制御不能なファズターゲットを標的にすることなく、実行できる唯一のハーネスかもしれません。ファズキャンペーンを数時間後に確認すると、ハーネスプロセスが消滅したため何も達成されていなかったことが何度もありました。
(なぜエージェントにファズキャンペーンを実行させるのか? バグを発見したらその場で修正し、キャンペーンを継続できるからです! 当然のことです。)
設定
設定は ~/.config/prospero/prospero.ini にあります。編集は簡単です。JSON でなくて、本当に良かった。ソース管理にチェックインしたり、コピー&ペーストしたりできます。通常のメリットすべてです。あるいは、GUI から設定ページにアクセスすれば、INI ファイルを手動で編集する必要はありません。INI ファイルは、ファイルシステムパスだけでなく URL も指定して、互いに含めることができます:
include = https://example.com/prospero.ini
ライブで共有または管理される設定を可能にすることが目的です。URL によるインクルードは、設定できる内容に制限があり、シェルコマンドに現れる可能性のあるものに対しては厳格なルールがあります。設定は、API キーとして環境変数を使用し、自身が制御するエンドポイントを提供することで、環境変数を抽出できるため、ある程度の信頼は依然として必要です。
Prospero はモデルリストやコンテキストサイズなどのパラメータをエンドポイントから取得しますが、調整したい場合があります。典型的な設定は次のようになります:
model = falstaff/Qwen3.8-27B
[endpoint falstaff]
url = http://falstaff.local/
key = env:FALSTAFF_API_KEY
[model Qwen3.8-27B]
edit_format = replace
template.reasoning_effort = medium
[model Qwen3.8-27B-xhigh]
like = Qwen3.8-27B
template.reasoning_effort = xhigh
[web]
search = searxng
url = https://search.example.com/
key = env:EXAMPLE_API_KEY
パッシブレンダリング
ImGui パラダイムは通常、ビデオゲームのように vsync で再描画するアクティブレンダリングを使用します。これは、ビデオゲーム内のインターフェースなど、一部のコンテキストでは適切です。コーディングハーネスのような、ほとんど静的なテキスト指向の UI にはそれほど適していません。代わりに Prospero は、アニメーションが完了してからアイドル状態に入るためのセトルフレームを備えたパッシブレンダリングを使用します。やることがないときは、Prospero は何も行いません。エージェントがビルドを待っている間に GPU を消費することはありません。
決して永遠に待たない
他のほとんどのハーネスの悩みの種は、いかに簡単にスタックするかということです。長時間実行タスクを設定し、寝て、朝になると、夜の2時間前の些細な問題でハーネスがハングアップしており、無駄にしていたことに気づきます。したがって、Prospero の主要な設計原則は決して永遠に待たないことです。すべての操作には期限があります。この決定はすべてに影響を与えます。要求された権限を付与するためにあなたがそこにいない場合、エージェントはタイムアウトによる拒否を受け取り、それなしで済ませなければなりません。支援のために、エージェントがあなたの注意を必要とするとき、Prospero はシステムトーストを上げるため、あなたがそれに気づかない可能性が低くなります。
Harness 自体は断続的なエラーを乗り越え、エージェントにタスクを完了させようと最善を尽くします。すべてのネットワークリクエストにはタイムアウトがあり、ウォッチドッグは無限の待機を防ぎます。エージェントのメールボックスはバウンドされています。
タイムアウトに達したシェルコマンドは、非同期バックグラウンドコマンドに変換されます。エージェントは、タイムアウト付きでそれらを待ち続け、定期的にウェイクアップされて続行するかどうかを決定します。
唯一の例外はプランモードで、プランを提示したり明確化を要求したりした後(ask_user ツール)、無期限に待機します。プランモード中はユーザーがエージェントに対応していることが期待されます。
迷子のプロセスなし
私が使用したハーネスは改善されましたが、今年の初めのもう一つの定期的な悩みは、エージェントがクリーンアップされないプロセスを開始することでした。エージェントが並列ビルドを開始し、楽観的すぎたためにタイムアウトに達し、ビルドシステムの一部をキルしてビルドを「停止」します。しかし実際には、ビルドは少なくとも一部は続行されます。エージェントが再試行し、2つのビルドが同時に実行され、互いに干渉し、システムを混乱させて私のシステムを膝まずかせます。
しばらくの間、特定のハーネスでエージェントにビルドを実行させることをためらっていました。これはひどい結果です。エージェントにループを閉じさせ、独立して反復させたいのです。人間をループに入れることは、エージェントにボールとチェーンを付けるようなもので、その利点のほとんどを放棄することになります。
Prospero が同期タイムアウトを非同期タスクに昇格させることは、それ自体で大きな改善ですが、さらに原則が働いています:プロセスツリー全体は一緒に生き、一緒に死にます。コマンドが停止されたとき、それは停止します。これはWindows では些細なことですが、ほとんどのハーネスがそれを活用しているわけではありません。macOS と Linux ではより困難ですが、Prospero はそれを実行します。
組み込みセルフヘルプ
すべてのハーネスと同様に、Prospero はスキルをサポートしています。これは、特定のタスクを達成するための事前パッケージ化された一連の指示です(「私はカンフーを知っている」)。Prospero には、それ自体に関するスキルが含まれており、組み込みドキュメントを読むことができます。エージェントに Prospero で何かを行う方法や設定する方法を尋ねると、エージェントはあなたの質問に答えるだけでなく、UI の関連箇所にあなたを連れて行くハイパーリンクを提供できます。また、prospero.ini を編集してリロードし、あなたの代わりに設定することもできます。これは Prospero だけの機能ではありませんが、これほどうまくやっているハーネスは他に知りません。
シェルを選択
Windows では、Prospero は w64devkit とうまく連携するように設計されており、利用可能な場合はそのシェルを優先します。コーディング用に設計されたモデルは、w64devkit をすぐに認識するため、これらのツールは補完的です。もちろん、そのシェルに限定されるわけではなく、別のデフォルトシェルを自由に選択できます。しかし、Prospero はセッション中にシェルを変更できる珍しいハーネスです。タスクによっては PowerShell の方が適している場合があるため、ドロップダウンから選択できます。エージェントには変更が通知され、既知の癖(例:「これは古い Bash です!」)について知らされます。macOS では、bash と zsh を切り替えることができます。
通常の機能
Prospero には、高度なシェルに期待される通常の機能があります。Git worktrees(サブエージェントの worktrees を含む)を使用できるため、エージェントはリポジトリを共有できます。Model Context Protocol (MCP) をサポートしています。ウェブを検索できます(許可した場合)。コンテキストを共有するサイドチャットを開始できます。これはサブエージェントとして実現されます。セッションをフォークできます。
今のところ、組み込みのターミナルやエディタはありません。代わりに Prospero は、あなたが選択した外部ターミナルまたはエディタを開きます。組み込みの notepad.exe 相当のものより Vim を使う方が好きです。Ctrl+G を使用すると、外部エディタでプロンプトを編集できます。
すべてのハーネスと同様に、権限システムは悪意のあるエージェントを阻止しません。エージェントはあなたのコンピュータ上でプログラムを作成および実行するため、最終的にはハーネスがアクセスできるすべてにアクセスできます。権限は、エージェントにあなたの意図を優しく思い出させ、単純な間違いをキャッチするためのものです。むしろ、「おいおい、プロジェクト内に留まれ」とか、「今はデスクトップを操作しないでください」といった具合です。エージェントを締め出したい場合は、ハーネス自体を制限し、コンテナに入れたり Raspberry Pi に置いたりする必要があります。通常は不便さや有用なリソースのカットオフというコストがかかります。
私は Prospero に本当に興奮しており、正直なところ、これは利用可能な最高のコーディングハーネスの1つだと感じています。このようなツールはこうあるべきですが、これまで誰もそれを実行しませんでした。それを正当に評価するにはビデオが必要でしょうし、おそらくいつかそうするかもしれませんが、それは現在の私の経験を超えています。
私のプロジェクトのほとんどのオーディエンスは、w64devkit でさえホビイストです。しかし、Prospero が私と私の小さなサークルの範囲を超えて広がる場合、ほとんどのユーザーは商用製品を構築するプロフェッショナルになると予想しています。私もこのプロジェクトに時間以上のものを投資しました。これは w64devkit にはすでに当てはまりますが、Prospero ではさらに当てはまります。そのため、オープンソースプロジェクトですが、2つのティアに分けました:
- Community Edition:GitHubで見つかるビルドで、無料です。ヘッドレスエンジンが組み込まれていないため、リモートデプロイメントは制限されます。さらに、Community Edition を使用していることを思い出させる小さな通知テキストがあります。ホビイストに適しています。
- Professional Edition:名目上の料金を支払うと、DRM フリーのダウンロードと無料アップデートが得られます。すべてのヘッドレスエンジンが組み込まれているため、ボタンを押すだけでリモートデプロイメントや他のシステムへのリモートセッションを実行できます。プロフェッショナル向けの重要な機能です。
Windows および macOS ビルドは、両方のケースでコード署名されています(コストの一部)。Prospero がプロフェッショナルとして役立つ場合、リモートデプロイメント機能がなくても、継続的なコストをサポートするためにコピーを購入することをお勧めします!