This guide covers the terminal-specific settings that matter most when using VT Code interactively.
VT Code can match its own interface to the way you work in your terminal, but it does not control the terminal application's theme directly.
- Use
/configto adjust VT Code appearance and related interactive settings. - Use
/vimto toggle session-local Vim prompt editing, or persist it withui.vim_mode = true. - Use
/statuslineto generate a custom status-line script in the user or workspace config layer. - Use
[ui.status_line]invtcode.tomlto customize the bottom status bar. - Keep terminal colors and fonts in your terminal app's own settings.
Example status-line configuration:
[ui.status_line]
mode = "command"
command = "~/.config/vtcode/statusline.sh"
refresh_interval_ms = 1000
command_timeout_ms = 200See status-line.md for the full status-line payload and examples.
VT Code supports several multiline input paths:
- Type
\followed byEnterto insert a newline without submitting. - This works across VT Code terminal sessions without terminal-specific setup.
Option+Enteris the default multiline fallback on macOS terminals.- In Terminal.app, enable
Use Option as Meta Keyin Settings -> Profiles -> Keyboard. - In iTerm2 or the VS Code terminal, set the left/right Option key to
Esc+if you rely on Option-based shortcuts.
- Native terminals:
Ghostty,Kitty,WezTerm,iTerm2, andWarpalready handle multiline input without VT Code editing terminal config. - Guided setup terminals: run
/terminal-setupinVS Code,Alacritty, orZedif you want VT Code's terminal-specific setup flow. - Manual terminals:
Terminal.app,xterm, and unknown terminals require terminal-specific keybinding changes outside VT Code.
Enterqueues the current draft.Ctrl+Enterruns the draft immediately, or steers the active turn.Ctrl+Jinserts a literal line feed.Esccancels the current input or closes an active modal.
- Set
ui.vim_mode = trueinvtcode.tomlto enable Vim-style prompt editing by default. - Use
/vim,/vim on, or/vim offto change Vim mode for the current session only. - VT Code currently supports a focused subset with
INSERTandNORMALmodes only. - VT Code-specific controls such as
Enter,Tab,Ctrl+Enter,/,@, and!still keep their existing behavior.
VT Code has two separate notification paths: terminal-native alerts and lifecycle hooks.
- VT Code can emit terminal bell and terminal-notification escape sequences when supported.
- Configure VT Code-side notification behavior in
vtcode.toml:
[security]
hitl_notification_bell = true
[ui.notifications]
enabled = true
delivery_mode = "desktop"
backend = "auto"
completion_failure = true
completion_success = false- Some terminals surface these alerts directly:
GhosttyandKittysupport native alert flows well.iTerm2can show Notification Center alerts after enabling the relevant profile settings.- Other terminals may only expose bell-based notifications.
If your terminal does not surface alerts the way you want, use lifecycle hooks to run your own notification command.
[hooks.lifecycle]
task_completion = [
{ hooks = [ { command = "osascript -e 'display notification \"VT Code task completed\" with title \"VT Code\"'", timeout_seconds = 5 } ] }
]See lifecycle-hooks.md for event payloads, blocking semantics, and more examples.
VT Code also supports hooks.lifecycle.notification for notifications that survive runtime gating. Matchers are evaluated against permission_prompt and idle_prompt.
Large pasted inputs are harder to manage than file-based workflows. Prefer referencing files or piping data into VT Code.
- Use
@path/to/fileinside interactive mode to attach files from the workspace. - Quote paths with spaces, for example
@"docs/design notes.md".
cat large_file.txt | vtcode ask "Analyze this content"VT Code can compact, truncate, or spool large tool output depending on your config:
[ui]
tool_output_mode = "compact"
tool_output_max_lines = 50
tool_output_spool_bytes = 200000- If
Shift+Enterdoes nothing, check whether your current terminal is one of VT Code's guided setup terminals. - If you are on macOS, try
Option+Enterbefore changing terminal bindings. - If your terminal is not covered by
/terminal-setup, configure the binding in the terminal app itself.
- Confirm your terminal has OS notification permissions where applicable.
- Test bell-based alerts with
printf '\\a'. - Validate hook commands separately before relying on them in
hooks.lifecycle.
- Prefer
@filereferences over pasting long transcripts into the terminal. - In the VS Code terminal, long pastes are more likely to be truncated than file-based input.
- Use file references instead of pasting long documents into the terminal.
- Keep
tool_output_modecompact if you work with verbose builds or test output. - Configure notifications with hooks when your terminal does not surface native alerts well.
- Use
/configand[ui.status_line]to tune the interactive surface instead of terminal theme hacks.