La línea de comandos exporter
Ejecute sus exportaciones desde Terminal, cron, herramientas de copia de seguridad y agentes.
exporter es la app Exporter para Mac ejecutada sin ventana. Usa las mismas conexiones, carpetas de exportación, selección y ajustes que configuró en la app, y escribe en el mismo registro de exportación. Funciona con la app cerrada y nunca pregunta nada: si falta algo, la ejecución se detiene con el código de salida 2 y una línea que dice qué hacer. Solo macOS.
Instalación
- Instale Exporter desde el Mac App Store (descarga) y ábralo.
- Conecte una app (Apple Notes, Bear, Logseq, Contactos, Mensajes o Tiempo de uso) o una carpeta de Documentos, y elija su carpeta de exportación (primeros pasos). Estos permisos solo se pueden conceder en la app.
- En la tarjeta Línea de comandos de la app, pulse «copiar el comando de instalación» y péguelo una vez en Terminal.
La app funciona en un entorno aislado (sandbox) y no puede escribir en su PATH, por eso el último paso es pegar. La línea instala exporter en /opt/homebrew/bin cuando esa carpeta existe y le pertenece (sin sudo); si no, en /usr/local/bin con sudo. Volver a pegarla no causa problemas; sustituye lo que hubiera. exporter help install muestra la línea para su Mac.
Fuentes
--source admite una de estas:
| fuente | también se acepta | escribe |
|---|---|---|
apple |
apple-notes, applenotes, notes |
markdown o html |
bear |
markdown o html | |
logseq |
siempre markdown | |
contacts |
apple-contacts, addressbook |
siempre markdown |
messages |
imessage, chats, conversations |
siempre markdown |
screentime |
screen-time, usage |
siempre markdown, un archivo por día |
documents |
docs, files, pdf |
los formatos marcados en la tarjeta Documentos |
Formatos
--format admite markdown (o md) o html; no distingue mayúsculas. Cualquier otro valor se detiene con error: --format pdf: expected markdown | html y la salida 64.
- sin él,
syncescribe cada app en el formato definido en su tarjeta (Apple Notes y Bear tienen cada una el suyo) yexportescribe según el ajuste de la app que exporta;exporter help syncyexporter help exportmuestran los actuales - Logseq, Contactos, Mensajes y Tiempo de uso son siempre markdown, y Documentos escribe los formatos marcados en su tarjeta, así que para ellos
--format htmlse ignora con un aviso:note: logseq export is always markdown, so --format is ignored for this source. - Apple Notes escribe una página
.htmlpor nota (el formato HTML), con los adjuntos copiados enattachments/junto a ella y enlazados, sin front matter. El HTML de Bear es el texto plano de la nota dentro de un<pre>, sin estilos, y con las referencias a adjuntos como texto Markdown: los archivos se copian, no se enlazan - el servidor MCP solo lee archivos markdown, así que una exportación solo en HTML le resulta invisible
- Apple Notes y Bear escriben un formato por ejecución; solo Documentos escribe ambos en una sola sincronización. Una ejecución solo elimina archivos antiguos de su propio formato, así que al cambiar de formato los archivos del otro se quedan en la carpeta. Para los dos formatos, dé a cada uno su propia carpeta:
exporter export --dest ~/Backups/notes-md --format markdown
exporter export --dest ~/Backups/notes-html --format html
sync
Ejecuta una vez, de forma incremental, la exportación que configuró en la app, en las carpetas de exportación de la app.
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
| flag | qué hace | valor por defecto |
|---|---|---|
--source <source> |
solo esta app, repetible | todas las apps conectadas; las no conectadas se omiten |
--format markdown|html |
solo en esta ejecución, el ajuste de la app no cambia. Se guarda en la misma carpeta de exportación que el otro formato; para conservar los dos, exporte cada uno a su propia carpeta con export --dest |
el ajuste de la app |
--full |
vuelve a exportarlo todo. Antes de escribir solo elimina los archivos que escribió Exporter; todo lo demás de la carpeta de exportación se queda | desactivado |
--json |
un resumen legible por máquinas | desactivado |
--quiet, -q |
solo errores | desactivado |
exporter sync --source apple
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
La línea de resumen es <source>: <succeeded> of <selected> exported, seguida, cuando corresponde, de N failed, N removed (archivos de elementos que se eliminaron, renombraron o movieron), N attachment issues, y después la duración, el formato y la carpeta escrita.
Si la app está abierta, sync no exporta nada, sale con 0 y muestra Exporter is running: real-time sync is live, the export root is already current.
export
Una exportación puntual a la carpeta que elija, para instantáneas y scripts. Funciona sin problemas con la app abierta.
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
| flag | qué hace | valor por defecto |
|---|---|---|
--dest <folder> |
obligatorio. Debe estar dentro de una carpeta autorizada en la tarjeta Línea de comandos de la app («añadir carpeta»). Una autorización sobre ~/Backups cubre todas las carpetas que contiene |
ninguno |
--source <source> |
la app que se exporta | apple |
--format markdown|html |
el formato de esta ejecución | el ajuste de la app |
--organize folders|tags|smart |
solo Apple Notes: cómo se reparten las notas en carpetas | el ajuste de la app |
--folder "Name" |
solo esta carpeta de Apple Notes, repetible, nombre sin distinguir mayúsculas | la selección guardada en la app |
--tag name |
solo esta etiqueta, repetible, Apple Notes o Bear | la selección guardada en la app |
--dry-run |
muestra lo que se exportaría, sin escribir nada | desactivado |
--json, --quiet (-q) |
como en sync | desactivado |
Sin --folder ni --tag, Apple Notes y Bear exportan la selección guardada en la app. Logseq exporta todo el grafo, Contactos todas las fichas, Mensajes todas las conversaciones y Tiempo de uso todos los días; en ellos los filtros se ignoran con un aviso.
exporter export --dest ~/Backups/notes-$(date +%F)
exporter export --dest ~/Backups/work --folder "Work" --format html
exporter export --dest ~/Backups/bear --source bear --tag journal
exporter export --dest ~/Backups/people --source contacts
exporter export --dest ~/Backups/papers --source documents
exporter export --dest ~/Backups/notes --dry-run
would export 100 apple notes · markdown → /Users/me/Backups/notes
list
exporter list sources|folders|tags|dests [--source apple|bear] [--json]
| lista | qué muestra | JSON |
|---|---|---|
sources |
cada app, conectada o no, con su recuento. Documentos no aparece | [{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}], con pages para logseq, contacts, y days para screen-time |
folders |
carpetas de Apple Notes con su número de notas, sangradas según la profundidad. --source bear es un error (salida 64) |
[{"name": "Work", "notes": 42, "level": 0}] |
tags |
etiquetas con recuentos, de Apple Notes por defecto, de Bear con --source bear |
[{"name": "journal", "notes": 12}] |
dests |
carpetas en las que puede escribir export --dest, más la carpeta de exportación de cada app |
[{"path": "/Users/me/Backups", "kind": "granted"}], donde kind es granted, granted, volume not mounted o export root (apple-notes) |
exporter list folders --json
[{"name": "Work", "notes": 42, "level": 0}]
status
exporter status [--json]
apple notes connected · last export 2026-09-11 03:00
bear not connected
logseq not connected
contacts not connected
messages connected · last export 2026-09-11 03:01
screen time not connected
documents not connected
root (apple-notes) /Users/me/Documents/notes
root (messages) /Users/me/Documents/messages
destinations /Users/me/Backups
version 3.24 · free · 100 of 100 free notes used
messages free · 10 of 10 free conversations used
app not running
Con --json: un objeto por app, llamado apple-notes, bear, logseq, contacts, messages, screen-time, documents, cada uno {"connected": true, "lastExport": "2026-09-11 03:00"} (null si nunca se exportó); destinations (rutas); tier (full o free, el desbloqueo de Apple Notes) y freeNotesUsed; contactsTier y freeContactsUsed; messagesTier y freeConversationsUsed; screenTimeTier y freeDaysUsed; appRunning. Las horas son locales, yyyy-MM-dd HH:mm.
log
Las ejecuciones de exportación recientes, de la más nueva a la más antigua: el mismo registro que muestra la app, de cada carpeta de exportación y de cada carpeta --dest autorizada. Las carpetas con fecha creadas dentro de una carpeta autorizada no se leen; su registro está en <folder>/.exporter/.
exporter log [--last N] [--json]
| flag | qué hace | valor por defecto |
|---|---|---|
--last N |
cuántas ejecuciones | 10 |
--json |
un objeto por ejecución | desactivado |
2026-09-11 03:00 apple-notes 1204/1204 exported 3 removed clean → /Users/me/Documents/notes
JSON: [{"source", "finishedAt", "selected", "succeeded", "failed", "format", "status", "destination", "prunedFiles", "runError"}]. status es clean, warnings (faltan adjuntos) o failures.
doctor
Comprueba que la exportación sin interfaz funcionará y muestra una línea por comprobación: ok, FAIL con una línea fix: debajo, warn, o -- para información.
exporter doctor
Comprueba que la base de datos de cada app conectada se puede leer y que en su carpeta de exportación se puede escribir, que cada permiso de carpeta guardado se resuelve, que en cada carpeta --dest se puede escribir, el índice y el comando instalado. Termina con el nivel de la versión, si la app está abierta y el último fallo, si lo hubo. La salida 0 muestra all good., la salida 2 muestra N problem(s) found.
report
Muestra un informe de diagnóstico (versión de la app, macOS y hardware, estado de las conexiones, ejecuciones recientes, último fallo; sin contenido de notas) y lo copia al portapapeles.
exporter report [--send] [--email <addr>]
| flag | qué hace | valor por defecto |
|---|---|---|
--send |
nos envía el informe y muestra sent., o offline: queued, will send on the next run or app launch. |
desactivado |
--email <addr> |
añade su dirección para que podamos responder | ninguno |
help y version
exporter help [topic]: temassync,export,list,status,log,doctor,report,cron,install. La ayuda de un comando muestra sus ajustes actuales como valores por defectosync,export,list,logyreporttambién admiten--helpo-hexporter version(o--version,-v) muestraexporter 3.24exportersolo en un terminal muestra la descripción general y sale con 64
Salida JSON
--json funciona en sync, export, list, status y log. La salida se imprime con formato y claves ordenadas. Para sync y export, añada --quiet: sin él, las líneas de progreso y de notas se imprimen en stdout antes del JSON. export imprime un objeto de resumen, sync imprime {"runs": [...]} con uno por fuente:
{
"attachmentIssues" : 0,
"durationSec" : 18.2,
"failed" : 0,
"format" : "markdown",
"root" : "/Users/me/Documents/notes",
"runError" : null,
"selected" : 1204,
"source" : "apple-notes",
"status" : "clean",
"succeeded" : 1204
}
Con la app abierta, sync imprime su única línea y ningún JSON. Los errores van a stderr como error: <what happened and what to do>.
Códigos de salida
| código | significado |
|---|---|
| 0 | correcto, incluida una ejecución que el cupo gratuito cortó |
| 1 | fallos de exportación: un elemento falló, la ejecución encontró un error o seleccionó elementos y no escribió ninguno |
| 2 | falta configuración: app no conectada, carpeta no autorizada, carpeta o etiqueta no encontrada, nada que exportar; doctor encontró problemas; el comando instalado tiene un formato antiguo o la app a la que apunta ya no existe |
| 64 | uso: comando o flag desconocido, valor ausente o incorrecto, --folder con Bear, list folders --source bear, exporter solo en un terminal |
Dónde quedan los archivos
sync escribe en la carpeta de exportación definida para cada app en Exporter, como ~/Documents/notes o ~/Documents/messages; export escribe en --dest. Una carpeta en su carpeta de inicio o un nivel por debajo, como la propia ~/Documents, recibe una subcarpeta por app (notes-export, messages-export, etc.), y una carpeta más profunda se usa tal cual. La línea de resumen (tras la flecha) y el root del JSON muestran la carpeta real.
Cada carpeta de exportación contiene .exporter/last-export.json y .exporter/last-export.md (la última ejecución), .exporter/history/ (las últimas 50 ejecuciones). Apple Notes, Contactos, Mensajes, Tiempo de uso y Documentos también guardan .exporter/files.json, cada archivo que escribió una ejecución: la siguiente solo elimina archivos de esa lista que ya no produce ningún elemento (Tiempo de uso nunca elimina un archivo de día). Bear y Logseq también eliminan en la siguiente ejecución los archivos de las notas que eliminó, renombró o cambió de etiqueta. Las exportaciones de Apple Notes y Logseq también reciben bases/ con vistas de Obsidian.
Cupo gratuito
La línea de comandos tiene los mismos cupos que la app:
| app | gratis |
|---|---|
| Apple Notes | 100 notas |
| Contactos | 100 contactos |
| Mensajes | las 10 conversaciones más recientes |
| Tiempo de uso | los 10 días más recientes en la primera sincronización, y solo esos: los días posteriores necesitan el desbloqueo |
| Documentos | los 10 documentos modificados más recientemente |
| Bear y Logseq | sin límite |
Los elementos ya exportados se siguen resincronizando gratis; el cupo solo detiene los nuevos. Una ejecución que lo alcanza exporta lo que puede, sale con 0 y muestra un aviso (no con --quiet):
note: 42 note(s) skipped: free version limit (100 of 100 free notes). upgrade in the app to export everything.
note: 58 contact(s) skipped: free version limit (100 of 100 free contacts). unlock contacts in the app to export everything.
note: 1522 conversation(s) skipped: free version limit (10 of 10 free conversations). unlock messages in the app to export everything.
note: 11 day(s) skipped: free version limit (10 of 10 free days). unlock screen time in the app to archive every day.
note: 5 document(s) skipped: free version limit (10 of 10 free documents). unlock documents in the app to convert every one.
status --json incluye el nivel y el número usado para Apple Notes, Contactos, Mensajes y Tiempo de uso. Cada app limitada se desbloquea con su propio pago único dentro de Exporter, con precio por país, sin suscripción ni pago en la web. La línea de comandos comprueba la compra en cada ejecución; si el App Store no responde en 5 segundos, la ejecución continúa con el cupo gratuito.
Programación
exporter help cron muestra estas líneas con la ruta completa del comando en su Mac: úsela, porque el PATH de cron puede no incluir la carpeta de instalación. En un crontab, escape % como \%:
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
Para Carbon Copy Cloner y otras herramientas de copia de seguridad, ejecute exporter sync como script previo y actúe según el código de salida. El comando permanece activo durante toda la exportación, incluso cuando macOS lo suspende sin nadie con la sesión iniciada. Mientras la app está en marcha, con la ventana abierta o cerrada, sync no hace nada: la sincronización en tiempo real ya mantiene la carpeta al día.
Servidor MCP
La app, no la línea de comandos, ejecuta un servidor MCP local que permite a Claude, Cursor, VS Code y otros clientes buscar y leer sus exportaciones, en http://localhost:8744/mcp. La página del servidor MCP lo cubre todo, desde cómo iniciarlo hasta sus seis herramientas.
Solución de problemas
Ejecute primero exporter doctor; cada comprobación fallida muestra su solución. Ayuda también cubre los mensajes de la app.
X is not authorized: añada la carpeta (o una superior) en la tarjeta Línea de comandos y vuelva a ejecutar.exporter list destsmuestra lo que está autorizadoapple notes is not set up. open Exporter and connect Apple Notes + an export folder.(lo mismo para cada app): conéctela en Exportersyncindica que Exporter está abierto: no hay nada que hacer, la app mantiene la carpeta al día. Useexport --destpara una copia aparteno notes were written. run "exporter doctor" to check folders and permissions.: la ejecución seleccionó notas y no escribió ninguna;doctorcomprueba las carpetas y los permisosbookmark broken: la carpeta se movió, se eliminó o su volumen no está montado. Vuelva a elegirla en la app- el comando instalado tiene un formato antiguo, o cron y las herramientas de copia de seguridad ven la salida 19: vuelva a pegar el comando de instalación
- la app se ha movido desde que instaló el comando: vuelva a pegar el comando de instalación
- está desbloqueado pero la ejecución dice free: la comprobación de la compra espera como máximo 5 segundos y luego continúa con el cupo gratuito. Vuelva a ejecutar
- un problema que doctor no puede explicar:
exporter report --send --email you@example.com