# Die Kommandozeile exporter

Führen Sie Ihre Exporte aus dem Terminal, aus cron, aus Backup-Werkzeugen und über Agenten aus.

`exporter` ist die Mac App Exporter, ohne Fenster ausgeführt. Sie nutzt dieselben Verbindungen, Exportordner, dieselbe Auswahl und dieselben Einstellungen, die Sie in der App eingerichtet haben, und schreibt in dasselbe Exportprotokoll. Sie funktioniert, während die App geschlossen ist, und fragt nie nach: Fehlt etwas, bricht der Lauf mit Exit-Code 2 und einer Zeile ab, die sagt, was zu tun ist. Nur macOS.

## Installation

1. Installieren Sie Exporter aus dem Mac App Store ([Download](https://exporter.dev/download)) und öffnen Sie es.
2. Verbinden Sie eine App (Apple Notizen, Bear, Logseq, Kontakte, Nachrichten oder Bildschirmzeit) oder einen Ordner für Dokumente und wählen Sie ihren Exportordner ([Erste Schritte](https://exporter.dev/docs/getting-started)). Diese Freigaben lassen sich nur in der App erteilen.
3. Klicken Sie auf der Karte Kommandozeile der App auf „Installationsbefehl kopieren“ und fügen Sie ihn einmal im Terminal ein.

Die App läuft in der Sandbox und kann nicht in Ihren PATH schreiben, deshalb ist der letzte Schritt ein Einfügen. Die Zeile installiert `exporter` in `/opt/homebrew/bin`, wenn dieser Ordner existiert und Ihnen gehört (ohne sudo), sonst mit sudo in `/usr/local/bin`. Erneutes Einfügen ist unbedenklich; es ersetzt, was dort war. `exporter help install` gibt die Zeile für Ihren Mac aus.

## Quellen

`--source` nimmt einen dieser Werte an:

| Quelle | auch akzeptiert | schreibt |
| --- | --- | --- |
| `apple` | `apple-notes`, `applenotes`, `notes` | Markdown oder HTML |
| `bear` | | Markdown oder HTML |
| `logseq` | | immer Markdown |
| `contacts` | `apple-contacts`, `addressbook` | immer Markdown |
| `messages` | `imessage`, `chats`, `conversations` | immer Markdown |
| `screentime` | `screen-time`, `usage` | immer Markdown, eine Datei pro Tag |
| `documents` | `docs`, `files`, `pdf` | die auf der Karte Dokumente angekreuzten Formate |

## Formate

`--format` nimmt `markdown` (oder `md`) oder `html` an; Groß- und Kleinschreibung spielen keine Rolle. Alles andere bricht mit `error: --format pdf: expected markdown | html` und Exit 64 ab.

- ohne das Flag schreibt `sync` jede App in dem Format, das auf ihrer Karte eingestellt ist (Apple Notizen und Bear haben jeweils ein eigenes), und `export` schreibt in der Einstellung der App, die es exportiert; `exporter help sync` und `exporter help export` zeigen die aktuellen
- Logseq, Kontakte, Nachrichten und Bildschirmzeit sind immer Markdown, und Dokumente schreibt die auf seiner Karte angekreuzten Formate, deshalb wird `--format html` bei ihnen mit einem Hinweis ignoriert: `note: logseq export is always markdown, so --format is ignored for this source.`
- Apple Notizen schreibt eine `.html`-Seite pro Notiz ([das HTML-Format](https://exporter.dev/docs/notes#markdown-and-html)), Anhänge nach `attachments/` daneben kopiert und verlinkt, keine Front Matter. Das HTML von Bear ist der reine Text der Notiz in einem `<pre>`, ohne Gestaltung, und Verweise auf Anhänge bleiben Markdown-Text: Die Dateien werden kopiert, nicht verlinkt
- der MCP-Server liest nur Markdown-Dateien, ein Export, der nur HTML ist, ist für ihn also unsichtbar
- Apple Notizen und Bear schreiben ein Format pro Lauf; nur Dokumente schreibt beide in einer Synchronisierung. Ein Lauf entfernt nur alte Dateien seines eigenen Formats, ein Wechsel lässt also die Dateien des anderen Formats im Ordner. Für beide Formate geben Sie jedem einen eigenen Ordner:

```sh
exporter export --dest ~/Backups/notes-md   --format markdown
exporter export --dest ~/Backups/notes-html --format html
```

## sync

Führt den Export, den Sie in der App eingerichtet haben, einmal inkrementell in die Exportordner der App aus.

```sh
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
```

| Flag | was es tut | Standard |
| --- | --- | --- |
| `--source <source>` | nur diese App, wiederholbar | jede verbundene App; nicht verbundene werden übersprungen |
| `--format markdown\|html` | nur für diesen Lauf, Ihre Einstellung in der App bleibt unverändert. Es landet im selben Exportordner wie das andere Format; um beide zu behalten, exportieren Sie jedes mit `export --dest` in einen eigenen Ordner | Ihre Einstellung in der App |
| `--full` | alles neu exportieren. Entfernt vor dem Schreiben nur die Dateien, die Exporter geschrieben hat; alles andere im Exportordner bleibt | aus |
| `--json` | eine maschinenlesbare Zusammenfassung | aus |
| `--quiet`, `-q` | nur Fehler | aus |

```sh
exporter sync --source apple
```

```text
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
```

Die Zusammenfassungszeile lautet `<source>: <succeeded> of <selected> exported`, dann, falls vorhanden, `N failed`, `N removed` (Dateien von Einträgen, die gelöscht, umbenannt oder verschoben wurden), `N attachment issues`, dann die Dauer, das Format und der geschriebene Ordner.

Läuft die App, exportiert `sync` nichts, endet mit 0 und gibt `Exporter is running: real-time sync is live, the export root is already current.` aus.

## export

Ein einmaliger Export in einen Ordner Ihrer Wahl, für Schnappschüsse und Skripte. Er läuft problemlos, während die App geöffnet ist.

```sh
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
```

| Flag | was es tut | Standard |
| --- | --- | --- |
| `--dest <folder>` | erforderlich. Muss in einem Ordner liegen, der auf der Karte Kommandozeile der App freigegeben ist („Ordner hinzufügen“). Eine Freigabe für `~/Backups` gilt für jeden Ordner darunter | keiner |
| `--source <source>` | die zu exportierende App | `apple` |
| `--format markdown\|html` | das Format für diesen Lauf | Ihre Einstellung in der App |
| `--organize folders\|tags\|smart` | nur Apple Notizen: wie Notizen in Ordnern angeordnet werden | Ihre Einstellung in der App |
| `--folder "Name"` | nur dieser Ordner aus Apple Notizen, wiederholbar, Name ohne Beachtung der Groß- und Kleinschreibung | die in der App gespeicherte Auswahl |
| `--tag name` | nur dieses Tag, wiederholbar, Apple Notizen oder Bear | die in der App gespeicherte Auswahl |
| `--dry-run` | ausgeben, was exportiert würde, nichts schreiben | aus |
| `--json`, `--quiet` (`-q`) | wie bei sync | aus |

Ohne `--folder` oder `--tag` exportieren Apple Notizen und Bear die in der App gespeicherte Auswahl. Logseq exportiert den ganzen Graphen, Kontakte jede Karte, Nachrichten jede Unterhaltung, Bildschirmzeit jeden Tag; Filter werden bei ihnen mit einem Hinweis ignoriert.

```sh
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
```

```text
would export 100 apple notes · markdown → /Users/me/Backups/notes
```

## list

```sh
exporter list sources|folders|tags|dests [--source apple|bear] [--json]
```

| Liste | was sie zeigt | JSON |
| --- | --- | --- |
| `sources` | jede App, verbunden oder nicht, mit ihrer Anzahl. Dokumente wird nicht aufgeführt | `[{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]`, mit `pages` für Logseq, `contacts` und `days` für `screen-time` |
| `folders` | Ordner in Apple Notizen mit der Zahl ihrer Notizen, nach Tiefe eingerückt. `--source bear` ist ein Fehler (Exit 64) | `[{"name": "Work", "notes": 42, "level": 0}]` |
| `tags` | Tags mit Anzahl, standardmäßig Apple Notizen, Bear mit `--source bear` | `[{"name": "journal", "notes": 12}]` |
| `dests` | Ordner, in die `export --dest` schreiben darf, dazu der Exportordner jeder App | `[{"path": "/Users/me/Backups", "kind": "granted"}]`, wobei `kind` den Wert `granted`, `granted, volume not mounted` oder `export root (apple-notes)` hat |

```sh
exporter list folders --json
```

```json
[{"name": "Work", "notes": 42, "level": 0}]
```

## status

```sh
exporter status [--json]
```

```text
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
```

Mit `--json`: ein Objekt pro App, benannt `apple-notes`, `bear`, `logseq`, `contacts`, `messages`, `screen-time`, `documents`, jeweils `{"connected": true, "lastExport": "2026-09-11 03:00"}` (`null`, wenn nie exportiert); `destinations` (Pfade); `tier` (`full` oder `free`, die Freischaltung von Apple Notizen) und `freeNotesUsed`; `contactsTier` und `freeContactsUsed`; `messagesTier` und `freeConversationsUsed`; `screenTimeTier` und `freeDaysUsed`; `appRunning`. Zeiten sind Ortszeit, `yyyy-MM-dd HH:mm`.

## log

Die letzten Exportläufe, die neuesten zuerst: dasselbe Protokoll, das die App zeigt, aus jedem Exportordner und jedem freigegebenen `--dest`-Ordner. Datierte Ordner, die unter einem freigegebenen Ordner angelegt wurden, werden nicht gelesen; ihr Protokoll liegt in `<folder>/.exporter/`.

```sh
exporter log [--last N] [--json]
```

| Flag | was es tut | Standard |
| --- | --- | --- |
| `--last N` | wie viele Läufe | 10 |
| `--json` | ein Objekt pro Lauf | aus |

```text
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` ist `clean`, `warnings` (fehlende Anhänge) oder `failures`.

## doctor

Prüft, ob der Export ohne Fenster funktioniert, und gibt eine Zeile pro Prüfung aus: `ok`, `FAIL` mit einer `fix:`-Zeile darunter, `warn` oder `--` als Information.

```sh
exporter doctor
```

Es prüft, ob die Datenbank jeder verbundenen App lesbar und ihr Exportordner beschreibbar ist, ob jede gespeicherte Ordnerfreigabe aufgelöst wird, ob jeder `--dest`-Ordner beschreibbar ist, den Index und den installierten Befehl. Am Ende stehen die Versionsstufe, ob die App läuft, und der letzte Absturz, falls es einen gab. Exit 0 gibt `all good.` aus, Exit 2 gibt `N problem(s) found.` aus.

## report

Gibt einen Diagnosebericht aus (App-Version, macOS und Hardware, Verbindungsstatus, letzte Läufe, letzter Absturz; keine Notizinhalte) und kopiert ihn in die Zwischenablage.

```sh
exporter report [--send] [--email <addr>]
```

| Flag | was es tut | Standard |
| --- | --- | --- |
| `--send` | sendet den Bericht an uns und gibt `sent.` oder `offline: queued, will send on the next run or app launch.` aus | aus |
| `--email <addr>` | fügt Ihre Adresse hinzu, damit wir antworten können | keine |

## Hilfe und Version

- `exporter help [topic]`: die Themen `sync`, `export`, `list`, `status`, `log`, `doctor`, `report`, `cron`, `install`. Die Hilfe zu einem Befehl zeigt Ihre aktuellen Einstellungen als Standardwerte
- `sync`, `export`, `list`, `log` und `report` nehmen auch `--help` oder `-h` an
- `exporter version` (oder `--version`, `-v`) gibt `exporter 3.24` aus
- `exporter` allein in einem Terminal gibt die Übersicht aus und endet mit 64

## JSON-Ausgabe

`--json` funktioniert bei `sync`, `export`, `list`, `status` und `log`. Die Ausgabe ist formatiert, mit sortierten Schlüsseln. Fügen Sie bei `sync` und `export` `--quiet` hinzu: Ohne es werden die Fortschritts- und Hinweiszeilen vor dem JSON auf stdout ausgegeben. `export` gibt ein Zusammenfassungsobjekt aus, `sync` gibt `{"runs": [...]}` mit einem pro Quelle aus:

```json
{
  "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
}
```

Während die App läuft, gibt `sync` seine eine Zeile aus und kein JSON. Fehler gehen als `error: <what happened and what to do>` an stderr.

## Exit-Codes

| Code | Bedeutung |
| --- | --- |
| 0 | ok, auch ein Lauf, den das kostenlose Kontingent verkürzt hat |
| 1 | Exportfehler: ein Eintrag ist fehlgeschlagen, der Lauf hatte einen Fehler, oder er hat Einträge ausgewählt und keinen geschrieben |
| 2 | Einrichtung nötig: App nicht verbunden, Ordner nicht freigegeben, Ordner oder Tag nicht gefunden, nichts zu exportieren; `doctor` hat Probleme gefunden; der installierte Befehl hat ein altes Format, oder die App, auf die er zeigt, ist weg |
| 64 | Aufruf: unbekannter Befehl oder unbekanntes Flag, fehlender oder falscher Wert, `--folder` mit Bear, `list folders --source bear`, `exporter` allein in einem Terminal |

## Wo die Dateien landen

`sync` schreibt in den Exportordner, der in Exporter für jede App festgelegt ist, etwa `~/Documents/notes` oder `~/Documents/messages`; `export` schreibt nach `--dest`. Ein Ordner auf der Ebene Ihres Benutzerordners oder eine Ebene darunter, etwa `~/Documents` selbst, bekommt einen Unterordner pro App (`notes-export`, `messages-export` und so weiter), und ein tiefer liegender Ordner wird so verwendet, wie er ist. Die Zusammenfassungszeile (nach dem Pfeil) und `root` im JSON zeigen den tatsächlichen Ordner.

Jeder Exportordner enthält `.exporter/last-export.json` und `.exporter/last-export.md` (der letzte Lauf) und `.exporter/history/` (die letzten 50 Läufe). Apple Notizen, Kontakte, Nachrichten, Bildschirmzeit und Dokumente führen außerdem `.exporter/files.json`, jede Datei, die ein Lauf geschrieben hat: Der nächste Lauf entfernt nur dort aufgeführte Dateien, die kein Eintrag mehr erzeugt (Bildschirmzeit entfernt nie eine Tagesdatei). Bear und Logseq entfernen beim nächsten Lauf ebenfalls die Dateien von Notizen, die Sie gelöscht, umbenannt oder neu getaggt haben. Exporte aus Apple Notizen und Logseq bekommen außerdem `bases/` mit Obsidian-Ansichten.

## Kostenloses Kontingent

Die Kommandozeile hat dieselben Kontingente wie die App:

| App | kostenlos |
| --- | --- |
| Apple Notizen | 100 Notizen |
| Kontakte | 100 Kontakte |
| Nachrichten | die 10 neuesten Unterhaltungen |
| Bildschirmzeit | die 10 neuesten Tage bei der ersten Synchronisierung, und nur diese: spätere Tage brauchen die Freischaltung |
| Dokumente | die 10 zuletzt geänderten Dokumente |
| Bear und Logseq | unbegrenzt |

Bereits exportierte Einträge synchronisieren weiter kostenlos; das Kontingent stoppt nur neue. Ein Lauf, der es erreicht, exportiert trotzdem, was er darf, endet mit 0 und gibt einen Hinweis aus (nicht mit `--quiet`):

```text
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` enthält die Stufe und die genutzte Anzahl für Apple Notizen, Kontakte, Nachrichten und Bildschirmzeit. Jede begrenzte App wird mit ihrem eigenen einmaligen In-App-Kauf in Exporter freigeschaltet, [mit Preisen je Land](https://exporter.dev/pricing), ohne Abo und ohne Kauf im Web. Die Kommandozeile liest den Kauf bei jedem Lauf; antwortet der App Store nicht innerhalb von 5 Sekunden, läuft der Lauf mit dem kostenlosen Kontingent weiter.

## Zeitplanung

`exporter help cron` gibt diese Zeilen mit dem vollständigen Pfad des Befehls auf Ihrem Mac aus: Verwenden Sie diesen, denn der PATH von cron enthält den Installationsordner vielleicht nicht. Maskieren Sie in einer crontab `%` als `\%`:

```sh
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
```

Für Carbon Copy Cloner und andere Backup-Werkzeuge führen Sie `exporter sync` als Skript vor dem Backup aus und verzweigen nach dem Exit-Code. Der Befehl bleibt für den ganzen Export verbunden, auch wenn macOS ihn anhält, während niemand angemeldet ist. Solange die App läuft, bei geöffnetem oder geschlossenem Fenster, tut `sync` nichts: Die Echtzeit-Synchronisierung hält den Ordner bereits aktuell.

## MCP-Server

Die App, nicht die Kommandozeile, betreibt einen lokalen MCP-Server, über den Claude, Cursor, VS Code und andere Clients Ihre Exporte durchsuchen und lesen, unter `http://localhost:8744/mcp`. [Die Seite zum MCP-Server](https://exporter.dev/docs/mcp) erklärt alles darüber, vom Starten bis zu seinen sechs Tools.

## Fehlerbehebung

Führen Sie zuerst `exporter doctor` aus; jede fehlgeschlagene Prüfung gibt ihre Lösung aus. Die [Hilfe](https://exporter.dev/docs/help) behandelt auch die Meldungen der App.

- `X is not authorized`: Fügen Sie den Ordner (oder einen übergeordneten) auf der Karte Kommandozeile hinzu und führen Sie den Befehl erneut aus. `exporter list dests` zeigt, was freigegeben ist
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (dasselbe für jede App): Verbinden Sie sie in Exporter
- `sync` meldet, dass Exporter läuft: Nichts zu tun, die App hält den Ordner aktuell. Verwenden Sie `export --dest` für eine separate Kopie
- `no notes were written. run "exporter doctor" to check folders and permissions.`: Der Lauf hat Notizen ausgewählt und keine geschrieben; `doctor` prüft die Ordner und Berechtigungen
- `bookmark broken`: Der Ordner wurde verschoben oder gelöscht, oder sein Volume ist nicht aktiviert. Wählen Sie ihn in der App erneut
- der installierte Befehl hat ein altes Format, oder cron und Backup-Werkzeuge sehen Exit 19: Fügen Sie den Installationsbefehl erneut ein
- die App wurde seit der Installation des Befehls verschoben: Fügen Sie den Installationsbefehl erneut ein
- freigeschaltet, aber der Lauf meldet free: Die Kaufprüfung wartet höchstens 5 Sekunden und läuft dann mit dem kostenlosen Kontingent weiter. Führen Sie ihn erneut aus
- ein Problem, das doctor nicht erklären kann: `exporter report --send --email you@example.com`

## Related

- [MCP server](https://exporter.dev/docs/mcp): Connect Claude and other agents
- [For agents](https://exporter.dev/agents): Skills, command line and MCP for agents
- [Apple Notes](https://exporter.dev/docs/notes): Folders, fields, HTML and fixes
- [Changelog](https://exporter.dev/changelog): What changed in each version

---

human version: https://exporter.dev/de/docs/cli
every page: https://exporter.dev/llms.txt
