Utah(Universally Triggered Agent Harness の略)は、ツール、メモリ、サブエージェントへの委任、完全な耐久性を備えた Telegram または Slack 向けの対話型エージェントであり、Inngest が構築し、エージェントに必要なのはフレームワークではなくハーネスである で紹介された。エージェントフレームワークを使わず最小限の TypeScript で書かれており、標準的な think → act → observe ループを取り囲むハーネスを Inngest の関数、ステップ、イベントが提供する。同社は、耐久性のあるイベント駆動型のインフラストラクチャがエージェントの エージェントハーネス として機能しうることを示すためにこれを構築した。記事はこれを、耐久性を持ちクラウドに対応した OpenClaw になぞらえている。ソースコードはリファレンス実装として https://github.com/inngest/utah で公開されている。

「Universally triggered(あらゆる方法で起動される)」とは、エージェントが自分がどのように起動されたか(チャットの webhook、cron スケジュール、サブエージェントとしての呼び出し、関数間のイベント)を知らず、気にもかけないことを意味する。そのため、エージェントループを変更せずに新しいチャネルを追加できる。

機能

チャットの webhook は Inngest Cloud に届き、そこで webhook 変換が生の HTTP ペイロードを型付きのイベントに変換する。ローカルで動作するワーカーは、公開エンドポイントを必要とせずに永続的な WebSocket で Inngest Cloud に接続しており、そのイベントを受け取ってエージェントを実行し、返信イベントを発行する。その返信イベントは、別の関数がチャネル自身の API を通じて送り返す。

  • ステップとしてのエージェントループ。 各反復では LLM を呼び出し、LLM が要求したツールを実行し、その結果をフィードバックする。すべての LLM 呼び出しとすべてのツール実行が Inngest のステップであるため、失敗した呼び出しはそれ単体で再試行され、それ以前の反復は永続化されたまま残る。ツール呼び出しを含まないテキスト応答でそのターンは終了する。
  • 6 つの関数。 エージェントは、メインループ、返信送信、即座に発火する入力中インジケーター、グローバルな失敗ハンドラー、スケジュールされたハートビート、サブエージェント関数に分割されており、それぞれが独自の再試行ポリシー、並行性制御、トリガーを持つ。
  • ツール。 ファイルの読み取り・書き込み・編集、シェル実行、検索は pi-coding-agent ライブラリから提供される。Utah はこれに remember(日次ログへのメモ)、web_fetch、delegate_task を加えている。
  • サブエージェント。 delegate_task は、独自のセッションキー、コンテキストウィンドウ、耐久性を持つ別のサブエージェントの実行を開始する。サブエージェントは delegate_task を除く同じツールを使うため、さらにサブエージェントを生成することはできず、親に要約を返す。
  • 会話ごとに 1 つの実行。 セッションをキーとするシングルトン並行性制御により、新しいメッセージが届くと実行中のループがキャンセルされ、最新のコンテキストで再開される。
  • コンテキスト管理。 コンテキストが大きくなると、直近 3 回の反復はそのまま残しつつ、古いツール結果をソフトトリムまたは消去する。セッション履歴はトークン数がしきい値を超えると実行と実行の間に要約される。反復回数の上限に近づくとエージェントに警告が出る。そしてコンテキストが大きすぎるというエラーが起きると、強制的な コンパクション と再試行が行われる。
  • モデルプロバイダー。 LLM 呼び出しはプロバイダー非依存の抽象化である pi-ai を経由するため、Anthropic、OpenAI、Google の切り替えは設定の変更で済む。

採用とエコシステム

Utah は、記事がそのインスピレーション源として挙げる OpenClaw と pi のコーディングエージェント用ライブラリを土台にしているが、それらがイベントとオーケストレーションをメモリ内で処理するのに対し、Utah はオーケストレーションを Inngest に委ねている。記事は、この分離によって、トレースとステップ単位の検査、再試行、イベントの監査証跡、組み込みのスケジューリング、そして分散型・マルチプレイヤー型のオーケストレーションに向けた基盤が得られるとしている。公開された時点では、ローカルマシンまたはサーバー上で動作する個人向けのシングルプレイヤー型のハーネスである。作者たちは、実行中に届いたメッセージによる舵取りは未解決であるとし、マルチプレイヤー化、進捗の更新のストリーミング、ヒューマン・イン・ザ・ループの承認フロー、そして新しいエージェントやワークフローを自ら構築できるようにすることを、検討中の事項として挙げている。