~/schedule.md· macOS 14+ · Solo local · Sin cuenta, sin sincronización
Tu agenda es un archivo. No una cuenta.
Pídele tu semana a cualquier modelo, pega la respuesta en ~/schedule.md y la app la tiene una décima de segundo después — lista, rejilla semanal, recordatorios y una curva de interés compuesto. Marca algo como hecho y esa misma línea se reescribe en el archivo. El formato es lo bastante pequeño para que un LLM lo acierte a la primera y lo bastante estricto para que el parser nunca adivine.
- 1 archivo
- Toda la base de datos
- 0.1s
- Del guardado a la pantalla
- 0 cuentas
- Y ninguna petición de red
Una línea, entera
- 14:00-15:00
- Hora de inicio y fin. Sin fin, es un momento; sin hora, es una tarea del día.
- Gym
- El título. Todo lo que queda después de quitar los tokens del final.
- #health
- Tema. Agrupa la barra lateral y mueve la curva de interés compuesto.
- @casa
- Lugar. Texto libre, solo se lee al final de la línea.
- !15m
- Aviso 15 minutos antes, por Notification Center. También !1h, !1d, !0.
hecho se escribe x delante, o - [x] en una tarea

Tu gestor de tareas es dueño de tus tareas
La agenda de la que dependes vive dentro de la base de datos de otro, detrás de una cuenta, una API y un servicio de sincronización. Para que un modelo la escriba necesitas OAuth, tool calls y una integración que se rompe cuando le apetece. Y el día que la app cierre o cambie de precio, los datos se van con ella — porque nunca tuviste una copia que pudieras leer.
Una agenda son unas decenas de líneas de texto. Debería ser un archivo tuyo, en un formato que puedas leer sin ninguna app.
Un archivo, dos ventanas
La ventana de la izquierda es la base de datos completa. La de la derecha es la app leyéndola. Las dos están vivas: un cambio en cualquiera aparece en la otra en una décima de segundo, porque el watcher sigue los guardados atómicos — los que hace un editor, o una IA escribiendo con un archivo temporal.

- Una cabecera ## YYYY-MM-DD abre el día; debajo van eventos con hora y tareas con guion
- #tema, @lugar y !30m se leen solo al final de la línea, así los títulos nunca se rompen
- Marcar algo escribe "x " delante del evento o "- [x]" en la tarea — sin capa de sincronización
Lo que añade la app
El archivo sigue siendo la fuente de verdad. La app es lo que lo hace cómodo día a día.
Una alta rápida que habla SKD
para que escribas "14:00-15:00 Gym #health !15m" y sea un evento, o prosa suelta y sea una tarea del día.
Rejilla semanal
siete columnas sobre una rejilla horaria, bloques dimensionados por duración y una línea de ahora en el día de hoy.
Recordatorios locales
para que !30m, !1h o !1d en cualquier línea suenen a tiempo, sin servicio de notificaciones de por medio.
La curva del 1%
para que veas el interés compuesto de tu propio archivo: ritmo, racha, proyección a un año y qué #tema tira de la curva.
La misma línea, leída de tres formas
La lista es para el día. La semana es para ver dónde entra el trabajo. La vista compuesta es para ver si el mes fue real.


Todo lo que hace falta para vivir en un archivo
Cada función existe para que el archivo siga siendo suficiente. Sin cuentas, sin nube, sin funciones que no usarías.
Un archivo como base de datos
Markdown plano en ~/schedule.md — legible, buscable y respaldado por lo que ya respalda tu disco.
Recarga en 0.1s
El watcher vigila el archivo y su carpeta padre, así que sigue guardados atómicos vengan de quien vengan.
Lista, semana y temas
Hoy, Próximos, Todos, Completados, una fila de Atrasados y cada #tema del archivo con su cuenta.
Vista de interés compuesto
La curva ×1.01 / ×0.99 sobre tus propias entradas, con ritmo, racha y proyección a un año.
Importa y exporta
Arrastra otro .md para fusionarlo sin duplicados, y exporta .ics con VEVENT, VTODO y VALARM.
Sin red, sin cuenta
La app no hace peticiones. Nada que registrar, nada que sincronizar, nada que caducar.
Cómo funciona
Pega el prompt
La spec de SKD son nueve líneas de reglas que puedes pegar en cualquier modelo. Pide tu semana y vuelve como texto plano — fechas, eventos con hora, tareas, etiquetas, lugares y recordatorios. Sin JSON, sin pelearte con esquemas.
Guárdalo como ~/schedule.md
Ese archivo es la base de datos. La app lo vigila y recarga una décima de segundo después de cualquier guardado — tuyo, de tu editor, o de una IA escribiendo por un temporal.
Trabaja desde la app
Lista, rejilla semanal, alta rápida, recordatorios y la vista de interés compuesto. Cada casilla, edición y entrada nueva se escribe de vuelta como la misma línea SKD, así el archivo nunca se queda atrás.
Frente a un gestor de tareas en la nube
Para quién es
Quien planifica con un LLM
Ya le pides a un modelo que te ordene la semana. Este es el camino más corto entre su respuesta y un calendario de verdad — copiar, pegar, listo. Sin conectores que autorizar.
Gente de local-first y texto plano
Tienes las notas en markdown y quieres la agenda en el mismo sitio: buscable con grep, comparable con diff, respaldada por lo que ya respalda tu carpeta personal.
Quien no quiere una quinta cuenta
Sin registro, sin sincronización, sin suscripción que pueda caducar. La app abre un archivo de tu disco y esa es toda la lista de dependencias.
Privacidad
No hay servidor al que mandar nada.
- La app lee y escribe un archivo de tu máquina. No hace ninguna petición de red — no hay sistema de cuentas, ni telemetría, ni backend de sincronización.
- No se sube nada cuando marcas algo como hecho. La escritura va al mismo archivo markdown del que salió la entrada.
- Los recordatorios se programan localmente por Notification Center, con un fallback dentro de la app si el sistema rechaza una build firmada ad-hoc.
Gratis. Y tuyo.
SKD se compila desde el código. No hay plan de pago, ni versión Pro, ni nada que caduque.
$0macOS 14+
Clona el repo, ejecuta ./build.sh install y apunta la app a tu archivo markdown.
- La app completa: lista, semana, compuesto y editor
- Recordatorios locales con !30m, !1h, !1d, !0
- Importa arrastrando otro archivo SKD
- Exportación .ics desde la herramienta Python incluida
- La spec del formato, para escribirlo desde cualquier modelo
- 41 tests sobre el formato y la curva
Requiere un toolchain de Swift 5.9. Todavía no hay build notarizada para descargar.
Respuestas rápidas sobre SKD
Respuestas directas para quien evalúa si SKD encaja con su forma de trabajar.
¿Qué es SKD?+
Dos cosas con un mismo nombre: un formato de agenda lo bastante pequeño para que cualquier LLM lo emita bien a la primera, y una app nativa de macOS que lo lee y lo escribe. El formato es una cabecera de día (## YYYY-MM-DD) seguida de eventos con hora, tareas, etiquetas, lugares y recordatorios — nada más.
¿Necesito una IA para usarlo?+
No. El campo de alta rápida parsea SKD directamente: "14:00-15:00 Gym #health !15m" se convierte en evento y la prosa suelta en tarea. La IA es para lo que el formato está optimizado, no un requisito.
¿Y si la app y mi editor no coinciden?+
No pueden durante mucho. La app vigila el archivo y su carpeta padre, así que detecta guardados atómicos en una décima de segundo, y todo lo que cambia lo escribe como la misma línea SKD. El archivo siempre manda.
¿Puedo llevar la agenda a un calendario real?+
Sí. La herramienta Python incluida exporta .ics — entradas con hora como VEVENT, tareas como VTODO, etiquetas como CATEGORIES, recordatorios como VALARM. Los UID son un hash de fecha, hora y título, así que reexportar actualiza los eventos en vez de duplicarlos.
¿Qué es la vista de interés compuesto?+
La curva de Hábitos Atómicos calculada sobre tu propio archivo: cada entrada que terminas es ×1.01 y cada una que dejas pasar es ×0.99. Muestra dónde estás, tu ritmo real, dónde te deja ese ritmo en un año, tu racha y qué #tema tira de la curva y hacia dónde. Un día todavía en curso nunca cuenta como fallado.
¿Cómo se instala?+
Compilándolo desde el código: ./build.sh install deja SKD.app en /Applications. Necesita macOS 14 o superior y un toolchain de Swift 5.9 (las command line tools de Xcode). Todavía no hay descarga notarizada.
Quédate con el archivo. Que la app sea la reemplazable.
Compílalo con un comando, apúntalo a un archivo markdown y ten una agenda que sobreviva a la app que la muestra.