<!-- https://zerolog.ch/docs/terminal · Docs / Compute -->
# Terminal

A shell in the same container, available mid-task without stopping the agent. It needs a plan with a container, Mini or higher.

## Stepping in mid-task

Same container

Agent You Open Hand back

*The agent keeps working while you are in the shell. **Fix one thing by hand and hand it back**; the conversation keeps its context.*

## A full terminal

**htop**, **vim** and **tmux** behave normally.

## Eleven coding assistants

A picker in the terminal panel lists eleven entries. It groups them by ZeroLog models and your own account, and shows each one's model, setup state and approval.

- Claude Code, and Claude Code with your own account
- Codex
- ZeroLog Code
- opencode
- Kilo Code
- goose
- pi
- Qwen Code
- Nanocoder
- Kimi Code

Claude Code and Codex are part of the container image. The others install the first time you open them, from pinned versions with checksums and only inside your own container. After a container rebuild they come back from a cache within seconds.

Nine of them run on ZeroLog models and use your normal **credit**. Claude Code talks to an Anthropic-style endpoint (`/v1/messages`); the others use the OpenAI-style endpoint `/v1/chat/completions`. Codex and Claude Code with your own account use that account instead and spend no ZeroLog credit. Cancelling a request stops it at the provider, and a stream is billed once even when you cancel. The picker has a form to suggest another tool.

## How an assistant gets into your container

Mermaid source of the diagram on this page:

```mermaid
%% Terminal: how a coding assistant gets into your container and where its model calls go. Facts from server/terminal-clis.js, server/terminal.js, server/anthropic-shim.js.
flowchart TB
  pick["1. Open the terminal panel<br/>and pick an assistant"]
  img["Claude Code, Codex<br/>already in the container image"]
  fetch["2. First open of any other one:<br/>the host fetches the pinned version<br/>and checks its checksum"]
  unpack["3. Unpacked into your own container only<br/>checksum checked again there"]:::hot
  start["The assistant starts"]
  zl["ZeroLog models<br/>through the gateway<br/>your normal credit"]
  own["Codex, Claude Code<br/>with your own account<br/>no ZeroLog credit"]

  pick --> img --> start
  pick --> fetch --> unpack --> start
  start --> zl
  start --> own

  classDef hot stroke:#8f7ac9
```
