コンテンツにスキップ
use-cases / tail-your-agent-on-the-train / hero
PIPE · TAIL · NOTIFY

電車内でエージェントを tail し、終了したら通知を受ける

オフィスを出る前に 40 分のエージェントをキックオフしました。いま電車の中。エージェントはトレースをパイプパスにストリーミングし、スマホから同じ URL を curl して状態メッセージが流れていくのを眺めます。ループが終わると、hoody-notifications がブザーを鳴らします。2 つの URL とブザー — SDK もダッシュボードもポーリングもなし。

Pipe API を読む
use-cases / tail-your-agent-on-the-train / surfaces

1 台のスマホ、2 つの面

上にライブ tail、下にプッシュ通知 — 同じスマホ、同じエージェント。トレースは流れ続けるモノローグでチラ見するもの。通知は終止符。どちらを配線するか選ぶ必要はなく、両方ともエージェントから来て、すでにポケットの中にあるデバイスに着地します。

01 · LIVE TAIL

トレースが、文字単位で

エージェントのループが各イベントを PUT でパスに流します。電車の中から、ターミナルアプリで同じパスを GET します。行が起きたとおりに着地します — 5 秒のリフレッシュも、「最終更新」のタイムスタンプもありません。画面を見て、エージェントが生きているのを確認し、スマホをしまいます。

[think] 計画:ダンプ → 差分 → 書き込み[tool_use] sql.exec("SELECT …")[result] 412 行 · 88 ms
02 · PUSH

ブザーが、降りる駅に向かう途中に

外側のループが終わると、エージェントの最後の呼び出しが 1 行のサマリーとともに hoody-notifications に届きます。スマホが振動します。ロック解除しなくても — バナーを読むだけで、次の駅に着く前に実行が完了したのが分かります。

AGENT · billing-reconcile-7照合完了 · 412 行 · エラー 0 件41:08 で完了 · 08:55

Hoody Pipe がライブ tail を運び、hoody-notifications がブザーを運びます。エージェントは他の HTTP 呼び出しと同じように扱います — PUT と POST、その間に SDK はありません。

use-cases / tail-your-agent-on-the-train / wire

エージェントから 3 回の呼び出し。ノートパソコンからは 1 回もなし。

出かける前にセットアップしたサーバーでエージェントが動作します。移動中、ループの中の唯一のクライアントはスマホです。エージェントがすべての作業をし、スマホがすべての監視をします。

agent.loop · pipe + notify
01 · AGENT各ステップをパイプパスに PUT

ループの中で、すべてのイベント — think、tool_use、result — が 1 つのパスにパイプされます。パイプは読んでいる相手にストリーミングし、まだ誰も読んでいなければパスは最大 5 分間オープンを保ちます。

PUT https://agent-pipe.…hoody.com/api/v1/pipe/agent-trace
02 · PHONE電車から同じパスを GET

スマホでターミナルを開きます。curl -N でパスを叩きます。トレースは着地するたびに表示されます — SSE の配管も、ブローカーも、インストールするアプリもありません。見たくなくなったらタブを閉じます。

$ curl -N https://agent-pipe.…hoody.com/api/v1/pipe/agent-trace
03 · NOTIFYエージェントの最後の行為は /notify への POST

外側のループが返ると、エージェントは 1 行のサマリーを hoody-notifications に POST します。スマホはそこからシステムプッシュを受け取ります — カレンダーリマインダーと同じブザー、アプリ不要。

POST /notify ["summary":"billing-reconcile-7","body":"completed in 41:08"]

ブザー用にもう 1 つ、計 2 つの HTTP パス。エージェントはあなたのスマホの存在を知らず、ただ HTTP を話します。スマホはエージェントのコンテナを知らず、ただ URL を開きます。

use-cases / tail-your-agent-on-the-train / anatomy

ひと目で見るときの構造

すべての単語を読むわけではありません。3 つのトークンをスキャンします:思考、呼び出し、結果。動いていればエージェントは生きています。止まっていれば、次のプッシュで時刻を確認します。

01 · BLUE

[think] — モデルが計画していること

なぜこのツールを選んだか、何を返ってくると見込んでいるか、どこで分岐しうるか。電車でこれを読むのは、エージェントの心をリアルタイムで読むこと — 推論の各ステップに 1 行。

[think] 7 月の請求を照合
02 · NEUTRAL

[tool_use] — 直前に発火した呼び出し

エージェントが呼び出すと決めた正確な関数と引数。呼び出しごとに 1 行、発火順に。SDK の抽象化も、不透明な ID もなし — ワイヤーレベルのリクエストそのものです。

[tool_use] sql.exec("SELECT …")
03 · GREEN

[result] — 返ってきたもの、そしてブザー

行数、時間、ステータスコード — 次の [think] 行が考えるべきもの。外側のループが終わると最終的な結果がワイヤーに着地し、hoody-notifications がポケットの中のスマホを震わせます。

[result] 412 行 · 88 ms
use-cases / tail-your-agent-on-the-train / punchline

あなたのスマホがエージェントのステータスバーです。

ダッシュボードなし。アプリなし。デバイスに送られる SDK もなし。エージェントはサーバーで動き、ステータスはスマホで生き、その間にあるのは HTTP だけ。電車を乗り換えても、キャリアを切り替えても、2 駅分電波を失っても — 再接続すれば、次の [result] 行が表示され続けます。

  • ダッシュボードなし
  • アプリなし
  • ポーリングなし
  • ただの HTTP
Pipe API を読む
use-cases / tail-your-agent-on-the-train / replaces

これが置き換えるもの

長時間動くエージェントを見守るというのは、これまで SaaS、ダッシュボードのタブ、あるいはカスタム Webhook + ボットを意味してきました。「スマホから curl すれば良いだけでは?」という問いの前では、そのどれも生き残れません。

  • AgentOps / LangSmith ダッシュボード自分のログを読むための SaaS レイヤー
  • エージェント向け Datadog APMサービス向けに作られていて、ループには合わない
  • カスタムエージェント Webhook1 度書いて、永遠にデバッグする糊付け
  • Pushover アラートもう 1 つアカウント、もう 1 つ API キー
  • Telegram ステータスボットプロジェクトごとのボット · 朽ちていくトークン
  • 5 秒ごとに /status をポーリング自分で生み出した遅延 · 浪費するバッテリー
use-cases / tail-your-agent-on-the-train / cta

トレースをパイプし、ブザーを POST。あなたのスマホがエージェントのステータスバー — アプリ不要。

Pipe API を読む
use-cases / tail-your-agent-on-the-train / related

他のユースケースを読む