NoteFlow · Referencia del CLI

Tus notas,
headless.

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.

Linux / Raspberry Pi (headless)

instalación
$ curl -fsSL https://raw.githubusercontent.com/yagoid/noteflow/main/cli/install-cli.sh | sudo bash

Linux desktop / Windows

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:

PlataformaRuta
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

ComandoQué 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).
$ noteflow read "Project Alpha" Tasks$ noteflow read "Project Alpha" --json | jq '.sections[].name'
noteflow set <title> <section> [source] [--rich]

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

ComandoQué 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.

$ noteflow section add "Project Alpha" "Meeting Notes"
noteflow section rename <title> <old> <new>

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

ComandoQué 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.

$ noteflow move "Sprint 14" --group backend --folder Planning$ noteflow move "Sprint 14" --ungroup
noteflow groups [--json]

Lista los grupos.

noteflow group create <name> [--color <color>]

Crea un grupo. Colores: accent (default), accent-2, red, cyan, purple, text, orange, pink.

$ noteflow group create backend --color cyan
noteflow group delete <name> [--yes]

Elimina un grupo. Sus notas quedan sin grupo (no se borran). Sus carpetas también se borran — las carpetas solo existen dentro de un grupo.

noteflow folders [--group <g>] [--json]

Lista las carpetas — todas agrupadas por grupo, o solo las de uno con --group.

noteflow folder create <name> --group <g>

Crea una carpeta. --group es obligatorio — una carpeta no existe fuera de un grupo.

$ noteflow folder create Planning --group backend
noteflow folder rename <name> <new-name> [--group <g>]

Renombra una carpeta. Usa --group para desambiguar si el nombre se repite entre grupos.

noteflow folder delete <name> [--group <g>] [--yes]

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

ComandoQué 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

ComandoQué 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:

FlagAplica aDescripció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

VariableEfecto
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 getget es para humanos (indenta y decora) mientras read emite el contenido verbatim, así que los agentes deben usar siempre read. Y set vs addset reemplaza una sección, add añ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.