Simply Another Terminal
Simply Another Terminal runs routine shell work in a compact VS Code panel.
Claude and Codex stay on native editor terminals, while git, npm, sls, uv, and
similar commands use an independently sized terminal surface.
The extension targets macOS and owns one interactive shell process per terminal
entry. It uses xterm.js with WebGL acceleration, automatic renderer fallback,
and the active VS Code terminal colors.
Usage
Run Simply Another Terminal: Reveal Terminal from the Command Palette. The
command focuses the SAT bottom-panel container. Hiding and revealing the
panel keeps every terminal process and scrollback buffer alive.
The plus action adds and selects a terminal in the active workspace. The trash
action terminates and removes only the selected terminal, then selects the
nearest remaining entry. Open in Simply Another Terminal appears on Explorer
folders and adds a selected terminal in that directory.
The 47 px right-side strip shows one icon per terminal. Selecting an icon swaps
the visible renderer without rebuilding it. Hover text shows the immutable
launch-folder name, process identifier, absolute launch path, and exit state.
Deleting the last terminal leaves an empty panel where plus can create another.
The process starts after the renderer reports a nonzero terminal grid. It uses
the active editor's workspace folder, then the first workspace folder, then the
user's home directory. The Extension Host environment is inherited with
terminal.integrated.env.osx applied on top. The process receives the same
terminal identity and true-color capability values expected by VS Code-aware
shell startup files.
The default shell comes from SHELL and falls back to /bin/zsh on macOS. The
default -l argument starts a login shell, so normal zsh startup files and
existing shell-owned direnv hooks remain active.
Each terminal supports keyboard input, ANSI and true-color output, live resize,
selection copy, clipboard paste, HTTP and HTTPS links, independent scrollback,
and explicit restart after exit. Shell failures affect only their terminal and
also appear in the Simply Another Terminal output channel.
Settings
simplyAnotherTerminal.fontSize defaults to 12 and is independent from
terminal.integrated.fontSize.
simplyAnotherTerminal.fontFamily overrides the renderer font. An empty
value inherits terminal.integrated.fontFamily, then falls back to
monospace.
simplyAnotherTerminal.shellPath overrides the shell executable.
simplyAnotherTerminal.shellArguments defaults to ["-l"].
Typography and theme settings apply to the renderer while it is open. Shell
path and argument changes apply on the next explicit restart.
Cursor visibility, cursor style, cursor width, ANSI contrast, font weights,
letter spacing, line height, bold color behavior, and scrollback follow the
corresponding terminal.integrated settings. Only the configured SAT font size
remains independent by default.
Limits
This surface is a webview terminal backed by node-pty. It is not a native
vscode.Terminal and does not provide native terminal tabs, command
decorations, command navigation, accessibility integration, persistence, or
native terminal integrations. VS Code extensions that react to native terminal
creation, including automatic Python environment activation, do not run for
this surface. Detected and extension-contributed terminal profiles are not
copied automatically because the public profile contract does not expose the
resolved default profile.
Terminal names and paths stay tied to their launch directory and do not change
after cd. The extension does not provide splits, drag reordering, terminal
renaming, or session persistence across reloads. Windows and Linux process
behavior are outside its supported platform contract.
Development
Run commands from simply-another-terminal:
npm install installs the pinned runtime and quality dependencies.
npm run quality:static runs typed linting, formatting, architecture, and
dead-code checks.
npm run typecheck checks Extension Host and browser TypeScript contracts.
npm run test:unit compiles and runs focused behavior tests.
npm run test:extension activates the extension in an Extension Host and
requires output from a real zsh process.
npm run package:validate creates and inspects the VSIX contents, including
executable Darwin spawn helpers.
npm run audit:dependencies rejects moderate or higher dependency
vulnerabilities.
npm run check runs the sandbox-runnable local check.
npm run check:full adds the Extension Host, package validation, and native
helper gates, which run outside the sandbox.
src/extension.ts composes lifecycle ownership. src/configuration.ts
validates settings and starting-directory selection. src/protocol.ts
validates renderer operations. src/process.ts owns node-pty.
src/terminalCollection.ts owns terminal membership and selection.
src/terminalView.ts owns the webview and ordered host delivery. Browser-only
terminal retention and WebGL fallback stay under src/webview/.