thcThought Control

landscape · 33 tools · data as of 2026-10-09

What we're building, and what we're not

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.

the gap, as the research found it

A UI an agent writes as data, rewrites live, and watches stream.

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.

the map
compare
the matrix
toollicensestarsdatadriveseeedittimeratetermpxteachmatureopenverdict
thc-sceneA live terminal UI, as one JSON value an agent drivesMIT—55550554314—
Bubble TeaGo Elm-architecture TUI framework; v2 adds the Cursed RendererMIT45k22210352254borrow
InkReact for interactive command-line appsMIT40k32320350155complement
TextualPython TUI framework with DOM, CSS, widgets and web servingMIT37k32420352244borrow
Ratatui (+ ratatui-image)Immediate-mode Rust TUI library; the Rust ecosystem defaultMIT23k01200352155use
OpenTUIZig-core terminal UI with TypeScript, React and Solid bindingsMIT14k32321354134borrow
NotcursesC TUI library for maximal terminals: pixels, video, planes, threadsApache-2.04.7k01200455134borrow
iocraftReact-style declarative TUIs and CLI output for RustMIT OR Apache-2.01.6k31200250134ignore
Vercel AI SDK generative UI (RSC streamUI, AI SDK UI, @ai-sdk/tui)Model tool calls render React components; plus a canned agent TUIApache-2.027k12110223034ignore
json-renderCatalog-constrained JSON specs, streamed as patches, rendered anywhereApache-2.019k53342233034borrow
A2UI (Agent-to-User Interface)Declarative JSON UI protocol agents stream to native renderersApache-2.017k54240223034adopt
AG-UI + CopilotKitEvent protocol connecting agent backends to app frontends, plus CopilotKitMIT16k23343223044complement
Thesys C1 (now OpenUI Cloud) and OpenUIHosted generative-UI API plus open compact UI languageMIT11k42110103033ignore
MCP Apps (SEP-1865)MCP extension: tools ship sandboxed HTML UIs into chat hostsApache-2.02.9k13210305045complement
tldraw SDK + Agent starter kitInfinite-canvas SDK whose agent kit reads and edits shapes live—51k44553305242borrow
Wave TerminalElectron terminal with blocks, widgets, AI and a wsh control CLIApache-2.022k23330224144complement
Phoenix LiveViewServer-rendered stateful UI that pushes minimal diffs over WebSocketsMIT6.8k32330304155borrow
Excalidraw MCP (official MCP App + community mcp_excalidraw)Agents draw, inspect and edit Excalidraw diagrams over MCPMIT5.5k55553205234borrow
Claude CanvasPrebuilt Ink TUI canvases Claude Code spawns in tmux panesMIT1.5k23120150014ignore
PTY/TUI screen drivers for agents (agent-tui and peers)Run any terminal app in a PTY; agent reads screen, sends keysMIT11814412150124complement
RaxolOne Elixir TEA module rendered to terminal, browser, SSH and MCPMIT8034534352224borrow
LangGraph time travelCheckpointed agent state you can list, replay and fork by APIMIT43k13445200154borrow
rrwebRecord and replay the web as JSON snapshot and mutation eventsMIT20k41313301255borrow
Redux DevToolsAction log and time-travel debugger for Redux-style state storesMIT14k12323200255borrow
RerunTime-indexed multimodal data store and viewer, now agent-drivable via MCPMIT OR Apache-2.012k44534505344borrow
Replay.ioDeterministic browser recordings an agent can debug at any execution pointNOASSERTION72203514000231borrow
Elm time-travel debuggerBuilt-in Elm debugger: message history, jump back, export a sessionBSD-3-Clause33111103100334borrow
StreamlitPython scripts become data apps by rerunning top to bottomApache-2.046k32320204254complement
driver.jsTiny dependency-free product tours, highlights and hints for web pagesMIT27k42332004444borrow
marimoReactive, reproducible Python notebooks stored as plain .py filesApache-2.023k34442204344borrow
Motion CanvasTypeScript generator animations with a timeline editor for voice-over syncMIT19k11213005434borrow
asciinema + Charm VHSTerminal sessions as text event logs, and scripted demo tapesGPL-3.018k42424352454complement
PerspectiveWebAssembly streaming query engine with live grids, pivots and chartsApache-2.011k43440405145borrow
ScrimbaInteractive coding screencasts: pause the video, edit the teacher's code——20003004540borrow

Hover a column for its rubric, a cell for the reason behind the score. Click a header to sort.

who leads each axis

Not counting scene. Where someone else scores higher, that's where scene is reinventing, or should borrow.

Time travelLangGraph time travel · 5/5scene 0 → 5 planned
Live data rateRerun · 5/5scene 5
TeachingScrimba · 5/5scene 3 → 5 planned
use, adopt, borrow
use

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.
adopt

Adopt it: build on it or speak its format.

  • A2UI (Agent-to-User Interface) · Make A2UI an accepted input format for scene so agents trained on the standard can target it, while scene supplies the terminal renderer and control/readback/time-travel layer A2UI lacks.
borrow

Borrow from it: take a specific idea, API or format.

  • Bubble Tea · Same philosophy in another language; take its View and messaging ideas, not the library.
  • Textual · Textual's addressing, driver verbs and screenshot readback are proven designs scene should copy, but its code-defined UI and Python runtime don't fit a Rust JSON-scene.
  • OpenTUI · Different stack (Bun/Zig/TS) and no agent-control surface, but its image-layer experience and test/readback APIs are directly instructive.
  • Notcurses · Its graphics engineering is the reference for scene's pixel layer, but it's a C library in maintenance mode with no agent model.
  • json-render · Its format ideas and patch stream are worth matching, but it is a TS library for embedding in apps, not a drivable terminal surface.
  • tldraw SDK + Agent starter kit · Different medium and license, but its agent context design and history-mark semantics are the best reference for scene's readback and planned time travel.
  • Phoenix LiveView · Not a dependency for a Rust TUI, but its change-tracking and streams design is the best prior art for scene's high-frequency granular updates.
  • Excalidraw MCP (official MCP App + community mcp_excalidraw) · Different medium, but its agent protocol details (cheat-sheet tool, checkpoint-relative patches, describe vs screenshot) are battle-tested patterns scene can copy.
  • Raxol · Closest philosophical twin with mature ideas (focus lens, derived tools, authorization, time-travel API) worth copying, but it is code-first Elixir and cannot replace a data-first, agent-authored Rust UI.
  • LangGraph time travel · The best-specified agent-facing fork/replay API, applied to a different kind of state; scene should copy its verbs and semantics.
  • rrweb · The de facto UI-history format; scene should mirror its event structure for screen history and export, while its message log supplies the 'why' rrweb lacks.
  • Redux DevTools · It is the reference design for message-log time travel, but it is a browser-extension debugger for JS stores, not something a Rust terminal UI can use.
  • Rerun · Different medium and domain (GPU viewer for robotics data), but the best shipped design for agent-driven, time-indexed viewers; scene should copy its MCP and blueprint-undo patterns.
  • Replay.io · Different domain (debugging arbitrary JS runs in the cloud) but the best existing model of what agents want to ask a history.
  • Elm time-travel debugger · Same architecture as scene and the cleanest import/export design, but unusable outside Elm in a browser and closed to agents.
  • driver.js · Its step model and UX rules are the right reference for caretline-tour; the library itself can't run in a terminal.
  • marimo · The best reference in this group for how an agent should edit a live structured instance; different medium and job from scene.
  • Motion Canvas · Steal the time-event model for tour narration; the tool itself targets video, not live terminal UIs.
  • Perspective · Best-in-class streaming data component whose agent and schema patterns scene should copy; it is a web widget, not a terminal UI runtime, though its Rust crate could back a scene data source.
  • Scrimba · The best proof of the teaching model scene plans, but closed and web-only, so take the interaction design, not the product.
complement

Complement it: it does a neighbouring job; interoperate.

  • Ink · Ink is the terminal target of the JS/A2UI world; scene should interoperate with the specs that target Ink rather than compete with Ink itself.
  • AG-UI + CopilotKit · AG-UI is a likely input transport for scene, not a competitor to its rendering and control model.
  • MCP Apps (SEP-1865) · MCP Apps owns UI in web chat hosts; scene can fill the terminal gap and speak MCP as its control transport.
  • Wave Terminal · Wave is a host for panes; scene could run inside a Wave terminal block, while Wave's CLI ergonomics are worth copying.
  • PTY/TUI screen drivers for agents (agent-tui and peers) · They drive any TUI from outside; scene is a TUI built to be driven from inside, and one of them is a good black-box test rig for it.
  • Streamlit · Streamlit owns browser dashboards authored as code; scene targets live agent-operated terminal UIs, and should learn from its agent-skills packaging.
  • asciinema + Charm VHS · Use asciicast as an export target and VHS-style tapes as a scripting idiom; scene's state-level time travel and take-over are what these byte recorders cannot do.
ignore

Ignore it for this purpose.

What to take, tool by tool

method

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 data0 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 it0 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 it0 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 edits0 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 travel0 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 rate0 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 native0 web or desktop only · 3 has a terminal renderer · 5 built for the terminal
Pixel graphics0 none · 2 through an add-on · 4 built-in images and graphics · 5 rich pixel rendering (anti-aliasing, compositing) natively
Teaching0 none · 2 could be used for it · 4 has tours, walkthroughs or narration · 5 built around teaching (record, narrate, take over, rewind)
Maturity0 an idea · 1 prototype · 2 early, small use · 3 in production somewhere · 4 widely used · 5 an ecosystem standard
Openness0 proprietary · 2 source-available or restrictive · 4 permissive open source under company control · 5 permissive and community-governed