Use it: it already does the job; point people to it.
- Ratatui (+ ratatui-image) · Scene should sit on ratatui as its renderer and widget substrate and add the agent layer ratatui deliberately does not have.
landscape · 33 tools · data as of 2026-10-09
thc-scene is a terminal UI that is one JSON value an agent can drive, see and change, a piece at a time (the experiment; how this board was made). Plenty of good tools sit nearby. Each one has a dossier here, written to make the best case for that tool, scored on one rubric, with links out. The point isn't that scene wins. It's to find the one gap it fills, what it would only be reinventing, and what to borrow instead.
Every part of the loop exists somewhere, done better than scene does it today. A2UI and json-render own the formats. ratatui and OpenTUI own terminal rendering. Redux DevTools has the richest time travel for people, LangGraph the cleanest history an agent can call (for agent state, not UI), Rerun the best split between a view written once and data streaming at kHz, and Scrimba owns take-over teaching. The closest twin, raxol, already lets an agent operate a live terminal UI over MCP, see it as a widget tree, and step through its history.
What none of them does: let an agent write the whole UI as one value and rewrite any piece of it while it runs, bind it to live streams that never pass through the model, render it natively in the terminal with pixels where the terminal allows, and (planned) rewind, fork and replay it. That narrow combination is the gap. Most of the rest, scene should borrow.
| tool | license | stars | data | drive | see | edit | time | rate | term | px | teach | mature | open | verdict |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| thc-sceneA live terminal UI, as one JSON value an agent drives | MIT | — | 5 | 5 | 5 | 5 | 0 | 5 | 5 | 4 | 3 | 1 | 4 | — |
| Bubble TeaGo Elm-architecture TUI framework; v2 adds the Cursed Renderer | MIT | 45k | 2 | 2 | 2 | 1 | 0 | 3 | 5 | 2 | 2 | 5 | 4 | borrow |
| InkReact for interactive command-line apps | MIT | 40k | 3 | 2 | 3 | 2 | 0 | 3 | 5 | 0 | 1 | 5 | 5 | complement |
| TextualPython TUI framework with DOM, CSS, widgets and web serving | MIT | 37k | 3 | 2 | 4 | 2 | 0 | 3 | 5 | 2 | 2 | 4 | 4 | borrow |
| Ratatui (+ ratatui-image)Immediate-mode Rust TUI library; the Rust ecosystem default | MIT | 23k | 0 | 1 | 2 | 0 | 0 | 3 | 5 | 2 | 1 | 5 | 5 | use |
| OpenTUIZig-core terminal UI with TypeScript, React and Solid bindings | MIT | 14k | 3 | 2 | 3 | 2 | 1 | 3 | 5 | 4 | 1 | 3 | 4 | borrow |
| NotcursesC TUI library for maximal terminals: pixels, video, planes, threads | Apache-2.0 | 4.7k | 0 | 1 | 2 | 0 | 0 | 4 | 5 | 5 | 1 | 3 | 4 | borrow |
| iocraftReact-style declarative TUIs and CLI output for Rust | MIT OR Apache-2.0 | 1.6k | 3 | 1 | 2 | 0 | 0 | 2 | 5 | 0 | 1 | 3 | 4 | ignore |
| Vercel AI SDK generative UI (RSC streamUI, AI SDK UI, @ai-sdk/tui)Model tool calls render React components; plus a canned agent TUI | Apache-2.0 | 27k | 1 | 2 | 1 | 1 | 0 | 2 | 2 | 3 | 0 | 3 | 4 | ignore |
| json-renderCatalog-constrained JSON specs, streamed as patches, rendered anywhere | Apache-2.0 | 19k | 5 | 3 | 3 | 4 | 2 | 2 | 3 | 3 | 0 | 3 | 4 | borrow |
| A2UI (Agent-to-User Interface)Declarative JSON UI protocol agents stream to native renderers | Apache-2.0 | 17k | 5 | 4 | 2 | 4 | 0 | 2 | 2 | 3 | 0 | 3 | 4 | adopt |
| AG-UI + CopilotKitEvent protocol connecting agent backends to app frontends, plus CopilotKit | MIT | 16k | 2 | 3 | 3 | 4 | 3 | 2 | 2 | 3 | 0 | 4 | 4 | complement |
| Thesys C1 (now OpenUI Cloud) and OpenUIHosted generative-UI API plus open compact UI language | MIT | 11k | 4 | 2 | 1 | 1 | 0 | 1 | 0 | 3 | 0 | 3 | 3 | ignore |
| MCP Apps (SEP-1865)MCP extension: tools ship sandboxed HTML UIs into chat hosts | Apache-2.0 | 2.9k | 1 | 3 | 2 | 1 | 0 | 3 | 0 | 5 | 0 | 4 | 5 | complement |
| tldraw SDK + Agent starter kitInfinite-canvas SDK whose agent kit reads and edits shapes live | — | 51k | 4 | 4 | 5 | 5 | 3 | 3 | 0 | 5 | 2 | 4 | 2 | borrow |
| Wave TerminalElectron terminal with blocks, widgets, AI and a wsh control CLI | Apache-2.0 | 22k | 2 | 3 | 3 | 3 | 0 | 2 | 2 | 4 | 1 | 4 | 4 | complement |
| Phoenix LiveViewServer-rendered stateful UI that pushes minimal diffs over WebSockets | MIT | 6.8k | 3 | 2 | 3 | 3 | 0 | 3 | 0 | 4 | 1 | 5 | 5 | borrow |
| Excalidraw MCP (official MCP App + community mcp_excalidraw)Agents draw, inspect and edit Excalidraw diagrams over MCP | MIT | 5.5k | 5 | 5 | 5 | 5 | 3 | 2 | 0 | 5 | 2 | 3 | 4 | borrow |
| Claude CanvasPrebuilt Ink TUI canvases Claude Code spawns in tmux panes | MIT | 1.5k | 2 | 3 | 1 | 2 | 0 | 1 | 5 | 0 | 0 | 1 | 4 | ignore |
| PTY/TUI screen drivers for agents (agent-tui and peers)Run any terminal app in a PTY; agent reads screen, sends keys | MIT | 118 | 1 | 4 | 4 | 1 | 2 | 1 | 5 | 0 | 1 | 2 | 4 | complement |
| RaxolOne Elixir TEA module rendered to terminal, browser, SSH and MCP | MIT | 80 | 3 | 4 | 5 | 3 | 4 | 3 | 5 | 2 | 2 | 2 | 4 | borrow |
| LangGraph time travelCheckpointed agent state you can list, replay and fork by API | MIT | 43k | 1 | 3 | 4 | 4 | 5 | 2 | 0 | 0 | 1 | 5 | 4 | borrow |
| rrwebRecord and replay the web as JSON snapshot and mutation events | MIT | 20k | 4 | 1 | 3 | 1 | 3 | 3 | 0 | 1 | 2 | 5 | 5 | borrow |
| Redux DevToolsAction log and time-travel debugger for Redux-style state stores | MIT | 14k | 1 | 2 | 3 | 2 | 3 | 2 | 0 | 0 | 2 | 5 | 5 | borrow |
| RerunTime-indexed multimodal data store and viewer, now agent-drivable via MCP | MIT OR Apache-2.0 | 12k | 4 | 4 | 5 | 3 | 4 | 5 | 0 | 5 | 3 | 4 | 4 | borrow |
| Replay.ioDeterministic browser recordings an agent can debug at any execution point | NOASSERTION | 722 | 0 | 3 | 5 | 1 | 4 | 0 | 0 | 0 | 2 | 3 | 1 | borrow |
| Elm time-travel debuggerBuilt-in Elm debugger: message history, jump back, export a session | BSD-3-Clause | 331 | 1 | 1 | 1 | 0 | 3 | 1 | 0 | 0 | 3 | 3 | 4 | borrow |
| StreamlitPython scripts become data apps by rerunning top to bottom | Apache-2.0 | 46k | 3 | 2 | 3 | 2 | 0 | 2 | 0 | 4 | 2 | 5 | 4 | complement |
| driver.jsTiny dependency-free product tours, highlights and hints for web pages | MIT | 27k | 4 | 2 | 3 | 3 | 2 | 0 | 0 | 4 | 4 | 4 | 4 | borrow |
| marimoReactive, reproducible Python notebooks stored as plain .py files | Apache-2.0 | 23k | 3 | 4 | 4 | 4 | 2 | 2 | 0 | 4 | 3 | 4 | 4 | borrow |
| Motion CanvasTypeScript generator animations with a timeline editor for voice-over sync | MIT | 19k | 1 | 1 | 2 | 1 | 3 | 0 | 0 | 5 | 4 | 3 | 4 | borrow |
| asciinema + Charm VHSTerminal sessions as text event logs, and scripted demo tapes | GPL-3.0 | 18k | 4 | 2 | 4 | 2 | 4 | 3 | 5 | 2 | 4 | 5 | 4 | complement |
| PerspectiveWebAssembly streaming query engine with live grids, pivots and charts | Apache-2.0 | 11k | 4 | 3 | 4 | 4 | 0 | 4 | 0 | 5 | 1 | 4 | 5 | borrow |
| ScrimbaInteractive coding screencasts: pause the video, edit the teacher's code | — | — | 2 | 0 | 0 | 0 | 3 | 0 | 0 | 4 | 5 | 4 | 0 | borrow |
Hover a column for its rubric, a cell for the reason behind the score. Click a header to sort.
Not counting scene. Where someone else scores higher, that's where scene is reinventing, or should borrow.
Use it: it already does the job; point people to it.
Adopt it: build on it or speak its format.
Borrow from it: take a specific idea, API or format.
Complement it: it does a neighbouring job; interoperate.
Ignore it for this purpose.
Research agents wrote one dossier per tool from primary sources (repos, the GitHub, npm, crates.io and PyPI APIs, official docs, maintainers' posts), with the instruction to steelman: make the best honest case for each tool, and say plainly where it already does what scene does. Every score uses the same rubric; every claim in a dossier links to its source. Numbers are as of the date in each dossier. scene's own dossier follows the same rules, including a 0 where nothing is built yet; its planned scores are drawn separately, dashed.
| UI as data | 0 the UI exists only as code · 3 declarative, but in a host language (JSX, classes) · 5 the whole UI is a serializable value you can store, diff and send |
|---|---|
| Agent can drive it | 0 nothing · 1 an agent can only write source code · 3 a protocol, MCP server or API for some operations · 5 first-class agent control of a live instance |
| Agent can see it | 0 the agent can’t see the result · 2 screenshots or screen scraping · 4 structured state readable · 5 structured state and the rendered view, on demand |
| Small, targeted edits | 0 regenerate everything · 3 patches exist, but coarse or one-way · 5 small id- or pointer-addressed edits to a live instance, cheap and frequent |
| Time travel | 0 none · 2 undo/redo · 3 time travel for humans (devtools) · 4 an agent can read history and seek · 5 an agent can read, seek, fork and replay |
| Live data rate | 0 static · 2 updates every few seconds · 3 tens a second · 4 hundreds a second, measured · 5 thousands a second, published, with data that bypasses the model |
| Terminal native | 0 web or desktop only · 3 has a terminal renderer · 5 built for the terminal |
| Pixel graphics | 0 none · 2 through an add-on · 4 built-in images and graphics · 5 rich pixel rendering (anti-aliasing, compositing) natively |
| Teaching | 0 none · 2 could be used for it · 4 has tours, walkthroughs or narration · 5 built around teaching (record, narrate, take over, rewind) |
| Maturity | 0 an idea · 1 prototype · 2 early, small use · 3 in production somewhere · 4 widely used · 5 an ecosystem standard |
| Openness | 0 proprietary · 2 source-available or restrictive · 4 permissive open source under company control · 5 permissive and community-governed |
| 1–7 | home · features · use cases · docs · changelog · under the hood · blog |
| t | light or dark |
| j k | scroll |
| g G | top · bottom |
| ? Esc | this · close |