View AI-generated artifacts. Give precise feedback.
HTML pages, Markdown documents, and code from any coding agent.
r3 is a tool for reading, using, and discussing agent output. Open an interactive page, read a document, or inspect code changes. Select an element or passage to leave feedback and continue the conversation with your agent.
Agents publish artifacts through a CLI or HTTP API. r3 works with any agent that can run the CLI.
Try the browser demo to explore HTML, Markdown, and diff feedback with a scripted agent. It uses bundled examples; production preview protection is not simulated.
Install globally to make the r3 command available on your PATH:
npm install -g @hyperlogue/r3
# Or: bun add -g @hyperlogue/r3Or run it without installing r3 on your PATH:
npx @hyperlogue/r3@latestAsk your agent to run r3 guide and publish an artifact. The guide explains how
to publish, listen for feedback, and reply. Open the artifact URL from your agent, or visit
http://127.0.0.1:8791/ for the full list.
Local Claude Code and Codex publications set up feedback delivery automatically,
so you can send feedback from the artifact page. When no agent is listening, click
Use in agent to copy r3 feedback fetch <artifact-id>. Run it with ! in your
agent harness to load new feedback and replies into context. Fetching acknowledges
the snapshot only after stdout succeeds, then registers supported agents as listeners
for future updates. A failed read or output leaves feedback pending; an acknowledgment
failure can repeat already printed feedback on retry. --all reads history without
acknowledging it or registering a listener.
Paste or attach images to notes and replies, including messages without text.
For HTML artifacts, the Capture area camera icon beside Comment mode in the
navbar shares the current tab, freezes the preview,
and lets you crop a screenshot before attaching it. Edit image adds pen, arrow,
and rectangle drawings with color, stroke width, and undo/redo controls.
Optimize image also offers PNG resizing with the exact output preview,
dimensions, file size, and an actual-pixels view before you accept it. Oversized
PNG conversions open this preview automatically; no resizing happens without acceptance.
Where browser capture is unavailable, the icon is hidden; paste or upload a screenshot instead.
Attaching an image inserts a spaced [image1] reference in the message; pasting
places it at the cursor. Labels match the thumbnails and agent output and
renumber when an earlier image is removed. Messages accept up to four images,
each at most 5 MiB and 20 megapixels. Agents can use
r3 feedback fetch <artifact-id> --attachments-dir ./feedback-images to save
images before acknowledging feedback.
r3 supports three kinds of artifacts:
| Artifact | What you can do | Examples |
|---|---|---|
| HTML pages | Interact with a page and leave feedback on specific elements or text | Prototypes, dashboards, interactive tutorials |
| Documents and files | Read rendered Markdown, browse related files, and discuss specific passages or lines | Design proposals, research reports, generated project files |
| Code changes | See what changed and discuss it beside the affected lines | Bug fixes, refactors, feature reviews |
HTML artifacts open as pages; files artifacts have a file browser; diff artifacts show captured code changes.
For ideas on using HTML for plans, reports, and interactive explanations, see Anthropic's The unreasonable effectiveness of HTML.
r3 runs locally by default. The CLI lazily starts a background daemon when a command first needs the server. The daemon serves the browser UI and stores artifacts and feedback. It listens only on loopback; local browser access works without a login unless you enable one.
For remote access, use an HTTPS reverse proxy or tunnel, such as Tailscale Serve,
pointing to http://127.0.0.1:8791/. Forward the whole application, including
/__r3_preview/, and set X-Forwarded-Proto: https at the proxy. Previews use the
same address; no wildcard DNS or separate preview port is needed.
Set your public URL and explicitly require login before exposing r3. Replace the example URL below with your proxy address:
r3 config set publicUrl https://reviews.example
r3 config set requireLogin 1
r3 restart
r3 auth create-token --label browserUse the generated login token to sign in. Browser sessions and login tokens are revocable. r3 is a single-owner tool: a valid login grants access to all artifacts on that instance, with no per-artifact sharing permissions.
Login tokens expire after 14 days without a successful login or cookie-authenticated request. Never-used tokens age from creation. Expiry invalidates their browser sessions; inactive or revoked token rows and their sessions are removed on server startup. To change the inactivity period (a positive whole number of days):
r3 config set authTokenIdleDays 30
r3 restartR3_AUTH_TOKEN_IDLE_DAYS overrides this setting. r3 auth list-tokens --json
includes each active token's lastUsedAt timestamp. Cookie activity is saved in
batches once a minute and on graceful shutdown.
Your agent can publish from a different machine: it uploads the artifact's files, so the machine running r3 does not need a copy of your project. See the security model for authentication and preview isolation details.



