WARSHALL
Docs/Workspace/Terminals

Terminals

A terminal is one conversation with a coding agent, working in its own git worktree. A project can hold several terminals, working side by side.

Where terminals live

In the workspace, terminals stack in the right hand panel of the current project, with + New terminal at the bottom. In the Terminals view every project has its own column with its terminals under it, and the + in a section head adds one there.

Titles are positions, not names. Closing Terminal 1 makes the one below it Terminal 1.

The head

From left to right, the head of a terminal carries these controls.

  • The WorkMap mark, with the reference of the node this terminal is bound to when there is one. Click it for that node's card, or for a list of nodes to pick from when it is not bound yet. The card also holds the Include in builds switch and View in WorkMap.
  • The model button, with the reasoning level beside the model name. See the model picker.
  • The git state of this terminal's worktree. Click it for the terminal's git popup. See Auto git and worktrees.
  • The usage figure. It is how much of all your linked subscriptions is left, weighted by the size of each plan. Hover it for every account with each of its usage windows. A warning mark beside it means an account could not be read and is left out of the figure.
  • A control that pops the terminal out into a floating window and puts it back.
  • The close control. If a run is going, it asks before stopping it.

The model picker

Click the model button for the list of models the app can run. Click a model to switch this terminal to it. Under the models, after a thin line, are two rows that each open a list beside the picker.

  • Effort shows the current reasoning level and opens the levels this model offers. Each model keeps its own level.
  • Account shows the linked account this terminal runs on and opens every account of the model's provider. Each account shows its plan, its address and one line per usage window, with a bar of what is left and how long until it resets. Click one to use it.

Right-click the Account row to step to the provider's next account without opening the list. Right-click the model button itself to step to the next reasoning level. Escape closes the side list first and the picker on the next press.

The Account row only shows when the provider has a linked account. While the usage autopilot is on it reads Usage Pooled and opens nothing, because the autopilot picks the account for each run. See Usage autopilot.

An account you pick here is also remembered as the last account used in this project. Whether a model you pick becomes what the next terminal opens on is set in Settings > AI Providers > New terminals. Most recently used follows your picks and Provider default always opens on the model set in Settings.

The composer

Enter sends. Shift and Enter make a new line.

  • + at the left end opens a file picker, and the tray beside it holds what is staged. Hover a file's icon for its name and the x that removes it. Dropping files onto the terminal stages them too.
  • A paste longer than 500 characters folds into a placeholder in the draft. It is sent as the text itself, and clicking the placeholder unfolds it.
  • The auto continue control steps through off, once and always. See Auto continue.
  • Prompts opens the prompts and skills panel. The number beside it counts the skills staged for the next prompt.
  • While a run is going, a stop button sits at the far right. See stopping a run.
  • Right-click the composer for Cut, Copy, Paste and Select all.

Queued prompts

A prompt you send while the terminal is working does not interrupt it and is not refused. It waits its turn. A line above the composer reads Queued tasks with the count. Click it to see the queue over the transcript. The first row is tagged Up Next and the rest Queued.

Each row has an edit control, a paperclip naming the files that go with that prompt, and a remove control. Editing takes the prompt back into the composer with its files and remembers its place, so sending it again puts it back in that place. While an edit is out, the terminal waits for it instead of running the next prompt out of turn, and its status line reads Waiting for your edit…. Escape releases the hold.

Stopping a run

Escape in the composer stops the run and writes Interrupted by user in the transcript. The prompts that were waiting behind it do not go out. They come back into the composer, and their files come back into the tray.

The stop button ends the current run only. Anything queued behind it then starts in turn.

Shell commands

Start a prompt with ! to run a shell command instead, for example !git status. The command never reaches the model. Its output lands in the transcript, and a command that fails ends with its exit code.

  • It runs in the project folder, not in the terminal's worktree.
  • It runs in a unix style shell on every system. On Windows that is Git Bash when it is installed. Without it, a small shell is downloaded once into the data folder and used from there.
  • A command is stopped after two minutes, and very long output is cut. Escape stops it sooner.

Approvals in the transcript

When an agent wants to run a command that needs your say, the request appears in the transcript with the command, the rule that caught it and a countdown. Press Approve or Deny. See Approvals.

The transcript

Reasoning, tool calls, code blocks and commits land as they happen. Under each tool call you see the first two lines of its output, and older transcripts are shown the same way. A long conversation keeps its newest lines on screen, and scrolling up to the top brings the older ones in a page at a time.

Click one of your own prompts to open a row of tiles under it, one per file that went with it. Each tile opens its file. A prompt that carried no files shows no attachments.

Goals

/goal is the one slash command a terminal takes. /goal followed by a condition keeps the terminal working until that condition holds. /goal alone reports the current goal, and /goal clear drops it. Any other command starting with a slash is refused with a line saying only /goal is available, and never reaches a provider. See Goals.

Sizing

In the workspace, drag the panel's left edge to change its width and the boundary under a terminal to change that terminal's height. The height you settle on becomes the default. Terminals with no work in them yet take it, and terminals mid conversation keep what they had.

In the Terminals view, the boundary between two project columns resizes every column together, and the boundary under a terminal resizes every terminal together.