---
title: "hosti: a self-hosted home for my AI agents' HTML reports"
description: 'My agents explain their work as HTML pages. Then they moved to Discord and I moved to my phone, and a file on my PC stopped being enough.'
pubDate: 'October 4, 2026'
tags: ['AI', 'Side Projects']
draft: false
---
[hosti](https://hosti.kubaszwajka.com) is a small self-hosted catalog for the HTML pages my agents make. It's MIT and it's [on GitHub](https://github.com/JakubSzwajka/hosti).
## Why I made it
When an agent plans a change, digs into a bug or compares two ways to build something, I ask it for an HTML page. Diagrams, a table, a short "why", the risky parts marked. I read that way faster than a wall of text in a terminal.
The agents from [the box and the loop](/blog/how-i-build-small-products-autonomously-hetzner-swarm-and-agent-loops) pick up specced items, open PRs and report to me on Discord. The agent writes `report.html` on my PC and posts "done, see report.html". Great, thanks. I'm not at my desk, and the Discord message is just a path.
## How it works
The agent pushes a bundle, a folder with an `index.html`. One command:
```bash
$ hosti push ./report --slug flaky-tests --title "Flaky tests"
pushed revision 1
private nothing answers at the share URL
admin https://hosti.example.com/b/flaky-tests
```
The last line is the owner link. The agent drops it in Discord, I tap it, and the page opens because I'm logged in to hosti. Wherever I am. Toilet included. For anyone without my login that link is a dead end. If the agent pushes the same slug again, it's a new revision behind the same link, so I just reload.
The trip a page takes now.
## Goodies
- **Sharing, only when I ask.** I hate it when a teammate drops a copy-pasted thread from their Claude chat into Slack. I don't want to be that guy. Still, sometimes an idea I worked out with an agent is worth showing someone, so I share the page. A link or a PIN, and `hosti rotate` if a link went further than I meant.
- **Live cards.** Every bundle in the catalog is a card, and the card is the real page in a sandboxed iframe, not a screenshot. I find "that thing from last week" by how it looks.
- **The agent never gets my password.** It runs `hosti login`, I check the code it prints and approve. It can delete only if I tick that box myself.
- **A skill.** `npx skills add JakubSzwajka/hosti` and the agent knows how to push, when to share, and to hand me the link exactly as printed.

Everything else is in [the README](https://github.com/JakubSzwajka/hosti#readme).
One rough edge. My agents sometimes make a new slug when they should push a new revision, so I get a second link for the same report. I haven't taught them to prefer a revision yet.
Anyway. The landing page is [hosti.kubaszwajka.com](https://hosti.kubaszwajka.com) and the code is [on GitHub](https://github.com/JakubSzwajka/hosti). Ping me if you try it, or if your agents also keep sending you paths to files on a machine you're not sitting at.