Get Out of the Chat Box
Here’s how one service — and one line — can change everything.
@zora, can you show me my calendar for tomorrow
I typed that into a Slack thread with my agent last night, expecting the usual tidy paragraph of times I’d have to reassemble in my head. Instead, a window I’d left open on my monitor lit up and painted in a calendar. Today was laid out, and, because I’m on the road, the day after, too. The breakfast meeting. The “Do Not Schedule” block I keep so I don’t lose my mind. All color-coded, merged across my work, personal, and family accounts. I didn’t open an app. I didn’t choose a view. I asked in a chat, and my agent drew me a picture.
I know. A calendar. Big deal. But the point isn’t the calendar, it’s that no one designed it. My agent did — on the spot — because I asked.
Tomorrow, rendered. (And yes, I finally renamed Hermes “Zora.”)
Let’s back up. Your Mac Is a Model Server put a real model on my own metal; The Chat Agent in Your Closet put the harness on a box next to my router, wired into my calendar, my docs, my cart. The model is great and the harness is mine. But every surface I use to reach it — Slack, iMessage, OpenWebUI — answers the same way: in a column of text. I’m a visual person talking to the most capable software I own, and it replies like a brilliant colleague who will not, under any circumstances, turn his screen around to show me what’s on it. I keep wanting to grab it by the shoulders: Just show me what’s on your screen!
That’s the gap. Not the model, not the metal, but what it shows me.
Please Hold While Television Connects You to Your Agent…
My friend Stephen Hood ran the team at Mozilla that originally shipped llamafile. His new company, Telepath, just put out its first product, Television, in alpha. (Disclosure: I’m genuinely excited about this thing, but you should know: as I said, Stephen’s a friend and I’ve been a guest on his podcast. Mozilla Ventures is one of Telepath’s investors, and I’m Mozilla’s CTO.)
Television is a form of generative UI — an interface your agent builds on the spot instead of one a developer shipped you in advance. The idea is having a moment. There’s a whole field forming: CopilotKit and the AG-UI protocol, Vercel’s AI SDK, A2UI, MCP Apps, on up to the labs wiring generative surfaces into their own products. But almost all of it serves one of two customers: a developer adding generative UI to their SaaS, or a lab making its own chat app stickier so you never leave. Television is one of the few pointed solely at your agent. That corner of the field is close to empty, which is the part that interests me. None of this is really about Television, though. It’s the first tool I’ve found aimed at your own agent instead of a platform’s, which is why I’m using it as the example — but the thing that matters is the wall it cracks, not the product on the other side.
Television doesn’t connect to your calendar or your mail; your agent already has those. Instead, it connects to your agent, and it ships as a skill — instructions your agent reads, the same shape as everything else in its skills directory. If your agent can run a command and write a file, it can drive Television. Zora (what I renamed my Hermes) can. So can Claude Code, Codex, or OpenCode.
If you set up your agent the way I did in The Chat Agent in Your Closet, you already have a docker-compose.yml running Hermes and OpenWebUI. You don’t have to replace it. You just add one service — and one line:
# new service: Television, sharing Hermes’s network and home directory
television:
image: nousresearch/hermes-agent:latest # reuse the Hermes image
container_name: television
restart: unless-stopped
depends_on: [hermes]
network_mode: “service:hermes” # live inside Hermes’s network namespace
volumes_from: [hermes] # see the same /opt/data home + skills
user: “10000:10000”
environment:
HOME: /opt/data/home
NPM_CONFIG_PREFIX: /opt/data/home/.npm-global
entrypoint: []
command: >
sh -lc ‘npm i -g @telepath-computer/television
&& tv skills install /opt/data/skills
&& exec /opt/data/home/.npm-global/bin/tv serve --listen 0.0.0.0 --no-auth’# one line added to the existing hermes service:
hermes:
ports:
- “127.0.0.1:32848:32848”Then docker compose up -d --force-recreate hermes television, which blinks Hermes for a second and brings Television up beside it.
A note on something that saved me half an hour: Inside the container, which tv will fail. The binary installs into /opt/data/home/.npm-global/bin/tv and nothing on your PATH finds it, which is why the above command calls it by absolute path. Use the full path everywhere and stop arguing with your shell.
Two things in that snippet are doing the security work. 32848 is Television’s default port. Keep it: The CLI assumes it in a dozen places, and changing it gets you nothing but reachability bugs. The sidecar shares Hermes’s network namespace (network_mode: “service:hermes”), so the two containers see each other on localhost and the port only has to be published once, on Hermes.
The line that matters is 127.0.0.1:32848:32848. That leading 127.0.0.1 publishes the port to the NUC’s loopback only. Not 0.0.0.0. Not the LAN. Not the internet. Just the box itself. Nothing on your home network can reach Television, which is exactly why it’s safe to run with --no-auth. There’s no token to steal because there’s no one who can knock.
Which is why you get in over SSH:
ssh -N -L 32848:127.0.0.1:32848 raffi@nuc-3That forwards your laptop’s localhost:32848 to the NUC’s, through a tunnel SSH has already encrypted and authenticated with your key — the same trick I used for OpenWebUI in the closet piece a few weeks ago. The service binds to loopback and is reachable from nowhere; the tunnel is the one authenticated door.
On the laptop, the client is two commands:
npm install -g @telepath-computer/television-desktop
tv-desktop # point it at http://localhost:32848It opens to a clean, empty window. The first time, I wasn’t sure what to do with it. I launched it and sat there, waiting for something to happen. It wasn’t broken. The client is only a viewer. It shows what your agent has drawn, and until the agent draws something, there’s nothing there. So I went back to Slack and sent Zora that “show me my calendar for tomorrow” prompt. Suddenly, the window woke up.
So I kept asking for things. After the calendar, I wanted the week’s weather. Rather than clear the calendar to make room, Zora set down the forecast beside it. Both stayed. That’s the trick: Television calls the surface a “screen” and the things on it “artifacts,” and artifacts persist. You can arrange them. You can come back to them. A weather card that vanishes the second you ask the next question is a parlor trick. But one that stays — alongside the four other things you pulled up while you were thinking — is a workspace.
Two artifacts, one screen, both still there. The forecast even cites its source. What my agent draws is more than decoration.
A word on the speed, because it’s the first thing you’ll feel: It’s slow. Not charmingly slow. Slow enough that I watched the calendar paint in and my attention wandered before it had finished. At this speed, it’s a thing you demo. It has to become a thing you leave open all day, and the gap between those two is about 10x. I’m not going to guess how they close it. They shipped the difficult thing — reading a request, deciding a calendar was the right answer, and drawing one — and left the speed for later. Usually it runs the other way, so I’ll take that trade.
I didn’t install a calendar app. I didn’t pick a template. My agent read a request, decided that a calendar was the right format for the answer, and rendered one. The interface was generated from the intent, the same way the actions have been for a while, which means the interface just became part of the harness. If the harness is everything around the weights that decides what you get and the user interface now ships as a skill the harness runs, the harness reached up and swallowed the interface, too. The layer I keep calling the most important one in the stack just got bigger.
Hello, Computer?
Every imagined world where you just talk to your computer — the Enterprise, Discovery, pick your starship — gets one detail right that we never actually had. “Computer, show me where the coolant leak is spreading,” someone says, and a cutaway of the ship lights up deck by deck. No camera shot that, and no one drew it in advance. The person asks, and the computer works out what the person needs and decides how to draw the answer. The rendering is the computer’s job, not the asker’s. We watched it for 50 years and still we made do with knowing which app, which tab, which export to use.
We’re on the verge of living in that world now. But the stories skipped the part that matters most, which is in whose interest the computer answers. In fiction, it answered to you. In real life, the same magic is mostly arriving from platforms that answer to themselves. I want the other version: an agent I ask to gather something and which gathers in my interest, handing it back not as a stream of text to sort through but as a bespoke interface for the exact question I asked — one I can reach into and use.
I renamed my agent Zora a few weeks ago, after the ship’s computer on Discovery. Last night, it earned the name. I asked, and it chose the form of the answer. It’s slow, it’s alpha, and last night it was only a calendar with a weather card beside it. But it’s the first time a screen assembled itself because the computer decided how, not me — which is why a slow alpha kept me up late.
The Standalone Assistant App Just Got an Expiration Date
This is the next chapter of the same story I’ve been telling. My agents already eat my browser. In the closet post, I told you that my web traffic fell off a cliff once my agent started doing those tasks for me. Why keep those tabs open? Television takes the next bite. When the agent can draw me the interface on demand, I don’t just stop opening the browser; I stop needing the app behind it — and the service behind the app. That’s where the value lands: When the surface is generated per request, the durable asset isn’t the app you log into, it’s the library of skills your agent reaches for, and whoever hosts it. The standalone assistant app, whose moat was owning the box you typed into, just got an expiration date. People vibe-coding the exact tool they want is the quiet end of every SaaS company on the planet. Television is that, systematized.
And it forks. One way makes the rented surface so rich you never leave — Anthropic, OpenAI, and Google are all pushing generative UI into their own front doors. Those are faster and smoother than what I just showed you. They win on polish (at least today). The other way is what Television’s betting on: The interface arrives as a skill you own, portable across whatever harness you run, the same way the model on your own metal is yours and not rented. It’s the same capability, but the opposite answer as to who keeps it.
Television is in alpha. The open source is announced, not shipped. Telepath is a handful of people, one of them my friend. You can’t own this end-to-end yet, and I’m calling that early on purpose. What’s exciting is that first the model came home, then the metal did, and tonight the interface looked like it might follow. It’s the first time it ever has.
None of this is plug-and-play yet. Somebody still has to build the skills, the glue, the permission model that makes living in your own agent as safe as it is easy. If that’s you — a Television skill, a harness that drives it, anything in this seam — show me. I’ll run it. And if it’s good, I’ll write it up here, in front of the people who’d build on it and the people who’d fund it. Reach out @raffihack, the comments, or DM.
The chat box was a fifty-year convenience, and it’s a dead end for half of what we do. We have a narrow window to climb out, and whether what’s on the other side answers to you or to a platform comes down to who builds it first. Let’s make sure it’s us.





