React package / AI-native terminal / typed output

Signal Terminal

An embeddable terminal for web applications where command output can become structured text, charts, tables, file previews, graphs, JSON inspectors, and LLM-ready insight without leaving the shell flow.

Product shape

Signal Terminal is prepared as a React component, not a full desktop shell. It has no application window chrome, title bar, traffic-light buttons, side panels, or dashboard wrapper. Host applications can place it inside any page, workspace, or VM-backed container and provide the data, file, model, and command bridges they trust.

  • Embeddable React component exported as @signal-terminal/react.
  • Typed transcript renderer with visual blocks inside normal scrollback.
  • Host-owned data objects, remote data adapters, and LLM bridge.
  • Production boundary where privileged VM/file access is supplied by the host app.

Output flow

Shell rhythm stays intact while output becomes structured UI.

The host owns privileged bridges and data access. Signal Terminal owns the transcript experience: command input, typed output validation, rich rendering, and a prompt that resumes under the result.

Command

User asks in shell

Normal terminal input remains the primary interaction surface.

Bridge

Host resolves access

Data, files, model calls, and VM execution stay behind host-owned adapters.

Type

Output is validated

Tables, charts, JSON, markdown, and graph specs pass through typed render contracts.

Render

Transcript gets richer

Structured UI blocks appear inline without turning the terminal into a dashboard.

Resume

Prompt continues

The next command starts directly beneath the output, preserving terminal flow.

Embedding API

import { TerminalApp } from '@signal-terminal/react';
import '@signal-terminal/react/styles.css';
<TerminalApp config={config} />

Host-owned integration

Host applications wire data in through dataObjects for in-memory page/session objects or dataBridge for remote objects, VM files, database-backed resources, and app-specific systems. LLM integration is also host-owned through llmModels and an llmBridge that returns typed terminal outputs.

Terminal behavior

The prompt resumes beneath the work.

Commands appear in scrollback, status lines stream inline, visual blocks remain part of the transcript, and the active prompt resumes immediately beneath charts, tables, graphs, file previews, and structured analysis. The point is to keep shell rhythm while letting output become richer than text.

Output blocks

  • Text, markdown, and code blocks.
  • Tables, JSON inspectors, and file previews.
  • Vega-Lite-shaped charts and ECharts-shaped graphs.
  • Status lines and inline error blocks.
  • LLM-created commands registered for the current terminal session.

Useful commands

ai help
data list
data inspect <id>
model list
model set <id>
theme set midnight
theme set matrix
clear

Production boundaries

  • No bundled sample datasets or auto-running commands.
  • Local file access routes through host-provided bridge interfaces and fails closed when not configured.
  • AI requests route to the host llmBridge instead of placeholder analysis.
  • Visualization renderers validate structured output specs and fail safely inline.
  • PTY execution, VM file access, and privileged tools are supplied by the host app.

Publishing

npm run build --workspace apps/desktop
npm pack --workspace apps/desktop
npm publish --workspace apps/desktop --access public

Package contract

The package build emits dist/index.js, dist/index.cjs, dist/index.d.ts, and dist/styles.css. React and React DOM stay as peer dependencies, so host applications import the component and stylesheet while keeping ownership of runtime configuration.

Why it belongs

Signal Terminal is another version of the same systems instinct: make powerful workflows embeddable, typed, inspectable, and safe at the edges. The interesting part is not pretending a terminal is a dashboard; it is letting the terminal speak richer UI when the output deserves it.