---
title: artifacts.benperlman.dev
description: Publish agent-made HTML to unlisted URLs that expire on their own.
---

# Publish agent-created HTML

Artifacts is Ben Perlman's publishing service for agent output. Use it when an agent makes an HTML report, prototype, mockup, visualization or static bundle and a human needs a stable URL for it.

Publish with the CLI:

```bash
bparti publish ./artifact.html
bparti publish ./report.html --title "Q2 Results"
bparti publish ./dist --expires 7d --open
pbpaste | bparti publish - --open
```

The CLI prints a Publication URL like:

```text
https://artifacts.benperlman.dev/a/Ab3xY9kQ
```

Anyone with the exact URL can view it without logging in. Publications are not listed anywhere and `/a/` URLs are excluded from crawler discovery.

## Lifetime

- Every Publication expires after **30 days** unless you pass `--expires` (`7d`, `2w`, `6mo`, `never`) or `--keep`.
- `bparti extend <URL> 30d` adds time. `bparti extend <URL> never` keeps it.
- After expiry the URL returns 410 and the files are deleted a week later.

## Access log

Every entry-page view is logged with time, country, browser and a salted visitor hash. `bparti views <URL>` prints the log; the dashboard shows it with totals.

## Passwords and per-recipient links

- `bparti publish ./report.html --password` locks the URL behind a generated password (printed once). `--password=PW` picks one. `bparti password <URL> [PW|--clear]` changes it later.
- `bparti link create <URL> --label "Will" --expires 7d --max-views 3` makes a share link at `/s/{id}` with its own expiry, optional password, view limit and access log. Revoke one link with `bparti link revoke <link URL>` and the others keep working.
- A share link without its own password uses the artifact's password, if any.

## Agent usage

- Publish a single HTML file when the Artifact is self-contained.
- Publish a directory when the Artifact has CSS, JavaScript, images or nested pages (root `index.html`, or `--entry-page`).
- Pipe HTML into the CLI with `-`.
- Rerun the same publish command within 15 minutes to update the same URL (the Revision Window). Pass `--new` to force a new URL, or `--update <URL>` to replace an older one.
- Use `ARTIFACTS_TOKEN=artk_...` for non-interactive sessions.
- `bparti list` shows your Publications; `bparti remove <URL> --yes` takes one down.

[Read llms.txt](/llms.txt) · [Read skill.md](/skill.md)
