Skip to content

Releases: modem-dev/sideshow

v0.3.0

12 Jun 19:10

Choose a tag to compare

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 a userFeedback array with any comments the user left since the
    agent's last call (delivered once; a consumed wait also counts as seen).
  • The design guide, setup block, and Claude Code skill teach the background
    watch pattern: arm sideshow wait as a background process after publishing
    and react when it exits, instead of blocking or polling.
  • Agents can name their session at creation: sessionTitle on the publish
    body and both MCP publish_snippet tools, --session-title on
    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: bare button/input/select/
    textarea pre-styled to match the viewer, SVG utility classes (t/ts/
    th text presets, box, arr, leader, node, c-* color ramps with
    dark-mode-aware text), and a shared #arrow marker 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=user session reads with no explicit after now 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) or afterSeq (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 comment without
    --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

11 Jun 16:06

Choose a tag to compare

Added

  • sideshow demo seeds 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

11 Jun 12:41

Choose a tag to compare

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 sessionssnippetscomment 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 sideshow command (publish, update, wait, comment, list, …). Works with any agent that has a shell; sessions group automatically per conversation.
  • MCPpublish_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 deploy puts the entire app in a Cloudflare Durable Object with SQLite storage — same product, same tools, reached by pointing SIDESHOW_URL / SIDESHOW_TOKEN at the deployment. Token auth guards deployed instances (bearer for APIs, a /?key= cookie for the viewer); /guide and /setup stay 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/.