Releases: modem-dev/sideshow
Releases · modem-dev/sideshow
v0.3.0
Added
- A session thread at the bottom of each session in the viewer: a composer
for messaging the agent without picking a snippet. - Feedback now reaches agents without polling: publish/update/reply responses
carry auserFeedbackarray with any comments the user left since the
agent's last call (delivered once; a consumedwaitalso counts as seen). - The design guide, setup block, and Claude Code skill teach the background
watch pattern: armsideshow waitas a background process after publishing
and react when it exits, instead of blocking or polling. - Agents can name their session at creation:
sessionTitleon the publish
body and both MCPpublish_snippettools,--session-titleon
sideshow publish. Applied only when the publish creates the session —
it never overwrites a title, including renames made in the viewer. - A snippet kit baked into every snippet doc, so agents publish compact
markup instead of hand-written inline CSS: barebutton/input/select/
textareapre-styled to match the viewer, SVG utility classes (t/ts/
thtext presets,box,arr,leader,node,c-*color ramps with
dark-mode-aware text), and a shared#arrowmarker injected into every
doc. The design guide documents it as a compact reference table.
Changed
- New snippets no longer steal the scroll position: the viewer only follows
them when already at the bottom of the stream, and shows a "new snippet ↓"
pill otherwise. - Activity the user isn't looking at — another session, or any session while
the tab is hidden — badges the tab title with an unread count. - The Claude Code skill now documents the repo-local CLI fallback and a
checkpoint-drain feedback pattern for harnesses that cannot surface
background watcher output.
Fixed
- Feedback was re-delivered when channels were mixed: a fresh
sideshow wait
process (or restarted stdio MCP server) started from seq 0 and replayed
comments the agent had already received via piggyback or another channel.
author=usersession reads with no explicitafternow resume from the
server-side agent cursor, and the CLI and stdio MCP keep no cursor of their
own — delivery is exactly-once across CLI, MCP, and piggyback. Pass
--after <seq>(CLI) orafterSeq(MCP at/mcp) to deliberately re-read. - A comment that failed to send was silently lost (input cleared, no error).
The viewer now echoes comments immediately (pending until confirmed) and on
failure restores the text to the input with an error toast. - After an SSE reconnect the viewer refetches the selected session, so
snippets and comments that arrived during the gap can no longer be
silently missing from a live-looking board. - The viewer layout no longer breaks at phone widths: below 700px the
sidebar collapses into a drawer behind a slim top bar (hamburger toggle,
unread dot), the stream takes the full width, and hover-only actions
(card open/delete, session delete) stay visible on narrow or touch
screens. - Comments not attached to a snippet (e.g.
sideshow commentwithout
--snippet) were stored and delivered to agents but never shown in the
viewer; they now render in the session thread. - The viewer is now usable by keyboard and assistive tech: session rows are
focusable and activate with Enter/Space (focus survives live re-renders),
hover-only actions (session delete, card open/delete) are reachable and
shown on focus, the editable session title is labeled and Escape cancels
an edit, snippet iframes carry the snippet title, and toasts are announced
via a polite live region.
v0.2.0
Added
sideshow demoseeds two example sessions (a sequence diagram with a
comment thread, an interactive explainer, a metrics card) so the viewer can
be explored without an agent.
v0.1.0
sideshow gives terminal coding agents a browser to draw in. Agents publish HTML — diagrams, UI sketches, charts, interactive explainers — while they work; you watch them render live and comment back, and your comments are delivered to the agent in its terminal.
This is the first release. npm install -g sideshow, then npx sideshow serve --open.
The surface
- A live viewer organized as agent sessions → snippets → comment threads.
- Snippets are versioned: updating one keeps its history, and you can flip between versions in the viewer.
- Each snippet renders in a sandboxed iframe (
sandbox="allow-scripts", no same-origin) behind a CSP that limits external resources to a small CDN allowlist. Light/dark theming via CSS variables.
Three ways for agents to connect
- CLI — the zero-dependency
sideshowcommand (publish,update,wait,comment,list, …). Works with any agent that has a shell; sessions group automatically per conversation. - MCP —
publish_snippet,update_snippet,wait_for_feedback,reply_to_user,list_snippets,get_design_guide, over stdio or streamable HTTP at/mcp(no local process needed). - Plain HTTP — REST endpoints plus a long-poll comments endpoint.
The feedback loop
Agents block on sideshow wait / wait_for_feedback (long-poll, no extra infrastructure) and pick up your browser comments as instructions; they can reply directly into the thread.
Run it locally or on Cloudflare
- Local:
npx sideshow serve --open. - Cloud:
npm run deployputs the entire app in a Cloudflare Durable Object with SQLite storage — same product, same tools, reached by pointingSIDESHOW_URL/SIDESHOW_TOKENat the deployment. Token auth guards deployed instances (bearer for APIs, a/?key=cookie for the viewer);/guideand/setupstay public.
How agents learn it
MCP clients receive usage instructions automatically. Everyone else gets the paste-able block at /setup (curl -s …/setup >> AGENTS.md), and Claude Code users can install the bundled skill in skills/sideshow/.