Available now / v0.0.1

Give the agent a canvas. Work in what it builds.

Reindr gives OpenCode and Claude Code sessions an editable HTML file and a live browser panel. The agent writes the interface with ordinary tools; Reindr takes care of the reload, the sandbox, and the route back to the session.

Install Reindr

OpenCode + Claude Code / Chromium

reindr / release-check
live
release-gate.htmlwaiting for a prompt
RELEASE GATE / MAIN

Ready when the red is gone.

PASSED47
FAILED2
DURATION8.4s
core / session routing1.2s
browser / live reload2.8s
security / stale capability42ms
controller / queue wakeup19ms

Send to agentFix the two failing tests, then rerun this dashboard.

TRY A PROMPT

Choose a prompt to change the session HTML and its live panel.

01

Plain HTML is the contract

No component schema and no rendering DSL. The agent edits one normal HTML file with the same filesystem tools it already uses, and a write becomes a live update.

02

Every session keeps its own canvas

The file follows the agent session, not the working directory. Resume the session elsewhere and the interface comes back; switch sessions and the panel follows.

03

The interface can answer back

A trusted click can send structured choices to the owning session. Generated code stays sandboxed, receives no raw SDK, and cannot reach another session.

Pick your host

Install the adapter. Ask for an interface.

Both integrations use the same local, file-backed canvas model. OpenCode installs from npm; Claude Code installs from the repository marketplace.

Claude Code

Repository marketplace plugin

/plugin marketplace add nicodes/reindr
/plugin install reindr@nicodes
Read the Claude Code setup

One file, live

The agent already knows how to build it.

Ask for a dashboard, a comparison table, or a form. Reindr opens the canvas immediately, then stays out of the authoring path. HTML, CSS, and JavaScript remain readable, editable, and local to your machine.

~/.local/share/reindr/sessions/session.html
01 <form id="release">
02   <label>Environment
03     <select name="target">...</select>
04   </label>
05   <button>Deploy</button>
06 </form>
07
08 release.onsubmit = (event) => {
09   event.preventDefault()
10   opencode.submit({
11     prompt: "Deploy this release",
12     data: { target: release.target.value }
13   })
14 }

Editable fileNormal tools write normal HTML.

Sandboxed panelChanges appear without a rebuild.

Scoped interactionA click returns to its own session.

Ask for an interface.
Keep working in it.

YOUR PROMPTSESSION HTMLLIVE PANEL