---
title: Dashboard local
description: Qué es el dashboard de Plak CLI, cómo abrirlo y cómo usar cada una de sus secciones.
sidebar:
  label: Dashboard
  order: 4
---

El dashboard es la **página web local** que Plak CLI levanta en tu propia máquina para ver y operar tus sitios sin escribir comandos. No es el panel alojado en `cloud.plak.io`: el dashboard vive en `https://plak.localhost` (con el puerto que tengas configurado si no es el estándar) y solo responde desde tu máquina.

<Badge variant="accent">Comprobado con Plak CLI v0.4.66</Badge>

Piensa en el dashboard como la **cara amable de los comandos**: por debajo ejecuta lo mismo que `plak list`, `plak add`, `plak wp` o `plak snapshot`, pero con botones, listas y formularios. Todo lo que hagas aquí también puedes hacerlo desde la terminal, y al revés.

## Abrir el dashboard

1. **Prepara la pila local**

    Si es la primera vez, instala el binario y la pila (FrankenPHP, MariaDB, Mailpit, WP-CLI) como se explica en [Instalación](/cli/instalacion):

    ```bash
    curl -fsSL https://plak.sh/install | bash
    plak install
    plak status
    ```

    `plak status` verifica dependencias y rutas sin cambiar nada. Si algo falta, `plak install` lo instala o te guía con el gestor de tu sistema.

2. **Abre la página**

    ```bash
    open https://plak.localhost
    ```

    Si cambiaste los puertos con `plak ports`, la URL lleva el sufijo configurado (por ejemplo `https://plak.localhost:8453`). El dashboard, Adminer y Mailpit **solo responden desde tu máquina** (y desde el rango privado de WSL2); por red local o Tailscale tienen sus propias reglas (ver [Servicios y red](/cli/servicios)).

3. **Si no carga**

    1. Ejecuta `plak status` para ver qué servicio falla.
    2. Prueba `plak enable` y después `plak reload` para regenerar el servidor y recargar la configuración.
    3. Si el navegador avisa de certificado, ejecuta `plak trust` (sin `sudo`) con Caddy en marcha.

    Estos tres comandos también están explicados en [Servicios y red](/cli/servicios).

## Qué ves al entrar

La página principal es una **lista de tus sitios locales**: los mismos que muestra `plak list`. Cada fila indica el nombre, el dominio (`https://<nombre>.localhost`), el tipo (WordPress o estático), si está preparado para agentes (`agent-ready`) y el tamaño en disco.

- El tamaño se calcula bajo demanda con el botón de refrescar: recorrer decenas de sitios tarda unos segundos, así que la primera carga muestra `—` hasta que lo pides.
- El botón **login** de cada fila genera un enlace único de WordPress (igual que `plak login`), sin pedirte la contraseña.
- Los botones de la cabecera abren **inbox** (correo capturado), **import** (crear un sitio desde un backup) y los enlaces a **Adminer** (`https://db.plak.localhost`) y **Mailpit** (`https://mail.plak.localhost`).

:::tip
Adminer es el gestor visual de la base de datos (ver y editar tablas de MariaDB desde el navegador). Mailpit es el buzón local que atrapa todos los correos que envían tus sitios en desarrollo, para que ningún email de pruebas salga a internet.
:::

Cada sitio tiene una **vista de detalle** con enlace propio (`https://plak.localhost/#/site/<nombre>`). Ábrela para operar ese sitio sin tocar los demás.

## Ficha del sitio

La parte superior de la ficha resume lo esencial: tipo, ruta (`~/Plak/Sites/<nombre>.localhost`), URL, tamaño, versión de WordPress y número de plugins cuando es un WordPress. La versión y el conteo de plugins se cargan solo cuando abres la ficha (usan WP-CLI y son más lentos que el listado).

Desde aquí puedes:

- Abrir el sitio en el navegador.
- Generar un **enlace de acceso** (`login`) para entrar a `/wp-admin` sin contraseña: caduca en 15 minutos y es de un solo uso.
- Saltar a Adminer o Mailpit, o filtrar el inbox por ese sitio.
- Crear, restaurar, borrar y descargar **snapshots** (ver [Backups](#backups-e-importación) más abajo).

## Plugins y temas

La pestaña de componentes lista los **plugins** y **temas** del sitio con nombre, versión, estado y actualizaciones disponibles.

- **Qué hace cada botón:** activar, desactivar, actualizar y borrar. Funciona igual que `plak wp <sitio> plugin|theme ...`, con el mismo PHP y la misma seguridad.
- **La comprobación de actualizaciones es voluntaria:** abrir la lista nunca consulta a WordPress.org (sería lento). Pulsa el botón de comprobar cuando quieras saber si hay versiones nuevas.
- **Protecciones:** no puedes desactivar un plugin `must-use` ni borrar el tema activo. El dashboard lo impide en la interfaz y la API lo rechaza aunque se intente a mano.
- **Lo que no hace:** instalar plugins o temas nuevos desde aquí. Para instalar, usa el wp-admin del sitio o `plak wp <sitio> plugin install <slug>` desde la terminal.

Esta pestaña solo tiene sentido en sitios WordPress. En sitios estáticos (`--plain`) no hay nada que listar.

## Usuarios, cron y consola

La ficha incluye herramientas del día a día que evitan abrir wp-admin o recordar sintaxis de WP-CLI:

- **Users:** lista cada cuenta con sus roles y genera un enlace único para cualquiera de ellas, no solo para administradores. Cada enlace caduca y se consume al primer uso, igual que `plak login <sitio> <usuario>`.
- **Cron:** lista los eventos programados de WordPress (su `hook`, próxima ejecución y recurrencia) y ejecuta uno concreto o todos los vencidos. Es la versión visual de `wp cron event list|run`.
- **Console:** ejecuta WP-CLI dentro del sitio con argumentos pasados como datos, nunca como orden de shell. Equivale a escribir `plak wp <sitio> <comando...>`, con la salida y el código de salida visibles en la página.

:::note
Las operaciones sobre multisitio tienen un límite deliberado: no hay acciones de red ni de subsitio desde el dashboard. Usa `plak wp` o `plak network` con opciones explícitas (`--url`, `--network`) para esos casos.
:::

## Diagnósticos: logs y tráfico

Cada sitio tiene un panel de **diagnósticos** con dos pestañas. Sirven para responder a "¿por qué falla?" y "¿qué está recibiendo?" sin abrir ficheros a mano.

### Logs

Lee tres fuentes, siempre solo la **cola** de cada fichero (un sitio con cientos de megas de log no bloquea la página):

| Fuente | Qué es | Dónde vive |
| --- | --- | --- |
| `php` | Log de errores PHP compartido, filtrado por este sitio | `~/Plak/Logs/errors.log` |
| `debug` | `WP_DEBUG` del sitio | `<sitio>/public/wp-content/debug.log` |
| `access` | Peticiones HTTP del servidor local | `<sitio>/logs/caddy.log` |

Puedes filtrar por nivel mínimo (`all`, `warning`, errores fatales…) y por texto libre. Las repeticiones consecutivas iguales se agrupan con un contador, y las trazas de pila se pueden desplegar. Equivale a `plak log [sitio] [-f]` desde la terminal.

### Tráfico

Agrega el access log del sitio en ventanas de `1h`, `24h`, `7d` o todo el historial, y muestra:

- Resumen: peticiones, errores (4xx y 5xx), bytes servidos, latencia media, p95 y máxima.
- Clasificación por tipo: páginas, assets (CSS, JS, imágenes, fuentes), admin (`/wp-admin`, login), AJAX/REST (`admin-ajax.php`, `/wp-json`) y cron.
- Rutas más visitadas y peticiones más lentas.

:::warning
Son métricas locales de tu máquina en desarrollo (qué pidió tu navegador, tu agente o tus pruebas), no analítica de producción ni visitantes únicos.
:::

## Inbox: el correo de tus sitios

El **inbox** lee el correo capturado por Mailpit, globalmente o filtrado por sitio. Un mensaje se atribuye a un sitio por sus direcciones, asunto o fragmento.

- Abrir un mensaje lo marca como leído; también puedes marcar leído/no leído y borrar (todo pasa por la API de Mailpit).
- El cuerpo HTML se **sanea** y las imágenes `cid:` incrustadas se resuelven a `data:` URIs. Se muestra en un marco aislado que bloquea scripts y, hasta que lo permitas, también las imágenes remotas.
- Para ver todo el buzón con búsqueda avanzada, el enlace **Mailpit** abre `https://mail.plak.localhost`.

Esto responde a "¿qué email mandó mi sitio al registrar un usuario o al comprar algo?" sin configurar SMTP real. En desarrollo ningún correo sale a internet: todo cae aquí.

## Backups e importación

El panel de **backups** lista las snapshots del sitio y permite crearlas, restaurarlas, borrarlas y descargarlas. Crear, restaurar e importar corren como **trabajos en segundo plano**: la página responde al instante y puedes recargarla sin perder el trabajo; el estado se consulta hasta que termina.

- **Snapshot:** punto local de archivos + base de datos en `private/snapshots/<id>`. Los sitios estáticos solo capturan archivos. Restaurar guarda antes una snapshot de seguridad del estado actual.
- **Descargar:** exporta la snapshot a un ZIP portable con sus partes internas (`files.tar.gz` y `database.sql`). Es una copia de archivo, no un backup válido para importar: `plak import` exige un árbol WordPress con `wp-content`.
- **Importar:** el botón **import** de la cabecera sube un ZIP, tar.gz o tar con un WordPress de un solo sitio y un SQL reconocible (incluye exportaciones de Plak, Local y hostings) y crea un sitio nuevo. Rechaza rutas fuera del destino, SQL ambiguo o multisitio, igual que `plak import`.

Los detalles y límites (qué se versiona, qué pasa al fallar) están en [Sitios locales](/cli/sitios).

## Crear y borrar sitios desde el dashboard

El botón de crear pide el nombre, el tipo (WordPress o estático) y si quieres preparación para agentes. La creación manual nunca depende de herramientas opcionales: siempre expresa la elección con `--agent` o `--no-agent`, en lugar de heredar el valor por defecto de la CLI (que depende de si `wp-mcp-cli` está instalado).

- Un nombre duplicado o reservado se informa con un mensaje claro, no con un error genérico.
- Borrar pide confirmación y equivale a `plak delete <nombre> --force`: quita directorio, base de datos, directiva Caddy y entradas de hosts.
- Tras crear o borrar varios sitios, el dashboard recarga el servidor una sola vez en lugar de una por sitio.

Si la preparación de agentes falla después de crear el sitio, el sitio se conserva y el error indica cómo repararlo con `plak agent <sitio>` (ver [MCP](/cli/mcp)).

## Seguridad del dashboard

El dashboard es una superficie administrativa y se protege en dos capas:

1. **Solo tu máquina:** Caddy solo sirve el dashboard, Adminer y Mailpit a la máquina local (direcciones loopback, rango privado de WSL2 y espacio de la tailnet cuando Tailscale está activo). Desde fuera no responden.
2. **Mismo origen + token:** la API (`api.php`) repite la comprobación en PHP, exige `Origin`/`Referer` del mismo host en cada mutación y pide un token CSRF por instalación (guardado en `~/Plak/cache/dashboard-token`) en cada POST. Sin ese token, la petición se rechaza aunque llegue desde tu navegador.

La cabecera `Host` nunca se usa como autenticación. Las descargas sensibles (exportar una snapshot) también exigen el token.

## Cuándo usar el dashboard y cuándo la terminal

| Tarea | Dashboard | Terminal |
| --- | --- | --- |
| Ver todos los sitios de un vistazo | ✅ Lista con tamaños y estado | `plak list [--totals]` |
| Crear o borrar un sitio | ✅ Formulario con mensajes claros | `plak add` / `plak delete` |
| Activar o actualizar un plugin | ✅ Lista con estados y updates | `plak wp <sitio> plugin ...` |
| Entrar a wp-admin sin contraseña | ✅ Botón login | `plak login <sitio>` |
| Ver logs o tráfico | ✅ Filtros y agrupación | `plak log [sitio]` |
| Leer correos de pruebas | ✅ Inbox + Mailpit | — (solo web) |
| Snapshots e imports | ✅ Trabajos en segundo plano | `plak snapshot` / `plak import` |
| Migraciones push/pull | — | `plak pull` / `plak push` |
| Remotos, hosts, claves SSH | — | `plak remote` / `plak hosts` / `plak sshkey` |
| Conexión con el panel | — | `plak connect` / `plak panel ...` |
| Automatizar en scripts o CI | — | Comandos con `--yes` y `--json` |

Continúa en [Sitios locales](/cli/sitios) para el flujo diario desde la terminal, o en [MCP](/cli/mcp) para preparar tus sitios para agentes.
