Armin
v0.5.0 · AppImageUna app de escritorio local-first para repetición espaciada donde las tarjetas guardan sus prerrequisitos, con un servidor MCP que deja a los agentes autor decks.
Problema
Quería aprender con repetición espaciada y Anki no me dejaba. Hacer tarjetas se comía el tiempo que repasar debía ahorrarme, y la app agenda todas las tarjetas como si fueran independientes. El conocimiento no es independiente: HTML desbloquea CSS, y CSS y JavaScript desbloquean todo lo que viene después. Ninguna app de repetición espaciada que encontrara modela esa jerarquía, y por eso un backlog de repaso en un tema nuevo se siente abrumador. Lo es, porque la app te está mostrando tarjetas para las que no estás listo.
(Para el modelo de memoria detrás de la repetición espaciada, “How to remember anything” de Nicky Case sigue siendo la mejor explicación. Para el argumento de la jerarquía, este post fue el que me arregló el modelo mental.)
El gráfico de abajo es la forma contra la que Armin agenda: una tarjeta se vuelve repasable solo cuando las tarjetas de las que depende ya se aprendieron.
Decisiones
Construir local-first con Electron
Elección
Una app de Electron con SQLite local; los datos nunca salen de la máquina.
Local-first es una decisión de aprendizaje, no solo de privacidad. Un hábito de repaso tiene que sobrevivir mañanas sin internet, y el corpus de tarjetas es del tipo de datos que el estudiante debería tener como archivos. Electron es pesado, y acepté ese costo por los módulos nativos y el empaquetado que no tuve que pelear.
Descartado
- App webNo puede ser dueña de archivos locales y depende de la conectividad.
- TauriBundle más pequeño, pero los módulos nativos de better-sqlite3 y el toolchain de Electron Forge eran el camino más rápido y seguro para publicar.
Dejar que los agentes autoren mazos vía MCP
Elección
Un servidor MCP local que expone herramientas de autoría: crear mazos y tarjetas, importar jerarquías completas con enlaces de prerrequisito, editar, archivar, borrar y leer el grafo.
El servidor habla stdio dentro de la app. La seguridad viene del grafo, no de restringir herramientas: los prerrequisitos se quedan dentro de un mazo, los self-edges y los ciclos se rechazan apenas se proponen, y la importación por lotes valida la jerarquía antes de escribir nada. Repasar sigue siendo humano a propósito. No existe una herramienta que responda un repaso por ti.
Descartado
- Una API alojadaSaca los datos de la máquina, lo que derrota el propósito de la app.
- Una superficie de solo lecturaUn agente que solo lee deja al humano escribiendo cada tarjeta, que es justo la tarea que el agente debería absorber.
Agendar con FSRS detrás de un candado de prerrequisitos
Elección
ts-fsrs para agendar, más un candado: una tarjeta prerrequisito queda asegurada solo cuando cada unidad de repaso que genera llega al estado Review con estabilidad sobre un piso.
El candado es lo que convierte el grafo de prerrequisitos en agenda. Una tarjeta bloqueada sale de la cola hasta que sus prerrequisitos están asegurados; al desbloquear vuelve la agenda normal, y los candados se recalculan transitivamente después de cada repaso. El piso de estabilidad se configura por mazo, así que el estudiante puede negociar rigor por ritmo.
Descartado
- SM-2, el algoritmo de AnkiTrata todas las tarjetas igual sin importar cómo ha respondido el estudiante. FSRS se ajusta al historial real de repaso.
Publicar una plataforma, sin firma
Elección
Un AppImage para Linux, publicado en GitHub Releases y en el AUR, deliberadamente sin firma.
Un artefacto honesto vale más que tres con advertencias. El paquete del AUR reempaqueta el AppImage sin la dependencia de FUSE, que es la historia de distribución en Linux que de verdad me importa. El code-signing espera hasta que haya una razón para él.
Descartado
- Pagar certificados de code-signingCuesta dinero que el proyecto no tiene, por advertencias en plataformas que no estoy publicando de todas formas.
- Publicar también builds de Windows y macOSLa configuración de build existe para ambos, pero instaladores sin firma que nadie puede ejecutar sin pelear con su SO son ruido, no alcance.
Resultado


La v0.5.0 se publica como AppImage en GitHub Releases y como armin-bin en el
AUR. El CI corre lint, typecheck, pruebas unitarias, pruebas del servidor MCP
y E2E con Playwright bajo xvfb en cada pull request. Code-signing y
auto-actualización quedan aplazados juntos, a propósito.
Grabaciones
Una app de escritorio local-first para repetición espaciada donde las tarjetas guardan sus prerrequisitos, con un servidor MCP que deja a los agentes autor decks.