From Muno-OS (beta)
Genera un brief matutino personalizado en HTML. Primera vez configura preferencias del usuario. Despues ejecuta automaticamente. Trigger en "daily brief", "brief del dia", "morning brief", "mi brief", "empezar el dia".
How this skill is triggered — by the user, by Claude, or both
Slash command
/Muno-OS (beta):daily-briefThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Genera un brief matutino visual (HTML) personalizado para el usuario. El brief consolida informacion del dia en una sola pantalla: fecha, tareas, indicadores, quote, y cualquier fuente de datos que el usuario configure.
Genera un brief matutino visual (HTML) personalizado para el usuario. El brief consolida informacion del dia en una sola pantalla: fecha, tareas, indicadores, quote, y cualquier fuente de datos que el usuario configure.
El valor no es solo "leer archivos". Es:
daily-brief/
SKILL.md # Este archivo
template.html # Design system y template HTML
generate.sh # JSON -> HTML generator
config.example.json # Ejemplo de configuracion (copiar a config.json)
references/
components.md # Catalogo de componentes HTML disponibles
Si NO existe config.json en este directorio, entrar en modo setup conversacional:
1. Preguntar nombre del usuario -> greeting personalizado
2. Preguntar timezone (ej: America/Bogota, America/Mexico_City, Europe/Madrid)
3. Preguntar idioma preferido (es/en) -- default: es
4. Mostrar menu de secciones disponibles y preguntar cuales quiere:
SECCIONES DISPONIBLES:
=====================
[Sin dependencias - funcionan siempre]
- greeting : Saludo + fecha/hora (siempre activo)
- quote : Quote inspiracional del dia (zenquotes.io)
- tasks : Tareas pendientes desde un archivo .md
- journal : Resumen de actividad reciente desde un archivo .md
[Requieren Python]
- finance : Indicadores financieros (TRM, stocks)
[Requieren MCP]
- projects : Resumen de proyectos activos (Linear MCP)
- email : Emails prioritarios (Gmail MCP)
- calendar : Reuniones del dia (Google Calendar MCP)
[Custom]
- custom : Seccion libre con prompt personalizado
Ejemplos de secciones custom:
- "Top 5 de Hacker News" (usa WebFetch para scrapear)
- "Clima en Medellin" (usa WebFetch a wttr.in o similar)
- "Precio de BTC y ETH" (usa API publica de CoinGecko)
5. Para cada seccion habilitada, preguntar configuracion especifica:
- tasks: "Donde guardas tus tareas?" -> path al archivo .md
- journal: "Donde guardas tu journal/diario?" -> path al archivo .md
- finance: "Que indicadores?" -> trm, stocks, etc.
- custom: "Que quieres ver?" -> prompt libre
6. Preguntar si quiere personalizar colores (opcional):
- Color primario (hex) -- default: #8DEDCF (teal)
- Color secundario (hex) -- default: #4D9EFF (blue)
- O decir "usa los defaults"
7. Preguntar donde guardar los reportes HTML:
- Default: daily-reports/ (relativo al workspace)
Guardar resultado en config.json:
{
"name": "Maria",
"timezone": "America/Mexico_City",
"locale": "es",
"brand": {
"primary": "#8DEDCF",
"secondary": "#4D9EFF",
"logo": null
},
"sections": {
"greeting": { "enabled": true },
"quote": { "enabled": true, "source": "zenquotes" },
"tasks": { "enabled": true, "path": "brain/to-do.md" },
"journal": { "enabled": false },
"finance": { "enabled": true, "indicators": ["trm"] },
"projects": { "enabled": false },
"email": { "enabled": false },
"calendar": { "enabled": false },
"custom": { "enabled": false }
},
"output": {
"dir": "daily-reports",
"open_browser": true
}
}
Cuando config.json existe:
1. Leer config.json
2. Obtener fecha/hora con timezone del config
3. Para cada seccion habilitada, recolectar datos:
greeting -> nombre + fecha + hora + dia de la semana
quote -> fetch https://zenquotes.io/api/today/ (si falla, omitir)
tasks -> leer archivo .md del path configurado, extraer tareas pendientes
journal -> leer archivo .md, extraer entradas recientes
finance -> ejecutar scripts Python de /scripts/trm/ (si disponibles)
projects -> Linear MCP: listar issues activos (si MCP disponible)
email -> Gmail MCP: buscar emails no leidos importantes (si MCP disponible)
calendar -> Google Calendar MCP: reuniones de hoy (si MCP disponible)
custom -> resolver creativamente segun el prompt del usuario
4. IMPORTANTE: Si una seccion falla (MCP no disponible, archivo no existe,
API no responde), OMITIR esa seccion silenciosamente. No interrumpir el brief.
Registrar en la seccion "Fuentes" cuales funcionaron y cuales no.
5. Escribir _workspace/daily-data.json con todos los datos recolectados.
SIEMPRE usar _workspace/ como directorio temporal para este archivo.
6. Ejecutar generate.sh. La ruta del script es relativa al skill:
bash skills/daily-brief/generate.sh _workspace/daily-data.json
(Si el plugin esta en otra ubicacion, usar la ruta absoluta del skill directory)
7. Abrir el HTML generado en el navegador:
- macOS: open <ruta-al-html>
- Linux: xdg-open <ruta-al-html>
- Windows/WSL: wslview <ruta-al-html> o explorer.exe <ruta-al-html>
Solo abrir si open_browser: true en config (default: true).
El JSON que el agente genera y pasa a generate.sh:
{
"name": "Maria",
"locale": "es",
"dia_semana": "Jueves",
"fecha_larga": "20 de marzo de 2026",
"hora": "08:45",
"timezone_label": "CST",
"quote_text": "The only way to do great work...",
"quote_author": "Steve Jobs",
"stats": [
{ "label": "Tareas hoy", "value": "5", "color": "teal" },
{ "label": "TRM", "value": "$4.250,30", "color": "teal", "delta": "+$12,50 vs ayer", "delta_class": "up" }
],
"alerts": [
{ "type": "warning", "title": "Factura vencida", "desc": "Cliente X - 15 dias" }
],
"sections": [
{
"id": "tasks",
"title": "Tareas pendientes",
"badge": "5 pendientes",
"content_html": "<div class=\"item\">..."
},
{
"id": "finance",
"title": "Indicadores",
"content_html": "..."
}
],
"sources": [
{ "name": "to-do.md", "status": "ok" },
{ "name": "zenquotes.io", "status": "ok" },
{ "name": "TRM (SDMX)", "status": "ok" },
{ "name": "Linear", "status": "skip", "reason": "MCP no disponible" }
]
}
El HTML se genera via generate.sh que:
Ver references/components.md para el catalogo completo de componentes HTML disponibles.
El usuario puede decir:
El brief NO es estatico. Debe evolucionar con el usuario a traves de dos mecanismos:
Al final de cada brief, EVALUAR si hay secciones deshabilitadas que podrian activarse con el entorno actual del usuario. Si las hay, agregar un bloque de sugerencias al final del HTML (antes del footer):
Reglas para sugerir:
- Si Gmail MCP esta disponible pero email esta deshabilitado:
-> "Tienes Gmail conectado. Quieres agregar emails prioritarios a tu brief?"
- Si Linear MCP esta disponible pero projects esta deshabilitado:
-> "Detecte Linear MCP. Puedo incluir un resumen de issues activos."
- Si Google Calendar MCP esta disponible pero calendar esta deshabilitado:
-> "Tienes Google Calendar. Quiero agregar tu agenda de hoy?"
- Si Python esta disponible pero finance esta deshabilitado:
-> "Puedo incluir la TRM y otros indicadores financieros."
- Si el usuario tiene archivos .md en el workspace pero tasks/journal no apuntan a ellos:
-> "Vi que tienes brain/to-do.md. Quieres que lo incluya en tu brief?"
Mostrar MAXIMO 1 sugerencia por ejecucion. No repetir una sugerencia que el
usuario ya rechazo (guardar rechazos en config.json bajo dismissed_suggestions).
Formato en HTML:
<div class="alert info">
<span class="alert-icon">+</span>
<div class="alert-body">
<div class="alert-title">Detecte Gmail conectado</div>
<div class="alert-desc">Puedo agregar tus emails prioritarios al brief.
Dime "agrega email a mi brief" para activarlo.</div>
</div>
</div>
A medida que el usuario interactua, el skill debe ir refinando el config.json:
Ajustes automaticos (sin preguntar):
Ajustes que requieren confirmacion:
Que guardar en config.json:
{
"dismissed_suggestions": ["email", "calendar"],
"section_order": ["greeting", "quote", "tasks", "finance", "projects"],
"last_suggestion_date": "2026-03-20",
"usage_count": 15
}
En cada ejecucion, antes de recolectar datos, hacer un scan rapido del entorno:
1. Verificar que MCPs estan disponibles (intentar una operacion minima)
2. Verificar que Python esta disponible (python3 --version)
3. Buscar archivos comunes que podrian ser fuentes de datos:
- **/to-do.md, **/todo.md, **/tasks.md
- **/journal.md, **/diary.md, **/log.md
- **/CLAUDE.md (puede tener contexto util sobre el usuario)
4. Comparar con lo que hay en config.json
5. Si hay nuevas capacidades disponibles, preparar sugerencia
Este scan NO debe ser lento. Si un MCP no responde en 2 segundos, marcarlo como no disponible y seguir.
El brief funciona en CUALQUIER entorno. Lo minimo viable es:
Sin nada: Greeting + fecha + quote
+ archivo to-do: + seccion de tareas
+ Python: + indicadores financieros (TRM)
+ Linear MCP: + resumen de proyectos
+ Gmail MCP: + emails prioritarios
+ Todo configurado: Brief completo
Nota Cowork/Web: En entornos sin shell (Claude Cowork, web), NO ejecutar generate.sh. En su lugar, generar el brief como Markdown directamente en el chat. Las secciones que requieren Python o MCP se omiten automaticamente.
Ejemplo de output en modo texto:
# Daily Brief — Jueves 20 de marzo de 2026 Buenos dias, Maria. --- > "The only way to do great work is to love what you do." — Steve Jobs --- ## Tareas pendientes (5) - [ ] Revisar propuesta cliente X - [ ] Enviar factura mensual - [ ] Code review PR #42 - [x] Actualizar documentacion - [ ] Preparar agenda reunion viernes ## Fuentes to-do.md (ok) · zenquotes.io (ok) · Linear (no disponible)
Despues de generar cada brief, agregar una linea al archivo history.log en el
directorio de output (ej: daily-reports/history.log). Formato CSV:
fecha,tareas_pendientes,tareas_completadas,alertas,stats_extra
2026-03-20,5,2,1,trm:4250.30
2026-03-19,6,3,0,trm:4237.80
Esto permite comparaciones dia a dia en el brief:
Si history.log no existe, crearlo. Si existe, leer la ultima linea para calcular deltas y mostrarlos en los stat cards.
npx claudepluginhub munolabs/muno-os-plugin --plugin Muno-OS (beta)Provides a structured morning briefing with AI-powered insights, news, and task prioritization to start the day efficiently.
Runs a structured daily startup ritual for an Obsidian vault: creates periodic notes, surfaces carry-forward items, checks inbox, sets daily focus. Invocable via `/daily` or natural language prompts like "start my day" or "morning routine".
Run the daily content pipeline to fetch signals, analyze relevance, draft output, edit for voice fidelity, and deliver the brief