Docs · 10 of 13

Command line

everpaper-cli is a companion tool that shares the app's database — list and export meetings, transcribe files on-device, manage speech models, inspect Memory, connect other AI apps (MCP), and run LLM tasks from the terminal.

Everpaper ships with a companion command-line tool, everpaper-cli, that talks to the same database as the app. Anything you record, transcribe, or learn in the app is visible from the terminal, and anything the CLI writes shows up in the app. It is handy for scripting, exporting, and feeding your transcripts into other tools.

Most commands accept --json for machine-readable output (for a transcript as JSON, use meetings export <id> --format json --stdout). Progress and status messages go to standard error, so the JSON on standard output stays pipeable.

Terminal
everpaper-cli --help          # list every command
everpaper-cli <command> --help # options for one command
everpaper-cli --version        # the CLI's own version (3.0.0), not the app's

By default the CLI uses the app's shared database. Pass --database <path> on most commands to point at a different one.

Where the binary lives

everpaper-cli lives inside the app at /Applications/Everpaper.app/Contents/MacOS/everpaper-cli (a hindsight-cli alias sits next to it for old scripts). To run it as a bare command, link it onto your PATH:

Terminal
sudo mkdir -p /usr/local/bin
sudo ln -sf /Applications/Everpaper.app/Contents/MacOS/everpaper-cli /usr/local/bin/everpaper-cli

The link keeps working when you install a newer build over the old one.

Meetings

Work with your saved meeting recordings and their transcripts.

Terminal
# List recent meetings (default 20)
everpaper-cli meetings list
everpaper-cli meetings list --limit 50 --json

# Show one meeting's metadata
everpaper-cli meetings show <id>

# Print the transcript
everpaper-cli meetings transcript <id>

# Export a transcript to a file
everpaper-cli meetings export <id> --format markdown

You can refer to a meeting by its full ID, a unique ID prefix (at least four hex characters), or its exact title (letter case doesn't matter).

Export supports several formats with --format: txt (default), markdown, srt, vtt, and json. By default the file is written as <title>.<ext> in the current directory; use --output <path> to choose the name, or --stdout to print instead of writing a file.

Each meeting also keeps notes and saved results (the output of prompts you ran on it):

Terminal
everpaper-cli meetings notes get <id>
everpaper-cli meetings notes set <id> "Recap to send out"
everpaper-cli meetings notes append <id> "Follow up Friday"
everpaper-cli meetings notes clear <id>

everpaper-cli meetings results list <id>
everpaper-cli meetings results add <id> "Action items" -   # text from stdin

For notes set and results add, pass - instead of the text to read it from standard input.

Have a transcript from somewhere else? Import a WebVTT file as a meeting with no audio:

Terminal
everpaper-cli meetings import call.vtt

Transcribe

Transcribe any audio or video file with the on-device speech engines. The file is decoded to audio and recognized locally — nothing leaves your Mac.

Terminal
everpaper-cli transcribe meeting.m4a
everpaper-cli transcribe lecture.mp4 --engine whisper --language en
everpaper-cli transcribe call.wav --diarize --format transcript

Key options:

  • --engine: app-default (default; the Transcription model chosen in Settings → Speech, which is Parakeet unless you changed it), parakeet, nemotron, whisper, or moss (the Detailed model; about 2 GB to download the first time).
  • --language: a language hint for nemotron or whisper, e.g. en, it. Without it, Whisper uses the language set in the app.
  • --format: text (default), transcript (timestamped lines), or json.
  • --processing: raw keeps the engine's text; clean rebuilds punctuation and applies your Word corrections (Settings → Speech → Your words & phrases), as the app does for meetings. The default, app-default, uses a preference older versions stored and otherwise behaves like raw. Pass clean to match the app. With --diarize, the output is speaker-labeled text and this option is ignored.
  • --diarize: separate speakers and label each turn (Speaker 1, Speaker 2, …). With nemotron it uses Nemotron's speaker labels, and with moss the model's own. The acoustic diarizer (used by the other engines, and as Nemotron's fallback) is tuned with --diar-max-distance (default 0.775; higher merges more voices into fewer speakers), --diar-merge-similarity (default 0.85), --diar-min-speaker-ms (default 2000) and, optionally, --diar-max-speakers (no limit by default).
  • --no-save: transcribe without adding the result to your library.

By default the result is saved to your library so it appears in the app.

Models

Manage the on-device speech models.

Terminal
everpaper-cli models list        # engines and whether each is cached
everpaper-cli models status      # cache status (never downloads)
everpaper-cli models download whisper
everpaper-cli models warm-up
everpaper-cli models clear       # delete cached models

models download fetches nemotron, whisper or moss ahead of time; Parakeet downloads itself on first use. models warm-up loads an engine so the first transcription starts fast (--engine defaults to nemotron; it may download first). models clear deletes the speech models Everpaper downloaded for transcription, including the ones it uses for meetings (Parakeet, Nemotron and the Detailed model). The app downloads them again when it next needs them, so your next meeting may start with a download.

Memory (Second Brain)

Inspect what Everpaper has learned about you (the Memory page in the app) and verify it against the same guard the app uses, without opening the app.

Terminal
everpaper-cli second-brain
everpaper-cli second-brain --include-inactive --json

The output lists each belief with its salience, confidence, and evidence count, and reports how many would be kept versus dropped by the current guard. Add --include-inactive to also show dormant or retired beliefs.

LLM

Run language-model tasks from the terminal. Unlike the app, the CLI is configured per call — you pass the provider and key on each invocation; nothing is stored.

Terminal
# Check the connection
everpaper-cli llm test-connection --provider anthropic --api-key-env ANTHROPIC_API_KEY

# Summarize a file or stdin
everpaper-cli llm summarize notes.txt --provider anthropic --api-key-env ANTHROPIC_API_KEY
cat notes.txt | everpaper-cli llm summarize - --provider openai --api-key-env OPENAI_API_KEY

# Ask a question about a saved meeting transcript
everpaper-cli llm chat <meeting-id> "What did we decide about pricing?" --provider anthropic --api-key-env ANTHROPIC_API_KEY

# Apply a custom instruction to a file or stdin
everpaper-cli llm transform "Turn this into bullet points" notes.txt --provider anthropic --api-key-env ANTHROPIC_API_KEY

Supported providers: anthropic, openai, openaiCompatible, gemini, openrouter, ollama, lmstudio, omlx, and nativ (the separate Nativ server app). Everpaper Native isn't one of them; to test it from the terminal, use native check.

How the key is resolved, in order: --api-key (a literal — discouraged), then --api-key-env (the name of an environment variable holding the key), then the conventional variable for the provider (for example ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, OPENROUTER_API_KEY). ollama, lmstudio, omlx and nativ need no key; if your LM Studio, oMLX or Nativ server uses a token, set LM_API_TOKEN, OMLX_API_TOKEN or NATIV_API_TOKEN.

Other useful options:

  • --model: pick a model. Required for openaiCompatible, lmstudio, omlx and nativ; other providers fall back to a conservative default.
  • --base-url: an absolute http(s) URL for self-hosted endpoints.
  • --allow-insecure-http: permits plain http to a remote cloud-style endpoint (your key travels unencrypted).
  • --local: uses the smaller context budget meant for local models.

Everpaper Native

On macOS 27, you can check Everpaper Native without opening the app:

Terminal
everpaper-cli native check
everpaper-cli native models

native check sends one prompt through Everpaper Native and prints the model, the reply, token counts and latency. native models lists the installed models.

Connect another AI app (MCP)

Other AI apps can read from your journal through the Model Context Protocol (MCP). It's off until you turn it on:

  1. In Everpaper, turn on Settings → AI & summaries → Access from other AI apps → Allow external agents (MCP).
  2. In your AI app's MCP settings, add a server that runs the command /Applications/Everpaper.app/Contents/MacOS/everpaper-cli with the argument mcp.

In apps configured with JSON, the entry usually looks like this:

JSON
{
  "mcpServers": {
    "everpaper": {
      "command": "/Applications/Everpaper.app/Contents/MacOS/everpaper-cli",
      "args": ["mcp"]
    }
  }
}

Agents get people, files, links and connections from your journal, with secrets removed (names, email addresses and phone numbers are kept), and never screenshots. Full-text search of your screen text needs a second switch, …including raw screen text (full-text search), which appears once the first one is on.

What an agent reads is then handled by that app and the AI it uses, which may be a cloud service. Allow cloud AI to analyze your journal doesn't apply to it, so turn MCP on only for apps you trust.

If your agent reports Enable it in Everpaper → Settings → Journal, the switch is at Settings → AI & summaries → Access from other AI apps → Allow external agents (MCP).

Other commands

  • prompts run "Meeting Memo" <meeting> --provider … runs a template and saves the result to the meeting (prompts list|show|add|set|delete|restore-defaults manage them).
  • calendar upcoming lists the events your calendar rules match in the next 7 days.
  • health checks paths, the database, models and calendar access.
  • vocab manages word corrections and saved phrases.
  • history lists and searches saved transcriptions.
  • config reads and writes settings.

Import

Bring data over from the old Hindsight app (the same import as Settings → General → Setup & data → Import from Hindsight (legacy)). Quit Hindsight first. Your originals are never changed, and nothing imports on its own. Use --legacy-root <folder> if Hindsight's data isn't in its usual place.

Terminal
everpaper-cli import --dry-run    # report what would be imported, write nothing
everpaper-cli import              # actually import

--dry-run shows the per-table counts (imported, skipped, unsupported) without writing anything. Add --json for a structured report.

JSON output

Pass --json to get stable, pretty-printed JSON with sorted keys and ISO-8601 dates. Status text is kept off standard output, so you can pipe results straight into other tools:

Terminal
everpaper-cli meetings list --json | jq '.[].title'

On failure in --json mode, the tool prints an error envelope instead of the normal payload:

JSON
{
  "ok": false,
  "error": "Provider anthropic needs an API key (--api-key-env or ANTHROPIC_API_KEY).",
  "errorType": "validation"
}

Parsing errors (exit 64) are not wrapped in the envelope.

The errorType field comes from a small, stable vocabulary, so scripts can branch on the kind of failure: auth, config, connection, context, import_schema, input_empty, input_missing, invalid_response, lookup, model, provider, rate_limit, runtime, streaming, truncated, and validation.

Exit codes

  • 0: success.
  • 1: a runtime failure (network, provider, transcription), including a meeting ID or title that matches nothing.
  • 2: an invalid value (unknown engine, format or provider, a missing --model), a missing or empty input file, or an ID prefix or title that is ambiguous or too short.
  • 64: the command line itself couldn't be parsed (an unknown option or a missing argument). These errors are printed as plain text, even with --json.