How
A local Unix socket with JSON-line requests: push, patch, key, mouse, click, layers, screen, state, stats, upgrade. A CLI wraps each one. No MCP server yet.
A live terminal UI, as one JSON value an agent drives.
thoughtcontrol.app ↗repo ↗caretline, the editor engine underneath ↗
The best case: an agent can write a terminal UI as one small JSON value, drive it like a person, see exactly what it drew, change one piece at a time, and keep live data flowing at thousands of updates a second without that data ever passing through the model. It has already reproduced a hand-written production screen cell for cell, so a generated UI doesn't have to look generated. Nothing else found pairs that loop with a terminal-native renderer and a pixel layer.
| UI as data | 5 | |
|---|---|---|
| Agent can drive it | 5 | |
| Agent can see it | 5 | |
| Small, targeted edits | 5 | |
| Time travel | 0 → 5 | 0 today. Planned: an agent can read, seek, fork and replay (see the design). |
| Live data rate | 5 | |
| Terminal native | 5 | |
| Pixel graphics | 4 | Rich, but only where the terminal speaks the kitty graphics protocol (Ghostty, kitty, iTerm2, VS Code) |
| Teaching | 3 → 5 | Callouts, spotlights and scripted tours work today; record, take over and rewind are planned. |
| Maturity | 1 | A prototype: one author, no release. |
| Openness | 4 | MIT, but single-author and not yet published. |
scene now scene planned
A local Unix socket with JSON-line requests: push, patch, key, mouse, click, layers, screen, state, stats, upgrade. A CLI wraps each one. No MCP server yet.
Write one JSON UI and point its sources at commands; send ops over the socket. An MCP server is the planned way in for any agent.
Yes: `screen` (the frame as text) and `state` (everything, as JSON).
Yes: `patch` replaces one node by id; streams update one source; keys and clicks move selections.
Not yet. State is serializable and every input is a message, so it's designed (history, state_at, screen_at, diff, seek, fork, replay, export/import) but not built.
Built for agents to drive and to see. The parts a standard would give it (MCP, A2UI input) are missing.
The whole UI is one serializable value: a tree of components, data sources bound to shell commands, JSON-line streams or literals, keys, a theme and callout layers. Elm architecture: a serializable State, a pure update that returns effects, a pure view that returns the frame plus hit regions and pictures. A runtime owns the terminal, a local control socket, child processes and the pixel layer. It sits on caretline (a Helix-model editing engine) and caretline-layers (placement for callouts, arrows and spotlights).
Measured by its own stress suite on one machine; not independently reproduced.
Unreleased. Used only in demos so far: a thc Today rebuild, a finance dashboard, stress tests and a pixel tour.
Used by: thc itself (its Today screen, rebuilt cell for cell)
A prototype with tests and measured numbers, but one person and no release.
Releases: None yet. · Contributors: 1 · Recent: Built in October 2026 on a branch of thought-control. · Bus factor: low: one author
| 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 |