CH 04 · Conoce la Web UI
Objetivo del capítulo
En el capítulo anterior instalaste dsh, rellenaste la Key, elegiste un workspace y ejecutaste tu primera tarea. Este capítulo hace una pausa para leer la interfaz: qué hace cada zona, qué interruptores se esconden en el panel de ajustes, qué deja hacer al Agent cada uno de los tres niveles de permiso y cómo leer la vista Trajectory. Cuando termines, descubrirás que la frase "cada ejecución es trazable" del CH 02 está ahí mismo, en la parte superior izquierda de la interfaz — a una pestaña de distancia.
Disposición de la interfaz: familiarízate
Esta es la captura de toda la interfaz que tomé tras ejecutar la primera tarea, con las zonas principales anotadas:

Responsabilidades de cada zona:
| Zona | Qué hace | Notas |
|---|---|---|
| Izquierda | Lista de workspaces | Un workspace por directorio de proyecto; elige el workspace aquí (abre la lista y elige uno, o "⊕ Nueva sesión" para crear); abajo está el botón de Ajustes |
| Centro | Área de sesión | Donde envías mensajes, trabaja el Agent y se muestran los resultados; arriba están las pestañas Conversación / Trajectory |
| Abajo | Área de entrada | A la izquierda del botón Enviar está el anillo de ocupación de contexto; más a la izquierda están los selectores de Modelo y Permiso; debajo está la barra de estadísticas |
Panel de ajustes: el engranaje abajo a la izquierda
El botón Ajustes está abajo a la izquierda de la interfaz. Al abrirlo, el lado izquierdo lista las categorías de funciones — Ajustes generales / Modelos / Plugins / Agent Presets:

Primero, la página Ajustes generales: idioma, apariencia y comportamiento de la tecla Enter mientras está ocupado están todos aquí, más dos importantes — Permiso (el modo de permiso predeterminado para sesiones nuevas; el mío es Workspace Write) y Agent Preset (actualmente "Standard"). El Agent Preset aquí son los cuatro modos de ejecución (Standard / Code / Minimal / Creator) que cubrimos en CH 02 — lo que elijas aquí es "qué combination de plugins usarán por defecto las sesiones nuevas". Fíjate en la línea de abajo: "Takes effect for newly created sessions. Already-running sessions keep the preset they started with." — los valores predeterminados fijados en Ajustes generales solo se aplican a sesiones nuevas, una regla que te encontrarás una y otra vez.
Ahora mira Ajustes → Modelos: la API Key está rellena en la tarjeta de DeepSeek (si está rellena, se muestra como configurada), y abajo puedes añadir un Provider (usando un directorio integrado como Anthropic u OpenAI) y añadir un Provider personalizado (para tu propia pasarela o modelo local — rellena Provider ID, dirección API, protocolo, clave y al menos un modelo). Los cambios en el enrutamiento de modelos surten efecto inmediatamente; no hace falta reiniciar el servicio. La Key es de solo escritura: tras guardar, la página solo muestra un descriptor redactado, y el texto plano solo va a parar localmente a $DSH_HOME/.credentials.yaml — la misma ruta mencionada en CH 03.
Tres niveles de permiso: qué puede tocar en tu ordenador
Esto es lo que debes entender desde el principio sobre dsh. El sandbox de archivos oficial se define como tres modos:
Compáralo con el selector de permiso a la izquierda del cuadro de entrada en tu interfaz (en el panel que aparece tras elegir un workspace):

Los tres niveles en palabras simples:
| Permiso | Qué puede hacer | Cuándo usarlo |
|---|---|---|
read-only | Solo lectura, no puede cambiar un solo byte | Análisis de solo lectura, code review, Q&A puro |
workspace-write (predeterminado) | Escribible en el workspace + área temporal del sistema; fuera del workspace, muestra un diálogo y pregunta primero | Trabajo diario, la gran mayoría de los casos |
danger-full-access | Lectura/escritura total en todas partes, sin frontera | Para tareas de mantenimiento del sistema que realmente necesitan cambios globales; el interruptor requerirá una segunda confirmación |
Una nota más sobre la semántica oficial: el límite de escritura para workspace-write es "la raíz del workspace + el área temporal prometida por el backend"; read-only rechaza las escrituras sin más; danger-full-access salta el aislamiento por completo. Date cuenta de que los permisos solo rigen los efectos sobre el sistema de archivos — la red y la visibilidad de procesos no entran en esta definición.
Para trabajo diario, quédate con el workspace-write predeterminado, familiarízate primero y solo considera el tercer nivel cuando realmente necesites actuar de forma global.
Cambiar viene en dos sabores, no los confundas:
- Solo para esta sesión, temporalmente: escribe
/permissionen el cuadro de entrada y elige un nivel. Solo afecta a la sesión actual. - Cambiar el valor predeterminado (para que las sesiones nuevas lo usen): ve a Ajustes → General → Permiso. Solo afecta a las sesiones creadas después; las sesiones en curso no se tocan.
Modelo y nivel de razonamiento
En el selector de modelo, ves los modelos configurados (una vez rellenaste la Key, los de DeepSeek aparecen automáticamente). Hay una regla oficial explícita: el modelo elegido en el selector de modelo es el predeterminado para sesiones nuevas; las sesiones que ya han enviado peticiones mantendrán el modelo que estaban usando cuando empezaron, y no cambiarán con el valor predeterminado (la sesión registra su propio modelo; cambiar el valor predeterminado no reescribirá silenciosamente peticiones pasadas).
Así que si quieres que distintas sesiones usen distintos modelos (trabajo diario ligero en flash, tareas duras en pro o más potente), simplemente abre sesiones nuevas — cada una es independiente.
El nivel de razonamiento es otra perilla; el modelo oficial de DeepSeek tiene cuatro niveles:
| Nivel | Característica |
|---|---|
off | Deshabilita el pensamiento, más rápido y más barato |
low | Pensamiento ligero, suficiente para Q&A simple |
high (predeterminado) | Razonamiento profundo, más preciso en tareas complejas, algo más lento y más caro |
max | Máxima intensidad, solo para el trabajo más difícil |
Para trabajo diario, mantén high; si te parece lento, bájalo. Lo más profundo sobre "qué afecta realmente cada nivel y cómo cambiarlo" se cubre en CH 06. Los cambios de modelo también surten efecto en la siguiente petición, no hace falta reiniciar.
Trajectory: el "trazable" del CH 02 se esconde aquí
¿Recuerdas la frase "cada ejecución es trazable" del CH 02? Mira arriba a la izquierda de la interfaz — Conversación / Trajectory están una al lado de la otra. Pulsa Trajectory y el registro de ejecución completo de esta ronda se desplegará ante ti. Mira esta captura real:

Cómo leer esto:
- En el centro hay una línea de tiempo; ASSISTANT (think/speak) y TOOL (llamadas a herramientas) se alternan, y de arriba abajo está el orden real en que trabajó el Agent.
- Para cada fila TOOL: el nombre de la herramienta está a la izquierda (
pwsh/read/web_search), y a la derecha están los parámetros reales enviados y los resultados clave devueltos. - Pulsa cualquier fila TOOL, y el panel derecho expande los detalles de ese paso: Summary / Payload / Result / Schema / Timing, además de Status (Completed) y Hierarchy.
- Arriba hay un resumen de Duration / Turns / Calls, más un cuadro de búsqueda para encontrar pasos por palabra clave.
En mi tarea de esta vez puedes ver al Agent tropezando de verdad: primero leyó la configuración, leyó archivos, y al intentar usar pwsh para obtener directamente la documentación oficial, la conexión SSL falló; dijo "Outbound HTTPS from pwsh is blocked", luego cambió a web_search para seguir buscando — todos esos tropiezos quedan registrados en la Trajectory. Eso es "trazable".
La barra de estadísticas de abajo es la otra cara de lo mismo:
| Métrica | Significado |
|---|---|
| Turns · Steps | Cuántos pasos dio el Agent en esta ronda |
| LLM time / Tool call time | Tiempo gastado "pensando" y "haciendo" |
| First-token mean / tok/s | Velocidad de salida |
| Cache hit | La proporción de tokens de entrada que golpearon la caché de contexto (ver abajo) |
| Input / Output tok | Tokens enviados al modelo y producidos por el modelo en esta ronda |
Caché de contexto: por qué la tasa de acierto es tan alta
El "cache hit" de la barra de estadísticas no es una función de dsh; detrás está la caché de contexto en disco de la API de DeepSeek. El enfoque oficial: el contenido que se espera reutilizar se guarda en un array de discos distribuido; cuando la siguiente entrada contiene una porción repetida, se lee desde la caché en lugar de recomputar — reduciendo latencia y costo.
La facturación de los tokens de entrada que golpean la caché es mucho más barata que la de los que fallan. Toma deepseek-v4-flash como ejemplo: al precio oficial actual, la entrada con acierto de caché cuesta unos 0,1 yuanes por millón de tokens, mientras que la entrada sin acierto cuesta unos 1,5–3 yuanes por millón de tokens (dependiendo de horario valle/punta) — esa porción en caché de la entrada cuesta solo una fracción del costo del fallo.
¿Por qué la tasa de acierto es tan alta en una sola sesión? Porque cada entrada de paso en la misma sesión incluye el prompt del sistema anterior, las definiciones de herramientas y el historial de conversación — un prefijo repetido estable. La primera llamada no tiene nada en caché, pero desde la segunda en adelante, el segmento anterior queda en caché. En mi tarea tuve 160K tokens de entrada con una alta tasa de acierto, así que solo una pequeña porción se facturó al precio completo de fallo. Por eso también conviene hacer las tareas de Agent en la misma sesión — cuanto más larga la sesión, más ahorras luego.
Anillo de ocupación de contexto
El indicador circular a la izquierda del botón Enviar en el área de entrada muestra la proporción de ocupación de la ventana de contexto de la sesión actual. Mira la prueba real:

El anillo en la imagen muestra "2% context used" — la sesión acaba de empezar, apenas hay uso. La ventana de contexto es finita; a medida que el Agent ejecuta tareas largas, el historial de conversación y los resultados de herramientas se acumulan, y el anillo te permite ver de un vistazo cuánto espacio queda. Cuando esté casi lleno, tienes tres opciones: empezar una sesión nueva, pedirle al Agent que cierre con un resumen, o simplemente escribir /compact en el cuadro de entrada — condensará la información clave de la conversación actual en un resumen más ajustado, y la IA seguirá trabajando con ese resumen. Es como poner a la sesión a dieta, sin necesidad de empezar de cero.
Recorre la primera tarea de principio a fin
La tarea de ejemplo en el README oficial es esta:
Summarize this repository and identify its main packages.
Que traducida al español es la que ejecutaste en el capítulo anterior: resume el repositorio DeepSeek harness e identifica sus módulos principales. Así que ya ejecutaste el ejemplo oficial.
Al ejecutarla, fíjate cómo la interfaz "abre" el proceso: el Agent primero inyecta contexto, planifica, luego llama a herramientas (lee archivos, ejecuta comandos, busca cosas), cada paso visible; para acciones que necesitan aprobación, muestra un diálogo. Tras terminar, cambia a la pestaña Trajectory y reprodúcelo, luego cruza los números con la barra de estadísticas — la primera tarea suele tener una entrada enorme (la mía fue de 160K tokens), pero con una alta tasa de acierto de caché, el costo real es muy bajo.
Lo que aprendiste en este capítulo
Apruebas si puedes completar los siguientes puntos:
- [ ] Describe qué hace cada zona de la Web UI (izquierda / centro / abajo) y dónde elegir un workspace
- [ ] Conoces las categorías del panel de ajustes (Ajustes generales / Modelos / Plugins / Agent Presets), y que "los valores predeterminados solo se aplican a sesiones nuevas"
- [ ] Explicas la diferencia entre los tres niveles de permiso
read-only/workspace-write/danger-full-access, y por qué usar el segundo para trabajo diario - [ ] Sabes que
/permissioncambia temporalmente el permiso de la sesión actual, mientras que Ajustes → General → Permiso cambia el valor predeterminado - [ ] Sabes que la elección del selector de modelo es la predeterminada para sesiones nuevas; las sesiones que ya han ejecutado mantienen su modelo original
- [ ] Lees la vista Trajectory: línea de tiempo ASSISTANT / TOOL + panel de detalle a la derecha + barra de estadísticas
- [ ] Explicas qué es "cache hit" y por qué las sesiones largas tienen una alta tasa de acierto
