# 📊 Status Line — Detección y Creación (Caso A)
> **IMPORTADO POR**: `palantir-main.md`
>
> Módulo que detecta el estado de la Status Line y ofrece autoasistencia
> cuando no existe configuración previa (Caso A).
---
## PASO 0: Banner informativo
**Mostrar sin interacción** antes de cualquier otra acción del módulo:
```
══════════════════════════════════════════════════════════════════
🔮 Palantír — Status Line
El Status Line de Claude Code es un script de shell que se ejecuta
en cada actualización y muestra lo que tú quieras en la barra inferior.
✅ Palantír puede ayudarte a:
· Crear un Status Line desde cero (asistido o desde preset)
· Ver, editar o reemplazar el script actual
· Eliminar la configuración existente
· Consultar la documentación oficial en tiempo real
❌ Palantír NO puede:
· Garantizar que tu terminal soporte colores ANSI o Nerd Fonts
· Acceder a datos que Claude Code no exponga en el JSON de entrada
· Configurar el Status Line de forma retroactiva para sesiones pasadas
💡 Campos disponibles en el JSON: model, workspace, cost, context_window,
rate_limits (Pro/Max), session_id, git_worktree, vim.mode y más.
══════════════════════════════════════════════════════════════════
```
Tras mostrarlo, continuar al PASO 1.
---
## PASO 1: Detección del estado
**Leer silenciosamente** los siguientes ficheros (sin formatear ni mostrar nada todavía):
```bash
cat ~/.claude/settings.json 2>/dev/null
cat .claude/settings.json 2>/dev/null
```
Parsear cada uno como JSON y extraer el campo `statusLine`. Contemplar **ambos formatos**:
- **Formato objeto** (recomendado oficialmente):
```json
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
```
- **Formato string** (legacy o plantillas):
```json
"statusLine": "Model: {model} · Tokens: {tokens}"
```
Construir el estado en memoria:
```
STATUS_LINE_STATE = {
global: { exists: true|false, format: "object"|"string"|null, value: ... , path: "~/.claude/settings.json" },
project: { exists: true|false, format: "object"|"string"|null, value: ... , path: ".claude/settings.json" }
}
```
---
## PASO 2: Routing según estado
**Determinar el caso**:
- **Caso A** · `global.exists == false AND project.exists == false` → Autoasistencia inicial (este fichero)
- **Caso B** · al menos uno de los dos existe → Gestión de configuración existente → Cargar https://josemoreupeso.es/tlotp/palantir/sections/07b-status-line-manage.html
Ir al **PASO 3** (Caso A) o cargar el módulo de gestión (Caso B).
---
# ═══════════════════════════════════════════════════
# CASO A · Status Line no configurada — Autoasistencia
# ═══════════════════════════════════════════════════
## PASO 3: Ofrecer autoasistencia
Mostrar:
```
📊 Palantír no ve Status Line en tus pergaminos...
══════════════════════════════════════════════════════
He inspeccionado tu configuración de Claude Code:
🌍 Global (~/.claude/settings.json) → sin statusLine
🏠 Proyecto (.claude/settings.json) → sin statusLine
La Status Line de Claude Code te permite ver información
personalizada en la barra de estado de tu terminal:
modelo activo, tokens usados, rama Git, directorio actual,
hora, o lo que tú decidas.
══════════════════════════════════════════════════════
```
**AskUserQuestion**:
```json
{
"questions": [{
"header": "Status Line",
"question": "¿Quieres que te ayude a configurarla?",
"multiSelect": false,
"options": [
{
"label": "✨ Sí, guíame",
"description": "Consultaré la documentación oficial y te haré unas preguntas"
},
{
"label": "🥔 Usar el status line de Pépeton, hijo de Móreuton",
"description": "Instalar el preset de 2 líneas (contexto · 5h · 7d)"
},
{
"label": "📖 Ver docs primero",
"description": "Fetchear la documentación oficial antes de decidir"
},
{
"label": "🔙 Volver al menú de Palantír",
"description": "Dejarlo para más tarde"
}
]
}]
}
```
- **Sí, guíame** → PASO 4 (fetch) + PASO 5 (entrevista)
- **🥔 Usar el status line de Pépeton** → cargar https://josemoreupeso.es/tlotp/palantir/sections/07c-status-line-pepeton.html y ejecutar PASO P1 (lore del preset)
- **Ver docs primero** → PASO 4 y después preguntar de nuevo
- **Volver** → cargar https://josemoreupeso.es/tlotp/palantir/sections/00-menu-principal.html PASO 2
---
## PASO 4: WebFetch a documentación oficial (con caché de sesión)
**Caché de sesión**: si en esta sesión (dentro de Palantír) ya se ejecutó el
WebFetch a la documentación de Status Line, reutilizar ese contenido sin
re-fetchear. Mostrar:
```
🔮 Pergamino de la Status Line ya conocido — reutilizando visión previa.
```
**Si es la primera vez**, mostrar ANTES de ejecutar el WebFetch:
```
🔮 *"Los reyes visten sus coronas; tú viste tu terminal."* — Palantír
📜 Consultando el Pergamino de la Status Line...
🌐 Fuente: https://code.claude.com/docs/en/statusline
🧠 Buscando: schema, tipos (command/string), variables disponibles,
hooks internos, limitaciones, ejemplos oficiales
```
Ejecutar:
> **WebFetch**: https://code.claude.com/docs/en/statusline
> **Extraer**: schema completo del campo `statusLine` en `settings.json`,
> tipos soportados (command vs string), variables y placeholders disponibles,
> ejemplos canónicos, limitaciones, consideraciones de performance.
**Tras completar el WebFetch**, mostrar:
```
✅ Pergamino de la Status Line — grabado en la Piedra.
```
**Marcar en caché de sesión**: `STATUSLINE_DOCS_CACHED = true` (conceptual —
recordar no re-fetchear en esta sesión).
---
## PASO 5: Entrevista guiada (Motor de Entrevista)
Este paso es un **motor conceptual reutilizable**: se invoca desde Caso A
(partiendo de vacío) y desde Caso B → Editar (partiendo de valores actuales).
**Parámetros del motor**:
- `INITIAL_VALUES` = vacío (Caso A) | `STATUS_LINE_STATE[scope].value` (Caso B)
- `MODE` = "crear" | "editar" | "reemplazar"
**Con la documentación del PASO 4 como fuente de verdad**, formular al usuario:
### 5.1 — Información a mostrar
Mostrar:
```
📝 DISEÑO DE TU STATUS LINE
══════════════════════════════════════════════════════
Según la documentación oficial, tu Status Line puede mostrar
cualquier combinación de información relevante. Las opciones
más habituales son:
🧠 Modelo activo (p.ej. claude-opus-4)
🔢 Tokens usados / restantes
🌿 Rama Git del directorio actual
📁 Directorio de trabajo
🕒 Hora actual
💼 Nombre del workspace
⚡ Estado de MCPs conectados
[+ otras variables extraídas del WebFetch]
══════════════════════════════════════════════════════
```
### 5.2 — Preguntas secuenciales
Formular en orden:
**Pregunta 1 · Formato de Status Line** — `AskUserQuestion`:
```json
{
"questions": [{
"header": "Status Line · Formato",
"question": "¿Qué tipo de Status Line quieres?",
"multiSelect": false,
"options": [
{
"label": "⚙️ Comando externo (recomendado)",
"description": "Apunta a un script shell que Claude ejecutará en cada refresh"
},
{
"label": "🧵 Plantilla string",
"description": "Cadena simple con placeholders (más sencillo, menos flexible)"
},
{
"label": "🎁 Plantilla de ejemplo",
"description": "Usar una Status Line de ejemplo que luego puedes ajustar"
}
]
}]
}
```
**Pregunta 2 · Contenido a mostrar** — input libre:
```
📦 ¿Qué información quieres ver en tu Status Line?
Descríbelo con tus palabras (puedes mencionar varios elementos):
```
**Pregunta 3 · Scope donde guardar** — `AskUserQuestion`:
```json
{
"questions": [{
"header": "Status Line · Scope",
"question": "¿Dónde guardamos esta Status Line?",
"multiSelect": false,
"options": [
{
"label": "🌍 Global (~/.claude/settings.json)",
"description": "La tendrás en todos tus proyectos de Claude Code"
},
{
"label": "🏠 Proyecto (.claude/settings.json)",
"description": "Solo aplica a este proyecto"
}
]
}]
}
```
### 5.3 — Generación de la propuesta
Con las respuestas del usuario y la documentación oficial, **generar la
configuración** respetando el schema del WebFetch.
Si el usuario eligió "Comando externo":
```json
{
"statusLine": {
"type": "command",
"command": "[comando generado o path al script]"
}
}
```
Si el usuario eligió "Plantilla string":
```json
{
"statusLine": "[plantilla con variables]"
}
```
---
## PASO 6: Propuesta + confirmación + escritura
### 6.1 — Mostrar propuesta final
```
📋 PROPUESTA FINAL
══════════════════════════════════════════════════════
📝 Status Line propuesta:
[bloque JSON formateado de la propuesta]
📍 Fichero destino:
[ruta completa según scope]
⚠️ Impacto:
[si el fichero existe: se añadirá el campo `statusLine`,
preservando el resto de configuración]
[si el fichero NO existe: se creará con solo este campo]
══════════════════════════════════════════════════════
```
### 6.2 — Confirmación explícita
**AskUserQuestion**:
```json
{
"questions": [{
"header": "Aplicar Status Line",
"question": "¿Aplicamos esta configuración?",
"multiSelect": false,
"options": [
{
"label": "✅ Sí, aplicar",
"description": "Escribir en el fichero mostrado"
},
{
"label": "✏️ Modificar antes",
"description": "Ajustar la propuesta y volver a mostrarla"
},
{
"label": "🔄 Cambiar scope",
"description": "Guardar en el otro scope en lugar del elegido"
},
{
"label": "🚫 Cancelar",
"description": "No escribir nada y volver al menú de Palantír"
}
]
}]
}
```
### 6.3 — Escritura segura
**Si el usuario confirma**, ejecutar la escritura respetando estas reglas:
1. **Leer** el `settings.json` existente (si existe) con Read tool.
2. **Parsear** el JSON completo en memoria.
3. **Mutar** únicamente el campo `statusLine`.
4. **Reserializar** el JSON preservando orden e indentación (2 espacios).
5. **Escribir** el fichero completo con Write tool.
6. **Nunca** hacer text-replace parcial sobre el JSON.
7. Si el fichero **no existe**, crear un JSON mínimo: `{"statusLine": ...}`.
**Confirmar** con frase épica:
- *"El reino ahora lleva su corona en la barra de estado."*
- *"Palantír ha tallado tu Status Line en los muros de Gondor."*
- *(Variar según el caso)*
Volver automáticamente al **menú principal de Palantír** (`00-menu-principal.md` PASO 2).
---
*Status Line — Creación · Palantír Módulo 07a v1.0*