Skip to main content
Running symbiotic opens the terminal UI (TUI). It runs the same engine as the IDE extension, so both share the same configuration files, agents, permissions, and security modes.

Launch

If you pipe text into symbiotic, it is added in front of --prompt:
On first launch, Symbiotic Code asks you to sign in with your Symbiotic Security account in the browser. See Authentication. When you quit from a session, the TUI prints the command to resume it (symbiotic -s <id>).

Layout

Home screen

Before your first message you see the home screen: the logo, a short explanation of the security modes, the prompt, and tips (hide them with Ctrl+X H). The bottom bar shows the current directory and git branch, the number of connected MCP servers, and the version.

Session screen

Once you send a message, the session screen shows the conversation, the prompt, and a sidebar. Sidebar. Shown automatically when the terminal is wider than 120 columns. Toggle it with Ctrl+X B; on narrow terminals it opens as an overlay. It contains: Header. When the sidebar is hidden, a header shows the session title, context usage, and cost instead. Hide it with Hide header in the command palette. Prompt box. The prompt box shows the current state of the session:
  • Above the input: the active agent, the security mode (● Strict, ◐ Balanced, ○ Permissive), and the tab / ctrl+s hints.
  • Below the input: the model, its provider, and the selected variant.
  • While the agent works: a spinner, retry messages, and the esc interrupt hint.
The border color follows the active agent’s color.

Write a prompt

If Shift+Enter sends the message instead of adding a new line, your terminal isn’t sending the modifier. Use Ctrl+J, or see Keybinds to configure your terminal.

Mention files, agents, and resources with @

Type @ to open autocomplete. It lists:
  • Subagents, such as @explore or @general, to delegate a task directly
  • Files and directories in the project. Press Tab on a directory to browse into it. Add a line range with #, for example @src/auth/login.ts#10-40
  • MCP resources from your connected MCP servers
Use Up/Down to move through suggestions, Enter or Tab to select, and Esc to close.

Run commands with /

Type / at the start of the input to autocomplete built-in commands, your custom commands, and MCP prompts (marked :mcp). Skills don’t appear in this list, but you can still run one by typing /<skill-name> in full, or pick one with /skills. See Common commands for the full list.

Run shell commands with !

Type ! at the start of the input to switch to shell mode. The prompt label changes to Shell. Press Enter to run the command directly, without going through the model. The output is added to the conversation, so the agent can see it in later messages. Long output is collapsed to 10 lines; click it to expand. Press Esc, or Backspace on an empty input, to leave shell mode.

Attach images and paste text

  • Images: paste an image from the clipboard with Ctrl+V, or drag and drop an image file onto the terminal. It appears as [Image 1] in the prompt.
  • Long text: pasting 3 or more lines (or more than 150 characters) shows a placeholder such as [Pasted ~42 lines]. The full text is sent with the message. To paste text as is, set experimental.disable_paste_summary to true in your configuration file.

Stash a prompt

To set aside a prompt you’re writing, open the command palette (Ctrl+P) and select Stash prompt. Use Stash pop to restore the last one, or Stash list to pick one (press Ctrl+D twice to delete an entry). Up to 50 prompts are kept.

Switch agent, model, and security mode

The model you pick is remembered per agent, and the variant per model. If an agent defines its own security_mode, it applies while that agent is active. In the model list, press Ctrl+F to mark a model as a favorite and Ctrl+A to connect a provider. See Agents, Models and providers, and Security modes.

Permissions and questions

When the agent needs approval for a tool call (based on your tool permissions), the prompt is replaced by a Permission required panel. File edits show the diff. Use ←/→ (or h/l) and Enter, or click an option. Esc rejects. Ctrl+F shows the request full screen. When a subagent’s request is rejected, you can tell the agent what to do instead. When the agent asks you a question, pick an answer with 1-9 or the arrow keys and press Enter, or choose Type your own answer. Esc dismisses the question. With several questions, use Tab to move between them and review your answers in the Confirm tab.

Work with messages

Click one of your messages to open Message Actions:
  • Revert: undo this message and everything after it, including the file changes, and put the message back in the prompt
  • Copy: copy the message text
  • Fork: start a new session from this point

Scroll

The view follows new output while you’re at the bottom.

Display options

These choices are saved between sessions, except code concealment. Diffs are shown side by side when the terminal is wider than 120 columns, and stacked otherwise. Set diff_style to "stacked" in tui.json to always stack them. To browse all your git changes, use /diff. It opens a full-screen diff viewer; press ? in it to see its keybinds.

Subagents

When the agent delegates work to a subagent, the task appears in the conversation. Click it to open the subagent’s session. In the subagent list, press Ctrl+A to abort a running subagent. Subagent sessions are read-only: permission requests from subagents appear in the parent session.

Sessions

Use /sessions (Ctrl+X L) to switch sessions. Sessions are grouped by date. In the list:
  • Ctrl+F pins a session (up to 9). Jump to pinned sessions with Ctrl+X 1 to Ctrl+X 9
  • Ctrl+R renames a session
  • Ctrl+D twice deletes a session
Start a new session with /new (Ctrl+X N).

Command palette

Press Ctrl+P to open the command palette. It lists every available action with its keybind, and a Suggested section at the top. Type to filter. Some actions are only available here, including:
  • Stash prompt, Stash pop, and Stash list
  • Toggle appearance (switch between dark and light)
  • Show/Hide header, Hide tool details, Show generic tool output, and Toggle session scrollbar
  • Disable/Enable terminal title, Disable/Enable animations, and Disable/Enable diff wrapping
  • Open docs

Themes

Use /themes (Ctrl+X T) to pick a theme. The list previews each theme as you move through it; press Esc to keep your current theme. The default theme is symbiotic. Built-in themes: symbiotic, aura, ayu, carbonfox, catppuccin, catppuccin-frappe, catppuccin-macchiato, cobalt2, cursor, dracula, everforest, flexoki, github, gruvbox, kanagawa, lucent-orng, material, matrix, mercury, monokai, nightowl, nord, one-dark, opencode, orng, osaka-jade, palenight, rosepine, solarized, synthwave84, tokyonight, vercel, vesper, and zenburn. The system theme uses your terminal’s color palette. It’s only listed if your terminal reports its palette. Symbiotic Code detects whether your terminal has a dark or light background. To override it, use Toggle appearance in the command palette.

Set a theme in the configuration

Set theme in tui.json. It takes precedence over the theme picked with /themes.
tui.json

Create a custom theme

Add a JSON file to a themes folder. The file name is the theme name.
A theme defines a color for each key under theme. A color can be a hex value, the name of an entry in defs, a { "dark": ..., "light": ... } pair, an ANSI color number (0-255), or "none" for transparent.
.symbiotic/themes/my-theme.json
The example above is shortened. A theme must define every color key below; only selectedListItemText, backgroundMenu, and thinkingOpacity (a number, default 0.6) are optional.
  • Base: primary, secondary, accent, error, warning, success, info, text, textMuted, background, backgroundPanel, backgroundElement, border, borderActive, borderSubtle
  • Diff: diffAdded, diffRemoved, diffContext, diffHunkHeader, diffHighlightAdded, diffHighlightRemoved, diffAddedBg, diffRemovedBg, diffContextBg, diffLineNumber, diffAddedLineNumberBg, diffRemovedLineNumberBg
  • Markdown: markdownText, markdownHeading, markdownLink, markdownLinkText, markdownCode, markdownBlockQuote, markdownEmph, markdownStrong, markdownHorizontalRule, markdownListItem, markdownListEnumeration, markdownImage, markdownImageText, markdownCodeBlock
  • Syntax: syntaxComment, syntaxKeyword, syntaxFunction, syntaxVariable, syntaxString, syntaxNumber, syntaxType, syntaxOperator, syntaxPunctuation

Configuration

TUI settings live in tui.json (or tui.jsonc), separate from symbiotic.json:
  • Global: ~/.config/symbiotic/tui.json
  • Project: tui.json at the root of your project, or .symbiotic/tui.json
  • Custom path: the SYMBIOTIC_TUI_CONFIG environment variable
Project files override global ones.
tui.json
tui.json is validated strictly. If it contains an unknown key, the whole file is ignored and a warning is written to the log.
If you still have theme or keybinds in symbiotic.json, they are moved automatically to a tui.json next to it on startup.

Leader key

Most shortcuts start with the leader key, Ctrl+X by default. Press Ctrl+X, release it, then press the next key within 2 seconds. For example, Ctrl+X N starts a new session. See Keybinds to change it or any other shortcut.

Environment variables


Mouse and clipboard

The TUI supports the mouse: click messages, tool calls, buttons, list items, and sidebar sections, and scroll with the wheel. Copy text: select it with the mouse. It’s copied to the clipboard when you release the button, and a Copied to clipboard notification appears. On Windows, copy on select is off by default: select the text, then press Ctrl+C or right-click to copy it. Clipboard copy works over SSH and in tmux or screen, through the OSC 52 terminal sequence (your terminal must support it).

Exit

  • Press Ctrl+C on an empty prompt (Ctrl+C first clears the input if it isn’t empty)
  • Press Ctrl+D on an empty prompt, or Ctrl+X Q
  • Type /exit (or /quit, /q), or type exit, quit, or :q and press Enter
Ctrl+Esc suspends the TUI and returns you to the shell. Run fg to resume.

Attach to a running server

The TUI can connect to a Symbiotic Code server started with symbiotic serve or symbiotic web, for example on a remote machine or in a container:
attach accepts --dir (directory to work in on the server), -c, -s, --fork, and -p, --password. The password defaults to the SYMBIOTIC_SERVER_PASSWORD environment variable.

Next steps

Common commands

All slash commands and CLI commands.

Keybinds

Customize every shortcut.

Agents

Build, Plan, Ask, Debug, and subagents.