Interface and commands
SOBA Agent TUI, slash commands, direct shell, task queue, token budget, themes, and hotkeys.
SOBA gives you an interactive console UI with slash commands, hotkeys, direct shell access, and a small task queue.
1. Starting the TUI
# Interactive mode, used by default when no prompt is passed
soba
# Explicit interactive mode
soba -i
# Start with a theme
soba --theme forest
# Continue a specific session
soba -s abc123
# Continue the latest session in the TUI
soba -c
# Open the session picker
soba -rTUI shape
┌──────────────────────────────────────────────────────┐
│ SOBA Agent [-][_][×] Budget: 12K/64K EN │
│──────────────────────────────────────────────────────│
│ ● Active soba-agent │
│──────────────────────────────────────────────────────│
│ You: Fix all TypeScript errors in src/ │
│ │
│ Agent: Analyzing... │
│ ┌────────────────────────────────────────────────┐ │
│ │ 🔧 read: src/utils/parser.ts │ │
│ │ ... │ │
│ └────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────┐ │
│ │ ✅ edit: Fixed 3 type errors │ │
│ └────────────────────────────────────────────────┘ │
│ Agent: Done. Fixed 3 errors in parser.ts. │
│──────────────────────────────────────────────────────│
│ > _ │
└──────────────────────────────────────────────────────┘2. Hotkeys
| Key | Action | Context |
|---|---|---|
Enter | Send the message | Input line |
Ctrl+C | Interrupt the current agent response | While the agent is working |
Ctrl+Z | Suspend SOBA (SIGTSTP) | Always |
Ctrl+L / /clear | Clear the screen | Always |
Ctrl+D | Exit the TUI | Empty input line |
Escape | Clear input or close a dialog | Input line / dialog |
Tab | Complete slash commands | Input line |
↑ / ↓ | Move through message history | Input line |
Page Up / Page Down | Scroll the TUI message history | Main area |
Home | Jump to the beginning of history | Main area |
End | Jump to the current end of history | Main area |
F1 | Open the help sidebar | Main area |
F2 / /model | Open the provider/model selector | Main area |
F3 / /search | Search conversation history | Main area |
F6 / /sidebar | Cycle sidebar panels | Main area |
Ctrl+Shift+S / /sidebar toggle | Collapse or expand the sidebar | Main area |
/keys | Show the runtime keymap and command fallbacks | Main area |
Model selector
F2 or /model opens a dense two-column selector. Providers are on the left, models for the highlighted provider are on the right, and the search box filters both provider and model names/ids. Ctrl+M is still accepted as a legacy alias when the terminal sends it, but many terminals encode it as Enter, so do not rely on it.
Use ↑ / ↓ to move through models, ← / → or Tab / Shift+Tab to change provider, and Enter to select the highlighted model. The header shows the current provider/model, and each model row shows context window, max output, streaming, and thinking support when that metadata is available. Opening the selector refreshes built-in provider discovery, so newly available provider models can appear without restarting the whole session.
3. Slash commands
All slash commands start with /. Command names are case-insensitive.
3.1. Session
| Command | Action |
|---|---|
/session | Show the current session details: ID, turns, and budget |
/session rewind <turn-id> | Rewind the session to a previous turn and create a branch |
3.2. Compaction and budget
| Command | Action |
|---|---|
/compact | Force compaction and create a context capsule |
/auto-compact on | Enable automatic compaction |
/auto-compact off | Disable automatic compaction |
/budget | Show the current token and context budget |
/capsule | Show the latest capsule |
3.3. Skills
| Command | Action |
|---|---|
/skill list | Show available bundled, user, and project skills |
/skill new | Create a new skill |
/skill edit <name> | Edit an existing skill |
/skill eval <name> | Run deterministic eval cases for a draft skill |
/skill bench <name> | Show aggregate eval performance and common failures |
/skill trace <name> | Show recent eval runs and failed cases |
/skill remove <name> | Remove a skill |
/skill:<name> | Activate a skill with the colon form |
3.4. Interface settings
| Command | Action |
|---|---|
/theme | Show the current theme and available themes |
/theme <name> | Switch theme, for example /theme forest |
/lang | Show the current language |
/lang <locale> | Switch language: en, ru, or zh |
/config show | Show the current configuration |
/permissions [ask|repo|full|clear] | Manage permission mode |
/clear | Clear the TUI screen |
/search | Search conversation history |
/notifications | Show notification history |
3.5. Other commands
| Command | Action |
|---|---|
/help | Show help for all commands |
/queue | Show the task queue |
/queue clear | Clear the task queue |
/project-trust status | Show project trust status |
/project-trust approve | Trust the project |
/project-trust revoke | Revoke project trust |
/mcp status | Show configured MCP server status |
/mcp start <server> | Start an MCP server and register its tools |
/mcp stop <server> | Stop an MCP server |
/mcp restart <server> | Restart an MCP server and sync tools |
/mcp auth status <server> | Show remote auth state and next action |
/mcp auth login <server> | Start OAuth login for a remote MCP server |
/mcp auth logout <server> | Clear saved OAuth credentials |
/exit, /quit | Exit the TUI |
4. Direct shell
Use ! to run shell commands directly, without asking the AI to execute them.
4.1. Basic syntax
# Run one command
!ls -la src/
# Repeat the previous shell command
!!
# Check Node version
!node --version
# Inspect git status
!git status
# Run tests
!bun test4.2. Details
- The agent does not see the output of
!commands. It is a quick way to do something without spending tokens. - If the agent should read the output, send a normal prompt and let the agent call the
bashtool. - Trust still applies: dangerous commands such as
rm -rforsudoare blocked insafetrust mode and require confirmation innormalmode. See Security.
5. Task queue
You can send more tasks while the agent is working. SOBA runs them one after another.
# The agent is working on the first request
> Fix all TS errors # → Task 1, running
# Add more work while it is still busy
> Add tests for utils # → Queue, position 1
> Update README with new features # → Queue, position 2
# Inspect the queue
/queue
# Output: Queue (2 tasks)
# 1. Add tests for utils
# 2. Update README with new features
# Clear the queue
/queue clear6. Token budget
SOBA tracks token usage in real time and compacts context when it needs to.
# Show budget
/budget
# Output:
# Used: 28,450 tokens
# Limit: 64,000 tokens (context window)
# Available: 35,550 tokens
# Messages: 42
# Turns: 8
# Capsules: 2
# More context details
/budget
/session
# Output:
# Effective tokens: 32,100
# Hard limit: 47,616
# Safety reserve: 8,192
# Max output: 8,192
# Reclaimable: 12,100
# Auto-compact: ON7. Scrolling history
The full message and tool history can be scrolled with:
Page Up/Page Down— page-by-page scrollingHome— jump to the beginning of the session historyEnd— jump to the end, where the current state is
The input line stays visible while you scroll, so you can read old context and write a new message at the same time.
8. Autocomplete
8.1. Slash commands
Press Tab after / to see available commands:
/ # Tab →
help session compact budget
auto-compact capsule config lang
theme skill project-trust exit
quit clear search notifications
permissions queue8.2. Subcommands
After a command that supports subcommands:
/skill # Tab →
/skill list /skill new /skill edit
/skill eval /skill bench /skill trace
/skill remove /skill:9. Themes
SOBA includes 10 built-in color themes and lets you create your own.
# Switch theme
/theme forest
# Show the current theme
/theme
# Available themes:
# graphite, aurora, synthwave, paper,
# forest, highContrast, clay, operator, inkEach theme defines semantic tokens such as accent, text, muted, success, error, and border, with support for dark and light modes. See the theme guide for details.
10. Languages
SOBA supports English, Russian, and Chinese.
# Switch language in the TUI
/lang en
# At startup
soba --lang en
# In config
{
"lang": "en"
}Translations live in locales/. To add a language, create its JSON file and add one entry to
src/shared/i18n/locale-catalog.ts; locale types, validation, config loading, and command usage derive from that catalog.

