All use cases
Agents in your app

Build a terminal app an agent can use too

Ink components for CLIs, plus a bridge so an agent drives the same TUI.

The problem

CLI tools get the worst of both worlds. For humans they are a wall of flags with no discoverability; for agents they are text output to be parsed with regular expressions that break the first time you improve a message.

A terminal UI fixes the human half. The agent half needs the same thing the web side needed: a way in that is not scraping the output.

What you are building

Live surfaces, not screenshots — every one composed from the same components you would install.

Shared terminal

The real xterm-backed <Terminal> with a controlled output buffer, so a human and an agent write to one session.

The code

The output buffer is controlledtsx
// The component diffs `output` and writes only the appended delta, so a host can
// drive it from React state -- which is what lets an agent and a human write to
// the SAME session rather than two views of it.
const [output, setOutput] = useState("");

<Terminal
  output={output}
  shells={BUILTIN_SHELLS}
  onInput={(data) => pty.write(data)}
/>
The session outlives the browserbash
npm i @particle-academy/fancy-term-host

How to solve it

  1. Build the interface from TUI components

    Ink components for terminal apps — lists, tables, modals, drawers — so the CLI has a real interface instead of flags.

    Run thisbash
    npm install @particle-academy/fancy-tui
  2. Register the TUI bridge

    The same Human+ contract as the web surfaces: the agent reads and drives the actual TUI state rather than parsing what it prints.

  3. Embed a terminal in the web app, if you need one

    A themeable, controlled terminal component for the browser, with a headless Node backend when you need real PTYs that survive a page reload.

    Run thisbash
    npm install @particle-academy/fancy-term