A project is a name for a directory (cd @name), with the commands that start it. With this on, each new task makes one: its directory, its command to start it, its folder, and a name from the task's (or its folder's). A task in a directory that has a project joins it. Renaming, moving or removing the task does the same to its project, until you change the project's name or start commands yourself. Turning it on makes projects for the tasks there are now.
Update installs the latest release, as the install command does, with the OS/A sign-in it kept: oTerminal restarts on it, every shell and task ends, and this page reloads. If the new version does not start, the one before comes back. ot update does the same from any line.
Restart starts the daemon again from its files as they are now, then this page reloads. Every shell and task ends, as on any stop; tasks can be started again from their list.
As you type, an earlier command that carries on from the line shows faint after the cursor: → or Tab takes it, ⌥→ one word of it, and Enter runs only what you typed. With nothing faint, Tab opens a list: earlier commands, then the files, branches, scripts, hosts or commands the word could be. Under the line, what the command does, the option under the cursor, or examples to click. On a line that starts with =, the questions you have asked before.
Auto-run runs the command an LLM answer suggests as soon as it arrives, without waiting for Enter. Debug pipes runs every line with a pipe (a | b | c) one stage at a time; ⌥Enter does it for one line. Both are in the palette (⌃⇧P) too.
A question after = can point back at earlier work: “connect to the mac mini again”, “where did I put those files I copied”. oTerminal keeps every command it runs (in ssh too, read off the remote screen), and what was settled in your questions. A small model on this computer (nimble, through Ollama) decides whether a question points back at any of it; only what it picks goes to your LLM, and the answer says so.
Nothing yet. After a question, a small local model (qwen3.5:2b) keeps anything lasting, such as a machine's name or where something lives.
Hyper and this key moves to the pane on that side.
Hyper and this key splits the pane, the new one on that side.
Click a key, then press the key you want. Esc keeps it as it was.
What oTerminal does for a program while it runs in a pane. A program is known by its name, wherever it is run from and whatever is in front of it: htop, sudo htop and /opt/homebrew/bin/htop are all htop. Click one to change what it is set to; a change applies to the next command run.
What oTerminal knows of a particular program, each a folder in plugins/ or your own ~/.oterminal/plugins/. Restart oTerminal after adding or changing one.
Output is recognised by its shape, whatever printed it, and drawn with the visualiser its type is set to, beside the raw text. du -sh *, find … -exec du -h {} + | sort -rh and ssh host du -h are all sizes. The result’s Raw switch changes what is shown first, for every result of that type.
| Type | Recognised by | Drawn with | Shown first | Actions |
|---|
For output oTerminal does not know: the pattern each of its lines matches, a regular expression with a name for each part. Amounts are drawn as bars, and need the parts (?<label>…) and (?<amount>…); an amount can have units (4.0K, 87G). Table rows get a column for each named part. Most lines must match before output counts as the type; for the programs it is printed by, one is enough.
These oTerminal windows are still running, with no browser tab showing them.