man stratum

Cómo instalar, configurar y usar las dos caras de Stratum: la CLI, un agente de terminal para código e infraestructura, y Desktop, un asistente de chat con ficheros que reutiliza el mismo núcleo. Las dos leen la misma configuración global.

stratum --help

Un agente de línea de comandos sobre un loop ReAct. Habla con cualquier API OpenAI-compatible (Ollama, llama.cpp, vLLM, LiteLLM, OpenAI) y no necesita ninguna cuenta propia.

Instalación

Requisitos

  • Node.js 22 o superior.
  • Un backend que exponga una API OpenAI-compatible: un servidor local (Ollama, llama.cpp, vLLM), un proxy (LiteLLM) o un servicio alojado.

Con npm

npm install -g stratum-cli
stratum --version

Para probarlo sin instalar nada:

npx stratum-cli chat

Para actualizar, repite la instalación con stratum-cli@latest.

Desde el código fuente

git clone https://github.com/choruzo/CLI.git
cd CLI/stratum-cli
npm install
npm run build
npm link            # deja el comando `stratum` en el PATH
Dependencias opcionales. La búsqueda semántica de la memoria usa @xenova/transformers, better-sqlite3 y sqlite-vec. Si su compilación nativa falla, Stratum sigue funcionando: el índice pasa a una búsqueda en JavaScript y las decisiones guardadas no se pierden.

Configuración

1. Conectar un modelo

A un provider le bastan la URL base y la API key. El asistente pregunta por ambas:

stratum provider add

O en una sola línea, sin asistente:

stratum provider add ollama --base-url http://localhost:11434/v1 --api-key ollama --default
stratum provider add hosted --base-url https://api.example.com/v1 --api-key-env EXAMPLE_API_KEY

Con --api-key-env el fichero guarda ${EXAMPLE_API_KEY}, no el valor: la key se lee del entorno en cada arranque. --api-key la deja escrita en claro.

El modelo es opcional. Si no lo indicas, Stratum consulta GET /models: chat abre el selector al arrancar y recuerda la elección; run e init usan el único modelo expuesto y, si hay varios, se detienen y los listan para que elijas con --model.

stratum provider list                 # providers y conectividad
stratum provider models               # modelos que expone el provider activo
stratum provider models --set <id>    # fija el modelo por defecto
stratum provider use <alias>          # cambia el provider activo
stratum provider remove <alias>

2. Dónde vive la configuración

FicheroAlcance
~/.stratum/.stratumrc.jsonGlobal: vale para todos los proyectos y es la que usa Desktop
./.stratumrc.jsonProyecto: se fusiona sobre la global y gana en caso de conflicto

Un fichero mínimo escrito a mano:

{
  "provider": {
    "default": "local-ollama",
    "providers": {
      "local-ollama": {
        "type": "openai-compatible",
        "baseUrl": "http://localhost:11434/v1",
        "apiKey": "ollama",
        "model": "qwen3.5:9b"
      }
    }
  }
}

También se puede leer y escribir clave a clave:

stratum config get provider.default
stratum config set agents.maxConcurrency 2
Ventana de contexto. Stratum comprime el historial al llegar al 80 % de la ventana del modelo. La toma de /models cuando el servidor la declara; si no, puedes fijarla con contextWindow en el provider o en models.<id>.contextWindow. Debe reflejar el contexto real del servidor.

3. Secciones del fichero

SecciónQué controla
providerProviders, modelo por defecto, timeouts. El orden define el fallback automático
memoryRutas de STRATUM.md, decisiones e índice semántico; extracción automática
toolsConfirmaciones, comandos vigilados, búsqueda web, auditoría, redacción de secretos, testCommand
mcpServidores MCP y modo de arranque (lazy / eager)
agentsPerfil por defecto y subagentes en paralelo (maxConcurrency)
sshInventario de hosts remotos
environmentsReglas por entorno: confirmación, plan obligatorio, solo lectura
sessionPerfil de sesión (auto, code, infra, full) y retención de planes
loggingNivel y fichero de logs
desktopPreferencias de Stratum Desktop

El ejemplo con todas las claves está en .stratumrc.json.example ↗.

Servidores MCP

Un servidor que declara package se instala una sola vez en ~/.stratum/mcp/ y arranca directo con Node, sin pasar por npx cada vez. Sus tools aparecen como mcp__<servidor>__<tool>.

{
  "mcp": {
    "servers": [
      { "name": "filesystem", "package": "@modelcontextprotocol/server-filesystem@2025.8.21", "args": ["/home/user/projects"] },
      { "name": "otro", "command": "npx", "args": ["-y", "some-mcp-server@latest"] }
    ]
  }
}
stratum mcp install     # instala los que declaran `package`
stratum mcp list        # servidores y tools disponibles

Hosts remotos (SSH)

Stratum lleva su propio cliente SSH y no usa el binario del sistema. El agente solo ve los alias; las credenciales nunca pasan por el modelo. Sin sección ssh, las tools remotas ni siquiera existen.

{
  "ssh": {
    "hosts": {
      "bastion":  { "host": "bastion.example.com", "user": "javi", "privateKey": "~/.ssh/id_ed25519" },
      "prod-web": { "host": "192.168.1.10", "user": "javi", "privateKey": "~/.ssh/id_ed25519",
                    "jumpHost": "bastion", "confirmAll": true }
    }
  }
}
stratum ssh list                    # inventario con conectividad en vivo
stratum ssh trust prod-web          # muestra el fingerprint y lo confía
stratum ssh trust prod-web --force  # tras reinstalar el host

La primera conexión enseña el fingerprint y pregunta; después se verifica en silencio. Si la clave del host cambia, la conexión se aborta siempre. Las contraseñas y passphrases se pasan como env:<VAR>.

Entornos

Las reglas por entorno solo afectan a lo que cambia algo: leer en producción nunca pregunta.

{
  "environments": {
    "prod":    { "match": ["ssh:prod-*"], "tier": "production", "requirePlan": true },
    "staging": { "match": ["ssh:stg-*"],  "tier": "staging" },
    "lab":     { "match": ["ssh:dev-*"],  "policy": "allow" }
  }
}

Uso

Primeros pasos

stratum init                # explora el proyecto y escribe STRATUM.md
stratum chat                # sesión interactiva
stratum run "Analiza ./src y resume la arquitectura"
stratum run --plan "Refactoriza el módulo de autenticación"

STRATUM.md es la memoria del proyecto: se carga en cada sesión. Hay otro global en ~/.stratum/STRATUM.md para lo que vale en todos tus proyectos.

Modos de trabajo

ComandoPara qué
stratum chatConversación interactiva; guarda la sesión al cerrar cada turno
stratum chat --resume <id>Continúa una sesión guardada
stratum run "<tarea>"Una tarea y termina. Sirve para scripts y CI
stratum run --plan "<tarea>"Investiga, propone un plan, espera tu aprobación y lo ejecuta paso a paso. --yes lo aprueba sin preguntar
stratum run --agent <perfil>Usa un perfil como agente principal
stratum run --delegate <perfil>Entrega la tarea directamente a un subagente

Opciones comunes de chat y run

OpciónEfecto
--provider <alias> · --model <id>Provider y modelo solo para esta ejecución
--read-onlySolo observación: no escribe ficheros y solo admite comandos de lectura
--profile <nombre> · --code · --infraPerfil de sesión: qué familia de tools ve el agente
--allow-destructive · --deny-destructiveSolo en run: aprueba o deniega las operaciones destructivas sin preguntar
--debug · --log-level <nivel>Logs detallados
Operaciones destructivas. En chat se confirman una a una. En run se pregunta por terminal y, sin terminal interactivo (CI), se deniegan. Algunas guardas no se pueden levantar con ningún flag: rm -rf sobre la raíz, lectura de claves privadas o los comandos marcados como block.

Comandos dentro del chat

Escribe / para abrir la paleta, con autocompletado por Tab.

ComandoQué hace
/helpLista todos los comandos
/initGenera o actualiza STRATUM.md
/plan <tarea>Planifica, pide aprobación y ejecuta
/model · /provider <alias>Cambia de modelo o de provider en la sesión
/config_providerEdita el provider activo y lo guarda
/agents · /agent <perfil> · /agent offLista los perfiles y activa uno como agente principal
@perfil <tarea>Encarga la tarea a un subagente
/subagentsInspecciona lo que hizo cada subagente
/readonly · /profile · /envModo solo lectura, perfil de sesión y entornos definidos
/memory show|list|search|forgetMemoria del proyecto y decisiones guardadas
/context · /compact · /clearUso del contexto, compresión inmediata y vaciado de la conversación
/changes · /todoCambios del árbol de trabajo y panel de tareas
/tools · /mcp reloadTools disponibles y reinicio de los servidores MCP
/sessions list|resume|deleteSesiones guardadas, sin salir del chat
/config get|setLee o cambia una clave de configuración
/debugMuestra el razonamiento completo del modelo
/quitGuarda y sale

Atajos de teclado

TeclaAcción
↑ ↓Historial de mensajes enviados
Tab · SpaceRecorre los bloques de tools y despliega el seleccionado
Ctrl+LVacía la conversación (igual que /clear)
Ctrl+UBorra lo escrito
Ctrl+TPliega o despliega el panel de tareas

Perfiles de agente y skills

Un perfil es un fichero markdown con frontmatter en .stratum/agents/<nombre>.md (proyecto) o ~/.stratum/agents/ (global): describe para qué sirve, qué tools puede usar y su prompt. Las skills son instrucciones de tarea en .stratum/skills/<nombre>/SKILL.md; el agente ve su índice y lee el cuerpo solo cuando lo necesita.

stratum agents list          # perfiles válidos e inválidos, con su origen

Sesiones, memoria y logs

stratum sessions list
stratum sessions resume <id>
stratum sessions prune --older 30d

stratum memory list
stratum memory search "por qué elegimos sqlite"
stratum memory forget <id>

stratum logs path            # para adjuntar a un bug report
stratum logs tail 100

Cada comando que ejecuta el agente, local o remoto, queda registrado en ~/.stratum/logs/exec-audit.jsonl.

open Stratum.app

Un asistente de chat de escritorio. Cada conversación tiene su propia carpeta de trabajo: adjuntas ficheros, el asistente los lee y deja los resultados para que los guardes. No ejecuta comandos en tu máquina.

Instalación

La app instalada es autónoma: no necesita Node ni Rust. Los instaladores están en las releases de GitHub con etiqueta desktop-v…; la actual es la 0.3.0 (pre-release).

Windows

  • Ejecuta el .exe (o el .msi si lo despliegas con herramientas de empresa).
  • Necesita WebView2, que ya viene con Windows 11 y con las versiones actuales de Windows 10.
  • Si el instalador no está firmado, SmartScreen mostrará un aviso: «Más información» → «Ejecutar de todas formas».

Linux

# Debian / Ubuntu
sudo apt install ./Stratum_0.3.0_amd64.deb

# Cualquier distribución
chmod +x Stratum_0.3.0_amd64.AppImage
./Stratum_0.3.0_amd64.AppImage

Comprobar la descarga

Cada release incluye SHA256SUMS.txt:

# Linux
sha256sum -c SHA256SUMS.txt --ignore-missing

# Windows (PowerShell): compara el resultado con la línea del fichero
Get-FileHash .\Stratum_0.3.0_x64-setup.exe -Algorithm SHA256

Actualizaciones

Al arrancar, la app busca versiones nuevas en silencio y muestra un aviso con «Instalar y reiniciar» o «Más tarde». Nunca instala sin que lo pidas. Se puede desactivar en Ajustes → Sistema.

Desde el código fuente

Hacen falta Node 22 y Rust estable (en Windows, MSVC Build Tools; en Linux, las librerías de WebKitGTK).

git clone https://github.com/choruzo/CLI.git
cd CLI/stratum-cli && npm install
cd ../stratum-desktop && npm install
npm run sidecar:build     # empaqueta el núcleo; repítelo si cambia stratum-cli
npm run tauri dev         # ventana de desarrollo
npm run tauri build       # instaladores

Configuración

Primer arranque

Sin ningún modelo configurado, la app abre un asistente: URL del servidor, API key, nombre y modelo (los lista consultando /models). Al terminar, la conversación queda lista para escribir. Si eliges «Ahora no», un aviso con «Conectar un modelo» lo retoma más tarde.

Compartida con la CLI. Desktop lee y escribe el fichero global ~/.stratum/.stratumrc.json. Un provider que añadas con stratum provider add aparece en Desktop, y al revés.

Ajustes

Se abren con Ctrl+,, con /settings o con el icono ⚙.

PestañaContenido
ProvidersAlta, edición y prueba de conexión. Las API keys se muestran enmascaradas
Modelo activoModelo por defecto y cuántas conversaciones responden a la vez (2 por defecto; el resto espera en cola)
Búsqueda webDuckDuckGo, Tavily o ambos
MemoriaMemoria global del asistente y decisiones guardadas
Espacios de trabajoCarpeta raíz, límites de tamaño, retención y espacio ocupado
SistemaNotificaciones, atajo global y actualizaciones
AvanzadoEl resto del fichero de configuración

Los cambios se aplican a cada conversación antes de su siguiente mensaje. La carpeta y los límites de los espacios de trabajo, y el logging, piden reiniciar el agente; la app lo ofrece.

Claves de desktop

{
  "desktop": {
    "maxConcurrentTurns": 2,
    "notifications": { "enabled": true, "minSeconds": 10 },
    "globalHotkey": "CommandOrControl+Shift+Space",
    "updates": { "autoCheck": true },
    "workspaces": {
      "root": "~/.stratum/desktop/workspaces",
      "maxFileMB": 25,
      "maxWorkspaceMB": 250,
      "compressAfterDays": 7,
      "deleteAfterDays": 30
    }
  }
}

Uso

Conversaciones

El panel lateral las agrupa por fecha. Se pueden buscar, renombrar, fijar y eliminar; el título se pone solo tras el primer mensaje. Varias conversaciones pueden trabajar a la vez: las que superan el límite quedan «en cola» y arrancan por orden.

Ficheros

  • Adjuntar: con el botón o arrastrando al chat. Se copian a la carpeta inputs/ de la conversación.
  • Resultados: lo que el asistente genera aparece en outputs/ como tarjetas con «Abrir», «Guardar como…» y vista previa.
  • Descargar todo: un .zip con los ficheros de la conversación.
  • El asistente solo puede leer y escribir dentro de esa carpeta. Por defecto, 25 MB por fichero y 250 MB por conversación.
Retención. A los 7 días sin uso, los ficheros de una conversación se comprimen; abrirla los restaura. A los 30 días se borran y la conversación conserva solo el texto. Solo los mensajes y las subidas cuentan como uso; abrirla para leer, no. Los plazos se cambian en Ajustes → Espacios de trabajo, y 0 los desactiva.

Comandos

ComandoQué hace
/newEmpieza una conversación nueva
/clearVacía la conversación; sus ficheros se conservan
/compactComprime el contexto ahora
/model [modelo]Ve o cambia el modelo de esta conversación
/memoryVe y edita la memoria global
/settingsAbre Ajustes

Atajos de teclado

TeclaAcción
Ctrl+NNueva conversación
Ctrl+KBuscar conversaciones
Ctrl+BPlegar el panel lateral
Ctrl+LVaciar la conversación (pide confirmación)
Ctrl+,Ajustes
EscDetener la respuesta en curso
Ctrl+Shift+SpaceAtajo global: trae la ventana al frente desde cualquier aplicación (configurable)

Confirmaciones y avisos

  • Antes de una operación que modifica ficheros de forma destructiva, el asistente pregunta. Sin respuesta en 5 minutos, se deniega.
  • Si una respuesta tarda más de 10 segundos y la ventana no está a la vista, llega una notificación del sistema al terminar.
  • El razonamiento del modelo se muestra plegado («Razonó 12 s») y se despliega al pulsarlo.

Dónde se guardan los datos

RutaContenido
~/.stratum/.stratumrc.jsonConfiguración (compartida con la CLI)
~/.stratum/desktop/conversations/Título y mensajes visibles de cada conversación
~/.stratum/desktop/workspaces/Ficheros de cada conversación
~/.stratum/desktop/memory/Memoria del asistente, separada de la de cualquier proyecto

stratum doctor

Lo que más se repite al empezar.

«Config error» al arrancar

El mensaje indica el fichero, la línea y la clave que falla. Si el error es de JSON, revisa comas y comillas; si es de validación, compara la clave con el ejemplo ↗. Recuerda que el fichero del proyecto se fusiona sobre el global.

run se detiene listando varios modelos

El provider no tiene modelo fijado y el servidor expone más de uno. Elige con --model <id> o déjalo fijo con stratum provider models --set <id>.

El provider no responde o da 401

Comprueba la conectividad con stratum provider list. Si la key se guardó como ${VAR}, la variable tiene que existir en el entorno desde el que lanzas Stratum; si no, se sustituye por vacío y se avisa al arrancar. La URL base debe incluir /v1.

La barra de estado muestra Σ n/d

El servidor no devuelve el consumo de tokens. Stratum no lo estima: el resto funciona igual y los límites se controlan por iteraciones y tiempo.

El agente pierde el hilo en conversaciones largas

Suele ser una ventana de contexto mal declarada. Mira el uso real con /context y fija contextWindow con el valor con el que arrancaste el servidor.

Una conexión SSH se aborta por la clave del host

La clave guardada no coincide con la que presenta el servidor. Si el host se reinstaló, confía la nueva con stratum ssh trust <alias> --force. Si no esperabas el cambio, no la aceptes.

Desktop: «el agente no arranca»

La pantalla de fallo muestra el motivo y las últimas líneas del log, con «Reintentar» y «Ver logs». Si el problema es de configuración, «Abrir ajustes» permite corregirla sin salir.

Desktop en Linux: el atajo global no funciona

El atajo global necesita X11 (o XWayland). En una sesión Wayland nativa el registro falla y Ajustes → Sistema lo indica. Si otra aplicación ya usa la combinación, elige otra.

Desktop: los ficheros de una conversación aparecen como «caducado»

Pasó el plazo de borrado de la retención. El texto de la conversación sigue ahí, pero los ficheros no se pueden recuperar; vuelve a adjuntarlos.

¿No está aquí? Abre una incidencia en github.com/choruzo/CLI/issues ↗ y adjunta la salida de stratum logs tail.