Show HN: Omnara – Claude Managed Agents のオープンソース代替
Show HN: Omnara – Open-Source Alternative to Claude Managed Agents (github.com)
要約
Omnara は、耐久性のあるエージェントを実行するためのオープンソースAPIです。エージェントはAPIコールで作成され、Omnara がエージェントループを実行し、コマンド実行用のサンドボックスを提供し、シークレット、パーミッション、RBAC を管理します。エージェントの状態は Postgres に保存され、再起動後も維持され、アイドル時にはコストがかかりません。Anthropic や OpenAI が提供するマネージドエージェントのオープンソース版として、独自のサーバーで実行し、独自のモデルを使用できます。
全文翻訳
皆さん、こんにちは。Omnara (https://omnara.com) の Kartik です。私たちは、耐久性のあるエージェントを実行するためのオープンソースAPIを構築しています。APIコールでエージェントを作成すると、Omnara がエージェントループを実行し、エージェントにコマンドを実行するためのサンドボックスを提供し、シークレット、パーミッション、RBAC を処理します。各エージェントの状態は Postgres に保存されるため、エージェントは再起動後も存続し、アイドル時にはコストがかかりません。API経由でエージェントにメッセージを送信したり、そのイベントをストリーミングしたりできます。
初期の頃、Claude Code と Codex 用のリモートコントロール電話アプリを作成したのを覚えているかもしれません。当時、ハーネスはラップトップで実行されていたため、それに到達するためのリレーを構築する必要があり、ラップトップが閉じると停止しました。また、クラウドサンドボックスに移動するには、マシン間でコードとエージェントの状態を同期する必要がありました。ローカルエージェントのリモートコントロールがエージェント実行の最終形態であるとは考えていなかったため、エージェントがクラウドで実行され、任意のクライアントがAPI経由でそれに接続でき、ラップトップをそのマシンの1つとして使用できる新しい製品を構築しました。
Anthropic と OpenAI は、Claude Managed Agents や OpenAI Agents API のようなホスト版を構築しています。Omnara は、独自のサーバーで実行し、独自のモデルを使用できるオープンソースバージョンです。基本的に、opencode や codex サーバーのようなハーネスサーバーですが、耐久性があり、スケーラブルで、ファイルやシェルツール、サブエージェント、コンパクション、パーミッションプロンプト、MCP、スキル、メモリなど、通常のハーネス機能を備えています。
これを構築する上で、私たちが下した興味深いアーキテクチャ上の決定をいくつか紹介します。
Claude Code、Codex、OpenCode、Pi、Goose など、ほとんどのハーネスは、JSONL または SQLite ファイルにログを保持する、単一の長時間実行プロセスでエージェントループを実行します。Omnara では、ログは Postgres の追記専用イベントログであり、入力、モデル出力、ツール呼び出しは、独自のテーブル内の型付き行として保存されます。ループは、コントロールプレーンのステートレスワーカーで実行されます。ワーカーはループの1回のイテレーション(モデル呼び出しまたはその生成したツール呼び出し)を実行し、エージェントを解放して、次のイテレーションを Postgres のキューに入れます。空いているワーカーがそれをピックアップするため、エージェントループの各イテレーションは、異なるマシン上の異なるプロセスで実行される可能性があります。各イテレーションの結果は1つのトランザクションでコミットされるため、モデル出力、そのツール呼び出し、使用量、次のウェイクアップがまとめて保存されるか、まったく保存されません。ワーカーがイテレーション中に死亡した場合、何もコミットされず、そのリースは期限切れになり、別のワーカーが再試行します。ユーザー、ツール、または再試行を待機しているエージェントはワーカーを保持しないため、1つのワーカーで数千のエージェントを多重化できます。
また、他のハーネスとは異なり、ワーカー(エージェントループ)が実行されるマシンは、エージェントがコマンドを実行する場所ではありません。代わりに、インターネット接続を持つ任意の macOS または Linux マシン(ラップトップやクラウドサンドボックスなど)が、Omnara に接続する小さなデーモン(omnarad)を実行できるため、インバウンドポートを開く必要はありません。エージェントは、そのマシン用のツール(コマンドの実行やファイルの編集など)を取得します。エージェントは、任意の数のマシンをそれに接続できます。私が好きな面白いことの1つは、ラップトップとクラウドサンドボックスを同じエージェントに接続していることです。ラップトップがオンになっているときは、エージェントがそこでコーディングし、対話できます。そして、しばしば GitHub にプッシュします。ラップトップを閉じると、エージェントはラップトップがオフラインになったことを検出し、クラウドサンドボックスに変更をプルして、そこで続行します。
コードベース全体は https://github.com/omnara-ai/omnara でオープンソース化されており、Docker Compose を使用すれば単一のマシンでも自己ホスト可能です。ホスト版は https://omnara.com でも利用できます。ご意見をお聞かせください!