Skip to content

claude-web-console: live web viewer for Claude Code sessions #173

Description

@studykit

Description

claude-web-console is a Claude Code plugin that mirrors a live session into a
local web UI with rich rendering, and (as it grows) lets the user browse past
sessions and drive new ones from the browser. It is grouped as an epic because
delivery spans many independent but coordinated features — rendering, session
management, viewer UX, transport, and bidirectional control — that share one
architecture and one set of invariants.

Current baseline (already built): hooks (UserPromptSubmit / MessageDisplay /
Stop) POST to a local stdlib-Python server, which broadcasts over SSE to a
browser viewer that renders Markdown (markdown-it), math (KaTeX), and PlantUML
(local PicoWeb). Claude-only — depends on the MessageDisplay hook, which has no
Codex equivalent.

Member Workstreams

Starting clusters (member issues to be scoped under each; the list will grow):

  • Rendering — renderer registry via the fence dispatch; render additional
    block types beyond Markdown / math / PlantUML.
  • Session management — browse and open sessions whose transcript already
    exists, including sessions from other projects, and render that stored
    transcript in the viewer (not only the live stream). Open a brand-new session
    from the web UI.
  • Viewer UX — auto-scroll to the newest message as LLM output arrives so the
    user can follow along comfortably; related reading-comfort behavior.
  • Artifact & file preview — when the assistant writes or points at a local
    file (draft / scratchpad artifact, e.g. under tmp/), render its content
    inline in the viewer so the user reads it in the web UI instead of having to
    open the file manually. Removes the "it's in a file you now have to go open"
    friction.
  • Transport & liveness — SSE robustness, reconnect / history replay,
    retention limits.
  • Bidirectional input — web UI → Claude Code control. This is the capability
    that "open a new session from the web UI" depends on; previously deferred, now
    in scope.
  • Robustness / offline — browser libraries vendored locally under
    server/static/vendor/, no CDN dependency (done).
  • Packaging & config — env vars / ports, launcher, PlantUML engine bootstrap.

Coordination Notes

Shared invariants that constrain every member issue:

  • Hooks are best-effort, silently no-op when the server is down, and never write
    to stdout — they must not affect the conversation.
  • The server is Python stdlib only with zero build step; browser libraries are
    vendored under server/static/vendor/ (no CDN). .mjs / .woff2 must stay
    mapped in server.py's CONTENT_TYPES, or the viewer silently fails to load.
  • Stored transcripts live under ~/.claude/projects/; the session-management and
    bidirectional-input workstreams are the ones that reach outside the current
    live session, so they carry the most cross-cutting design decisions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicWorkflow epic or parent work item

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions