Skip to content
use-cases / tail-your-agent-on-the-train / hero
PIPE · TAIL · NOTIFY

Tail your agent on the train, get pinged when it lands

You kicked off a forty-minute agent before leaving the office. Now you're on the train. The agent streams its trace to a pipe path; you curl the same URL from your phone and watch state messages drift by. When the loop ends, hoody-notifications buzzes you. Two URLs and a buzz — no SDK, no dashboard, no polling.

Read the Pipe API
use-cases / tail-your-agent-on-the-train / surfaces

One phone, two surfaces

Live tail above, push notification below — same phone, same agent. The trace is the running monologue you glance at; the notification is the full stop. You don't have to choose which one to wire up: both come from the agent, both land on the device that's already in your pocket.

01 · LIVE TAIL

The trace, character by character

Your agent's loop pipes each event into a path with PUT. From the train, you GET the same path in a terminal app. Lines land as they happen — no five-second refresh, no "last updated" stamp. You glance at the screen, see the agent is alive, and put the phone away.

[think] plan: dump → diff → write[tool_use] sql.exec("SELECT …")[result] 412 rows · 88 ms
02 · PUSH

The buzz, on the way to your stop

When the outer loop finishes, the agent's last call hits hoody-notifications with a one-line summary. Your phone vibrates. You don't unlock — you read the banner, and you know the run completed before you even pull into the next station.

AGENT · billing-reconcile-7Reconcile finished · 412 rows · 0 errorscompleted in 41:08 · 08:55

Hoody Pipe carries the live tail; hoody-notifications carries the buzz. The agent treats them like any other HTTP call — a PUT and a POST, no SDK in between.

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

Three calls from the agent. None from your laptop.

The agent runs on a server you set up before you left. While you're moving, your phone is the only client in the loop. The agent does all the work; the phone does all the watching.

agent.loop · pipe + notify
01 · AGENTPUT each step into a pipe path

Inside the loop, every event — think, tool_use, result — is piped to a single path. The pipe streams to whoever is reading; if no one is reading yet, the path holds open for up to five minutes.

PUT https://agent-pipe.…hoody.com/api/v1/pipe/agent-trace
02 · PHONEGET the same path from the train

Open a terminal on the phone. curl -N the path. The trace prints as it lands — no SSE plumbing, no broker, no app to install. Close the tab when you don't want to look anymore.

$ curl -N https://agent-pipe.…hoody.com/api/v1/pipe/agent-trace
03 · NOTIFYThe agent's last act is a POST to /notify

When the outer loop returns, the agent posts a one-line summary to hoody-notifications. Your phone gets the system push from there — same buzz as a calendar reminder, no app required.

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

Two HTTP paths and a third for the buzz. The agent doesn't know your phone exists; it just speaks HTTP. The phone doesn't know the agent's container; it just opens a URL.

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

Anatomy of a glance

You don't read every word. You scan three tokens: a thought, a call, a result. If they're moving, the agent is alive. If they stop, you check the time on the next push.

01 · BLUE

[think] — what the model is planning

Why the agent picked this tool, what it expects back, where it might branch. Reading these on a train is reading the agent's mind in real time — one line per reasoning step.

[think] reconcile invoices for jul
02 · NEUTRAL

[tool_use] — the call it just fired

The exact function and arguments the agent decided to invoke. One line per call, in the order they fired. No SDK abstraction, no opaque ID — just the wire-level request.

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

[result] — what came back, and the buzz

Row counts, durations, status codes — the things the next [think] line will reason about. When the outer loop finishes, the final result lands on the wire and hoody-notifications buzzes the phone in your pocket.

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

Your phone is the agent's status bar.

No dashboard. No app. No SDK shipped to the device. The agent runs on a server, the status lives on your phone, and the only thing in between is HTTP. You can switch trains, switch carriers, lose signal for two stops — when you reconnect, the next [result] line keeps printing.

  • no dashboard
  • no app
  • no polling
  • just HTTP
Read the Pipe API
use-cases / tail-your-agent-on-the-train / replaces

What this replaces

Watching a long-running agent has historically meant a SaaS, a dashboard tab, or a custom webhook + bot. None of that survives the question "what if I just curl it from my phone?".

  • AgentOps / LangSmith dashboardsA SaaS layer to read your own logs
  • Datadog APM for agentsBuilt for services, awkward for loops
  • Custom agent webhooksGlue you write once, debug forever
  • Pushover alertsOne more account, one more API key
  • Telegram status botsA bot per project · token rot
  • Polling /status every 5 secondsLatency you invented · battery you spend
use-cases / tail-your-agent-on-the-train / cta

Pipe the trace, post the buzz. Your phone is the agent's status bar — no app required.

Read the Pipe API
use-cases / tail-your-agent-on-the-train / related

Read the others