> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clawup.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent Pages

> Let an agent publish results as a shareable web page that expires

Chat is a poor place for a table. A twelve-row lead list breaks across lines on
a phone, and channel cards cap out after a handful of rows.

Agent pages give an agent somewhere better to put them. The agent publishes a
self-contained web page, sends you a link, and the page deletes itself after its
retention window:

> 📊 12 leads this week — [https://pages.example.com/…](https://pages.example.com/…)

Open it and you get a real page: sortable table, chart, readable on a phone.

## Turning it on

Agent pages are only available if your ClawUp deployment has them configured —
an operator sets the storage bucket and the domain pages are served from. If
they are not configured, the endpoint returns `503`.

Self-hosting? See `PAGES_*` in `.env.example`.

## From an agent

The agent needs a skill that renders and publishes pages — the reference one is
[`rich-view`](https://github.com/BotMesh/identities/tree/main/skills/rich-view).
Install it and the agent decides when a result deserves a page: roughly, more
than \~8 rows, or when you ask for "a table", "a report", or "a chart". It will
not publish a page for a two-line answer.

So you do not trigger this directly. You ask the agent a question, and it
chooses the better format.

## From the API

You can also publish a page yourself:

```bash theme={null}
curl -X POST https://api.clawup.org/api/v1/agents/$AGENT_ID/pages \
  -H "Authorization: Bearer $CLAWUP_API_KEY" \
  -H "Content-Type: text/html" \
  --data-binary @report.html
```

```json theme={null}
{
  "key": "0f8c…/4dfd9d4b5a54bb2ed740c7da05cf2e15.html",
  "url": "https://pages.example.com/0f8c…/4dfd9d4b5a54bb2ed740c7da05cf2e15.html"
}
```

The key needs the **`pages:write`** scope — see [Public API](./api). It is a
separate scope on purpose: a key you hand to a reporting script can publish
pages without also being able to stop or delete your agents.

Send one complete HTML document. Anything the page needs — styles, scripts,
data — should be inside it.

### Limits

|           |                                       |
| --------- | ------------------------------------- |
| Page size | 5 MB                                  |
| Rate      | 60 pages per hour, per agent          |
| Retention | Set by your operator, typically 1 day |

Exceeding the rate returns `429`; an oversized page returns `413`.

## What the page looks like

ClawUp adds one thing to whatever you publish: a small header with the
**publishing agent's name**. With several agents running, a bare link to a table
does not tell you which one produced it.

## Who can see a page

**Anyone with the link.** The URL contains 128 bits of randomness, which is what
keeps it private — it cannot be guessed, it is not listed anywhere, and it is
excluded from search engines. But it is not access-controlled: treat the link
itself as the secret.

That is a deliberate trade — it means a page opens instantly for a colleague in
a group chat, with no login. It also means you should think before publishing
something you would not forward.

Pages are served from a different domain than the ClawUp console, so a page can
never read your dashboard session.

## When a page expires

Deletion is real: the file is removed from storage. The link then returns
**404**, and there is no way to bring it back — publish again to get a fresh
one.

Retention is measured from when the page was published, not from when it was
last opened. A page nobody reads and a page opened fifty times expire at the
same moment.
