Skip to content

Steering it in chat

The pipeline runs itself. The bots exist to change what it decided.

Three chat boxes, one per pane, each scoped to that pane's job: the SOFT bot argues about the reading, the TOOLS bot about the choice, the HARD bot about the result. tab moves between them.

Two kinds of input

Slash commands are actions. They never reach the model, so they keep working when it is down, slow or unconfigured. Every one of them is deterministic.

Anything else is conversation and goes to the focused pane's bot.

That split is why /list, /run, /charts, /export and /live, which is most of the product, work with no model at all.

The command menu

Typing / opens a menu of the commands, filtered as you type:

▸ /files   pick a data file to load — no dragging needed
  /example load a bundled sample dataset
  /export  write artifacts for every tool
  /live    mirror the session into RStudio/Jupyter…
  /open    open an exported artifact
  /list    the analyses that apply to this data
  /charts  every plot this data makes, full screen
  … 6 more
  ↑↓ move · ⏎ pick · esc close
key does
Up Down move
Enter pick
Tab complete
Esc close

Enter behaves differently depending on the command, on purpose. One that does something on its own, /help, /list, /export, runs. One that needs an argument, /run, /show, completes the line to /run and hands it back to you rather than submitting something that could only come back as a usage error.

Sub-lists

Commands that pick from a set open a sub-list in the same widget: /example lists the bundled samples, /list the analyses that apply, /files the data files under the current directory.

The arrows keep working across the hand-off, which is the point of sharing one widget. Typing filters the list. Esc clears a filter first, then backs out a level.

A sub-list is modal

While one is open it owns the keyboard. A command typed into it lands in the filter, so /list followed by /show premium gives you nothing matches "/show premium" rather than a column profile. Press Esc first.

Answering a menu

After a numbered menu has printed, a bare number answers it. /list then 3 runs the third analysis. This works because command output is the app speaking rather than the model, and is tracked separately.

Command output is kept out of the model's history

Replaying the app's own output back to the model as if the model had said it is how a bare 2 once produced a confident description of a dataset nothing had loaded. So it does not happen: what the app prints stays the app's.

Editing the line

Standard readline chords, because a chat box that loses a long line to a typo is worse than no chat box.

key does
Left Right move one column
Ctrl+Left Ctrl+Right, Alt+B Alt+F move one word
Home End, Ctrl+A start and end of line
Ctrl+U Ctrl+K kill to start, kill to end
Ctrl+W kill a word
Ctrl+D delete forward
Up Down prompt history
Esc clear the line

ctrl-e is export here rather than readline's end-of-line. End and Ctrl+A still cover both edges of the line.

Copying

Clicks are off by default precisely so that dragging to select works the way it does in any other terminal window. Drag, copy, done.

/copy is the alternative when you want the values rather than the picture of them, with no box-drawing characters or column padding caught in the selection:

/copy              whatever the focused pane is showing
/copy table        the result, tab separated, pastes into Excel as columns
/copy reading      the agent's reading of the data
/copy reply        the last thing the bot said

/mouse on adds click-to-focus, at the cost of needing Shift held to select. See Keys and mouse.