Terminal

A real shell, inside the sandbox

Ave’s terminal is a PTY running a real shell inside the operating-system sandbox. Open it in the side panel and move it to the main area. In the terminal’s own chat, the agent reads your output and runs an approved next command in the same shell.

The main-area terminal with its own docked chat. The agent reads the failing test with terminal_read, runs it again in the same terminal after terminal_run approval, and explains the cause
A terminal in the side panel beside the conversation, showing Blocks 4, Attach last, git log and an npm test run with one failure

Command blocks

One block per command

Shell integration marks where each command starts and ends, so every command becomes a block with its command line, folder, exit code and duration.

  • Copy and attach. Each block has Copy and Attach to chat, and Attach last puts the result you just got straight into the conversation.
  • One shell per tab. Each tab keeps one long-running shell, up to 16 terminals. Up to 256 KB of scrollback replays when a view reattaches.
  • Your shell. $SHELL when it is an absolute path; otherwise zsh on macOS and bash elsewhere.
  • Starts in the workspace. The default folder is ~/.ave/workspace, not your home. Each shell gets a throwaway HOME, so your rc files are not read.

With the agent

Read the output. Approve the next command.

terminal_read lists tabs and reads command blocks and output; terminal_run sends one line through the permission check into the same terminal. The approval card fixes the terminal and its working directory. Ave refuses the command while the shell is busy or you have typed input without submitting it. Output reaches the agent marked as untrusted data.

The terminal’s docked chat reads the failed test output and shows an approval card for a command in that same terminal

Run it again in the same terminal

It reads the failed npm test output and shows an approval card for the command that will run the test again in the same terminal.

The side chat tab with a Terminal 1 target chip above its composer

The side chat’s target

The terminal or page you last brought forward becomes the side chat’s target, shown above its composer.

An approval card for builtin:bash: OS isolation active (asrt), a temporary HOME for each command, no inherited sign-in state

The agent’s own commands

Commands the agent runs go through its shell tool, one process each, and show where they run and how they are isolated before you approve.

The Open in workspace list: Review, Terminal, Browser, Files, Sub-agents, Activity and Side chat, with shortcuts

Open in workspace

An empty side panel opens a terminal, browser, files, sub-agents or a side chat in one click.

The OS Tool Sandbox setting turned on, with a description of what it confines on macOS

Sandbox

If the sandbox can’t hold the shell, it doesn’t start

The terminal runs only inside the OS sandbox. When the sandbox cannot contain a shell, the terminal refuses to start; there is no unsandboxed fallback.

  • Seatbelt on macOS, bwrap on Linux. Files, processes and network are confined together, and network is denied by default.
  • Commands you type don’t ask. There is no per-command approval for what you type yourself; the sandbox is the boundary.
  • You turn the sandbox on. Enable it in Settings → Permissions, then restart the app.

Questions

The terminal won’t open.

The terminal needs the OS sandbox. Turn on OS Tool Sandbox in Settings → Permissions and restart Ave. Where the sandbox cannot contain a shell, the terminal does not start.

Does moving a terminal to the main area restart the shell?

No. Move to main area, or dragging the tab, keeps the shell and its output. A terminal shows in one place at a time, and closing its main-area pane ends the shell.

Does the agent type into my terminal?

Yes. terminal_run sends one line into the selected terminal through the permission check. The terminal and its current working directory must still match the approval card at execution time. Ave refuses the command while the shell is busy or you have typed input without submitting it. terminal_read only reads output.

Can it tell me when a long command finishes?

When the shell sends a notification escape (OSC 9 or OSC 777), the pane is marked, and if the Ave window isn’t focused the system shows a notification.

Can I reopen a closed panel?

⌘⇧T opens a new panel of the same kind at the same address. A closed shell process is not revived.

Read on