> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plazbot.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Modo REPL

> Sesion interactiva tipo Claude Code con streaming, panel JSON y slash commands

## Abrir el REPL

```bash theme={null}
plazbot studio
```

Esto lanza un TUI (text user interface) construido con Ink + React donde puedes conversar con Studio en tiempo real. Cada respuesta se transmite por **Server-Sent Events** y se renderiza palabra por palabra.

### Flags disponibles

| Flag                      | Tipo   | Descripcion                                                      |
| ------------------------- | ------ | ---------------------------------------------------------------- |
| `--dev`                   | bool   | Apunta al backend local `http://localhost:5090`                  |
| `-a, --agent-id <id>`     | string | Pre-carga un agente al iniciar la sesion                         |
| `-w, --workspace-id <id>` | string | Sobrescribe el workspace del config (modo soporte / white-label) |
| `-m, --message <text>`    | string | Envia un mensaje inicial automaticamente                         |
| `--no-color`              | bool   | Desactiva colores ANSI (util en CI o logs)                       |

### Ejemplos

```bash theme={null}
# REPL contra produccion (zona del config)
plazbot studio

# REPL apuntando a un agente especifico
plazbot studio -a age_TZiOY...

# REPL contra backend local de desarrollo
plazbot studio --dev

# REPL con mensaje inicial automatico
plazbot studio -m "lista mis agentes"

# Soporte same-region: atender un workspace de un cliente en tu misma zona
plazbot studio -w wok_CLIENTE
```

<Tip>
  El flag `-w` permite operar sobre **otro workspace de tu misma zona** con tu propio usuario (modo soporte). Todas las acciones quedan auditadas como tuyas.
</Tip>

<Warning>
  Para atender clientes de **otra region** (ej. tu cuenta es LA y necesitas un workspace EU), debes hacer `plazbot init` con una cuenta de esa zona. El JWT esta firmado por la region que lo emite y no es valido cross-region.

  ```bash theme={null}
  # Tu cuenta EU
  plazbot init -e tu-cuenta-eu@plazbot.com -k <jwt-EU> -w wok_TU_EU -z EU
  plazbot studio -w wok_CLIENTE_EU
  ```
</Warning>

***

## Layout del TUI

```text theme={null}
┌─ Studio · workspace acme · LA · catalogo-wa ──────────────────────┐
│                                                  │                 │
│  Tu > Cambia el saludo a algo mas cercano       │  Panel Agente   │
│                                                  │  [preview|json] │
│  ✓ Consultando agentes · 0.4s                    │                 │
│  ✓ Actualizando prompt · 0.8s                    │  {              │
│                                                  │    "name": ...  │
│  Plazbot > Listo. El nuevo saludo es             │    "prompt": .. │
│  "¡Hola! Soy Cata 👋"                            │  }              │
│                                                  │                 │
├──────────────────────────────────────────────────┴─────────────────┤
│ > _                                                                 │
├─────────────────────────────────────────────────────────────────────┤
│ tokens: 1.2k in / 845 out · /help · Tab panel · Esc cancel · Ctrl+C│
└─────────────────────────────────────────────────────────────────────┘
```

### Componentes

| Zona             | Descripcion                                                     |
| ---------------- | --------------------------------------------------------------- |
| **Header**       | Muestra workspace activo, zona (LA/EU) y agente cargado         |
| **ChatLog**      | Mensajes de usuario, assistant y tool-calls con spinner / check |
| **Panel Agente** | Vista lateral con la config del agente activo (JSON o preview)  |
| **Input**        | Caja de texto con autocompletado de slash commands              |
| **Footer**       | Contador de tokens, hints de teclado y estado de streaming      |

***

## Flujo de una interaccion

1. **Escribes** un mensaje y presionas Enter.
2. Studio muestra `Tu > ...` y comienza a streamear la respuesta.
3. Si necesita ejecutar herramientas (listar agentes, actualizar prompt, etc.), aparecen tarjetas con spinner `▸ Consultando agentes…`.
4. Cuando la herramienta termina, la tarjeta cambia a `✓ Consultados · 0.4s`.
5. El assistant continua streameando el texto final con markdown renderizado.
6. El footer actualiza el contador de tokens al recibir el chunk `usage`.

### Tipos de chunks que veras

| Chunk         | UI                                                    |
| ------------- | ----------------------------------------------------- |
| `text`        | Texto streameado del assistant (markdown renderizado) |
| `tool_call`   | Tarjeta `▸ {herramienta}…` con spinner                |
| `tool_result` | Tarjeta cambia a `✓` o `✗` con duracion               |
| `usage`       | Footer actualiza tokens in/out                        |
| `done`        | Footer pasa de `streaming…` a estado idle             |
| `error`       | Mensaje rojo con icono `✖` y razon                    |

<Tip>
  Cuando una `tool_result` trae `data.config` (por ejemplo al cargar un agente con `/load`), el panel lateral se llena automaticamente con el JSON de la config.
</Tip>

***

## Panel del agente

El panel lateral muestra la config del agente actualmente activo en la conversacion.

| Tab        | Atajo | Descripcion                                                        |
| ---------- | ----- | ------------------------------------------------------------------ |
| `preview`  | `p`   | Vista renderizada amigable: nombre, prompt, herramientas, fallback |
| `json`     | `j`   | Config completa en JSON con syntax highlight                       |
| `diagnose` | `d`   | Resultado de `/diagnose` con issues priorizadas                    |

Toggle del panel con `Tab`. Util para sesiones largas en pantallas anchas.

***

## Comandos de sesion

Dentro del REPL puedes usar [slash commands](/cli/studio/slash-commands) para acciones rapidas:

```text theme={null}
> /help        # ayuda inline
> /agents      # lista mis agentes
> /load age_T  # cargar agente por id
> /diagnose    # diagnosticar el agente cargado
> /save        # persistir cambios pendientes
> /compact     # comprimir historial para sesiones largas
> /clear       # limpiar pantalla preservando contexto
> /reset       # reiniciar sesion completa
> /export      # exportar la conversacion a archivo
> /quit        # salir
```

***

## Cancelar y salir

| Accion                          | Atajo                          |
| ------------------------------- | ------------------------------ |
| Cancelar respuesta en streaming | `Esc`                          |
| Salir del REPL                  | `Ctrl+C` (dos veces) o `/quit` |
| Limpiar pantalla                | `/clear` o `Ctrl+L`            |

Cuando cancelas con `Esc`, el `AbortController` aborta el fetch SSE limpiamente, el mensaje queda truncado y puedes seguir escribiendo sin reiniciar.

<Warning>
  `Ctrl+C` una sola vez no sale — confirma con un segundo `Ctrl+C` para evitar perder la sesion accidentalmente.
</Warning>
