Todo el cuaderno desde cualquier terminal — un único script Node.js, cero dependencias, los mismos archivos que la app de escritorio.
pi@homelab: ~
~ $ noteflow --helpNoteFlow CLI — notas rápidas desde tu terminaluso: noteflow <comando> [opciones] add · new · list · get · read · set sections · section · move · groups · folders login · push · pull · migrate · self-update · status~ $ noteflow add "Funciona." --section Ideas✓ Añadido a "07-07-2026" · Ideas
01 / install
Un script, cero dependencias
El CLI de NoteFlow es un único script Node.js standalone — cli/noteflow.js, sin paquetes npm. Lee y escribe los mismos archivos que la app de escritorio: mismo directorio de notas, mismo formato, sin daemon de por medio. Eso lo hace perfecto para servidores, Raspberry Pis y cualquier máquina sin pantalla.
Nada que hacer — el CLI se instala automáticamente con los instaladores .deb y .exe de NoteFlow.
Único requisito: Node.js ≥ 18. Para actualizar una instalación standalone más adelante, ejecuta noteflow self-update.
02 / notes dir
Dónde viven tus notas
El CLI opera directamente sobre el directorio de notas de NoteFlow — archivos planos en tu disco, sin base de datos:
Plataforma
Ruta
Linux
~/.local/share/noteflow-notes/
Windows / macOS
~/noteflow-notes/
La variable de entorno NOTEFLOW_NOTES_DIR apunta el CLI a otro directorio — útil para scripting y pruebas contra un sandbox.
03 / format
Formato de nota (v2 — carpeta por nota)
Cada nota es un directorio<slug>-<id>/ con un note.md (solo frontmatter: metadatos + índice de secciones) y un archivo .md por sección (markdown puro):
noteflow-notes/
proyecto-alpha-abc12345/ note.md ← ancla de metadatos + índice de secciones sec001.md ← cuerpo de la sección "Note" sec002.md ← cuerpo de la sección "Tasks"
El contenido de cada sección vive en su propio <sectionId>.md — sin frontmatter, solo markdown.
El campo updated: de note.md es el timestamp canónico de sincronización de toda la nota.
isRawMode: true significa modo raw/markdown; false, rich text (HTML de TipTap).
Las notas con bloque encryption: en note.md están cifradas (la carpeta solo contiene note.md) — el CLI las ignora.
Un marcador .noteflow-format (con contenido 2) en la raíz del directorio señala el formato v2.
¿Vienes del layout plano v1? Un único noteflow migrate lo convierte todo — mira la tabla de comandos.
04 / commands
Referencia de comandos
Todo se direcciona por nombre: título de nota + nombre de sección — nunca tocas ids. Los títulos pueden ser parciales (con varios matches el CLI los lista y pide precisión), y los nombres de sección duplicados se apuntan con un sufijo 1-based tipo "Tasks#2". Entrecomilla los nombres con espacios.
Notas
Comando
Qué hace
noteflow add <text> [options]
Añade texto a la nota diaria de hoy (título DD-MM-YYYY) — o a cualquier nota con --title. Crea la nota si no existe; el texto se añade al final de la sección, separado por un salto de línea.
--title <title>
Escribe en la nota con ese título en vez de la del día.
--section <name>
Sección/pestaña destino. La crea si no existe. Default: Note.
--tag <tag>
Añade este tag a la nota (si no lo tiene ya).
--group <name>
Asigna la nota a un grupo.
--folder <name>
Coloca la nota en una carpeta de ese grupo (requiere --group).
--raw / --rich
Sección nueva en modo raw/markdown (default) o rich text.
$ noteflow add "Fix: CORS on /api/notes"$ noteflow add "Check server logs" --section Tasks --tag urgent
noteflow new <title> [options]
Crea una nota vacía.
--section <name>
Nombre de la primera sección. Default: Note.
--group <name>
Asignar a un grupo.
--folder <name>
Colocar en una carpeta de ese grupo (requiere --group).
--json
Devuelve { id, title, dirname } en JSON.
$ noteflow new "Sprint 14" --group backend --section Planning
noteflow list [options]
Lista las notas ordenadas por updated desc. Excluye archivadas por defecto.
--tag <tag>
Filtrar por tag.
--group <name>
Filtrar por grupo.
--folder <name>
Filtrar por carpeta (desambigua con --group si el nombre se repite).
--archived
Incluir notas archivadas.
--json
Array JSON con la metadata completa de cada nota (id, title, tags, group, folder, fechas, sections…).
$ noteflow list --tag urgent --json
noteflow get <title> [options]
Muestra una nota formateada para humanos (indentada, decorada). El título puede ser parcial — con varios matches muestra la lista y pide más precisión. Para pipes o agentes, usa read.
--section <name>
Mostrar solo esa sección.
--json
JSON completo con todas las secciones y su contenido.
noteflow read <title> [section]
Imprime el contenido tal cual en stdout — sin indentar ni decorar. La forma recomendada de leer una sección para pipes y agentes. Nombres de sección duplicados se direccionan con sufijo 1-based, p. ej. "Tasks#2".
--section <name>
Forma con flag de la sección posicional (útil con títulos multi-palabra).
--json
JSON con todas las secciones (o solo una si se indica).
Reemplaza el contenido de una sección (la crea si no existe) — el complemento de add, que solo añade al final. La forma recomendada de editar una sección. Ante nombres duplicados ambiguos sin sufijo #n, falla en vez de adivinar.
--text "<content>"
Texto inline (gana la primera fuente presente).
--file <path>
Lee el contenido de un archivo — la vía más fiable en Windows/PowerShell.
--stdin
Lee de stdin (también se usa automáticamente al recibir un pipe).
--rich
Si crea la sección, la crea en modo rich text (default: raw).
$ noteflow set "Project Alpha" Tasks --text "- [ ] deploy"$ cat todo.md | noteflow set "Project Alpha" Tasks --stdin
noteflow delete <title> [--yes]
Elimina una nota (alias: rm). Pide confirmación salvo con --yes. Con sync activo también la elimina del repositorio de GitHub.
noteflow rename <current-title> <new-title>
Actualiza el campo title de la nota. El nombre de la carpeta en disco no cambia (contiene el id).
noteflow favorite <title>
Alterna el campo favorited (alias: pin). La app de escritorio muestra las favoritas arriba de la lista.
noteflow archive <title>
Alterna el estado archived. Las archivadas no aparecen en list salvo con --archived.
Secciones
Comando
Qué hace
noteflow sections <title>
Lista las secciones de una nota con nombre, número de líneas y modo (raw/rich). section list es un alias.
noteflow section add <title> <name> [--rich]
Crea una sección vacía (raw por defecto; --rich para rich text). Las secciones se gestionan por nombre — sin ids.
Renombra una sección (el archivo en disco no cambia — va por id).
noteflow section delete <title> <name> [--yes]
Borra una sección (confirmación salvo --yes). Rechaza borrar la última. Desambigua duplicados con "Tasks#2".
Organización
Comando
Qué hace
noteflow move <title> --group <g> [--folder <f>]
Mueve una nota entre grupos y carpetas — el equivalente CLI del drag-and-drop de la app. --group a secas la lleva a la raíz del grupo (limpia la carpeta); --ungroup la saca de ambos.
Elimina una carpeta. Sus notas caen a la raíz del grupo (conservan el grupo, pierden la carpeta) — no se borra ninguna.
Sync con GitHub
Comando
Qué hace
noteflow login [repo-name]
Conecta con GitHub vía Device Flow OAuth — muestra un código y una URL para autorizar desde cualquier navegador (ideal en headless). Repo por defecto: noteflow-notes. El CLI guarda su propio token, separado del de la app de escritorio.
noteflow logout
Desconecta de GitHub.
noteflow push
Sube todas las notas al repositorio.
noteflow pull
Baja las notas del repo (alias: update). Solo sobreescribe una nota local cuando el updated remoto es más reciente.
Mantenimiento
Comando
Qué hace
noteflow migrate
Migración única del layout plano v1 (<slug>-<id>.md) al formato v2 carpeta-por-nota. Escribe el marcador .noteflow-format y, con token de sync accesible, sube el nuevo layout y borra los archivos planos del remoto. Idempotente — la app de escritorio ejecuta la misma migración local al arrancar.
noteflow self-update
Descarga el último cli/noteflow.js de GitHub y reemplaza el script actual. Usa la API pública del repo — no requiere login de sync. Útil en una RPi headless sin instalador.
noteflow status [--json]
Muestra número de notas, directorio, grupos, estado de GitHub y última sync. JSON: { notesDir, noteCount, github: { owner, repo, lastSync, tokenAccessible }, groups }.
noteflow help [command]
Ayuda general, o detallada de un comando (help new, help folder…).
05 / flags
Flags globales, colores y variables de entorno
Algunos flags se repiten entre comandos con el mismo significado en todos:
Flag
Aplica a
Descripción
--json
list · get · read · new · groups · folders · status
Salida JSON machine-readable.
--yes
delete · group delete · folder delete · section delete
Salta la confirmación interactiva.
--archived
list
Incluye notas archivadas.
--section <name>
read · get · add · set
Apunta a una sección por nombre.
--group <name>
add · new · move · list · folders · folder *
Apunta a / filtra por un grupo.
--folder <name>
add · new · move · list
Apunta a / filtra por una carpeta (requiere grupo).
--ungroup
move
Saca la nota del grupo y la carpeta.
--text / --file / --stdin
set
Fuente del contenido a escribir (gana la primera presente).
--rich
add · set · section add
Sección nueva en modo rich text (default: raw).
Colores de grupo
La paleta que acepta group create --color — los mismos tokens de color que usa la app de escritorio para los puntos de grupo y los acentos de nota:
accentaccent-2redcyanpurpletextorangepink
Variables de entorno
Variable
Efecto
NOTEFLOW_NOTES_DIR
Redirige el directorio de notas (scripting / testing).
NOTEFLOW_NO_APP_CHECK
Ponla a 1 para silenciar el aviso por stderr al mutar grupos/carpetas con la app de escritorio abierta.
06 / agents
Una herramienta pensada para agentes de IA
El CLI es deliberadamente agent-friendly: todos los comandos de lectura aceptan --json para salida machine-readable, los resultados van a stdout y los errores a stderr, y el exit code es 0 en éxito y 1 en error. Como todo se direcciona por título de nota y nombre de sección, un agente nunca necesita rastrear ids.
Dos convenciones importan: read vs get — get es para humanos (indenta y decora) mientras read emite el contenido verbatim, así que los agentes deben usar siempre read. Y set vs add — setreemplaza una sección, addañade al final.
Flujo típico de un agente
sesión de agente
# 1 · descubrir notas y nombres de sección$ noteflow list --json# 2 · leer una sección concreta, raw (apta para pipe)$ noteflow read "Proyecto Alpha" "Tasks"# 3 · sobrescribirla — o añadir al final con `add`$ noteflow set "Proyecto Alpha" "Tasks" --text "- [x] deploy"# 4 · sincronizar$ noteflow push
Instala la skill
¿Usas Claude Code u otro agente compatible con skills? Instala la skill del CLI de NoteFlow y tu agente recibe la referencia completa de comandos, gotchas incluidos:
skills
$ npx skills add yagoid/noteflow/cli/noteflow-cli
07 / caveats
Avisos que conviene conocer
App de escritorio abierta ⇒ los cambios de grupos/carpetas pueden perderse
La app mantiene groups.json / folders.json en memoria y los reescribe en sus propios ciclos (guardados y el auto-sync cada 5 minutos), pisando los grupos y carpetas creados desde el CLI mientras corre. Los cambios a nivel de nota — contenido, secciones, favorito, archivo — sí sobreviven: viven en carpetas por-nota. El CLI avisa por stderr si detecta NoteFlow en ejecución al mutar grupos/carpetas (siléncialo con NOTEFLOW_NO_APP_CHECK=1). Para cambios estructurales fiables, cierra la app primero — o hazlos desde la propia app.
PowerShell: --text multilínea puede truncarse en silencio
En Windows/PowerShell, un --text con saltos de línea puede truncarse a la primera línea sin avisar. Para cualquier cosa más allá de una línea usa --file <ruta> (la vía más fiable) o --stdin. Regla práctica: contenido no trivial → --file.
BOM en --stdin
PowerShell antepone un BOM a pipes y here-strings; el CLI lo limpia automáticamente, así que el contenido llega limpio.
08 / troubleshooting
Problemas comunes
«noteflow: command not found»
El script de instalación headless deja el CLI en /usr/local/bin/noteflow — comprueba que está en tu PATH. En escritorio viene con los instaladores .deb / .exe; abre una terminal nueva tras instalar.
Estoy logueado en la app, pero el CLI me pide login
Es lo esperado: el CLI no puede descifrar los tokens que la app de escritorio guarda con safeStorage de Electron. Mantiene su propio token — ejecuta noteflow login una vez.
Una nota no aparece en list / read
Las notas cifradas (bloque encryption: en note.md) se ignoran en todos los comandos de lectura, por diseño. Descífrala en la app de escritorio si necesitas acceder desde el CLI.
Mis grupos o carpetas creados desde el CLI desaparecieron / pull no cambió nada
Dos reglas de sync: el auto-sync de la app de escritorio reescribe groups.json / folders.json mientras corre (mira los avisos), y pull solo sobreescribe una nota local cuando el updated: remoto es más reciente. Cierra la app para cambios estructurales, y consulta la última sync con noteflow status.
Cookies
Usamos cookies de analítica (Google Analytics) para entender cómo se usa el sitio. No se carga nada hasta que aceptes. Política de cookies