The terminal
A real shell in your project, how to open it, and how it differs from the commands the agent runs.
Ctrl+J opens a panel along the bottom of the window with a real shell in it, already sitting in
your project.
It is a genuine terminal — colours, Ctrl+C, job control, interactive programs, vim if you insist.
Not a command-output box.
Opening one#
Ctrl+Jtoggles the panel.- Right-click a folder → Open in Terminal starts a shell in that folder and shows the panel.
- ▶ Run on a shell block in a chat answer opens a terminal with that command typed in. A harmless command runs at once; a destructive-looking one is typed but not entered, so you get to read it first.
The + button (New terminal) adds another. Terminals appear as tabs above the shell, named
Terminal 1, Terminal 2, after the folder they were opened in, or after the first word of the
command that opened them. The bin icon (Kill terminal) closes the active one, the eraser (Clear
terminal) clears its screen. With none left the panel reads No terminals open. Click + to start
one.
Drag the panel's top edge to resize it. Ctrl+J again — or the × at the panel's right, Hide
panel — hides it, and your shells keep running with their scrollback intact. Dragging the edge all
the way down does the same: the panel folds shut, the shells survive.
Where you are and what you get#
A plain terminal opens at your project root; a folder terminal opens in that folder. Terminals can't start outside the project.
It runs your shell as an interactive shell, not as a login shell — but with the PATH your
login shell would have had, so nvm, pyenv, cargo and friends resolve here even though the
shell itself never read .zprofile or .profile. Aliases and functions you define in those files
won't exist; the ones in .zshrc or .bashrc will.
Links in the output are clickable and open in your browser. Selecting text pops a small pill with Send to chat — which drops the selection into the composer as a code block, handy for handing a stack trace straight to the agent — and Copy.
Scrollback is a thousand lines. The text size is fixed and doesn't follow the interface zoom, and there are no terminal preferences.
Everything closes when the app does — no sessions are resumed. Switching projects closes them too, since they were rooted in the old one.
Note
If the connection behind a terminal drops, it prints [terminal disconnected] and stays dead —
there's no reconnect. Close the tab and open a new one.
Note
While a terminal has focus it owns almost every Ctrl combination. Ctrl+J is the one it hands
back to the app, so the toggle keeps working — at the cost of never being able to send a literal
Ctrl+J to a program running there.
The other view: Debug#
The panel's right edge has a second icon. Debug tails the on-device Semantix server's log, with
a channel dropdown (Server), a Filter logs… box and a Clear log button. It's there for when
something isn't behaving and you want to see whether the machinery underneath noticed.
The agent's commands are not in here#
When the agent runs something, it does not use your terminal. Separate shell, separate output, its own card in the conversation.
That card is one line while the command runs — the command, the seconds ticking, and a Stop button — and settles to a verdict: the exit code and how long it took. A chevron then opens the output, so a failed build's error is there to read without running it again. What you can't do is type into it; a command that waits for input will sit there until it times out or you stop it.
Which commands the agent may run, and whether it stops to ask you first, depends on the permission mode you've picked next to Send.