# Technical Documentation: fastrepl/anarlog

> ℹ️ **Provenance:** Multi-Tier Ingestion · [CodeWiki Reference](https://codewiki.google/github.com/fastrepl/anarlog)

### Overview (README.md)

> **Note:** The team is now building **[char](https://char.com)**. The **anarlog** community application remains open-source, MIT-licensed, and maintained as the local-first meeting notetaker in this repo. Source-visible enterprise components are commercially licensed.

<div align="center">

<img width="110" src="apps/desktop/src-tauri/icons/stable/128x128@2x.png" alt="anarlog icon" />

<h1>anarlog</h1>

<p>
    <b>The privacy-first AI meeting notepad.</b>
    <br />
    Open source, local-first, and yours to fork. Granola, rearranged.
  </p>

<p>
    <a href="https://anarlog.so">Website</a>
    &nbsp;•&nbsp;
    <a href="https://docs.anarlog.so">Docs</a>
    &nbsp;•&nbsp;
    <a href="https://anarlog.so/download">Download</a>
    &nbsp;•&nbsp;
    <a href="https://anarlog.so/discord">Discord</a>
    &nbsp;•&nbsp;
    <a href="https://www.reddit.com/r/anarlog/">r/anarlog</a>
    &nbsp;•&nbsp;
    <a href="https://x.com/anarlogapp">@anarlogapp</a>
    &nbsp;•&nbsp;
    <a href="https://status.anarlog.so">Status</a>
  </p>

<p>
    <a href="https://github.com/fastrepl/anarlog/stargazers"><img src="https://img.shields.io/github/stars/fastrepl/anarlog?style=flat&color=ffe09d" alt="GitHub stars" /></a>
    <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-black" alt="MIT license" /></a>
    <a href="https://anarlog.so/discord"><img src="https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white" alt="Discord" /></a>
    <a href="https://deepwiki.com/fastrepl/anarlog"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki" /></a>
  </p>

<img width="100%" src="apps/web/public/og.jpg" alt="anarlog" />

</div>

<br />

anarlog is an open-source alternative to Granola. It takes notes in your meetings without sending a bot to join the call: it listens to your device audio, can transcribe on your machine, and keeps app data in a local SQLite database.

It is built for people who want AI meeting notes without handing their conversations to someone else's cloud, and for anyone who needs to get a notetaker past a security review with a straight face.

## Why anarlog

- **No bot joins your call.** anarlog captures audio directly on your device. Nothing appears in the participant list, and nothing records from inside the meeting.
- **Local when you choose it.** On supported Macs, available built-in transcription models run on-device. Local Intelligence providers keep summaries and chat on your computer too.
- **Your data, in a format you can read.** Sessions, notes, and transcripts live in local SQLite. Recordings and attachments are plain local files. Export Markdown whenever it fits your workflow.
- **Bring your own AI.** Use a supported hosted provider, your own API key, or an OpenAI-compatible local server such as Ollama, LM Studio, or Unsloth.
- **Readable source, MIT.** The community application is MIT-licensed. Fork it, audit it, sell it, or build it yourself.
- **Cloud is opt-in, not required.** Hosted AI, encrypted CloudSync, and sharing exist when you want them. Nothing depends on them.
- **A front door for your org.** Source-visible enterprise components and commercial deployment options give security and IT teams a real path to yes.

## What runs where

| Part of the workflow         | Where it happens                                                  |
| ---------------------------- | ----------------------------------------------------------------- |
| Audio capture and recording  | Your device                                                       |
| Transcription                | Your device with an on-device model, or the provider you select   |
| Notes and transcript storage | Local SQLite plus local files                                     |
| AI summaries and chat        | Your choice: local model, your own API key, or optional hosted AI |
| Sync and sharing             | Off by default, opt-in encrypted CloudSync                        |

## How AI works

anarlog keeps audio transcription separate from the language model used for summaries and chat. You can change either one without changing the other.

| Stage                                       | App setting       | Anarlog Cloud                                                                                                                                            | Local or bring your own                                                                   |
| ------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Audio → transcript                          | **Transcription** | Managed **Pro (Cloud)** prefers Soniox 5 for live and batch transcription, with eligible fallbacks based on language and mode. | Soniqo or Apple Speech when available, or your selected transcription provider and model  |
| Transcript + memo → summary, title, or chat | **Intelligence**  | Managed **Auto** (also shown as Pro (Cloud)) currently uses the latest Claude Sonnet alias through OpenRouter.                                           | Your selected API, subscription, OpenAI-compatible server, or eligible Apple Intelligence |

The active provider and model are always visible under **Settings → Transcription** and **Settings → Intelligence**. Read [Models and providers](https://docs.anarlog.so/models-and-providers) for the current routes, local model list, and privacy boundaries.

## Get started

1. [Download Anarlog](https://anarlog.so/download) for macOS, Windows, or Linux.
2. Open it and join a meeting. anarlog records on your device and transcribes with the model you selected.
3. Generate a note, edit it like a document, and export Markdown when you need it.
4. Optional: connect an LLM provider or a local model in settings for summaries and chat.

Product docs live at [docs.anarlog.so](https://docs.anarlog.so). To build the desktop app or website from source, follow [Local development](#local-development).

## Repository map

| Path               | What lives there                                                                           |
| ------------------ | ------------------------------------------------------------------------------------------ |
| `apps/desktop`     | Tauri v2 desktop app: React and TypeScript UI, Rust backend                                |
| `apps/web`         | anarlog.so website, account portal, and shared-note pages; not the desktop notepad         |
| `apps/api`         | Optional hosted services for AI, sync, sharing, and integrations                           |
| `apps/cli`         | Local CLI and MCP server                                                                   |
| `apps/mobile`      | iOS and Android client, available as a beta through TestFlight and Google Play             |
| `apps/stripe`      | Billing integration                                                                        |
| `apps/watch/apple` | watchOS companion source built with the mobile app                                         |
| `plugins/*`        | Tauri capabilities such as local STT, database access, calendar, export, and notifications |
| `crates/*`         | Rust libraries for audio capture, transcription, diarization, storage, and services        |
| `packages/*`       | Shared TypeScript packages for the editor, database, UI, and plugin SDK                    |
| `supabase/`        | Hosted authentication, sharing, sync, billing, and Cloud API data                          |
| `skills/anarlog`   | Published agent skill for the CLI and MCP server                                           |
| `enterprise/`      | Source-visible enterprise components, commercially licensed                                |

## Local development

The local-first desktop app and website start without secrets. Hosted AI, CloudSync, authentication, billing, and connected integrations need their optional local services and configuration.

You need Node.js 22 or later, pnpm 11.1.1, Rust 1.94.0, [process-compose](https://f1bonacc1.github.io/process-compose/installation/) 1.122.0 or later (`brew install process-compose` on macOS), and the [Tauri v2 system dependencies](https://v2.tauri.app/start/prerequisites/). Apple Silicon Macs also need Xcode with its Metal Toolchain component to compile the MLX shader library (Xcode 26 and later: `DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer xcodebuild -downloadComponent MetalToolchain`); the Command Line Tools alone are not enough. On Debian or Ubuntu, the repository can install the required toolchains and system packages:

```bash
bash scripts/setup-linux.sh
```

Install the workspace and start the app you want to work on:

```bash
pnpm install --frozen-lockfile
pnpm dev:desktop
# or
pnpm dev:web
```

Process Compose builds shared UI first, manages the app processes, and saves logs under `.process-compose/`. Use `pnpm dev` for the combined desktop, web, API, and local Supabase stack after configuring the optional backend.

Read [CONTRIBUTING.md](CONTRIBUTING.md) for backend setup, process controls, validation commands, code ownership, and the contribution workflow. Ask [DeepWiki](https://deepwiki.com/fastrepl/anarlog) for a code-indexed explanation of a subsystem.

## Name history

**anarlog** started as **Hyprnote**, then briefly used the **char** name.

We later split the work into two projects. **[char](https://char.com)** is the team's current productivity app. **anarlog** is this open-source, local-first meeting notetaker.

This repository is not the current char codebase, and anarlog is not being retired. Its community application stays MIT-licensed, forkable, buildable from source, and built for local notes you control.

If you came here from Granola, welcome. If you came here from Hyprnote, welcome back.

Either way, it's yours.

## Contributing

Issues, pull requests, bug reports, and docs fixes are all welcome.

- Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request.
- Join the community on [Discord](https://anarlog.so/discord) or [r/anarlog](https://www.reddit.com/r/anarlog/).

Contributions outside `enterprise/` are distributed under the MIT license.

## License

- Community application: [MIT](LICENSE)
- Enterprise components: [commercial](LICENSE.enterprise)
- Full boundary: [LICENSING.md](LICENSING.md)

Maintained by [fastrepl](https://github.com/fastrepl).

## Contributors

<a href="https://github.com/fastrepl/anarlog/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=fastrepl/anarlog" alt="Contributors" />
</a>

---

### README (`docs/README.md`)

# Anarlog documentation

This Mintlify project is published at [docs.anarlog.so](https://docs.anarlog.so).

## Deployment

Configure the Mintlify project with `docs/` as its documentation directory and `docs.anarlog.so` as its custom domain. In Mintlify's domain setup:

1. Add the verification records shown in the dashboard.
2. Wait for both records and TLS provisioning to verify.
3. Point the `docs` CNAME to the target shown by Mintlify.

The website redirects the previous `anarlog.so/docs/*` routes to the matching path on the custom domain.

## Local preview

Install the Mintlify CLI, then run it from this directory:

```bash
npm install mint
cd docs
mint dev
```

Update `docs.json` whenever a page is added, moved, or removed. Keep CLI and MCP reference content aligned with `apps/cli/src/cli.rs` and `apps/cli/src/mcp.rs`. Mintlify publishes the custom agent skill from `skill.md`; keep it aligned with `../skills/anarlog/`.

Before deploying, run:

```bash
mint validate
mint broken-links --check-anchors --check-redirects
```

---

### Index (`docs/index.mdx`)

---
title: "Anarlog"
description: "Record a meeting, take notes, and leave with a clear summary."
---

Anarlog records your microphone and computer audio without joining the call as a bot. Each meeting stays together as an editable memo, transcript, and summary.

<CardGroup cols={2}>
  <Card title="Try your first meeting" icon="play" href="/quickstart">
    Use the private demo in Anarlog, then record a real meeting.
  </Card>
  <Card title="Install the desktop app" icon="download" href="/desktop-installation">
    Choose the right build for macOS, Windows, or Linux.
  </Card>
  <Card title="Record a meeting" icon="microphone" href="/meetings">
    Start from your calendar or from a new note.
  </Card>
  <Card title="Review and export" icon="file-lines" href="/notes">
    Work with your memo, summary, transcript, and exports.
  </Card>
  <Card title="Choose your AI" icon="sparkles" href="/ai-setup">
    Use Anarlog Cloud, your own provider, or local models.
  </Card>
</CardGroup>

## Popular questions

<CardGroup cols={2}>
  <Card title="What languages does Anarlog support?" icon="language" href="/help#supported-languages">
    See the Settings language list and which models cover it.
  </Card>
  <Card title="How do I compare transcription costs?" icon="coins" href="/help#compare-transcription-costs">
    See on-device, Anarlog Cloud, and bring-your-own-key pricing.
  </Card>
  <Card title="How can I use on-device models?" icon="hard-drive" href="/help#use-on-device-models">
    Use Soniqo, Apple Speech, a whisper.cpp `.bin`, or a Deepgram-compatible local server.
  </Card>
  <Card title="Is there a local model for hour-long calls?" icon="hourglass" href="/help#local-model-hour-long-calls">
    Use Soniqo Parakeet Batch on Apple Silicon, or a hosted after-recording model.
  </Card>
  <Card title="Which models does Anarlog use?" icon="microchip" href="/models-and-providers">
    See the current cloud routes, on-device models, and bring-your-own-provider behavior.
  </Card>
  <Card title="Can I use Anarlog offline?" icon="wifi-slash" href="/offline">
    Record, transcribe, summarize, and chat with local models.
  </Card>
  <Card title="Where is my data stored?" icon="hard-drive" href="/data-and-privacy">
    See what stays local and what hosted features receive.
  </Card>
  <Card title="Can I import a recording?" icon="file-arrow-up" href="/import-recordings">
    Create a meeting note from audio, SRT, or VTT files.
  </Card>
  <Card title="How do I improve summaries?" icon="wand-magic-sparkles" href="/customize-summaries">
    Use templates, instructions, languages, and your dictionary.
  </Card>
  <Card title="Can I share a meeting?" icon="share-nodes" href="/sharing">
    Invite people, send a recap, or share a view-only link.
  </Card>
  <Card title="Can I import my meeting history?" icon="clock-rotate-left" href="/imports">
    Bring supported exports from another meeting assistant.
  </Card>
</CardGroup>

[Browse all common questions →](/help)

## The short version

1. Open a calendar event or create a note.
2. Click **Join & record** or **Record**.
3. Take rough notes in **Memos** while Anarlog listens.
4. Stop listening, then review **Summary** and **Transcript**.

Your app data is stored locally by default. Hosted AI, sync, sharing, connected calendars, and the optional Cloud API send the content needed for the feature you choose. See [Data, privacy, and retention](/data-and-privacy) for the exact boundaries.

<Note>
  New to Anarlog? Open the **Welcome to Anarlog** note and click **Join & record**. It uses a private, prerecorded demo meeting.
</Note>

---

### Quickstart (`docs/quickstart.mdx`)

---
title: "Your first meeting"
description: "Set up Anarlog and try a private demo before your next call."
---

<Steps>
  <Step title="Install Anarlog">
    [Download Anarlog](https://anarlog.so/download), open it, and follow the setup screen. See [Install the desktop app](/desktop-installation) to choose the right macOS, Windows, or Linux build.
  </Step>
  <Step title="Allow audio access">
    Allow **Microphone** so Anarlog can hear you. Allow **System Audio** so it can hear everyone else on the call.
  </Step>
  <Step title="Finish the optional setup">
    Sign in if you want Anarlog Cloud, sync, or connected calendars. Choose where Anarlog stores its local data.
  </Step>
  <Step title="Run the private demo">
    Open **Welcome to Anarlog** and click **Join & record**. Anarlog opens a prerecorded meeting and treats it like a real call.
  </Step>
  <Step title="Review the result">
    When the video ends, return to Anarlog and stop listening. Open **Memos**, **Summary**, and **Transcript** to see what Anarlog captured.
  </Step>
</Steps>

## Find your way around

- The sidebar keeps upcoming meetings and recent notes within reach.
- The center of the app shows the open memo, summary, or transcript.
- **Chat** works with the open meeting and any additional context you add.
- **Settings** controls audio, AI providers, storage, sync, imports, integrations, and developer tools.

You can rename a note from its title and keep several notes open in tabs. A meeting note stays useful before, during, and after the call.

## Record a real meeting

Open a calendar event or create a note, then click **Join & record** or **Record** in the top-right corner. See [Record meetings](/meetings) for the full flow.

If Anarlog cannot hear the call, start with [audio troubleshooting](/troubleshooting#audio-is-missing).

---

### Agents Overview (`docs/agents/overview.mdx`)

---
title: "Agent overview"
description: "Give an agent useful Anarlog context without exposing storage internals or unbounded transcripts."
---

Anarlog gives agents three ways to access meeting context. The Anarlog plugin prefers the local CLI or local MCP when the agent can access your database. Remote agents use Cloud MCP through OAuth. Local CLI and MCP reads are bounded; both can also stage proposals for human review. Hosted Cloud API and remote MCP are read-only.

| Transport | Choose it when | Output |
| --- | --- | --- |
| CLI | The agent has shell access on your computer | Local reads by default; authenticated Cloud reads are optional; JSON with `--json` |
| Local MCP | The agent supports a local MCP server | Structured tool results and contextual resources from your database |
| Cloud MCP | The agent runs remotely or cannot access your local database | Hosted snapshots through OAuth; requires personal or paid-Team Pro access and explicit opt-in |

## Recommended agent flow

1. Honor an explicit source request. Otherwise, use local MCP or check local CLI readiness with `anarlog --json doctor`; use Cloud when local access is unavailable.
2. List recent meetings or search by a short title fragment. If a meeting is missing, check an already-connected alternate source unless the user restricted access.
3. Use a returned meeting ID. Never infer or invent one.
4. Fetch the meeting detail before requesting transcript text.
5. Fetch recurring history only when earlier meetings are relevant.
6. Read transcript pages only until the task has enough evidence.

Keep each meeting's reads on the source where it was found and label the source in the answer. Report database errors instead of silently falling back to Cloud.

## Freshness

Local reads work offline and include unsynced changes. They do not require Cloud Sync to finish. Cloud Sync is encrypted; Cloud API & Connectors uploads a separate readable snapshot after opt-in. Sync completion does not establish snapshot freshness.

Report freshness only when an interface provides it. A meeting's `updated_at` records a content change, not a completed sync or snapshot upload. If freshness matters and cannot be verified, say it is unknown.

## Safety boundary

Agents should use an Anarlog interface, not SQLite. The supported interfaces apply Anarlog's rules for canonical notes, generated summaries, excluded participants, recurring meetings, and transcript text.

Meeting reads stay bounded. An agent cannot apply a note or summary change. It can stage a proposal with CLI `proposals` commands or the local MCP `propose_*` tools. A human reviews the unified diff in the desktop app and applies or declines it. Hosted Cloud API and Cloud MCP stay read-only. CLI export can create a separate file; replacing a file requires `--force`.

Local CLI and MCP access stays on your computer. Cloud access uploads a separate server-readable copy of your meeting data. Review the [Cloud API disclosure](/reference/api-cloud) before enabling it.

<CardGroup cols={2}>
  <Card title="CLI for agents" icon="terminal" href="/agents/cli">
    Use JSON output and resolve meeting IDs deliberately.
  </Card>
  <Card title="MCP for agents" icon="plug" href="/agents/mcp">
    Run local stdio or connect a remote agent through OAuth.
  </Card>
  <Card title="Cloud API and remote MCP" icon="cloud" href="/reference/api-cloud">
    Enable hosted access and connect with OAuth or a connector key.
  </Card>
  <Card title="Webhooks" icon="webhook" href="/reference/webhooks">
    Receive signed meeting events at your endpoint.
  </Card>
</CardGroup>

---

### AGENTS (`docs/AGENTS.md`)

# Anarlog documentation instructions

## Scope

- This is the Mintlify project published at `https://docs.anarlog.so`.
- Write for Anarlog users, developers, and agents using the CLI or MCP server.
- Configuration lives in `docs.json`; content pages are MDX.
- The public agent skill is served from `skill.md`. Keep its workflow aligned with the packaged skill in `../skills/anarlog/`.

## Sources of truth

- Treat `apps/cli/src/cli.rs` as the CLI command contract.
- Treat `apps/cli/src/mcp.rs` as the MCP tool and resource contract.
- Treat current release automation as the source of truth for installation channels.
- Do not infer product behavior from the raw SQLite schema.

## Writing

- Use active voice and second person.
- Keep headings and sentences concise.
- Put the result before implementation detail.
- Use `Anarlog` for the product and `anarlog` for the executable.
- Use root-relative links between Mintlify pages. Use `https://docs.anarlog.so` in external instructions and agent metadata.

## Accuracy boundaries

- Document only commands, options, tools, resources, and output behavior present in the source.
- Mark planned features and distribution channels as forthcoming.
- Never describe Homebrew, standalone release binaries, or Windows package-manager installation as available until release automation publishes them.
- Document desktop-bundled CLI installation only for platforms whose release workflow includes the CLI sidecar and installer UI.
- Never tell users or agents to read, migrate, or modify the SQLite database directly.
- Keep transcript examples bounded. CLI and MCP transcript pages default to 200 words and cap at 500 words.

## Verification

- Check `docs.json` after adding or moving a page.
- Run `pnpm exec dprint fmt 'docs/**/*' 'skills/**/*'` from the repository root.
- Run `pnpm exec dprint check 'docs/**/*' 'skills/**/*'` before submitting.
- Run `mint validate` and `mint broken-links --check-anchors --check-redirects` from `docs/` before deploying.

---

### Ai Setup (`docs/ai-setup.mdx`)

---
title: "Transcription and AI"
description: "Choose how Anarlog turns audio into text and text into useful notes."
---

Anarlog uses two model settings:

- **Transcription** turns meeting audio into a transcript.
- **Intelligence** creates summaries and powers chat.

Open **Settings → Transcription** or **Settings → Intelligence** to choose a provider and model.

[Models and providers](/models-and-providers) explains the current Anarlog Cloud routes, built-in on-device models, and how bring-your-own-provider requests work.

## Choose a setup

<CardGroup cols={2}>
  <Card title="Anarlog Cloud" icon="cloud">
    Sign in and choose Anarlog for the quickest setup. Hosted models require a paid Anarlog plan.
  </Card>
  <Card title="On-device transcription" icon="laptop">
    Download Soniqo on a supported Apple Silicon Mac, use Apple Speech when macOS 26 reports it available, or choose **On-device file** to pick a whisper.cpp `.bin`.
  </Card>
  <Card title="Your API key" icon="key">
    Configure a provider, enter its API key, then select it under Model being used. API keys stay on this computer and do not sync to other devices.
  </Card>
  <Card title="Local language model" icon="server">
    Connect LM Studio, Ollama, or Unsloth, or use Apple Intelligence on an eligible Mac.
  </Card>
</CardGroup>

Models labeled **Live** show text during the meeting. Models labeled **After recording** transcribe after you stop.

To keep transcription, summaries, and chat on your computer, follow [Use Anarlog offline](/offline). For every on-device transcription path, see [How can I use on-device models?](/help#use-on-device-models). To compare on-device, Cloud, and bring-your-own-key cost, see [How can I compare the costs of all the transcription options?](/help#compare-transcription-costs).

## Subscription providers

You can use an existing paid plan for Intelligence without a separate API key. Open **Settings → Intelligence → Configure Providers** and connect **Claude**, **ChatGPT**, **Grok**, **GitHub Copilot**, or **Kimi Code**. After the connection finishes, select that provider under **Model being used**.

### Mobile summaries

In mobile 0.1.5 and later, open **Settings → Summary provider** to connect **ChatGPT subscription**, **Claude subscription**, **Grok subscription**, **GitHub Copilot subscription**, or **Kimi Code**. Complete the provider's sign-in or enter your Kimi Code membership API key, then choose a summary model.

Connect each device separately. A connection on your desktop does not sign in your phone, and subscription credentials stay in that device's secure storage rather than syncing with notes.

## Apple Intelligence

On an eligible Mac running macOS 26 or later:

1. Turn on Apple Intelligence in **System Settings** and wait for its model to finish downloading.
2. In Anarlog, open **Settings → Intelligence → Configure Providers → Apple Intelligence**.
3. Select **System Language Model** under **Model being used**.

<Note>
  Apple Intelligence support is experimental and currently handles text only.
</Note>

## LM Studio

1. Install [LM Studio](https://lmstudio.ai/download) and download a model.
2. Start its local server on port `1234` and enable CORS.
3. In Anarlog, open **Settings → Intelligence → Configure Providers → LM Studio**.
4. Select the LM Studio model under **Model being used**.

## Ollama

1. Install [Ollama](https://ollama.com/download).
2. Start it and pull a model:

   ```bash
   ollama serve
   ollama pull llama3.2
   ```

3. In Anarlog, open **Settings → Intelligence → Configure Providers → Ollama**.
4. Select the Ollama model under **Model being used**.

## Unsloth

1. Install [Unsloth Desktop](https://unsloth.ai/docs/desktop) and load a model.
2. Start its local server on port `8888` and copy the API key. It starts with `sk-unsloth-`.
3. In Anarlog, open **Settings → Intelligence → Configure Providers → Unsloth** and paste the API key.
4. Select the Unsloth model under **Model being used**.

Only models currently loaded in Unsloth appear in the list.

## What leaves your computer

Your app data remains local. Local transcription and local Intelligence providers process content on your computer. If you select Anarlog Cloud or another hosted provider, Anarlog sends the audio or text needed for that request to the selected provider.

See [Data, privacy, and retention](/data-and-privacy) for a feature-by-feature explanation.

---

### Automatic Capture (`docs/automatic-capture.mdx`)

---
title: "Automate meeting capture"
description: "Use calendar timing, microphone detection, and automatic stopping without losing control."
---

Anarlog can start an event-backed note at its scheduled time, remind you when another meeting app uses your microphone, and stop listening when the call ends.

## Start scheduled meetings automatically

Open **Settings → Meetings** and enable **Start when meeting begins**.

When a calendar-backed note reaches its scheduled start time, Anarlog starts listening. This setting does not apply to ordinary notes without a calendar event.

If another meeting is already recording, Anarlog skips the overlapping scheduled start. It does not queue that meeting to start after your current recording ends.

Anarlog discards empty automatic captures while preserving the calendar note and any content recorded on another device.

Enable **Join scheduled meetings** on the same page to open the meeting link when listening starts. That toggle stays disabled until **Start when meeting begins** is on.

Keep Anarlog running and make sure microphone and system-audio access are allowed. See [Connect a calendar](/calendar) if your events are not visible.

## Detect unscheduled calls

Open **Settings → Notifications** and enable **Microphone detection**. Anarlog watches for sustained microphone activity and notifies you that a meeting may have started.

Microphone detection is a reminder; it does not start recording by itself. Choose a detection delay from 5 seconds to 2 minutes, and exclude apps that should not trigger a meeting prompt.

Microphone detection is available on macOS and Linux. On macOS, Accessibility permission is required to detect meeting apps and synchronize mute state; manage it under **Settings → Permissions**. On Linux, enable the meeting toggles under **Settings → Meetings** and allow assistive-technology access for the desktop session when prompted.

## Stop when the call ends

Under **Settings → Meetings**, enable **Stop when meeting ends**. Anarlog stops listening when the meeting app releases the microphone.

This control is available on macOS and Linux.

<Warning>
  If you switch audio devices or use an app with unusual microphone behavior, automatic stop detection can misfire and end the recording early without warning. Check that the recording is still active before closing the meeting.
</Warning>

## Capture meeting chat

On macOS and Linux, **Settings → Meetings** also includes:

- **Post recording disclosure in meeting chat**, which tells participants when listening starts.
- **Capture meeting chat in Memos**, which saves visible chat from supported meetings. On macOS this uses Accessibility; on Linux it uses assistive-technology access.

These features are not available on Windows.

<Note>
  Posting a disclosure does not by itself confirm consent. Recording-consent rules depend on where you and the other participants are located; see [Record meetings](/meetings).
</Note>

## Keep controls nearby

Enable **Show floating bar** under **Settings → Meetings** to keep compact recording controls visible while Anarlog listens.

Event and microphone notifications can also respect your system's Do Not Disturb mode from **Settings → Notifications**.

---

### Automations (`docs/automations.mdx`)

---
title: "Automate meeting follow-up"
description: "Send recaps, create issues, update project notes, or export every meeting."
---

Automations run repeatable work when a meeting ends. They are part of Anarlog Pro.

## Use a starter

Open **Automations** and choose a starter from the sidebar:

| Starter | What it does | Configuration |
| --- | --- | --- |
| Share a meeting recap in Slack | Posts the meeting title and AI summary. | Connect Slack and choose a channel. |
| Update project notes in Notion | Appends a dated meeting update to a page. | Connect Notion and choose a page. |
| Turn action items into Linear issues | Creates issue drafts from assigned follow-ups. | Connect Linear and choose a team. |
| Export every meeting as Markdown | Writes the memo, summary, and transcript to a local file. | Choose an export folder. |

1. Select the starter.
2. Connect the service or choose the local folder it needs.
3. Review the trigger, source content, and result preview.
4. Click **Save & enable**.

An enabled starter runs after a meeting ends and the content it needs is ready. Disable it when you want to keep the setup without running it.

## Check whether it ran

The automation detail shows whether it is enabled and the result of its last run. A failed run includes a short error. Check the selected destination and reconnect the service when authorization has expired.

For Markdown exports, confirm that the chosen folder still exists and is writable. The local export does not need Slack, Notion, or Linear access.

## Choose Markdown export content

In a Markdown export action, choose any combination of **Memo**, **Summary**, **Transcript**, and **Collect action items**. Keep at least one section selected.

Leave **Filename** blank to use the meeting date and title, or enter a pattern such as `{date} {title}.md`. **Include meeting ID** adds a short ID suffix to distinguish similarly named meetings. Anarlog refuses to overwrite a file belonging to a different meeting or an unrelated file; choose another name if an export reports a collision.

These options belong to desktop Automations. CLI `meetings export` still exports a complete meeting and uses the output path you provide; it does not accept these automation settings.

## Build a custom workflow

Click **+** in the Automations sidebar to start a workflow. Add a trigger, then stack actions the way you would in Zapier:

1. Choose when it should run: after the meeting summary is ready, or after the meeting ends.
2. Add one or more actions: Slack recap, Notion update, Linear issues, or Markdown export.
3. Configure each destination.
4. Click **Save & enable**.

Enabled custom workflows run automatically, the same way starters do. Chat on the right can still help you refine the workflow; it is not required to make the automation run.

Examples:

- After the summary is ready, post to Slack and append the same recap to a Notion page.
- After the meeting ends, export Markdown and create Linear issues from action items.

<Warning>
  Automations send meeting content to the destination you configure. Use only workspaces, channels, pages, teams, and folders that should receive that content.
</Warning>

## Save summaries to Google Drive

Choose **Save meetings to Google Drive** under **Get started** to open the template.
Configure it and choose **Save draft** or **Save & enable**. Reopening the template
returns to the same configuration without creating another automation.
Or, in a custom workflow, choose **After the meeting summary is ready**, then add
**Save to Google Drive**. Connect your Google account and choose a folder in My
Drive or a shared drive where you can add files. Choose **Markdown (.md)** or
**Google Docs** as the file format, then enable the workflow. Existing workflows
continue to use Markdown.

Every note summarized after you enable the workflow is exported to that folder
as one file in the selected format containing its summary, transcript, title, date, and meeting
ID. Notes without a transcript include a message that no transcript is available.
Choose a collection folder that should receive all of these notes; this action
does not filter by Anarlog folder or automatically route projects.

Generating a summary again updates the existing export for that meeting and
folder and format. Changing formats keeps previous exports and uses the new
format on subsequent runs; it does not convert old exports in bulk. Renaming a note updates its exported filename. Anarlog owns the exported
file content, so a later export replaces edits made directly to that file.

The action shows the exported file link or its latest unresolved failure. Use
**Retry Google Drive export** to retry that delivery without replaying successful
Slack, Notion, or Linear actions. If the destination changes, generate the summary
again to export to the new folder. Changing the format also requires a new
summary run rather than retrying a delivery in the old format.

Google Docs retries search for an existing export before creating a document.
If a creation response is lost and Drive search has not indexed the document yet,
a retry can create a duplicate. There is no separate recovery queue or guarantee
of exactly-once creation.

Anarlog must be open to run the workflow. This action does not backfill older
notes or queue deliveries while the app is closed. It uses the same plan access
as other connected automation actions and sends the exported content through
Anarlog's integration API to Google Drive; CloudSync is not required.

---

### Calendar (`docs/calendar.mdx`)

---
title: "Connect a calendar"
description: "Bring upcoming meetings into Anarlog and start them from one place."
---

Open **Calendar** in the sidebar, add an account, and enable the calendars you want Anarlog to show. Connected events appear in the calendar and timeline.

Anarlog uses calendar events for titles, times, participants, reminders, and meeting links. It does not add a bot to your calls.

Google and Outlook connections are read-only. Anarlog reads calendar and event details to show upcoming events and associate them with your notes. It does not create, edit, or delete events in Google Calendar or Outlook.

## Apple Calendar

Apple Calendar is available on macOS.

1. Choose **Apple Calendar**.
2. Allow Calendar access when macOS asks.
3. Enable the calendars you want to see.

If access was denied, open **Settings → Permissions** in Anarlog. Use **Open** beside Calendar to change the macOS permission.

## Google Calendar

1. Sign in to Anarlog.
2. Choose **Google Calendar**, then finish authorization in your browser.
3. Return to Anarlog and enable the calendars you want to sync.

## Outlook Calendar

1. Sign in to Anarlog.
2. Choose **Outlook Calendar**, then finish authorization in your browser.
3. Return to Anarlog and enable the calendars you want to sync.

## Use calendar reminders

In Anarlog 1.4.29, a reminder for an event with a meeting link offers **Join & record**. This opens the meeting and starts listening. Use the arrow beside that action and choose **Open meeting** to join without starting a recording.

For an event without a meeting link, the reminder offers **Start recording**. Keep Anarlog running and allow microphone and system-audio access before recording.

## File meeting notes into folders

In Anarlog 1.4.29, open a calendar event and choose **Add to folder** to file its note. After filing a recurring meeting, choose **Auto-add** to put future meeting notes in the same folder. Open the event's folder menu to choose **Change auto-add folder** or **Stop auto-add**. Moving one meeting's note does not change the rule for future meetings. These folder rules stay on the device where you set them.

## Manage or delete connected calendar data

To control which calendars appear in Anarlog, open **Calendar**, expand the provider, and turn individual calendars on or off.

To disconnect Apple Calendar:

1. Open **Calendar**.
2. Hover over or right-click **Apple Calendar**.
3. Open **•••** and choose **Disconnect**.

This resets Anarlog's macOS Calendar access and removes Apple Calendar events from active views. Your notes remain.

To disconnect Google Calendar or Outlook Calendar:

1. Open **Calendar** and expand **Google** or **Outlook**.
2. Hover over or right-click the connected account heading.
3. Open **•••** and choose **Disconnect**.

Disconnecting stops future access and syncs. After Anarlog refreshes, the account's cached calendars and events disappear from active calendar views. Your notes and memos remain, including event context already associated with a note. The OAuth connection becomes inaccessible immediately and its stored credentials are scheduled for permanent deletion within 31 days.

You can also revoke Anarlog's access from your [Google Account connections](https://myaccount.google.com/connections), the [Microsoft My Apps portal](https://myapplications.microsoft.com) for a work or school account, or [Microsoft account app access](https://account.live.com/consent/Manage) for a personal account.

To permanently remove calendar-derived data retained on a Mac, you currently need to remove all local Anarlog app data from that Mac:

<Warning>
  This deletes Anarlog's entire local database on that Mac, not just calendar data — including notes, memos, summaries, and settings that have not been exported, synced, or shared elsewhere. Export anything you want to keep first, and contact us before deleting anything if you need help identifying the correct folder.
</Warning>

1. Export anything you want to keep, then quit Anarlog.
2. In Finder, choose **Go → Go to Folder**.
3. Move any of these folders that exist to Trash:
   - `~/Library/Application Support/anarlog`
   - `~/Library/Application Support/hyprnote`
   - `~/Library/Application Support/com.hyprnote.stable`
4. Empty Trash before reopening Anarlog.

This removes Anarlog's local database and settings on that Mac, including cached calendar data and event context stored with local records. It can also remove other Anarlog data stored in those folders. It does not delete files you exported or copies you chose to sync or share. You can request deletion of your Anarlog account and cloud-stored data at [team@fastrepl.com](mailto:team@fastrepl.com).

<Note>
  Google and Outlook connections are included with Anarlog Pro. Apple Calendar uses the calendar accounts already connected to your Mac.
</Note>

If events are missing, refresh the calendar list, confirm the calendar is enabled, and reconnect any account marked **Reconnect required**.

---

### Chat (`docs/chat.mdx`)

---
title: "Chat with your meetings"
description: "Ask questions, find related context, and review proposed note changes."
---

Anarlog Chat can answer questions about the open meeting, search your other meetings, and help turn a conversation into follow-up work. Chat uses the Intelligence model selected under **Settings → Intelligence**.

## Ask about the open meeting

1. Open a meeting note.
2. Open **Chat**.
3. Ask a question or choose a suggested prompt. The open meeting is added automatically when its content is available.

Useful requests include:

- “What are my action items from this meeting?”
- “Draft a follow-up email to the participants.”
- “What decisions did we make?”
- “Compare this meeting with the previous project review.”
- “Find meetings where we discussed the launch date.”

Chat can search meeting titles and content, recurring meeting history, contacts, and connected calendar events when the request needs them.

While a meeting is recording, suggested prompts can recap the last five minutes, suggest what to ask next, or list action items so far. After generating a summary, choose **Make shorter** or **Make longer** to adjust it.

Reasoning and tool steps appear in a single **Activity** row. Expand it to inspect the steps; a spinner shows when work is still running. Answers and proposed edits remain visible below it.

## Organize meetings

Ask Chat to list folders, create a folder, or move meetings into an existing folder. For example: “Move my launch review meetings into Projects/Launch.” Folder moves change where meetings appear; they do not merge or rewrite their contents. Chat reports meetings it moved, left unchanged, or could not move.

Folder management is available in desktop Chat. Local CLI/MCP writes remain limited to reviewed note proposals, and hosted MCP remains read-only.

Conversation dates appear above the messages. Hover over a message to see its time.

## Guide the context

Chat uses the open meeting automatically and can add other meetings, people, and records when your request needs them. You can also drag another meeting into Chat to include it in your next message.

The app does not show this context as removable chips. Name the meeting or person in your request when similarly named records could be confused, or say “Use only this meeting” to keep the answer scoped. Start a new chat when you want a clean conversation without the earlier message history.

## Review proposed changes

Chat can propose a summary edit or transcript correction. Review the proposed change before you apply it. A proposal does not silently replace your note.

For direct transcript editing, speaker reassignment, and re-transcription, see [Notes, summaries, and transcripts](/notes#correct-a-transcript).

## Privacy and external search

Chat sends the prompt and required context to your selected Intelligence provider. A local provider keeps that model request on your computer. A hosted provider receives the text needed to answer.

<Warning>
  Chat can also search the public web when a request needs current external information. The search query leaves your device even if your Transcription and Intelligence models are local. See [Data, privacy, and retention](/data-and-privacy) before using sensitive context with hosted models or web search.
</Warning>

---

### Contacts (`docs/contacts.mdx`)

---
title: "Contacts and CRM"
description: "Connect a CRM and fill missing contact details from a matching record."
---

Anarlog keeps people and organizations together with your meeting notes. You can connect a CRM to look up a contact when you need more detail.

## Connect a CRM

1. Sign in to Anarlog and open **Settings → CRM**.
2. Choose **Connect** beside HubSpot, Attio, or Pipedrive, then finish authorization in your browser.
3. Return to Anarlog. Use **Test** beside the connected CRM to check that contact lookup works. If the connection needs attention, choose **Reconnect**.

Connections are managed through your Anarlog account. You can disconnect one from **Settings → CRM**.

Close connections are not yet available. Salesforce connections currently require an installed Anarlog client app; customer installation support is still being prepared.

## Fill in a contact

Open a contact and choose **Enrich** in the toolbar. Anarlog looks for a matching record in your connected CRMs and reports which one it found. It fills only empty name, email, company, job title, phone, and LinkedIn fields; details you already entered stay as they are.

If no CRM is connected, **Enrich** stays unavailable until you connect one in Settings › CRM. If no match is found, check the contact's name or email and try again.

## Multiple email addresses

A contact can hold several email addresses. Open the contact and choose **Add email** under the Email field to add another address; each additional address can be edited or removed individually. The first email stays the primary address shown and copied elsewhere.

Anarlog matches contacts by all of their email addresses — calendar attendees, session participants, and contact search all recognize every address on the contact. Merging duplicate contacts keeps both contacts' emails: the duplicate's address is preserved as an additional email.

---

### Customize Summaries (`docs/customize-summaries.mdx`)

---
title: "Customize meeting summaries"
description: "Choose a named format or customize how Auto writes meeting summaries."
---

Use a named template when you want fixed sections. Customize Auto when you want to control Anarlog's default summary prompt.

## Choose a template

Open a meeting and use the template picker beside **Summary**. Templates can emphasize decisions, action items, a one-on-one format, or another structure.

Changing the selected template does not rewrite an existing summary automatically. Regenerate the summary to apply the new template.

## Customize Auto

1. Open **Settings → Templates**.
2. Select **Auto**.
3. Edit **Summary format**, then click **Save**.

For example:

```text
Start with decisions. Then list action items with an owner and due date. Keep background context to three bullets.
```

The editor controls the requested format. You can request paragraphs, bullets, or a mixture, including an executive overview. Summaries include detailed coverage by default. After generating a summary, use **Make shorter** or **Make longer** in Chat to adjust its length.

Meeting notes, transcript, session details, and participants are always sent separately. Editing the format cannot remove that source material.

The Auto prompt applies only when **Auto** is selected. Named templates continue to use their configured sections and do not inherit the Auto customization. Use **Reset to default format** to restore the built-in prompt.

## Improve names and specialized terms

Under **Settings → Dictionary**, add names, acronyms, product names, and other terms that transcription often gets wrong.

The dictionary helps recognition, but it does not replace choosing the correct spoken languages or a model that supports them. See [Languages](/languages) for multilingual meetings.

## Apply your changes

New summaries use the currently selected format. Regenerate an older summary when you want it to use the latest template or Auto prompt.

---

### Data And Privacy (`docs/data-and-privacy.mdx`)

---
title: "Data, privacy, and retention"
description: "Understand what stays on your computer, what can leave it, and how long audio is kept."
---

Anarlog stores its app data on your computer and captures meetings without adding a bot to the call. Data leaves your computer only when you use a connected or hosted feature that needs it.

Security, legal, and procurement teams should use the [security page](https://anarlog.so/security) for encryption, processors, retention, and the evaluation packet. A hosted trust center comes later, when certification programs start.

## What stays on your computer

Your notes, local transcripts, settings, recordings you choose to keep, and downloaded local models are stored locally. You can write notes, record audio, and use configured local models without sending meeting content to Anarlog Cloud.

[Cloud Sync](/sync#what-cloud-sync-replicates) can copy encrypted notes to your other signed-in devices. Transcription and Intelligence API keys, model selections, calendar connections, and most other settings stay on the computer where you set them.

<Warning>
  Do not edit the app database directly — this can corrupt your notes. Use Anarlog's export tools when you need a portable copy.
</Warning>

## When content is sent elsewhere

The destination depends on the feature you choose:

- A hosted **Transcription** provider receives the audio needed to create a transcript.
- A hosted **Intelligence** provider receives the text and instructions needed to create a summary or chat response.
- Connected calendars send the calendar and event details needed to show upcoming events and associate them with your notes.
- [Cloud Sync](/sync#what-cloud-sync-replicates) sends end-to-end encrypted notes to keep your devices up to date. Anarlog cannot read the recovery key. API keys and most settings stay on each device.
- [Sharing](/sharing) uploads the generated summary and any audio you explicitly include. Your private memo is not part of the shared note.
- [Chat](/chat) sends the prompt and required context to your selected Intelligence provider. Public web search also sends the search query to the search service.
- [Cloud API & Connectors](/reference/api-cloud), when you explicitly enable it, uploads a separate server-readable copy of meeting titles, notes, summaries, participants, action items, and transcripts so remote agents can work while your desktop is offline. Turning it off deletes those copies.

Anarlog Cloud, your own API-key providers, and local providers are separate choices. Review the provider's own retention and training policies before sending sensitive content.

See [Models and providers](/models-and-providers) for the current Anarlog Cloud routes and how direct provider requests work.

## Keep a meeting fully local

1. Select an on-device model under **Settings → Transcription**.
2. Select LM Studio, Ollama, Unsloth, or eligible Apple Intelligence under **Settings → Intelligence**.
3. Avoid cloud sync, share links, Cloud API & Connectors, and hosted providers for that content.

See [Use Anarlog offline](/offline) for the full setup.

## Choose how long audio is kept

Open **Settings → Meetings** and find **Audio file retention** under **Audio**. Choose:

- **Don't save**
- **1 day**
- **3 days**
- **1 week**
- **1 month**
- **Forever**

<Warning>
  Once the retention period passes, the audio is gone for good — the meeting note and transcript remain, but the recording does not. If you need the recording later, right-click the meeting in the sidebar, choose **Show in Finder**, and copy the audio before its retention period ends.
</Warning>

Anarlog uses bounded temporary audio while recording to recover gaps caused by interrupted transcription. Temporary audio is removed after recovery or cleanup; **Don't save** removes recording audio when capture stops. If cleanup fails, Anarlog reports the failure and retries instead of claiming the audio was deleted. Once audio is gone, an incomplete transcript cannot be repaired from that audio.

## Turn off usage analytics

Open **Settings → Privacy** and disable **Share usage data (PostHog)**. This controls product analytics and desktop session replay, not the meeting content sent to a provider you selected.

Disable **Error** on the same page to stop sending sanitized crash and error reports.

<Warning>
  Recording-consent rules depend on where you and the other participants are located. Make sure you have permission before recording.
</Warning>

---

### Desktop Installation (`docs/desktop-installation.mdx`)

---
title: "Install the desktop app"
description: "Choose the right Anarlog build for macOS, Windows, or Linux."
---

[Download Anarlog](https://anarlog.so/download) to get the latest stable desktop release. The download page offers every supported platform from the same release.

## Choose the right build

| Platform | Build | Notes |
| --- | --- | --- |
| macOS | Apple Silicon DMG | For Macs with an M-series chip. Requires macOS 15 or later. |
| macOS | Intel DMG | For Intel-based Macs. Requires macOS 15 or later. |
| Windows | Windows x64 EXE | For 64-bit Windows PCs. Windows support is in beta. |
| Windows | Microsoft Store | For Windows 10 and 11. Windows support is in beta. |
| Linux | x64 or ARM64 AppImage | Portable build. Linux support is in beta. |
| Linux | x64 or ARM64 DEB | For Debian, Ubuntu, and compatible distributions. Linux support is in beta. |
| Linux | Arch Linux PKGBUILD | For x64 or ARM64 Arch-based distributions. Linux support is in beta. |

On a Mac, open **Apple menu → About This Mac** if you do not know whether it uses an Apple or Intel chip.

## macOS

1. Download the DMG that matches your Mac.
2. Open the DMG and move Anarlog to **Applications**.
3. Open Anarlog and follow the setup screen.
4. Allow microphone, system audio, and calendar access when you want to use those features.

## Windows

1. Download the **Windows x64** installer or [get Anarlog from Microsoft Store](https://apps.microsoft.com/detail/XPDLN196NKSW10).
2. For the direct download, run the EXE and follow the installer. Microsoft Store handles installation and updates automatically.
3. Open Anarlog and complete setup.
4. Allow microphone and system-audio access when prompted.

## Linux

### APT repository

On Debian, Ubuntu, or a compatible distribution, add Anarlog's signed repository to get updates through APT:

```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://anarlog.so/apt/anarlog-archive-keyring.asc \
  | sudo tee /etc/apt/keyrings/anarlog.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/anarlog.asc

sudo tee /etc/apt/sources.list.d/anarlog.sources > /dev/null <<'EOF'
Types: deb
URIs: https://anarlog.so/apt
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/anarlog.asc
EOF

sudo apt update
sudo apt install anarlog
```

APT verifies the repository metadata with the dedicated Anarlog archive key. New stable releases become available through the normal `apt upgrade` flow.

### Downloaded DEB

To install a downloaded package directly:

```bash
sudo apt install ./anarlog-*.deb
```

### AppImage

For an AppImage, make it executable and open it:

```bash
chmod +x ./anarlog-*.AppImage
./anarlog-*.AppImage
```

On Wayland with an NVIDIA GPU, if the window is black or only audio plays, launch with:

```bash
WEBKIT_DISABLE_DMABUF_RENDERER=1 ./anarlog-*.AppImage
```

If the window is still black, also disable compositing:

```bash
WEBKIT_DISABLE_DMABUF_RENDERER=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 ./anarlog-*.AppImage
```

Current builds apply the DMA-BUF workaround automatically. Set the variables yourself only if a black window remains.

### Arch Linux

Build the maintained `anarlog-bin` package with `makepkg`:

```bash
git clone https://github.com/fastrepl/anarlog.git
cd anarlog/packaging/aur/anarlog-bin
makepkg -si
```

The PKGBUILD downloads the stable DEB for your architecture, verifies its checksum, and installs it through pacman.

## Platform differences

- Apple Calendar integration is available on macOS. Google Calendar works through your Anarlog account on every supported platform.
- Soniqo, Apple Speech, and On-device file transcription require Apple Silicon. Apple Speech also appears only when a compatible Mac running macOS 26 reports the required system assets. On other systems, choose Anarlog Cloud or configure a supported transcription provider. See [how to use on-device models](/help#use-on-device-models) and [local models for hour-long calls](/help#local-model-hour-long-calls).
- Windows and Linux support are in beta. Include your operating system and Anarlog version when you report a platform-specific problem.
- Mobile beta testing is available through [TestFlight](https://testflight.apple.com/join/y7WJCXvG) on iOS and [Google Play beta](https://play.google.com/apps/testing/so.anarlog.mobile) on Android.

When installation is complete, continue to [Your first meeting](/quickstart). If the app does not open or cannot capture audio, see [Troubleshooting](/troubleshooting).

## Nightly

Anarlog Nightly is no longer published and does not receive updates. Install
the [stable app](https://anarlog.so/download/) and quit Nightly before opening
it: both apps use the same local notes database, and Anarlog does not open while
the other app is running. Sign-in and app settings stay separate per app.

If stable shows an update prompt instead of opening your notes, Nightly already
updated the database format. Keep using Nightly until a stable release includes
that change. Your data is not modified by the older app.

<Warning>
  Use matching stable versions on all devices connected to cloud sync. Older
  builds may not read records written by a newer Nightly. Do not reset your notes
  or recovery key to resolve a version mismatch; see [Cloud sync troubleshooting](/sync).
</Warning>

If you installed the bundled CLI from Nightly, its command is `anarlog-nightly`;
`anarlog` uses stable.

---

### Dictation (`docs/dictation.mdx`)

---
title: "Dictate into other apps"
description: "Use a keyboard shortcut to turn speech into text in the focused field."
---

Dictation is part of Anarlog Pro. Keep Anarlog running, focus a text field in another app, and use your shortcut to speak instead of type. This does not create a meeting note.

## Set up dictation

1. Open **Settings → Dictation** and enable dictation.
2. Record your preferred shortcut and choose a microphone.
3. Use **Language & transcription** to choose the language and Transcription provider. Hosted providers receive your audio; a supported local provider keeps transcription on your computer.
4. Allow microphone access and any permissions requested under **Settings → Permissions**. On macOS, text insertion needs Accessibility permission.
5. Click the **Try dictation** field in Settings and test the shortcut.

Hold the shortcut while speaking and release it to finish. With **Hands-free dictation** enabled, press once to start and again to finish. Text is inserted when transcription finishes. **Live transcript preview** shows words in the floating panel when the selected provider supports a live connection.

Dictation stops after five minutes and pauses while Anarlog records a meeting. Press Escape to cancel; on Wayland, use Control + Alt + Escape.

## If insertion fails

Keep the original text field focused until dictation finishes. If the target changed or the app cannot insert text, open **Settings → Dictation** and choose **Copy last dictation**, then paste it yourself. The last transcript stays in memory until you disable dictation or quit Anarlog.

On Linux, approve the desktop's shortcut prompt on Wayland. The target app must expose an editable accessibility field; password fields are excluded. Clear a selected text range before dictating, or use the copy action to replace it yourself.

Dictation is a desktop interaction. The CLI and MCP interfaces do not start dictation or insert text into other apps.

---

### Help (`docs/help.mdx`)

---
title: "Frequently asked questions"
description: "Answers about recording, transcription cost, languages, local models, privacy, sharing, sync, and developer tools."
---

Browse a topic, then expand the question. If something is not working, go to [Troubleshooting](/troubleshooting). For a question not covered here, email [team@fastrepl.com](mailto:team@fastrepl.com) or [join Discord](https://discord.gg/Vk882WS3gF).

## Transcription and cost

<AccordionGroup>
  <Accordion title="How can I compare the costs of all the transcription options?" id="compare-transcription-costs">
    Anarlog has three cost models. Compare those first, then compare providers inside the one you choose.

    | Option | What you pay | When to use it |
    | --- | --- | --- |
    | On-device | Nothing extra after you download the model | Apple Silicon Mac, and you want no usage bill |
    | Anarlog Cloud | [Pro](https://anarlog.so/pricing) at $14/month or $140/year | Hosted transcription without managing API keys |
    | Your API key | The provider's own speech-to-text rates | You already have credits, a preferred vendor, or a required endpoint |

    On-device and bring-your-own-key transcription stay on the Free plan. Cloud transcription is a Pro feature.

    For a bring-your-own-key provider:

    1. Open **Settings → Transcription → Configure Providers**.
    2. Open that provider's **Available models** and **API setup** links.
    3. On the provider's pricing page, compare live vs after-recording rates, language coverage, speaker labels, and any free tier.
    4. Select the model under **Model being used** and run a short test meeting.

    Anarlog does not publish a live price table for third-party providers because those rates change. [OpenRouter](https://openrouter.ai/models?output_modalities=transcription) is one key that can reach several after-recording models if you want a single bill to compare.

    See [How can I use on-device models?](/help#use-on-device-models), [Models and providers](/models-and-providers), and [Transcription and AI](/ai-setup).
  </Accordion>

  <Accordion title="Is there a reliable local model that can handle hour-long calls?" id="local-model-hour-long-calls">
    On an Apple Silicon Mac, yes — transcribe after the meeting with **Soniqo → Parakeet Batch**. That built-in model adds speaker labels for 25 European languages and is the on-device option meant for long calls.

    Other local choices on the same Mac:

    - **Soniqo → Parakeet Streaming** shows text during the meeting. Use Batch when you care more about finishing a long recording than seeing live captions.
    - **On-device file** runs a downloaded whisper.cpp `.bin` model after recording. transcribe.cpp `.gguf` files are not supported yet.
    - **Apple Speech** is live-only and available when macOS 26 reports compatible system assets. It transcribes one supported language at a time.

    Built-in on-device transcription is not available on Windows, Linux, or Intel Macs. On those systems, use a Deepgram-compatible local server, Anarlog Cloud, or a bring-your-own-key provider. After-recording hosted models handle hour-long audio. Some live models have short session limits — for example, Gemini 3.5 Transcribe Live preview sessions last up to 10 minutes.

    Quality and speed depend on the computer. Run a short test recording before a long call. See [How can I use on-device models?](/help#use-on-device-models) and [Use Anarlog offline](/offline).
  </Accordion>

  <Accordion title="Can I replace Granola on Windows?" id="replace-granola-on-windows">
    Yes. Download the Windows x64 build and record from the desktop without a meeting bot. Windows support is in beta.

    Expect these differences from a Mac setup:

    - Built-in on-device transcription is not available. Choose Anarlog Cloud, a Deepgram-compatible local server, or another configured provider. See [How can I use on-device models?](/help#use-on-device-models).
    - Microphone detection, auto-stop, and meeting-chat capture are macOS and Linux only.
    - You can [import Granola meeting history](/imports) from an official export.

    See [Install the desktop app](/desktop-installation).
  </Accordion>
</AccordionGroup>

## Recording and notes

<AccordionGroup>
  <Accordion title="Does Anarlog join the call?" id="does-anarlog-join-the-call">
    No. Anarlog captures your microphone and computer audio from the desktop without adding a meeting bot. See [Record meetings](/meetings).
  </Accordion>

  <Accordion title="Can recording start automatically?" id="can-recording-start-automatically">
    Yes. Anarlog can start calendar-backed meetings on schedule and prompt you when it detects an unscheduled call. Manage scheduled meeting controls under **Settings → Meetings** and microphone detection under **Settings → Notifications**. Microphone detection, auto-stop, and meeting-chat capture are available on macOS and Linux, not Windows. See [Automatic capture](/automatic-capture).
  </Accordion>

  <Accordion title="Can I edit a transcript or fix a speaker?" id="can-i-edit-a-transcript-or-fix-a-speaker">
    Yes. Use **Write** to edit transcript text. Select text or a speaker label to assign the correct person, create a speaker, or apply the change to every matching segment. See [Correct a transcript](/notes#correct-a-transcript).
  </Accordion>

  <Accordion title="Can I add more audio to an existing note?" id="can-i-add-more-audio-to-an-existing-note">
    Yes. Right-click **Transcript** and choose **Resume listening**. The new recording stays in the same meeting note.
  </Accordion>

  <Accordion title="Can I import older meetings?" id="can-i-import-older-meetings">
    Yes. Upload one audio, SRT, or VTT file to an empty note, or use **Settings → Imports** for meeting-history exports from another assistant. See [Import audio or a transcript](/import-recordings) and [Import meeting history](/imports).
  </Accordion>
</AccordionGroup>

## AI, offline use, and privacy

<AccordionGroup>
  <Accordion title="How can I use on-device models?" id="use-on-device-models">
    Anarlog can transcribe without sending audio to Anarlog Cloud. Open **Settings → Transcription** and pick the path that matches your computer.

    | Path | What you select | When it runs | Requirements |
    | --- | --- | --- | --- |
    | Built-in Soniqo | **Soniqo**, then Parakeet Streaming, Parakeet Batch, or another listed Soniqo model | Live or after recording, depending on the model | Apple Silicon. Download the model first. Prefer **Parakeet Batch** for hour-long calls. |
    | Apple Speech | **Apple Speech** | During the meeting | macOS 26 with a supported language added in System Settings. One language at a time. |
    | On-device file | **On-device file**, then **Choose a .bin model** | After recording | Apple Silicon. Use a whisper.cpp `.bin` you already have. transcribe.cpp `.gguf` files are not supported yet. |
    | Local Deepgram-compatible server | **Custom**, or **Deepgram** with a custom **Base URL** under **Advanced** | Live or after recording, depending on the server | A Deepgram-compatible endpoint on this computer or your local network. Enter that URL and an API key if the server requires one. |

    Soniqo, Apple Speech, and On-device file appear only on a supported Apple Silicon Mac. On Windows, Linux, or Intel Macs, use a local Deepgram-compatible server, Anarlog Cloud, or another configured provider.

    Summaries and chat are a separate setting. For those to stay local too, choose LM Studio, Ollama, Unsloth, or eligible Apple Intelligence under **Settings → Intelligence**.

    See [Models and providers](/models-and-providers), [Use Anarlog offline](/offline), and [Is there a reliable local model that can handle hour-long calls?](/help#local-model-hour-long-calls).
  </Accordion>

  <Accordion title="Can I use Anarlog offline?" id="can-i-use-anarlog-offline">
    Yes, if you prepare local models before disconnecting. Soniqo, Apple Speech, and On-device file transcription require a supported Apple Silicon Mac; Apple Speech also needs macOS 26 to report compatible system assets. LM Studio, Ollama, Unsloth, and eligible Apple Intelligence can provide local Intelligence models. See [Use Anarlog offline](/offline) and [How can I use on-device models?](/help#use-on-device-models).
  </Accordion>

  <Accordion title="What languages does Anarlog support?" id="supported-languages">
    **Settings → General → Language & Region** lets you choose a main language and additional spoken languages from this list:

    Arabic, Belarusian, Bulgarian, Bangla, Bosnian, Catalan, Czech, Danish, German, Greek, English, Spanish, Estonian, Persian, Finnish, French, Hebrew, Hindi, Croatian, Hungarian, Indonesian, Italian, Japanese, Kannada, Korean, Lithuanian, Latvian, Macedonian, Marathi, Malay, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Serbian, Swedish, Tamil, Telugu, Thai, Filipino, Turkish, Ukrainian, Urdu, Vietnamese, and Chinese.

    The selected Transcription model must support those languages. Coverage today:

    | Selection | Languages |
    | --- | --- |
    | Anarlog Cloud | Routes to a provider that supports the languages you selected. The Settings list is the Cloud picker. |
    | Soniqo | Bulgarian, Czech, Danish, German, Greek, English, Spanish, Estonian, Finnish, French, Croatian, Hungarian, Italian, Lithuanian, Latvian, Maltese, Dutch, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Swedish, and Ukrainian |
    | Apple Speech | German, English, Spanish, French, Italian, Japanese, Korean, Portuguese, Cantonese, or Chinese — one language at a time |
    | On-device file | The whisper.cpp `.bin` you select. Check that model's language list. |
    | Your API key | The provider and model you configure. Check that model's language list before a multilingual meeting. |

    Chat uses the main language. When you configure additional spoken languages, summaries use the language used most in the transcript, falling back to the main language if detection is unavailable. See [Use multiple languages](/languages).
  </Accordion>

  <Accordion title="Which AI models does Anarlog use?" id="which-ai-models-does-anarlog-use">
    There is no single hidden model. Your Transcription selection handles audio, and your Intelligence selection handles summaries, titles, and chat. Anarlog Cloud currently routes transcription by language and mode and offers Auto routing or a curated Cloud Intelligence model choice. See [Models and providers](/models-and-providers) for the current routes and local options.
  </Accordion>

  <Accordion title="Where is my data stored?" id="where-is-my-data-stored">
    Anarlog stores app data locally by default. Hosted AI, calendars, sync, sharing, and the optional Cloud API receive the content needed for the feature you enable. See [Data, privacy, and retention](/data-and-privacy). Enterprise security reviews should start at the [security page](https://anarlog.so/security).
  </Accordion>

  <Accordion title="Does Anarlog train on my meetings?" id="does-anarlog-train-on-my-meetings">
    The answer depends on the provider you choose. Local providers keep the model request on your computer. For Anarlog Cloud or a bring-your-own-key provider, review that provider's retention and training policy before sending sensitive content.
  </Accordion>

  <Accordion title="Can a meeting use multiple languages?" id="can-a-meeting-use-multiple-languages">
    Yes. Choose your main language and add every spoken language you expect. The selected Transcription model must support them. See [Languages](/languages).
  </Accordion>
</AccordionGroup>

## Sharing, sync, and automation

<AccordionGroup>
  <Accordion title="What gets shared with another person?" id="what-gets-shared-with-another-person">
    Anarlog shares the generated summary, not your private memo. Retained audio is optional and must be included separately. Sharing is a Pro feature. See [Share meetings](/sharing).
  </Accordion>

  <Accordion title="Can Anarlog recover my sync recovery key?" id="can-anarlog-recover-my-sync-recovery-key">
    Anarlog cannot read or recover your sync key. Keep any recovery key you saved during setup. See [Recovery keys](/sync#recovery-keys) for key storage and recovery options.
  </Accordion>

  <Accordion title="Do my API keys sync to another device?" id="do-my-api-keys-sync-to-another-device">
    No. Cloud Sync copies encrypted notes, not Transcription or Intelligence API keys. Enter each key again on the new computer, then select those models in Settings. See [What Cloud Sync replicates](/sync#what-cloud-sync-replicates).
  </Accordion>

  <Accordion title="Can I automate follow-up work?" id="can-i-automate-follow-up-work">
    Yes, with Anarlog Pro. Built-in starters can post a Slack recap, update a Notion page, create Linear issues, or export each meeting as Markdown. See [Automate meeting follow-up](/automations).
  </Accordion>
</AccordionGroup>

## Platforms and developer tools

<AccordionGroup>
  <Accordion title="Which desktop platforms are supported?" id="which-desktop-platforms-are-supported">
    Anarlog supports macOS 15 or later. Windows x64 and Linux x64 or ARM64 builds are available in beta. See [Install the desktop app](/desktop-installation).
  </Accordion>

  <Accordion title="Is there a mobile app?" id="is-there-a-mobile-app">
    Yes. Try the mobile beta through [TestFlight](https://testflight.apple.com/join/y7WJCXvG) on iOS or [Google Play beta](https://play.google.com/apps/testing/so.anarlog.mobile) on Android.
  </Accordion>

  <Accordion title="Can agents reach my meetings while Anarlog is closed?" id="can-agents-reach-my-meetings-while-anarlog-is-closed">
    The CLI and local MCP server read the local database, so they work while the app is closed. They can also stage a memo or summary proposal; review the **pending edit** banner in the desktop meeting note before applying it. Webhooks only deliver while the app is open. For hosted access from anywhere, explicitly enable [Cloud API & Connectors](/reference/api-cloud).
  </Accordion>
</AccordionGroup>

---

### Import Recordings (`docs/import-recordings.mdx`)

---
title: "Import audio or a transcript"
description: "Turn an existing recording or subtitle file into an Anarlog meeting note."
---

You can use Anarlog with a conversation that was recorded elsewhere. Import audio to create a new transcript, or import an existing transcript to create a summary.

To move many existing meetings from another meeting assistant, use [Import meeting history](/imports) instead.

## Import audio

1. Create a **New Note** or open an empty note.
2. Open the **•••** menu and choose **Upload audio**.
3. Select a supported audio file.
4. Leave Anarlog open while it imports and transcribes the recording.

You can also drag one audio file onto an open note.

Anarlog accepts WAV, MP3, OGG, MP4, M4A, FLAC, WebM, and AAC files. It uses your selected **Transcription** model, so configure that model before importing.

When transcription finishes, Anarlog creates a summary if an **Intelligence** model is configured.

## Import a transcript

1. Create a **New Note** or open an empty note.
2. Open the **•••** menu and choose **Upload transcript**.
3. Select a WebVTT (`.vtt`) or SubRip (`.srt`) file.

Anarlog adds the timed text to the note and generates a summary when an Intelligence model is available. Importing a transcript does not create an audio recording.

## If an import does not start

Confirm that the file uses one of the supported formats and that a Transcription model is selected for audio imports. For local or bring-your-own-key providers, make sure the provider is running and configured.

See [Transcription and AI](/ai-setup) for model setup or [Troubleshooting](/troubleshooting) for common failures.

---

### Imports (`docs/imports.mdx`)

---
title: "Import meeting history"
description: "Bring notes and transcripts from another meeting assistant into Anarlog."
---

Meeting-history import turns official exports from another meeting assistant into Anarlog notes. It is designed for moving a library of past meetings, not for uploading one recording.

<Note>
  To import one audio, SRT, or VTT file, use [Import audio or a transcript](/import-recordings).
</Note>

## Import exported meetings

1. Export your meetings from the original assistant.
2. Open **Settings → Imports** in Anarlog.
3. Find the detected assistant and click **Import**.
4. Select one or more JSON, CSV, Markdown, text, VTT, or SRT export files.
5. Review the result shown when the import finishes.

Anarlog detects supported meeting-assistant apps installed on your computer. Supported sources include Granola, Circleback, Fireflies.ai, Fathom, Krisp, Otter.ai, Notion AI Meeting Notes, Zoom, Microsoft Teams, Google Meet, Webex, Plaud, Pocket, ChatGPT Record, Slack Huddles, and others.

For assistants that support a direct connection (OAuth, MCP, or a local CLI such as Plaud), choose **Connect**. Anarlog signs in through the official integration — for Plaud it runs `plaud` on your machine, and for Pocket it uses the official MCP server — and keeps importing new meetings while it is running.

For Zoom requirements, connection steps, and removal instructions, see [Import Zoom meetings](/zoom).

The exact content depends on the source export. Anarlog keeps supported titles, dates, notes, summaries, transcripts, speakers, and participants when those fields are available.

## Understand the result

The result separates meetings into four groups:

- **Imported** meetings were added as new notes.
- **Matched** meetings were already present and were left unchanged.
- **Conflicts** need review because Anarlog could not safely choose between versions.
- **Errors** could not be read or converted.

You can select the same export again. Meetings that still match are not duplicated.

## What is not imported

Meeting-history import reads text-based exports. It does not copy the original audio or video.

If you only have an audio recording, [upload the audio to an empty note](/import-recordings#import-audio) and let your selected Transcription model process it.

## If your assistant is missing

Anarlog lists assistants it detects on your computer. Open or reinstall the source app, restart Anarlog, and check **Settings → Imports** again. You can also export to SRT or VTT and [import the transcript directly](/import-recordings#import-a-transcript).

See [Troubleshooting](/troubleshooting#meeting-history-import-shows-no-apps) if no supported app appears or an export fails.

---

### Installation (`docs/installation.mdx`)

---
title: "CLI installation"
description: "Install the current Anarlog CLI and point it at local meeting data."
---

## Current availability

The `anarlog` executable includes both the CLI and the local MCP server.

<Warning>
  Homebrew, standalone release binaries, and Windows package-manager distribution are forthcoming. Do not rely on those channels yet.
</Warning>

## Install from the desktop app

Open **Settings → Developers** and select **Install** (or **Reinstall**). Direct-download desktop builds copy the bundled CLI onto your PATH.

| Platform | Installed command | Path |
| --- | --- | --- |
| macOS | `anarlog` | `~/.local/bin/anarlog` |
| Linux (DEB / AppImage) | `anarlog` | `~/.local/bin/anarlog` |
| Windows | `anarlog` | `%LOCALAPPDATA%\Anarlog\bin\anarlog.exe` (added to your user PATH) |

On macOS and Linux, add `~/.local/bin` to `PATH` if your shell cannot find `anarlog`:

```bash
export PATH="$HOME/.local/bin:$PATH"
```

On Windows, open a new terminal after installing so the PATH update applies.

<Note>
  The Mac App Store build does not include bundled CLI installation. Use [build from source](#build-from-source) instead.
</Note>

## Build from source

To build the CLI yourself instead:

```bash
git clone https://github.com/fastrepl/anarlog.git
cd anarlog
cargo install --locked --path apps/cli
anarlog --version
```

`cargo` installs the executable into its configured binary directory, normally `~/.cargo/bin`. Add that directory to `PATH` if your shell cannot find `anarlog`.

## Connect to local data

By default, the CLI looks for `anarlog/app.db` in your operating system's application-data directory. It also recognizes legacy Anarlog locations.

Open the desktop app once so it can create the database. After that, the CLI and local MCP server work while the app is closed.

For a custom database location, pass a global option or environment variable:

```bash
anarlog --db-path /path/to/app.db --json meetings list
ANARLOG_DB_PATH=/path/to/app.db anarlog --json meetings list
```

If you have an Anarlog data directory containing `app.db`, use:

```bash
anarlog --base /path/to/anarlog-data --json meetings list
```

The CLI opens the database in read-only query mode for meeting reads. Proposal create and decline commands, and `anarlog mcp`, open the same file for writes so they can stage or discard pending edits. They do not create a database or run migrations.

---

### Languages (`docs/languages.mdx`)

---
title: "Use multiple languages"
description: "Choose the language for AI output and tell transcription which languages to expect."
---

Anarlog separates the language used for summaries and chat from the languages it should expect in a conversation.

## Choose the main language

Open **Settings → General** and choose **Main language** under **Language & Region**.

Anarlog uses the main language for chat and as the default for summaries. It is also always included as a transcription language.

When you add spoken languages, Anarlog checks the transcript and writes the summary in the language used most among your selected languages. Generated titles follow the summary. If detection is unavailable, Anarlog uses your main language.

In desktop 1.4.30 and later, turn on **Use main language for summaries** under **Main language** to write summaries in your main language even when the meeting uses another selected language. This option is off by default and does not remove your additional transcription languages. Leave it off to keep automatic summary language detection.

Changing the main language does not translate an existing transcript. Regenerate a summary to apply the new output language to an older meeting.

## Add spoken languages

Under **Additional spoken languages**, add other languages people may use in the same meeting. This gives transcription more context for multilingual conversations.

The selected Transcription provider and model must support those languages. If a language is missing or performs poorly, try another model under **Settings → Transcription**.

## Languages you can choose

Settings offers these languages for the main language and additional spoken languages:

Arabic, Belarusian, Bulgarian, Bangla, Bosnian, Catalan, Czech, Danish, German, Greek, English, Spanish, Estonian, Persian, Finnish, French, Hebrew, Hindi, Croatian, Hungarian, Indonesian, Italian, Japanese, Kannada, Korean, Lithuanian, Latvian, Macedonian, Marathi, Malay, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Serbian, Swedish, Tamil, Telugu, Thai, Filipino, Turkish, Ukrainian, Urdu, Vietnamese, and Chinese.

That list is the Anarlog Cloud picker. On-device and bring-your-own-key models can support a subset or a different set:

- **Soniqo** transcribes Bulgarian, Czech, Danish, German, Greek, English, Spanish, Estonian, Finnish, French, Croatian, Hungarian, Italian, Lithuanian, Latvian, Maltese, Dutch, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Swedish, and Ukrainian.
- **Apple Speech** live transcription uses one supported language at a time: German, English, Spanish, French, Italian, Japanese, Korean, Portuguese, Cantonese, or Chinese. Add that language in macOS System Settings before selecting Apple Speech.
- **On-device file** uses the language list of the whisper.cpp `.bin` you select.
- A bring-your-own-key provider uses that provider's language list. See [How can I use on-device models?](/help#use-on-device-models).

## Improve names and jargon

Language selection does not teach the model company-specific terminology. Add names, acronyms, and product terms under **Settings → Dictionary**.

For summary structure and wording, use [Customize meeting summaries](/customize-summaries).

---

### Meetings (`docs/meetings.mdx`)

---
title: "Record meetings"
description: "Start, follow, and finish a meeting without adding a bot to the call."
---

## Start recording

Choose the path that matches the meeting:

- **Calendar event with a meeting link:** open the event note and click **Join & record**. Anarlog opens the call and starts listening.
- **In-person meeting or call already open:** open the event note and click **Record**.
- **Unscheduled conversation:** create a **New Note**, then click **Record**.

Anarlog records your microphone and system audio. It does not join the meeting as a participant.

<Warning>
  Make sure you have permission to record. Consent rules depend on where you and the other participants are located.
</Warning>

## Choose a preferred recording computer

In desktop 1.4.30 and later, open **Settings → Meetings → Primary recording device** on the computer you want to use and choose its name. This requires a signed-in Pro account. Open Settings on a different computer to make that computer the preferred recorder.

For the same calendar meeting, Anarlog coordinates online computers and keeps one recording. A computer can still record when the preferred one is absent. Choose **Ask each meeting** to clear the saved preference and return to the meeting prompt. If the computers cannot reach the device service, they keep recording.

## During the meeting

Use **Memos** for your own notes. You can keep them rough: the generated summary uses the conversation and your memo as context.

Open **Transcript** to follow live text when your selected transcription model supports it. Models marked **After recording** process the audio when you stop.

If live transcription from a remote provider stalls during speech, Anarlog attempts to reconnect while keeping audio capture running. The warning clears when finalized transcript text resumes.

If you enabled **Show floating bar** in **Settings → Meetings**, you can control recording without keeping the full Anarlog window open.

## Finish the meeting

Click **Stop listening**. Anarlog saves the recording according to your retention setting, finishes the transcript, and creates a summary when an Intelligence model is configured.

You can resume a finished meeting from the same top-right control if the conversation continues.

## Use an existing recording

Create or open an empty note, click the **•••** menu, then choose **Upload audio** or **Upload transcript**.

See [Import audio or a transcript](/import-recordings) for supported formats and the complete flow.

For automatic start, meeting detection, and stop controls, see [Automate meeting capture](/automatic-capture).

---

### Models And Providers (`docs/models-and-providers.mdx`)

---
title: "Models and providers"
description: "See which models Anarlog uses for transcription, summaries, and chat."
---

Anarlog does not hide one model behind the whole app. It keeps two independent selections:

- **Transcription** turns meeting audio into text.
- **Intelligence** turns text into summaries, titles, and chat responses.

Open **Settings → Transcription** and **Settings → Intelligence** to see the selection active on your computer. Changing one selection does not change the other. For managed **Pro (Cloud)** and **Auto** selections, this page explains the current upstream route.

## How a meeting moves through AI

| Stage | Input | Output | Controlled by |
| --- | --- | --- | --- |
| Capture | Microphone and computer audio | A local recording | **Settings → Meetings** |
| Transcription | Meeting audio | Live or after-recording transcript | **Settings → Transcription** |
| Intelligence | Transcript, memo, meeting details, and your instructions | Summary, title, or chat response | **Settings → Intelligence** |

Recording, editing, and local storage do not require an AI model. A hosted Transcription provider receives audio. A hosted Intelligence provider receives the text and other context needed for that request.

## Anarlog Cloud

Anarlog Cloud uses managed routes. Settings displays the managed selection as **Pro (Cloud)**. Transcription uses that Cloud route. Intelligence offers **Auto**, displayed as Pro (Cloud), or a curated model choice. Auto lets Anarlog choose a suitable upstream model and retry a compatible provider when needed.

<Note>
  The routes below describe the current implementation, not a permanently pinned model contract. Anarlog may update a managed route to improve quality, language coverage, latency, or availability. Select your own provider and model when you need a fixed model ID.
</Note>

### Cloud transcription

The managed Transcription route chooses a provider from the meeting's languages and whether Anarlog needs live or after-recording transcription.

- Soniox is the primary provider for live and after-recording transcription when it supports the selected languages. It uses **Soniox 5**: `stt-rt-v5` live and `stt-async-v5` after recording.
- Deepgram is an eligible fallback and resolves the route to **Nova 3** or **Nova 2**, depending on language support.
- AssemblyAI currently resolves it to **Universal 3.5 Pro**: `universal-3-5-pro-realtime` for live transcription and `universal-3-5-pro` after recording.
- The eligible fallback pool also includes configured routes for Gladia (currently **Solaria 1**), ElevenLabs, OpenAI, Mistral, and Alibaba Cloud Model Studio.

Only configured providers that support the requested mode and languages enter the route. If one returns a retryable error, Anarlog can try the next eligible provider.

For stereo recordings, Soniox combines the microphone and computer-audio channels and uses speaker diarization to distinguish speakers.

### Cloud Intelligence

For text tasks, **Anarlog → Auto** currently routes summaries, chat, and generated titles through the `~anthropic/claude-sonnet-latest` alias on OpenRouter.

The alias tracks the current Claude Sonnet release instead of pinning a dated model. OpenRouter receives the prompt and chooses an available endpoint for that model.

Under **Settings → Intelligence**, you can choose a model family instead of Auto. The next desktop update expands the Pro picker to these choices:

- **Claude Sonnet**, **Claude Opus**, and **Claude Haiku**
- **GPT Sol**, **GPT Astra**, **GPT Terra**, and **GPT Luna**
- **Gemini Pro** and **Gemini Flash**
- **Grok** and **Kimi**
- **DeepSeek Pro** and **DeepSeek Flash**
- **GLM** and **GLM Flash**

Anarlog tries your selected model first, then Claude Sonnet if needed. These choices track model families; use your own provider when you need a fixed model ID. **DeepSeek Pro** and **GLM** accept text only, so their selections disable image attachments. Requests containing audio continue to use the audio route below.

Hosted Intelligence requests that contain audio use a separate ordered model pool:

1. `google/gemini-3.1-pro-preview`
2. `google/gemini-3.6-flash`
3. `mistralai/voxtral-small-24b-2507`

This audio-capable Intelligence route is separate from normal meeting transcription.

## On-device models

Anarlog currently offers three built-in on-device Transcription providers. Settings shows each provider only when it is supported by your Mac and release.

| Provider | Model | When it runs | Requirements |
| --- | --- | --- | --- |
| Soniqo | Parakeet Streaming | During the meeting | Apple Silicon; live transcription for 25 European languages |
| Soniqo | Parakeet Batch | After recording | Apple Silicon; speaker-labeled transcription for 25 European languages. Prefer this for hour-long calls. |
| Apple Speech | Apple Speech | During the meeting | macOS 26 with a supported language added in System Settings. Live transcription uses one language at a time from German, English, Spanish, French, Italian, Japanese, Korean, Portuguese, Cantonese, or Chinese. |
| On-device file | A whisper.cpp `.bin` you select | After recording | Apple Silicon. In Settings this is labeled **On-device file**, with **Choose a .bin model** for the file picker. transcribe.cpp `.gguf` files are not supported yet. |

Parakeet Batch does not always provide word-level audio timestamps. When it returns text without a usable speech alignment, Anarlog keeps the individual words editable and groups the display by audio channel and processing chunk. The order between channels within a chunk is uncertain, and those words cannot be used for precise audio seeking. Speech-aligned words retain their timing.

You can also keep audio on your network by pointing **Custom**, or Deepgram's **Advanced** base URL, at a Deepgram-compatible server on this computer or your local network.

<Note>
  Compatibility code still recognizes some older local model IDs, but they are not offered as new choices. The table above is the current user-facing model list.
</Note>

If you select Parakeet Streaming and also download Parakeet Batch, Anarlog can refine speaker labels on-device after a meeting with multiple remote participants.

For local summaries and chat, connect **LM Studio**, **Ollama**, or **Unsloth** and choose any compatible model they serve. Anarlog does not silently substitute another model. **Apple Intelligence** is also available as an experimental, text-only Intelligence provider on eligible Macs running macOS 26 or later.

If a selected local model or server is unavailable, Anarlog reports a connection error instead of sending the request to Anarlog Cloud.

## Other model-backed features

Not every AI-adjacent feature is controlled by AI Settings:

| Feature | Implementation | Where it runs |
| --- | --- | --- |
| Meeting search | Tantivy full-text index, not an LLM or embedding search | On your computer |
| Speaker voiceprints | `wespeaker-embedding-onnx-1` voice embeddings | On your computer |
| Audio cleanup and speech detection | Bundled ONNX models | On your computer |

<Note>
  When chat uses web search, Anarlog sends the search query to its hosted research endpoint, which currently uses Exa, even when your Transcription and Intelligence models are local. The returned text can then become context for your selected Intelligence model.
</Note>

## Your own provider

When you configure a provider with your own API key:

- Anarlog sends requests directly from the desktop app to the configured base URL.
- The provider and exact model shown in Settings handle the request.
- Anarlog stores the API key in your operating system's secure credential store, not in the app database. Keys stay on that computer and do not [sync](/sync#what-cloud-sync-replicates) to your other devices.
- The provider's pricing, retention, and training policies apply.

Anarlog supports dedicated provider integrations and OpenAI-compatible endpoints. Intelligence model lists are loaded from the provider when its API supports discovery, so **Settings → Intelligence** is the current source of truth for available model IDs.

You can also connect a subscription for Intelligence instead of an API key: **Claude**, **ChatGPT**, **Grok**, **GitHub Copilot**, or **Kimi Code**. Open **Settings → Intelligence → Configure Providers** and use **Connect**.

Recent bring-your-own Intelligence providers include **Venice**, configured with a Venice API key, and **Meta Muse** (`muse-spark-1.3` and the other `muse-spark` models), configured with a Meta Model API key.

Recent bring-your-own Transcription models in Settings include:

- **Google Gemini 3.5 Transcribe** (`gemini-3.5-transcribe-live` during the meeting, `gemini-3.5-transcribe` after recording)
- **AssemblyAI Universal 3.5 Pro** (`universal-3-5-pro-realtime` during the meeting, `universal-3-5-pro` after recording)
- **Smallest AI Pulse** (`pulse`) and **Pulse Pro** (`pulse-pro`) for live and after-recording transcription
- **Meta Muse Voice Transcribe** (`muse-voice-transcribe-1.0`) for live and after-recording transcription with speaker labels
- **Nari Labs** for live transcription with a Nari API key. Saved beta model IDs that ended in `:free` move to the current models.
- **Wispr Flow** for transcription and dictation with your own API key. Its after-recording adapter accepts at most six minutes per request; choose another provider for longer files.
- **Inworld**, **Gradium**, **Modulate**, and **Alebex** for live transcription with your own provider credentials.
- **NVIDIA Speech NIM** for live transcription through your own deployed NIM server. NVIDIA's hosted gRPC endpoint is not supported.
- **Amazon Bedrock** for after-recording transcription through an OpenAI-compatible gateway exposing `/audio/transcriptions`. Native Bedrock endpoints are not supported.

Desktop 1.4.30 and later transcribes **AssemblyAI Universal-3.5 Pro** (`universal-3-5-pro`) recordings once after you stop. Older Universal-3 Pro selections now use Universal-3.5 Pro. Processing the whole meeting preserves speaker labels across the recording instead of restarting them for each minute.

The new live-only providers keep credentials unverified until transcription starts. If live transcription fails, keep the recording and retry with a provider that supports after-recording transcription.

Settings may still show older model IDs for compatibility. Prefer the current Gemini 3.5, Universal 3.5, Soniox 5, Smallest AI Pulse, and GPT Transcribe models when you configure a provider yourself.

## Choose a setup

| Goal | Transcription | Intelligence |
| --- | --- | --- |
| Keep meeting content on your computer | Select Soniqo, Apple Speech, or On-device file when available, or a Deepgram-compatible local server | Use LM Studio, Ollama, Unsloth, or eligible Apple Intelligence |
| Avoid per-minute transcription bills | Use on-device models, or Anarlog Cloud on a Pro plan | Use a local Intelligence provider, a connected subscription, or Anarlog Cloud |
| Pin exact model IDs | Configure your own provider | Configure your own provider |
| Minimize setup | Anarlog Cloud | Anarlog Cloud |

To compare on-device, Cloud, and bring-your-own-key cost, see [How can I compare the costs of all the transcription options?](/help#compare-transcription-costs). For every on-device path, see [How can I use on-device models?](/help#use-on-device-models). For a fully local checklist, see [Use Anarlog offline](/offline). For the data sent by each feature, see [Data, privacy, and retention](/data-and-privacy).

---

### Notes (`docs/notes.mdx`)

---
title: "Notes, summaries, and transcripts"
description: "Review a meeting, fix the details, and take the result with you."
---

Every meeting note has up to three views:

- **Memos** are the notes you write yourself.
- **Summary** is the structured note generated by your Intelligence model.
- **Transcript** is the captured conversation.

You can edit memos and summaries like regular notes. In a transcript, select a speaker label to assign a participant and use **Apply to all** when the same speaker appears again.

When CLI, MCP, or Chat stages a memo or summary replacement, the meeting shows a **pending edit** banner. Open **Review memo** or **Review summary** to inspect the unified diff, then apply or decline it. A proposal does not change the meeting until you apply it.

After applying a memo or summary edit, use the editor's **Undo** command to restore the previous content. Your earlier typing remains in the undo history.

## Correct a transcript

- After recording stops, click **Write** above the transcript to edit its text. Save with Command/Ctrl+S and press Escape to return to reading.
- Select words or a transcript segment and choose **Change speaker** to fix only that selection. In write mode, press Enter at the cursor to open the speaker picker; selected text can become its own speaker block.
- Select transcript blocks and delete them together. Adjacent blocks assigned to the same speaker merge.
- Select a speaker label to choose an existing participant or **Create new speaker**. Use **Apply to all** to update every matching speaker segment.
- Right-click **Transcript** to copy the transcript, resume listening, re-transcribe retained audio, or delete the recording.

<Warning>
  Re-transcribing permanently replaces the current transcript with output from your selected Transcription model. Edit or export anything you need before you start it.
</Warning>

Deleting the recording does not delete the memo, summary, or transcript. It only removes the retained audio file.

## Shape the summary

Use the template picker beside **Summary** to change its structure. You can also set standing instructions, add names and specialized terms, and control how templates interact with your preferences.

See [Customize meeting summaries](/customize-summaries) for the complete setup.

## Continue an existing note

Right-click **Transcript** and choose **Resume listening** to add another recording to the same meeting note. This is useful when a call resumes after a break or when you want several related conversations in one place.

## Share a meeting

Use **Share** in the meeting header to invite people, send a recap, or copy a link. Anarlog shares the generated summary, not your private memo. You can include retained audio separately.

See [Share meetings](/sharing) for access levels, comments, and link controls.

## Review your conversation activity

In the desktop app, open **Settings → Insights** to see your busiest weekdays, typical conversation length, and conversations per active day. Choose the last 7 days, last 30 days, or all time. Weekday patterns appear after at least five captured conversations in the selected range.

The same **Insights** page includes your activity and collectible badges. Badges recognize milestones such as your first conversation and recording in more weeks. Collected badges stay on the current device even when you delete a conversation.

Insights and badge collections are desktop views. The CLI, local MCP, and Cloud API do not expose these views or badge collection controls; use their existing meeting and transcript commands to work with your conversations.

## Export a meeting

1. Open the **•••** menu in the meeting header.
2. Choose **Export**.
3. Select PDF, text, Markdown, or Org format.
4. Include any combination of the memo, summary, and transcript.

Anarlog writes the export to your default export folder and reveals it when ready. Change the destination under **Settings → General**.

---

### Offline (`docs/offline.mdx`)

---
title: "Use Anarlog offline"
description: "Prepare local transcription and intelligence models before working without a network connection."
---

Anarlog can record meetings and manage notes without an internet connection. To transcribe, summarize, and chat offline, configure local models before you disconnect.

## What works without the internet

- Create and edit notes.
- Record and play meeting audio.
- Export memos, summaries, and transcripts already on your computer.
- Transcribe with Soniqo or an On-device file whisper.cpp `.bin` on a supported Apple Silicon Mac, or Apple Speech when available on macOS 26.
- Generate summaries and chat with LM Studio, Ollama, Unsloth, or eligible Apple Intelligence.

Hosted models, Google and Outlook calendar sync, cloud sync, and share links need a network connection.

## Prepare offline transcription

1. Open **Settings → Transcription**.
2. Choose Soniqo, or choose Apple Speech if it appears. On Apple Silicon you can also choose **On-device file**, then **Choose a .bin model**, for after-recording transcription from a downloaded whisper.cpp `.bin`.
3. Download the Soniqo model. For Apple Speech, add the supported language in macOS System Settings.
4. Select the model under **Model being used**.
5. Run a short test recording before going offline.

The model's **Live** or **After recording** label tells you when text will appear. On-device model availability depends on your Mac and the current Anarlog release.

## Prepare offline summaries and chat

Use [LM Studio](https://lmstudio.ai/download), [Ollama](https://ollama.com/download), or [Unsloth](https://unsloth.ai/docs/desktop) as your local Intelligence provider. Download the model in advance, start the local server, and select that model in **Settings → Intelligence**.

Anarlog must be able to reach the local server while you work. The server can run on the same computer without internet access.

On an eligible Mac running macOS 26 or later, you can instead select the experimental **Apple Intelligence → System Language Model** after its system model finishes downloading.

## Check that nothing uses a hosted provider

Before a sensitive meeting, confirm both selections:

- **Settings → Transcription → Model being used** points to an on-device model.
- **Settings → Intelligence → Model being used** points to LM Studio, Ollama, Unsloth, or Apple Intelligence.

Choosing a local model for only one setting does not make the other setting local. See [How can I use on-device models?](/help#use-on-device-models) for each transcription path, [Models and providers](/models-and-providers) for the current model list, and [Data, privacy, and retention](/data-and-privacy) for what each provider receives.

<Warning>
  Chat's web search always sends your search query to a hosted research endpoint, even when Transcription and Intelligence are both fully local. Avoid web search in Chat for a sensitive meeting.
</Warning>

---

### Security (`docs/security.mdx`)

---
title: "Security and procurement"
description: "Where security, legal, and IT teams can review Anarlog's data handling, processors, and evaluation path."
---

Enterprise buyers should start at the [Anarlog security page](https://anarlog.so/security). It is the public security-review packet: architecture, encryption, data location, retention, training policy, subprocessors, incident reporting, and the contracts we can send today.

A hosted trust center (Vanta, Oneleet, or similar) is a separate surface. We will publish one after SOC 2 and ISO programs start — not as a substitute for this page.

## What stays true in the product

- Meeting notes live on the desktop in local SQLite unless someone enables a named cloud feature.
- Cloud Sync is end-to-end encrypted. Fastrepl cannot read the recovery key.
- Anarlog does not add a bot to Zoom, Google Meet, or Microsoft Teams.
- Fastrepl does not train models on notes, transcripts, or audio. Hosted or bring-your-own-key providers have their own terms.

See [Data, privacy, and retention](/data-and-privacy) for the in-app settings that control audio retention, analytics, and a fully local meeting.

## Documents

- [Security](https://anarlog.so/security)
- [Privacy Policy](https://anarlog.so/privacy)
- [Terms of Service](https://anarlog.so/terms)
- Data Processing Addendum: email [team@fastrepl.com](mailto:team@fastrepl.com?subject=Anarlog%20DPA)

<Note>
  We do not claim SOC 2, ISO 27001, or HIPAA on these pages.
</Note>

## Report a vulnerability

Use [private GitHub reporting](https://github.com/fastrepl/anarlog/security/advisories/new) or email [team@fastrepl.com](mailto:team@fastrepl.com). See the repository [security policy](https://github.com/fastrepl/anarlog/blob/main/SECURITY.md).

<Warning>
  Do not open a public GitHub issue for a security vulnerability. Use private reporting so it isn't disclosed before a fix ships.
</Warning>

---

### Sharing (`docs/sharing.mdx`)

---
title: "Share meetings"
description: "Invite people, send a recap, or share a meeting summary by link."
---

Sharing publishes a meeting's generated summary so other people can review it without receiving your private memo. Sharing requires Anarlog Pro, an account, and an internet connection.

## Share a note

1. Open a meeting with a generated summary.
2. Click **Share** in the meeting header.
3. Choose how you want to share it:
   - **Invite** people by email and give them viewing, commenting, or editing access.
   - **Email** the meeting summary as a recap.
   - **Slack** posts the meeting summary to a channel you can access.
4. Review **General access** before you copy or send the link.

The first share creates an online copy of the summary. Later summary edits sync to the shared note while sharing remains active.

You can manage sharing for notes you created even if your workspace role does not allow you to manage sharing for other people's notes.

People with edit access, including the owner, can edit the shared summary together. Their changes appear as they type. Viewers and commenters still see the note without editing it. Live editing requires the shared note to be open in a current desktop or web session; closing the page keeps the latest saved summary.

## Before you send

Opening **Share** does not send an email, create an invitation, grant access, or publish an unshared note.

For meetings with attendee email addresses, Anarlog lists those people under **Suggested attendees**. They do not have access yet.

<Warning>
  Clicking **Invite** sends an invitation to every person still listed, including any address you entered. Remove a suggestion first if you do not want to include that person.
</Warning>

Sharing emails are action-based:

- **Invite** grants note access and sends an invitation email.
- **Email** sends the summary in an email without granting access to the shared note.
- **Slack**, **Copy link**, and General access changes do not send email.

Opening or closing the panel without submitting **Invite** or **Email** does not send an email. A folder's **People in the meeting** default is a separate automatic-sharing rule: once a new summary is ready, it grants viewing access and sends invitations to those participants.

## Choose who can open it

**General access** controls the broadest audience:

- **Only people invited** requires an invitation to the note.
- **Everyone in your workspace** makes the note available to members of the selected Anarlog workspace.
- **Anyone with the link** allows anyone who has the bearer link to view it.

Invited people can have **Can view**, **Can comment**, or **Can edit** access. Editors can change the shared summary from the web page. The note owner keeps full access and can change or revoke each person's access.

See [Teams and shared libraries](/teams) to create a workspace, manage members, or share reusable folders, templates, and automations.

<Warning>
  Treat an **Anyone with the link** URL like sensitive data. Replace the link if it was sent to the wrong place, or switch General access back to invited-only.
</Warning>

## Share new notes from a folder

Open a folder and choose **Default access**. Keep **Only me**, or confirm **People in the meeting** or **Everyone in your workspace**. New notes in that folder are shared once their summary is ready. **People in the meeting** sends viewing invitations to participants with email addresses; the workspace setting grants workspace access without invitation emails. Existing notes keep their access, and you can change access on each note.

Automatic sharing uses the folder access you confirmed. Review that setting before recording a private meeting in the folder.

## Read a received summary

When someone shares a note for the same calendar meeting as your own note, Anarlog shows it in a **Shared** summary tab beside your summaries. Your private memo and transcript stay separate. Notes without a matching calendar meeting remain available in **Shared notes**.

## Include audio

If the meeting still has a retained recording, turn on **Share audio** to add it to the shared note. Audio is separate from the summary and can be removed from the share without deleting your local recording.

Check [Audio file retention](/data-and-privacy#choose-how-long-audio-is-kept) if the option is missing. Anarlog cannot share audio that has already been removed from local storage.

## Comments

People with commenting access can select summary text and add an anchored comment. Viewers can read existing comments but cannot add new ones. The owner can manage access and delete comments on the shared note.

## Stop or restrict sharing

Open **Share** again to remove a person, change General access, stop sharing audio, or replace a link. Restricting a link prevents that link from granting access, but invited people keep the access you gave them.

See [Data, privacy, and retention](/data-and-privacy) for what sharing sends to Anarlog's hosted service.

---

### Skill (`docs/skill.md`)

---
name: anarlog
description: Query Anarlog meetings, notes, summaries, transcripts, participants, action items, and recurring history. Use when a user asks about their Anarlog meeting data or needs meeting context for another task.
---

# Anarlog

Prefer local Anarlog data when the agent can access it. Use OAuth-connected Cloud MCP when running remotely or when local data is unavailable. Meeting reads are safe. Writes are limited to staging proposals on the local CLI.

## Choose a source

1. Honor an explicit local-only or Cloud request. Do not silently switch its source.
2. Otherwise, prefer a connected local MCP server. If shell access is available, select the CLI executable available on `PATH`: `anarlog-cli` on Flatpak, otherwise `anarlog`. Use that executable for every CLI command below, including the `--json doctor` readiness check. Read with the selected executable and `--json meetings --source local list` when ready, even if Cloud MCP is connected.
3. When running remotely without the user's local database, or when the CLI or database is absent, use connected Cloud MCP: `list_meetings`, `get_meeting`, `get_meeting_transcript`, and `get_recurring_meeting_history`. If MCP is unavailable but CLI login is available, use the selected executable with `--json meetings --source cloud list` for the same hosted snapshots.
4. A local database compatibility, permission, or operation error needs to be reported; do not hide it by switching to Cloud. An empty local result does not mean the database is unavailable. If the requested meeting is missing, an already-connected alternate source can fill the gap unless the user restricted the source. Identify that source and keep the meeting's subsequent reads on it.
5. Local reads need no Cloud login, Pro subscription, or completed sync. If neither source is available, offer [local CLI installation](https://docs.anarlog.so/agents/overview) for an agent on the user's computer, or **Cloud API & Connectors** plus OAuth for remote access. Do not install software or enable Cloud uploads unless the user asks.

Never query or modify Anarlog's SQLite database directly. The CLI and MCP servers handle application-schema compatibility.

## Find the right meeting

1. List recent meetings or search by a short title fragment. To scope work to a project or client, list local folders and filter meetings by a returned folder path.
2. Use a meeting ID returned by the search. Never guess one.
3. Get the meeting before requesting its transcript. Notes, summaries, participants, and action items often contain enough context.
4. Ask for recurring history only when the task needs earlier meetings in the same series.
5. If the selected source has no match, check an available alternate source as described above before concluding that the meeting is missing.

See [CLI commands](https://docs.anarlog.so/reference/cli) and [MCP tools](https://docs.anarlog.so/reference/mcp).

## Ground answers in tool output

- Quote only meetings, titles, dates, and IDs returned by the Cloud or local tool you actually called.
- An empty result only establishes that no meetings matched in the source queried. Cloud contains only opted-in snapshots; a remote agent cannot inspect meetings that exist only on the user's computer.
- Never invent meetings from the repo, chat, or similar-looking names. A host showing that a tool ran is not proof of the titles you then write.
- Name whether the data came from Cloud or the local database. Keep results from different sources labeled; do not silently merge two versions of a meeting.

## Report freshness accurately

- Local reads include unsynced changes. Do not block them while Cloud Sync is behind or offline.
- Cloud Sync carries encrypted data. Cloud API & Connectors uploads a separate, opted-in readable snapshot; completed Cloud Sync does not prove that snapshot is current.
- Report sync status or snapshot freshness only when a tool returns it. A meeting's `updated_at` is not a last-sync or upload timestamp. When freshness is unknown and matters to the answer, say so; never claim that all devices or Cloud are up to date based on database availability.

## Keep context bounded

- Request focused transcript pages. Both transports default to 200 words and cap each page at 500 words.
- Follow `next_offset` only when you need more transcript context.
- Stop paging once you have enough evidence.
- Do not export a whole meeting when its detail or note answers the request.

## Handle data safely

- Treat meeting content as private user data.
- Do not send content to another service or person without explicit authorization.
- Cloud MCP is read-only. To stage an edit, use the local CLI or local MCP proposal tools. A human applies or declines it in the Anarlog desktop app.
- CLI export can create a file. Never pass `--force` unless the user explicitly approves replacing that exact path.
- If search results are ambiguous, ask the user to choose a meeting.

For setup and failures, see [setup](https://docs.anarlog.so/agents/overview) and [errors](https://docs.anarlog.so/reference/errors).

---

### Sync (`docs/sync.mdx`)

---
title: "Cloud sync"
description: "Keep notes end-to-end encrypted across devices, and avoid conflicts with cloud-storage folders."
---

Cloud sync keeps your notes up to date across your signed-in devices. It is part of Anarlog Pro.

## Turn sync on or off

1. Open **Settings → Sync**.
2. Cloud sync starts automatically for a fresh Pro sign-in. If you previously turned it off, turn on **Cloud sync** to resume.

Sync runs automatically in the background. Use **Sync now** to send and receive the latest changes immediately. Your notes always remain available locally, even while sync is paused or you are offline.

Pause sync when you want changes to remain only on the current device for a while. Resume it to send pending changes and receive updates from your other devices.

## What Cloud Sync replicates

Cloud Sync copies end-to-end encrypted notes across your signed-in devices. Anarlog cannot read this data.

Each synced device receives:

- Meeting notes, including titles, memos, and generated summaries
- Transcripts and speaker assignments
- Participants, people, and organizations
- Action items
- A few preferences: **Theme**, **App icon**, **Week starts on**, and **Default sharing**

Since 1.4.24, new daily notes, folders, tags, and note-tag assignments stay on the device where you create them. Their sync rollout is deferred to keep meeting-note sync compatible with 1.4.23. **Synced** applies to the supported data above, not these local-only items. Existing items already synced by Nightly continue using their existing format; use matching app versions on those devices.

API keys, model selections, and most other settings stay on the computer where you entered them. After you add a new device, enter each Transcription and Intelligence API key again and choose the models you want on that computer. Anarlog stores those keys in the operating system's credential store and does not copy them between devices.

Also set up on each device:

- Calendar connections
- Downloaded local models
- Device-specific options such as audio devices, autostart, notifications, and recording retention

Saved recordings and file attachments remain on that computer. See [Where local data lives](#where-local-data-lives).

See [Data, privacy, and retention](/data-and-privacy) for what can leave your computer for hosted AI, sharing, and other features.

## Recovery keys

Anarlog creates your first sync key automatically and stores it on your device. An existing synced device transfers the key to new devices through an encrypted package. Anarlog cannot read or recover the key.

If you saved a recovery key during an earlier setup, keep it in your password manager. On a new desktop device, **Use recovery key instead** lets you connect while your other devices are offline.

<Warning>
  If you lose every device holding the key and have no saved recovery key, Anarlog support cannot restore your encrypted cloud data. Local notes remain available on devices where they are stored.
</Warning>

## Add another device

1. Install Anarlog and sign in with the same Pro account on the new device.
2. Keep Anarlog open and sync enabled on an existing synced device. It transfers the key automatically; no approval button is required.
3. Keep the new device open while it connects and downloads your notes. If all existing devices are offline, setup waits until one comes online.
4. Re-enter any Transcription or Intelligence API keys you use on this computer, then select those models under **Settings → Transcription** and **Settings → Intelligence**.

A device where you explicitly paused sync stays paused until you resume it. Connecting a local library previously used with another account still requires the **Connect library** choice below.

Anarlog 1.4.29 includes five synced devices with Pro, plus any purchased extra slots. **Settings → Sync → Devices** shows your current usage and limit. If you reach the limit, remove an unused device or choose **Get more slots** to open your account page and add paid slots to a personal Pro subscription. Each add-on adds one slot. Existing connected devices remain connected if you later remove an add-on.

Cloud API & Connectors is a separate, optional feature. If you enable it under **Settings → Developers**, Anarlog uploads a server-readable copy for remote agents; it does not decrypt or weaken your end-to-end encrypted sync data. See [Cloud API and connectors](/reference/api-cloud).

## Switch accounts while keeping local notes

In 1.4.25, signing in to another account keeps your personal notes and recordings available on this device. Sync waits for your choice in **Connect library**:

- **Keep using locally** leaves the library available without connecting it to the signed-in account.
- **Connect library** connects the personal library to that account and brings in its existing notes. Copies already synced to your previous account remain there. Team and shared notes stay with their workspace.

Reconnect integrations for the account you are using. Connecting a different account opts this library into the new account-switching format; older app versions cannot open it. Keep a compatible version installed rather than downgrading after connecting.

This is an account-switching choice, not a repair for a delayed sync. Leave your account and recovery key unchanged while investigating a sync error.

## Where local data lives

Anarlog keeps your notes, recordings, and settings in its application data folder, next to the local database. You don't pick a storage folder, so a file-syncing service such as iCloud Drive, Dropbox, Google Drive, or OneDrive never competes with Cloud sync for the same files. Backup tools that snapshot the folder are fine.

Earlier versions let you point storage at a custom folder, often an Obsidian vault. The first launch after updating moves the notes and recordings from that folder back into the application data folder and removes only the files Anarlog created there. Your other files in that folder stay where they are.

To keep an Obsidian vault or another folder up to date, use the [Export every meeting as Markdown](/automations) automation and choose that folder as its export location. It writes files one way, from Anarlog into the folder.

## Fix a blocked sync

- **Sync needs attention / setup required:** Open Anarlog on an existing synced device signed in to the same account, or enter a recovery key you saved during an earlier setup.
- **Connecting this device:** Open Anarlog on an existing synced device signed in to the same account, or use a previously saved recovery key.
- **Sign in again:** Sign out and sign back in, then resume sync.
- **Identity mismatch:** Sign in again with the account that owns the synced notes. Check Sync settings before changing local files.
- **Device limit reached:** Remove an unused device, then try again.
- **macOS Keychain error:** Open **Settings → Sync**, click **Repair Keychain Access**, and resume sync.

## Sync stays on Connecting or Cloud sync delayed

Both states mean Anarlog is still retrying in the background. Your notes remain available locally.

- **Connecting...** means this device has not finished setting up encrypted sync. If setup fails, Anarlog may show **Sync needs attention** with more detail.
- **Cloud sync delayed** means recovery has not finished. Anarlog may be waiting for more synced data or retrying a failed step. An error appears below the status when one is available.

To fix it:

1. Check that the device is online and that a firewall, VPN, or proxy is not blocking `api.anarlog.so`. Opening `https://api.anarlog.so/` in a browser can return **404 Not Found** because there is no page at that address. This alone neither indicates a sync failure nor proves that the app can complete sync.
2. Check the date and time on this device. A wrong clock makes sync credentials expire immediately; Anarlog reports this as a clock problem.
3. Keep Anarlog open. A large first download can take several minutes and resumes if the app was closed.
4. Turn Cloud sync off and on again from **Settings → Sync**.
5. If it still does not clear, click **Sync now** and expand **Sync log**. Note the time you tried it, the status text, any error, and the app version and operating system on each affected device.

**No sync activity yet** does not mean that sync has never run. The in-app log contains recent activity from the current app session and can remain empty while encrypted sync is being set up or recovered.

Email [team@fastrepl.com](mailto:team@fastrepl.com) with those details and any in-app log entries. If the log is empty, include the native `app.log` from the affected computer. For the stable desktop app:

- **macOS:** In Finder, choose **Go → Go to Folder** and enter `~/Library/Logs/com.hyprnote.stable/`.
- **Windows:** In File Explorer's address bar, enter `%LOCALAPPDATA%\com.hyprnote.stable\logs`.

Staging and the retired Nightly app keep separate logs; use `com.hyprnote.staging` or `com.hyprnote.nightly` in place of `com.hyprnote.stable`. Review logs before sharing them, and never send your recovery key, API keys, or sign-in tokens.

<Warning>
  Do not delete your local data or create a replacement recovery key to troubleshoot delayed sync. Keep the existing notes and recovery key until sync completes and you have verified your notes on another device.
</Warning>

If sync is paused during recording or an import, let that activity finish. Anarlog resumes background sync when it is safe to do so.

---

### Teams (`docs/teams.mdx`)

---
title: "Teams and shared libraries"
description: "Create a shared workspace, manage members, and share reusable folders, templates, and automations."
---

Teams give a group shared membership for meeting-note access and reusable resources. Your personal notes remain private unless you share them.

## Create a workspace

1. Sign in to Anarlog.
2. Open **Settings → Teams**.
3. Enter a workspace name and click **Create**. If workspace creation is locked, upgrade to Pro first.
4. If the workspace needs shared billing and Pro for every member, use **Start Pro** to continue to Pro checkout.

Use the workspace tabs at the top of Teams settings to switch between workspaces or create another one.

## Invite and manage members

Workspace owners and admins can open **Members** to:

- Invite a teammate by email
- Resend or cancel a pending invitation
- Change member roles within your own permissions; owners can add other owners
- Remove a member

### Accept an invitation

Sign in with the verified email address that received the invitation, then open **Settings → Teams**. Pending invitations appear under **Invitations**, where you can choose **Accept** or **Decline** without opening the email link. The app checks for invitations every minute and when you return to its window.

An invitation notification opens Teams settings. If an invitation is missing, check that you signed in with the invited email address and ask the inviter to confirm it has not expired or been canceled.

### Membership billing and ownership

You do not need to purchase seats before inviting someone. Pending invitations do not add a billable member. Workspace billing adjusts when someone joins or leaves, with prorated changes included in the next scheduled invoice. Annual plans keep their annual billing cycle.

Owners can enable automatic joining for coworkers with a verified work email domain. Personal email domains such as Gmail are excluded, and previously removed members are not automatically readmitted.

A workspace can have several **Owners** and one **Primary owner**. Only the Primary owner can transfer primary ownership or delete the workspace. Other owners cannot remove or demote the Primary owner.

Primary ownership transfers require the recipient to accept. Until they accept, permissions stay unchanged. After acceptance, the previous Primary owner remains an Owner.

<Warning>
  Deleting a workspace removes it for everyone in it, and cannot be undone. The Primary owner must transfer primary ownership before leaving if someone else should keep the workspace.
</Warning>

## Share a meeting with the workspace

Open a meeting's **Share** panel and set **General access** to the workspace. Everyone in that workspace can then open the shared note. The meeting's private memo is not included.

See [Share meetings](/sharing) for invitations, links, comments, and shared audio.

## Send new notes to a workspace from a folder

Open a folder and choose **Everyone in your workspace** under **Default access**. Confirm the choice. New notes in that folder are shared once their summary is ready. Notes already in the folder keep their access. You can still change access on each note; see [Share meetings](/sharing#share-new-notes-from-a-folder).

Choose **Only me** to stop automatically sharing new notes in that folder. Use a meeting's **Share** panel to change access to an existing note.

## Share a reusable resource

You can share a folder, template, or automation:

1. Open the folder, template, or automation and click **Share**.
2. Under **Team library**, choose a workspace.
3. Click **Add**.

You can also invite one guest by email without adding them to the Team. A guest can access one shared item for free; add them as a Team member when they need more.

Shared resources appear under **Shared with me** in the corresponding Folders, Templates, or Automations view. Click one and choose **Add a copy**. The copy is yours to edit and does not change the shared original.

To change access, open **Share** on the original item. You can move it to another Team library, remove a guest, or choose **Stop sharing**.

## Plans

- **Free** keeps notes and local features on your computer.
- **Pro** adds cloud features, sharing, shared workspaces, roles, Pro for every member, and centralized billing at $14/person/month or $140/person/year.
- **Enterprise** can add organization controls such as sharing policies, usage visibility, a custom workspace subdomain, SSO, SCIM, retention, and managed capture.

See [Anarlog pricing](https://anarlog.so/pricing) for current prices and plan availability.

---

### Troubleshooting (`docs/troubleshooting.mdx`)

---
title: "Troubleshooting"
description: "Fix the most common recording, transcription, summary, and calendar problems."
---

## Audio is missing

Open **Settings → Permissions** and confirm:

- **Microphone** is allowed so Anarlog can hear you.
- **System Audio** is allowed so Anarlog can hear the other people on the call.

If a permission is denied, use **Open** to change it in your operating system's settings, then restart Anarlog.

On Linux, confirm that your desktop audio service can see the microphone and the output-monitor source. On Windows or Linux, include the app and operating-system versions if audio works in other apps but not in Anarlog.

On desktop 1.4.30 or later, a recording warning identifies an unavailable microphone or system-audio source. Check the device connection and permissions, then use **Retry** to restart the failed source without stopping the recording. Anarlog keeps capturing the source that still works. Audio missed while a source was unavailable cannot be recovered by retrying.

## The transcript is not live

Open **Settings → Transcription** and check the selected model. **Live** models transcribe during the meeting. **After recording** models wait until you stop.

If transcription fails, confirm the provider is configured, the model supports your spoken languages, and a local provider is running.

## No summary appears

A summary needs an Intelligence model. Open **Settings → Intelligence**, then select Anarlog Cloud or configure another provider.

For LM Studio and Ollama, confirm the local server is running. See [Transcription and AI](/ai-setup).

## Calendar events are missing

Open **Calendar** and confirm the account is connected and the calendar is enabled. Refresh the calendar list. Reconnect any account marked **Reconnect required**.

For Apple Calendar, also check **Settings → Permissions → Calendar**.

## A recording disappeared

Open **Settings → Meetings** and check **Audio file retention** under **Audio**. Anarlog can delete audio immediately or after a selected period while keeping the note and transcript.

See [Data, privacy, and retention](/data-and-privacy#choose-how-long-audio-is-kept) for every retention option.

## An imported file does nothing

Audio imports accept WAV, MP3, OGG, MP4, M4A, FLAC, WebM, and AAC. Transcript imports accept SRT and VTT.

For audio, confirm that a Transcription model is selected and that a local provider is running. See [Import audio or a transcript](/import-recordings).

## Meeting-history import shows no apps

Anarlog lists supported meeting assistants it detects on your computer. Open the source app, restart Anarlog, and return to **Settings → Imports**.

If you already removed the source app, reinstall it long enough to complete the import or export the transcript as SRT or VTT and [import it into an empty note](/import-recordings#import-a-transcript).

## Chat has no meeting context

Open the meeting before opening Chat and wait for its transcript or summary to finish. The open meeting is added automatically when its content is available. If Chat still answers without it, start a new chat from that meeting and name the meeting in your request. If no Intelligence model is configured, open **Settings → Intelligence**.

See [Chat with your meetings](/chat) for context guidance and example requests.

## Sharing does not work

Sharing requires Anarlog Pro, a signed-in account, an internet connection, and a generated summary. If a recipient cannot open the note, check their invitation and **General access** under **Share**.

For an **Anyone with the link** share, copy the current link again. Replacing a link invalidates the earlier URL. See [Share meetings](/sharing).

## An automation did not run

Open **Automations**, select the automation, and check whether it is enabled and what its last run reports. Confirm that:

- The destination channel, page, team, or folder is selected.
- Slack, Notion, or Linear is still connected.
- The meeting finished and produced the summary or action items the automation needs.
- A local Markdown folder still exists and is writable.

See [Automate meeting follow-up](/automations).

## Cloud sync is blocked

Open **Settings → Sync** and use the message shown there:

- **Setup required:** Create a recovery key or enter the existing key.
- **Sign in again** or **Identity mismatch:** Sign out and sign back in with the account that owns the synced notes.
- **Device limit reached:** Remove an unused device or use **Get more slots** in **Settings → Sync → Devices** to add slots to a personal Pro subscription. Your plan and add-ons determine the limit.
- **macOS Keychain error:** Click **Repair Keychain Access**, then resume sync.

<Warning>
  Do not move or delete local data while an identity problem is unresolved.
</Warning>

See [Cloud sync](/sync#fix-a-blocked-sync).

## Your cloud session has expired

In desktop 1.4.30 and later, use **Sign in again** in the session-expired message and complete browser sign-in with the same account. This reconnects cloud services while preserving your local account and notes. Revoked refresh credentials cannot recover through automatic retries.

Temporary rate limits or connection failures retry after a delay. Keep your local data while reconnecting.

## The app does not open after installation

Confirm that you downloaded the build for your operating system and CPU. On Linux, make an AppImage executable before opening it:

```bash
chmod +x ./anarlog-*.AppImage
```

For Debian or Ubuntu, install the DEB with `sudo apt install ./anarlog-*.deb` so the package manager can resolve dependencies. See [Install the desktop app](/desktop-installation).

## Linux opens a black window and plays music

First launch opens the setup screen and plays quiet background music. A black window with loud or looping audio usually means WebKitGTK failed to paint, most often on Wayland with NVIDIA.

Current builds disable the WebKit DMA-BUF renderer automatically. If the window is still black, launch with:

```bash
WEBKIT_DISABLE_DMABUF_RENDERER=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 ./anarlog-*.AppImage
```

The same variables work for the installed `anarlog` command. See [Install the desktop app](/desktop-installation).

## Get more help

Email [team@fastrepl.com](mailto:team@fastrepl.com), [join Discord](https://discord.gg/Vk882WS3gF), or [open a GitHub issue](https://github.com/fastrepl/anarlog/issues).

Include your operating system, Anarlog version, the exact error, what you expected, and the shortest steps that reproduce the problem. For AI failures, include the selected provider and model.

<Warning>
  Never include API keys, recovery keys, meeting content, or private share links when reporting a problem.
</Warning>

For CLI and MCP errors, use the [error reference](/reference/errors).

---

### Zoom (`docs/zoom.mdx`)

---
title: "Import Zoom meetings"
description: "Connect Zoom to import cloud recording transcripts and summaries, manage sync, and remove access."
---

Connect Zoom to bring available meeting transcripts and summaries into your Anarlog notes. The connection reads meeting content; it does not change your Zoom meetings or recordings.

<Note>
  The Zoom connection is currently limited to approved test accounts while external access awaits Zoom review. If Zoom does not allow you to authorize Anarlog, use [file import](/import-recordings#import-a-transcript) instead.
</Note>

## Before you connect

- [Install Anarlog](/desktop-installation) and sign in to your Anarlog account.
- Use the Zoom account that owns the cloud recordings you want to import.
- Your Zoom plan, account permissions, and meeting settings must make cloud recordings and transcripts or meeting summaries available. Anarlog cannot recover content that Zoom did not generate or no longer retains.
- If your organization requires app approval, ask your Zoom administrator to approve Anarlog. Administrator approval does not override the current external-access restriction.

The importer checks roughly the past six months of cloud recordings. It imports available transcript text, summaries, action items, meeting titles, and dates. It does not copy audio or video. Meetings without a cloud recording are not discovered by this connection, even if they have a summary elsewhere in Zoom.

## Connect Zoom

1. Open **Settings → Imports** in Anarlog. You can also connect during the **Bring your meeting history** onboarding step.
2. Find **Zoom** and select **Connect**. Sign in to Anarlog if prompted.
3. In the browser, sign in to the intended Zoom account and review the requested permissions.
4. Authorize Anarlog and return to the desktop app. Keep Anarlog open while the import completes.
5. Review the import result and open the imported meeting notes.

The permissions let Anarlog identify your connected Zoom account, list your cloud recordings and retrieve available transcripts, and read meeting summaries. They do not let Anarlog edit meetings or recordings.

## Import new meetings

While connected, Anarlog checks for new meetings while the desktop app is running. Open **Settings → Imports → Zoom** and select **Sync now** to request a check yourself.

Previously imported meeting IDs are skipped. Sync does not continuously replace existing Anarlog notes with later edits from Zoom. See [Import meeting history](/imports#understand-the-result) for the import result categories.

## Disconnect and remove access

1. Open **Settings → Imports** in Anarlog.
2. On the **Zoom** row, select **Disconnect** and complete the browser flow if prompted.
3. Return to Anarlog and confirm that Zoom offers **Connect** again.

To revoke access directly in Zoom:

1. Sign in to the [Zoom App Marketplace](https://marketplace.zoom.us/) with the connected account.
2. Open **My Library** and find **Anarlog**.
3. Under **Actions**, open the **More** menu, select **Remove**, and confirm the removal.

See Zoom's [app removal instructions](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0062865) if your account's controls differ.

Disconnecting stops future imports. It does not delete notes already imported into Anarlog or recordings in Zoom. Delete unwanted imported notes separately in Anarlog. To reconnect, repeat the connection steps above.

## Troubleshooting

**Zoom is missing from Imports:** Anarlog detects installed meeting apps. Open or install the Zoom desktop app, restart Anarlog, and check again.

**Authorization is blocked:** Check the test-account restriction above and your organization's app-approval requirements. Make sure you are signing in to the intended Zoom account.

**Setup could not start:** Check your internet connection, sign in to Anarlog, and try **Connect** again. If the error persists, contact support with the exact error and your Anarlog version.

**No meetings were imported:** Confirm that the connected account has accessible cloud recordings within the import window. Local Zoom recordings and meetings without cloud recordings are not included. If Zoom has no transcript or summary for a recording, Anarlog skips it. You can [import an exported transcript or audio file](/import-recordings) instead.

**A new meeting is missing:** Wait for Zoom to finish processing the recording and its transcript or summary, then select **Sync now**. Keep Anarlog open during the import.

**The connection expired or was removed:** Disconnect the old connection in Anarlog, then select **Connect** to authorize again.

## Data and support

Authorization and import requests pass through Anarlog's hosted API and its integration provider, Nango. Imported notes are stored locally in Anarlog; optional [Cloud Sync](/sync) and sharing follow your app settings. Read the [Privacy Policy](https://anarlog.so/privacy/) and [Terms of Service](https://anarlog.so/terms/).

For help, email [team@fastrepl.com](mailto:team@fastrepl.com). Include your Anarlog version, operating system, the step that failed, and the error message. Do not send passwords or authorization tokens.

---

### Agents Cli (`docs/agents/cli.mdx`)

---
title: "CLI for agents"
description: "Use structured Anarlog CLI output as an agent-friendly MCP fallback."
---

Use the global `--json` flag whenever an agent consumes CLI output.

A successful response contains `schema_version`, `command`, `data`, and optional `pagination`. Read results from `data`. Follow `pagination.next_offset` only when you need another page.

Meeting reads default to the local database. Use `meetings --source cloud` after `anarlog auth login` to read opted-in Cloud snapshots, or `meetings --source auto` to use Cloud only when the local database is absent.

## Resolve meeting context

```bash
anarlog --json meetings list --query "weekly planning" --limit 10
anarlog --json meetings get MEETING_ID
anarlog --json meetings --source cloud list --query "weekly planning" --limit 10
```

Search is case-insensitive across meeting titles and IDs. If several meetings match, ask the user to choose one.

## Read the smallest useful surface

```bash
anarlog --json meetings note MEETING_ID --kind note
anarlog --json meetings note MEETING_ID --kind summary
anarlog --json meetings history MEETING_ID --limit 10 --offset 0
```

Use `meetings get` when participants or action items matter. Use `meetings note` when note content alone is enough.

## Stage an edit

```bash
anarlog --json proposals create --meeting MEETING_ID --kind summary --content "Replacement markdown"
anarlog --json proposals list --meeting MEETING_ID
anarlog --json proposals show PROPOSAL_ID
anarlog --json proposals decline PROPOSAL_ID
```

<Note>
  The create command returns a pending proposal. Do not claim the meeting changed. Open the meeting in the desktop app to apply it, or decline it from the CLI or desktop app. Only pending proposals can be declined.
</Note>

## Transcripts

```bash
anarlog --json meetings transcript MEETING_ID --limit 200 --offset 0
```

Transcript limits are measured in words. A page defaults to 200 words and caps at 500. Stop paging once you have enough evidence.

## Diagnose setup

```bash
anarlog --json doctor
```

The report includes the CLI version, resolved database path, read-only connection status, and schema readiness. When `ready` is false, the command still prints the report to standard output and exits with status 1.

## Exports

Only export a complete meeting when the user explicitly requests a file:

```bash
anarlog meetings export MEETING_ID --format markdown --output meeting.md
anarlog meetings export MEETING_ID --format json --output meeting.json
anarlog meetings --source cloud export MEETING_ID --format json --output meeting.json
```

<Warning>
  Export refuses to replace an existing file. Use `--force` only after the user explicitly approves overwriting that exact path.
</Warning>

See the [CLI reference](/reference/cli) for every option.

---

### Agents Mcp (`docs/agents/mcp.mdx`)

---
title: "MCP for agents"
description: "Connect an MCP client to Anarlog meeting context over hosted OAuth or local stdio."
---

The Anarlog plugin prefers local data when your agent can access it. Use local MCP or the `anarlog` CLI on your computer. Remote agents connect to hosted Cloud MCP at `https://api.anarlog.so/mcp` with OAuth.

Local access needs no Cloud login, Pro subscription, or completed sync. Cloud only has opted-in readable snapshots, uploaded separately from encrypted Cloud Sync.

## Configure the plugin

Install the **Anarlog** plugin and [local CLI](/installation) for local access. For Cloud access, enable **Cloud API & Connectors** and use the host's connection control to approve OAuth. Some MCP hosts prompt on first cloud tool use. See [Cloud API and connectors](/reference/api-cloud#remote-mcp).

Clients that do not install plugins can add:

```json
{
  "mcpServers": {
    "anarlog": {
      "url": "https://api.anarlog.so/mcp"
    }
  }
}
```

## Optional local MCP

The local server communicates over standard input and output. It opens no port and sends no meeting data to Anarlog's servers.

Open the desktop app once so it can create the database. The app does not need to stay open after that.

```json
{
  "mcpServers": {
    "anarlog": {
      "command": "anarlog",
      "args": ["mcp"]
    }
  }
}
```

If `anarlog` is not on the client's `PATH`, use the executable's absolute path as `command`. Restart the client after changing its configuration.

For a custom database path:

```json
{
  "mcpServers": {
    "anarlog": {
      "command": "anarlog",
      "args": ["--db-path", "/path/to/app.db", "mcp"]
    }
  }
}
```

<Note>
  If you configure both local and Cloud MCP, give them distinct server names so the agent can identify the source. Prefer local data and keep each meeting's subsequent reads on the selected source.
</Note>

## Use tools deliberately

Start with `list_meetings`, then pass a returned `id` to `get_meeting`. Call `get_meeting_transcript` only when the notes and summaries do not answer the question. Report only meetings the tools return and identify the source. An empty search only establishes that no meetings matched in that source. Check an available alternate source for missing meetings unless the user restricted access; do not invent titles or silently merge different versions.

Report sync status or snapshot freshness only when a tool provides it. A meeting's `updated_at` is not a last-sync timestamp. Local database errors need to be reported rather than hidden by a Cloud fallback.

Transcript pages default to 200 words and cap at 500. Follow `pagination.next_offset` only when you need more context.

Use `get_recurring_meeting_history` with a known meeting ID when a task depends on earlier meetings in the same series. Use `export_meeting` only when the task explicitly needs the complete record including transcripts.

Cloud MCP is read-only. To persist an edit, use the local CLI or local MCP `propose_summary_edit` or `propose_memo_edit`. The tool returns a pending proposal. Do not claim the meeting changed. Use `list_proposals` and `get_proposal` to inspect staged work. `decline_proposal` discards a pending proposal; applied or already-declined proposals cannot be declined.

The server also exposes MCP resources (`anarlog://meetings/...`) for Markdown or plain-text context when the client prefers resources over tools.

See the [MCP reference](/reference/mcp) for exact parameters and resources.

---

### Agents Skills (`docs/agents/skills.mdx`)

---
title: "Anarlog skill"
description: "Teach a compatible agent when and how to use Anarlog's MCP and CLI surfaces."
---

The public Anarlog skill teaches agents a single workflow across Cloud MCP and the local CLI:

1. Prefer local MCP or `anarlog --json meetings --source local list` when the agent can access your database.
2. Use OAuth-connected Cloud MCP when running remotely or when local access is unavailable.
3. Resolve meeting IDs from search results.
4. Fetch meeting detail before transcript text.
5. Keep transcript reads bounded and never access SQLite directly.

## Sources

- Published skill: `https://docs.anarlog.so/skill.md`
- Repository package: [`skills/anarlog`](https://github.com/fastrepl/anarlog/tree/main/skills/anarlog)
- Agent plugin: [`agent-plugins/anarlog`](https://github.com/fastrepl/anarlog/tree/main/agent-plugins/anarlog)

The published file is self-contained. The repository package adds references for setup, CLI commands, MCP tools, and errors.

## Install the plugin

The `Anarlog` plugin bundles the skill and an optional hosted Cloud MCP connection. [Install the Anarlog CLI](/installation) for local access; no Cloud login or Pro subscription is needed. For remote access, enable **Settings → Developers → Cloud API & Connectors** with Pro access through a personal plan or an eligible paid Pro workspace membership and connect through OAuth.

<Note>
  The repository package is named **Anarlog**. Its optional hosted connection appears as **Anarlog Cloud**.
</Note>

For Claude Code:

```bash
claude plugin marketplace add fastrepl/anarlog
claude plugin install anarlog@fastrepl
```

For GitHub Copilot CLI:

```bash
copilot plugin marketplace add fastrepl/anarlog
copilot plugin install anarlog@fastrepl
```

For ChatGPT and Codex, add the repository source, restart the ChatGPT desktop app, then install **Anarlog** from the Fastrepl source in the Plugins Directory:

```bash
codex plugin marketplace add fastrepl/anarlog \
  --sparse .agents/plugins \
  --sparse agent-plugins/anarlog
```

Use the host's cloud connection control to sign in and approve OAuth. Some MCP hosts prompt on first cloud tool use. No cloud API key is required for OAuth connections. A skill-only installation does not create an account connection.

The Fastrepl plugin includes an optional **Anarlog Cloud** App connection for Codex. Leave it disconnected for local CLI access. Public directory listings have a separate review and release process from the repository marketplace.

Cursor Teams and Enterprise administrators can import `https://github.com/fastrepl/anarlog` as a team marketplace, then install **Anarlog**.

## Install in an agent

Install it from the documentation site with the skills CLI:

```bash
npx skills add https://docs.anarlog.so
```

For a filesystem-based agent, copy the complete `skills/anarlog` directory into that agent's skills directory. Keep the directory name `anarlog` so relative reference links continue to work.

<Note>
  Agent skill locations and installer commands vary by client. Follow your agent's skill installation instructions rather than copying only `SKILL.md`.
</Note>

The contributor skills under `.agents/skills` are internal repository workflows. They are not part of the public Anarlog skill.

---

### Recipes Meeting Prep (`docs/recipes/meeting-prep.mdx`)

---
title: "Prepare for a recurring meeting"
description: "Build a focused meeting brief from recent Anarlog context."
---

This recipe helps an agent prepare for the next occurrence of a recurring meeting without loading every transcript.

<Steps>
  <Step title="Find the latest meeting">
    Call `list_meetings` with a short title query, or run:

    ```bash
    anarlog --json meetings list --query "project sync" --limit 10
    ```

    Resolve the latest relevant meeting ID from the results.
  </Step>
  <Step title="Read its structured context">
    Call `get_meeting`, or run:

    ```bash
    anarlog --json meetings get MEETING_ID
    ```

    Extract open action items, decisions in notes or summaries, participants, and the meeting's series ID.
  </Step>
  <Step title="Review recurring history">
    Call `get_recurring_meeting_history` with the meeting ID, or run:

    ```bash
    anarlog --json meetings history MEETING_ID --limit 5 --offset 0
    ```

    Fetch detail only for earlier meetings that appear relevant.
  </Step>
  <Step title="Use transcript evidence sparingly">
    If a decision is unclear, call `get_meeting_transcript` with `limit: 200`, or run:

    ```bash
    anarlog --json meetings transcript MEETING_ID --limit 200 --offset 0
    ```

    Continue from `next_offset` only when needed.
  </Step>
  <Step title="Produce the brief">
    Keep the output focused on unresolved actions, prior decisions, discussion topics, and useful context for named participants. Distinguish meeting evidence from your own inference.
  </Step>
</Steps>

---

### Reference Api Cloud (`docs/reference/api-cloud.mdx`)

---
title: "Cloud API and connectors"
description: "Opt in to hosted REST and remote MCP access for your Anarlog meetings."
---

The Cloud API lets remote agents read your Anarlog meetings while the desktop app is closed. It requires Pro access, either from your personal plan or membership in an active paid Pro workspace, and stays off until you enable it.

<Warning>
  Enabling Cloud API & Connectors uploads a separate server-readable copy of
  your meeting titles, notes, summaries, participants, action items, and
  transcripts. Your normal cloud sync data stays end-to-end encrypted. Turning
  the feature off deletes the server-readable copies.
</Warning>

## Enable cloud access

1. Open **Settings → Developers → Cloud API & Connectors**.
2. Review the disclosure and turn the feature on.
3. Wait for Anarlog to upload your existing meetings.
4. If your client does not support OAuth, create a cloud API key and copy it. The key is shown once.

Keys start with `anl_` and are stored hashed. Revoke a key from the same settings page when you no longer use it.

## REST API

The base URL is `https://api.anarlog.so/v1`. Send your cloud key as a bearer token:

```bash
curl \
  -H "Authorization: Bearer anl_..." \
  https://api.anarlog.so/v1/meetings
```

The read endpoints are:

| Endpoint | Returns |
| --- | --- |
| `GET /v1/meetings` | Meeting list. Accepts `query`, `series_id`, `limit` (default 20, clamped to `1..200`), and `offset`. |
| `GET /v1/meetings/{meeting_id}` | Meeting metadata, the canonical memo, summaries, participants, and action items. Memo and summary bodies are markdown. |
| `GET /v1/meetings/{meeting_id}/transcript` | Joined `text`, the raw `words`, and `pagination`. Accepts `offset` and `limit` (default 200, clamped to `1..500`). |
| `GET /v1/meetings/{meeting_id}/history` | Meetings in the same recurring series, newest first. Accepts `limit` and `offset`. |
| `GET /v1/meetings/{meeting_id}/export` | Full export including transcripts. `format=json` (default) or `format=markdown`. |

List responses carry a `pagination` object with `offset`, `limit`, `returned`, `total`, and `next_offset`; a missing `next_offset` means the page reached the end. See the [OpenAPI document](https://api.anarlog.so/openapi.json) for the complete hosted schema.

Errors use this envelope:

```json
{ "error": { "code": "not_found", "message": "meeting 'x' not found" } }
```

Codes: `unauthorized`, `not_found`, `invalid_request`, `internal_error`. The hosted API can also return:

- `403 subscription_required` when the account does not have Pro access through a personal plan or an active paid Pro workspace membership.
- `403 cloud_api_not_enabled` when the account has opted out.
- `429` with a plain-text `rate limit exceeded` body and `retry-after` header when you exceed the hosted request limit.

The request limit allows a burst of 10 requests per account, then refills one request every 200 milliseconds.

<Note>
  Meeting snapshots are limited to 2 MB. When a snapshot is larger, Anarlog removes word-level transcript timing before upload but keeps the transcript text. If the snapshot is still larger than 2 MB, that meeting cannot upload. A hosted transcript without word timing returns the retained text with an empty `words` array.
</Note>

## Remote MCP

The Streamable HTTP endpoint is:

```text
https://api.anarlog.so/mcp
```

It exposes the same five meeting-read tools as the local MCP server:

- `list_meetings`
- `get_meeting`
- `get_meeting_transcript`
- `get_recurring_meeting_history`
- `export_meeting`

Hosts that support MCP OAuth 2.1 connect your Anarlog account without a cloud API key. The host discovers Anarlog's authorization server from the MCP endpoint, opens the Anarlog sign-in and consent flow, and stores the resulting connection.

Anarlog does not use identity scopes as meeting permissions. Meeting access remains limited to the server-readable snapshots you explicitly opted in to upload. Every MCP tool is read-only, and every access token is checked for its signature, issuer, expiry, MCP resource audience, and OAuth client identifier.

Anarlog publishes OAuth protected-resource metadata at:

```text
https://api.anarlog.so/.well-known/oauth-protected-resource/mcp
```

The metadata points the host to Anarlog's existing Supabase authorization server. That server uses dynamic client registration and PKCE with SHA-256. The host sends the MCP `resource` value during authorization and token exchange; Anarlog binds issued OAuth tokens to `https://api.anarlog.so/mcp` and rejects tokens minted for another resource.

<Note>
  OAuth does not bypass Anarlog's product controls. The account must have Pro access through a personal plan or an active paid Pro workspace membership, and **Cloud API & Connectors** must remain enabled. Disabling the feature deletes the uploaded snapshots and makes existing connector tokens unusable for meeting access.
</Note>

### Claude Code

Install the **Anarlog** plugin:

```bash
claude plugin marketplace add fastrepl/anarlog
claude plugin install anarlog@fastrepl
```

Or add the remote server directly. Claude discovers OAuth from the MCP endpoint:

```bash
claude mcp add --transport http anarlog https://api.anarlog.so/mcp
```

### Cursor

Import `https://github.com/fastrepl/anarlog` as a team marketplace and install **Anarlog**, or add this MCP server:

```json
{
  "mcpServers": {
    "anarlog": {
      "url": "https://api.anarlog.so/mcp"
    }
  }
}
```

### GitHub Copilot CLI

```bash
copilot plugin marketplace add fastrepl/anarlog
copilot plugin install anarlog@fastrepl
```

### ChatGPT and Codex

Add the Fastrepl source, restart the ChatGPT desktop app, then install **Anarlog**:

```bash
codex plugin marketplace add fastrepl/anarlog \
  --sparse .agents/plugins \
  --sparse agent-plugins/anarlog
```

Public listing in a host's plugin directory is a separate review step. Installing from the Fastrepl source does not submit or publish the connector.

### Grok Bot

Grok Bot has no settings form for custom MCP servers. Add Anarlog from a Bot conversation:

```text
Add this custom MCP server: https://api.anarlog.so/mcp
```

Confirm the server details when the bot asks, then finish the Anarlog sign-in and consent flow in your browser. The Anarlog tools are available from your next message. Grok Bot runs in the cloud, so it can only reach the hosted endpoint, not local MCP.

### Instinct

Add `https://api.anarlog.so/mcp` as an MCP connection in your Instinct account and name it **Anarlog**. Complete the Anarlog sign-in and consent flow with the account that has Cloud API & Connectors enabled. If Instinct asks for a token instead of opening a sign-in page, create a personal cloud API key and paste it as the bearer token.

### Other OAuth MCP clients

Choose Streamable HTTP and use `https://api.anarlog.so/mcp` as the server URL. Do not paste an API key. The client must follow MCP OAuth 2.1 protected-resource discovery.

## API-key clients

Use a static bearer header only when the host cannot complete MCP OAuth. Create the key under **Settings → Developers → Cloud API & Connectors**.

### Claude Code

```bash
claude mcp add --transport http anarlog https://api.anarlog.so/mcp \
  --header "Authorization: Bearer anl_..."
```

### OpenAI Responses API

Pass the remote MCP URL and authorization header in the tool definition:

```js
const response = await client.responses.create({
  model: "gpt-5",
  input: "Summarize my latest Anarlog meeting.",
  tools: [
    {
      type: "mcp",
      server_label: "anarlog",
      server_url: "https://api.anarlog.so/mcp",
      headers: {
        Authorization: "Bearer anl_...",
      },
      require_approval: "never",
    },
  ],
});
```

### Muse

Meta Muse does not accept MCP servers. Instead, ask Muse to build a **Custom Connector** against the Anarlog REST API. Create a personal cloud API key named `muse` so you can revoke it separately, then send Muse:

```text
Create a custom connector for Anarlog, my meeting notes. The base URL is
https://api.anarlog.so and the OpenAPI document is
https://api.anarlog.so/openapi.json. Only use the /v1/meetings operations.
Authenticate every request with the header "Authorization: Bearer <my key>".
It is read-only: list meetings, read a meeting, read its transcript, and
export it.
```

The OpenAPI paths already include the `/v1` prefix, so the base URL is the bare host. Check that the first request Muse makes targets `/v1/meetings`, not `/v1/v1/meetings`.

Muse stores the key in its Secure Credentials Store; Anarlog never sees your Muse account. The connector appears under **Settings → Connectors** in Muse. Meta does not review custom connectors, so keep the key to yourself.

### Poke

Poke does not complete MCP OAuth. Create a personal cloud API key in Anarlog and paste it only into your own Poke recipe or connection.

<Warning>
  Do not share that key, put it in a public recipe, or reuse one key across users.
</Warning>

### Other MCP clients

Choose Streamable HTTP, use `https://api.anarlog.so/mcp` as the server URL, and add:

```text
Authorization: Bearer anl_...
```

## Disable cloud access

Turn off **Cloud API & Connectors** under **Settings → Developers**. Anarlog immediately deletes all server-readable meeting snapshots. Your local meetings and end-to-end encrypted cloud sync data are unchanged.

Revoked keys cannot read snapshots. If you lose Pro access from both your personal plan and any paid Pro workspace memberships, existing cloud keys return `subscription_required`.

---

### Reference Cli (`docs/reference/cli.mdx`)

---
title: "CLI reference"
description: "Commands and global options available in the Anarlog CLI."
---

## Global syntax

```text
anarlog [--base DIR] [--db-path FILE] [--json] <command>
```

| Option | Environment variable | Behavior |
| --- | --- | --- |
| `--base DIR` | `ANARLOG_BASE` | Use `DIR/app.db`. |
| `--db-path FILE` | `ANARLOG_DB_PATH` | Use an explicit SQLite file. |
| `--json` | — | Emit a versioned JSON response or machine-readable JSON error. |

`--db-path` takes precedence over `--base`. Without either option, the CLI uses Anarlog's platform application-data directory and recognized legacy locations.

The installed command is `anarlog` on DEB, AppImage, macOS, Windows, and Settings-installed builds.

## Account commands

```bash
anarlog auth login
anarlog auth status
anarlog auth logout
```

`auth login` prints a URL that can be opened in any browser, including one on another device. Sign in, choose **Copy URL** on the completion page, then paste the `anarlog://auth/callback` link into the hidden CLI prompt. The CLI verifies the session with Anarlog before saving it in the same local auth store as the desktop app.

With `--json`, the login URL and instructions are printed to stderr. The callback URL is read from stdin. JSON appears on stdout only after login completes.

On Linux, the CLI uses Secret Service when it is available. Headless systems without Secret Service fall back to `auth.cli.json` in Anarlog's local application-data directory with permissions limited to the current user. The desktop app reconciles that file into Secret Service when it becomes available. On Windows, the CLI stores sessions with DPAPI in the desktop app's secure auth file. `auth logout` removes the local session; it does not delete the Anarlog account.

`auth status` reports the signed-in account and whether the current access token has expired. The stored refresh token lets the desktop app refresh an expired access token when it starts.

## Meeting data sources

Meeting commands accept `--source local|cloud|auto` before their subcommand:

```bash
anarlog meetings --source cloud list
anarlog meetings --source auto get MEETING_ID
```

`local` is the default and reads Anarlog's database on this computer. `cloud` reads the opted-in hosted snapshots using the account saved by `anarlog auth login`. `auto` uses the local database when it exists and falls back to Cloud when it does not. Set `ANARLOG_SOURCE` to choose the same behavior without a flag.

Ordinary meeting reads support all three sources except `meetings folders` and `meetings list --folder`. Managed capture, hold preservation, and pilot usage commands require local data. `--base`, `--db-path`, and `doctor` apply only to local data. Proposals and `anarlog mcp` remain local because hosted Cloud access is read-only.

## Meeting commands

| Command | Options | Result |
| --- | --- | --- |
| `meetings list` | `-q, --query TEXT`, `--series-id ID`, `--folder PATH`, `--limit 1..200`, `--offset NUMBER` | Meetings ordered by the application query layer. Defaults to 20 results. `--folder` includes subfolders and is local only. Each meeting includes `folder_path`, or `null` outside a folder. |
| `meetings folders` | `-q, --query TEXT`, `--limit 1..200`, `--offset NUMBER` | Local folder paths with `path`, `name`, and `parent_path`, including empty and parent folders. Defaults to 100 results. |
| `meetings get ID` | — | Metadata, canonical memo, summaries, participants, and action items. |
| `meetings note ID` | `--kind note\|summary\|all` | The selected note documents. Defaults to `note`. |
| `meetings transcript ID` | `--limit 1..500`, `--offset NUMBER` | A bounded transcript word page. Defaults to 200 words from offset 0. |
| `meetings history ID` | `--limit 1..200`, `--offset NUMBER` | A page of meetings from the same recurring series. Defaults to 20 from offset 0. |
| `meetings export ID` | `--format markdown\|json`, `-o, --output FILE`, `--force` | A complete meeting export, including transcripts. Defaults to Markdown on stdout. Existing files require `--force`. |

Markdown exports include speaker-labeled transcript paragraphs when word-level speaker information is available. Exports without that information retain the flat transcript text. JSON exports can include a `speakers` field with the names used for rendering.

## Proposal commands

These commands insert or inspect staged edits. They do not apply the edit to the meeting. Apply happens in the desktop app.

| Command | Options | Result |
| --- | --- | --- |
| `proposals create` | `--meeting ID`, `--kind summary\|memo`, `--target ID`, `--content TEXT` or `--content-file FILE` | Stages a pending replacement. `--target` is required when the meeting has multiple summaries. |
| `proposals list` | `--meeting ID`, `--status pending\|applied\|declined\|all`, `--limit 1..200`, `--offset NUMBER` | Proposals, newest first. Defaults to pending rows, 20 results. |
| `proposals show ID` | — | Proposal metadata and a unified diff. |
| `proposals decline ID` | — | Marks a pending proposal declined. The meeting is unchanged. |

## JSON response contract

Successful `--json` responses contain:

| Field | Meaning |
| --- | --- |
| `schema_version` | CLI JSON contract version. Currently `1`. |
| `command` | Stable command identifier such as `meetings.list`. |
| `data` | Command result. |
| `pagination` | Page metadata when the command is paginated. |

Pagination includes `offset`, `limit`, `returned`, optional `total`, and optional `next_offset`.

## Doctor command

```bash
anarlog --json doctor
```

Checks the resolved database path, read-only access, and required schema without changing data. It exits with status 0 when `ready` is true and status 1 when `ready` is false.

## MCP command

```bash
anarlog mcp
```

Starts the local MCP server over stdio. Meeting reads are idempotent. Proposal tools stage or decline pending edits without applying them to the meeting.

<Warning>
  Do not write other output to the server's stdout. Anything else written there corrupts the MCP stdio protocol stream.
</Warning>

## Help and version

```bash
anarlog --help
anarlog auth --help
anarlog meetings --help
anarlog meetings list --help
anarlog --version
```


### Managed local capture

`anarlog meetings capabilities` reports managed-settings, calendar-identity, recording-attachment, capture-completion, hold-inventory (including parentless history and files without database rows), pilot-usage, and conditional-delete support without opening a database.

`anarlog meetings delete` permanently removes a completed local meeting, its document history, transcripts, recordings, and derived search index. It requires `--source local`, `--if-export-sha256` (the SHA-256 of the complete JSON export, either as printed to stdout with its final newline or as saved with `--output`), and `--require-transcription-complete`. Close the desktop app first. A changed export, unfinished transcript, cloud attachment, or shared record prevents deletion. An interrupted file removal can be resumed with the same meeting ID and hash.

A version 1 `managed_settings.json` beside the active `app.db` contains a `settings` object. Only supported capture settings are accepted, and secrets are rejected. Managed rows override user changes; malformed policy prevents database startup. `intelligence_disabled: true` disables all model connections, including local models. Transcription credentials remain in the OS credential store.

`meetings initialize-managed` (`anarlog --json meetings --source local initialize-managed`) creates or migrates the local database before first desktop launch. An existing `managed_settings.json` that disables intelligence is required; the desktop must be closed. No recording or permission prompt is started.

`meetings hold-list` (`anarlog --json meetings --source local hold-list`) enumerates local meeting IDs retained by sessions, child/history rows, capture-recovery markers and encrypted session revisions, including soft-deleted or missing parent rows and identities retained only by recording or legacy meeting files, in ID order. Filesystem traversal stays within the recorder sessions directory, refuses links and fails rather than truncating an oversized or unreadable inventory. Use `--limit 1..200` and `--after ID` for keyset pagination; an empty `data.ids` array ends the inventory. Managed preservation agents can use `--database-only` to page database-owned identities while separately walking and preserving recording files with durable checkpoints. This mode skips filesystem discovery; its pages alone do not establish a complete hold inventory.

`meetings hold-export` (`anarlog --json meetings --source local hold-export MEETING_ID`) streams meeting-owned database cells and retained revisions from one read transaction as NDJSON. Each bounded cell frame carries the table, row key, column, SQLite storage type, byte offset, total length, and base64 bytes. Integer and REAL cells use round-trip text; TEXT and BLOB bytes remain exact. The header identifies the meeting and schema and lists `recording_locations` relative to the recorder sessions directory; sequences and the final SHA-256 cover every preceding line including its newline. An absent end frame means an incomplete snapshot. The archive includes tombstoned documents, live transcript deltas, per-session raw capture-recovery memos and related encrypted sync revisions. A parent session row is not required when owned records or meeting files remain. A files-only archive has no database cell frames; its header still identifies every discovered location, including moved copies. It excludes global settings, provider credentials and unrelated meetings. Recording files are preserved separately by the managed agent. With `--database-only`, the archive skips filesystem discovery and sets `recording_files_separate: true` with an empty `recording_locations` array. The agent must complete its separate file inventory and verify each catalogued attachment before treating preservation as complete. This local preservation archive is separate from normal meeting export and must not enter knowledge intake.

`meetings pilot-usage` requires `--json` and `--source local`. Supply `--from-ms` and `--until-ms` as Unix milliseconds for a half-open UTC window of at most 366 days. The command reads capture intervals from the native stop registry's locally persisted measurement ledger. It returns clocks, requested-live and live-at-stop flags, and coverage counts without meeting identifiers, text, titles, invitees, or provider credentials. The ledger is recorded for managed capture with intelligence disabled; it survives deletion of meeting content. Pauses are separate intervals. Older recordings, interrupted persistence, and pending sessions can leave coverage incomplete; inspect `unmeasured_stops`, `invalid_metadata_records`, `pending_sessions`, and `legacy_sessions_without_measurement`. Empty results do not prove no calls occurred. Capture durations and requested-live overlap measure recorder use, not provider billing or successful Teams capture. No report is uploaded automatically.

---

### Reference Errors (`docs/reference/errors.mdx`)

---
title: "Errors and exit codes"
description: "Interpret CLI failures and recover without modifying Anarlog storage."
---

Without `--json`, CLI errors are written to standard error as human-readable text beginning with `error:`. With `--json`, errors contain `schema_version` and an `error` object with `code`, `message`, and `exit_code`.

| Exit code | Meaning | Recovery |
| --- | --- | --- |
| `0` | Success | Consume stdout. |
| `1` | Database, Cloud API, or operation failure, or an unhealthy `doctor` report | Read the reported action. For `doctor`, inspect the JSON report and confirm app and CLI compatibility. |
| `2` | Meeting, note, or other requested data not found | List meetings again and use a returned ID. |
| `3` | Database file not found | Open Anarlog once to create it, or provide the correct database path. |
| `4` | Export output already exists | Choose another path or explicitly pass `--force` to replace the file. |

Invalid arguments use the `invalid_arguments` error code with Clap's nonzero exit code.

Cloud meeting commands preserve hosted error codes: `unauthorized`, `insufficient_scope`, `subscription_required`, `cloud_api_not_enabled`, `invalid_request`, `internal_error`, and `rate_limited`. Re-run `anarlog auth login` for an expired session, enable **Cloud API & Connectors** for `cloud_api_not_enabled`, and follow the retry delay for `rate_limited`.

MCP maps missing meetings and proposals to invalid parameters. Validation and conflict failures—such as empty proposal content, multiple summaries without `target_id`, or declining a non-pending proposal—are reported as internal MCP errors. Database and serialization failures are also internal errors.

<Warning>
  Do not recover by creating tables, running migrations, or issuing SQL. The desktop app owns schema initialization and migrations, and manual changes can corrupt the database.
</Warning>

---

### Reference Mcp (`docs/reference/mcp.mdx`)

---
title: "MCP reference"
description: "Tools, resources, limits, and transport details exposed by Anarlog MCP."
---

Run the server with `anarlog mcp`. It supports the current MCP `2026-07-28` protocol over stdio while remaining compatible with earlier MCP clients. Meeting reads are local and idempotent. Proposal tools can insert or decline staged edits; they never apply those edits. The desktop app only needs to have created the database once. Open it to review and apply pending proposals.

## Tools

### `list_meetings`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `query` | string | — | Case-insensitive title or meeting ID substring. An empty result list means no matches; do not invent meetings. |
| `series_id` | string | — | Exact recurring series ID. |
| `folder_path` | string | — | Folder path from `list_folders`, such as `Projects/Launch`. Includes meetings in its subfolders. |
| `limit` | integer | `20` | Clamped to `1..200`. |
| `offset` | integer | `0` | Number of results to skip. |

Each meeting includes `folder_path`, which is `null` when the meeting is not in a folder.

### `list_folders`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `query` | string | — | Case-insensitive folder path substring. |
| `limit` | integer | `100` | Clamped to `1..200`. |
| `offset` | integer | `0` | Number of results to skip. |

Returns `folders` sorted by path, plus `pagination`. Each folder contains `path`, `name`, and `parent_path` (`null` for top-level folders). The list includes empty folders and parent folders. Pass a returned `path` as `list_meetings` `folder_path`.

### `get_meeting`

Accepts required string `meeting_id`. Returns meeting metadata, including `folder_path`, the canonical memo, summaries, participants, and action items. Transcript words are intentionally separate.

### `get_meeting_transcript`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `meeting_id` | string | required | A returned Anarlog meeting ID. |
| `offset` | integer | `0` | Word offset. |
| `limit` | integer | `200` | Clamped to `1..500`. |

The result includes `meeting_id`, `text`, `words`, and a `pagination` object. Pagination contains `offset`, `limit`, `returned`, `total`, and `next_offset`. A missing `pagination.next_offset` means the page reached the end.

### `get_recurring_meeting_history`

Accepts required string `meeting_id` plus optional integer `limit` and `offset`. The limit defaults to 20 and is clamped to `1..200`; the offset defaults to 0. Results are newest first. When the meeting has no recurring series, `meetings` is empty.

### `export_meeting`

Accepts required string `meeting_id`. Returns the complete structured meeting record, including metadata, notes, summaries, participants, action items, and transcripts. Prefer the smaller detail or transcript tools unless the task explicitly needs a full export.

When available, `speakers` provides the names referenced by transcript speaker assignments, and `speaker_context` records microphone and call context. These fields are optional; older or trimmed Cloud snapshots may omit them.

### `propose_summary_edit`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `meeting_id` | string | required | A returned Anarlog meeting ID. |
| `content` | string | required | Complete replacement summary in markdown. |
| `target_id` | string | — | Summary document ID. Required when the meeting has multiple summaries. |

The result is a pending proposal. It does not change the meeting until a human applies it in the desktop app.

### `propose_memo_edit`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `meeting_id` | string | required | A returned Anarlog meeting ID. |
| `content` | string | required | Complete replacement memo in markdown. |

The result is a pending proposal. It does not change the meeting until a human applies it in the desktop app. `content` replaces the canonical meeting memo.

### `list_proposals`

| Parameter | Type | Default | Notes |
| --- | --- | --- | --- |
| `meeting_id` | string | — | Limit results to one meeting. |
| `status` | string | `pending` | `pending`, `applied`, `declined`, or `all`. |
| `limit` | integer | `20` | Clamped to `1..200`. |
| `offset` | integer | `0` | Number of results to skip. |

### `get_proposal`

Accepts required string `proposal_id`. Returns metadata and a unified `diff`.

### `decline_proposal`

Accepts required string `proposal_id`. Marks a pending proposal declined without changing the meeting. Applied or already-declined proposals cannot be declined.

## Resources

| URI | MIME type | Content |
| --- | --- | --- |
| `anarlog://meetings/{meeting_id}` | `text/markdown` | Meeting detail without transcript text. |
| `anarlog://meetings/{meeting_id}/transcript{?offset,limit}` | `text/plain` | A bounded transcript page. `offset` defaults to 0 and `limit` defaults to 200 (clamped to 500 words). Returns plain text only; use `get_meeting_transcript` for structured `words`. |
| `anarlog://series/{series_id}` | `text/markdown` | Up to 100 meetings in a recurring series. |

Resource listing returns recent meeting resources in pages of 20. Its cursor is a numeric result offset.

---

### Reference Webhooks (`docs/reference/webhooks.mdx`)

---
title: "Webhooks reference"
description: "Signed meeting events Anarlog delivers to an endpoint you configure."
---

Webhooks let Anarlog push meeting events to your own endpoint. They are built into the desktop app and available on every plan. Configure them under **Settings → Developers → Webhooks**.

<Warning>
  Meeting events include the note, summaries, participants, action items, and full transcript text. Only add an endpoint you trust.
</Warning>

To read meeting data instead of receiving it, use the [CLI](/reference/cli), the [local MCP server](/reference/mcp), or the [Cloud API](/reference/api-cloud).

## Add an endpoint

1. Open **Settings → Developers → Webhooks**.
2. Enter an `https://` URL and click **Add webhook**.
3. Copy the signing secret (`whsec_...`). It is shown once.
4. Click **Test** to send one `webhook.test` delivery and confirm your endpoint responds.

<Note>
  The signing secret is shown once during setup. Store it before leaving the page — Anarlog does not display it again.
</Note>

A new endpoint is subscribed to all events. One installation can configure at most 64 endpoints.

## Events

Anarlog delivers events as JSON `POST` requests while the desktop app is running.

| Event | Fires when |
| --- | --- |
| `meeting.completed` | A recording session finishes. |
| `note.enhanced` | An AI summary is generated for a meeting. |
| `webhook.test` | You trigger a test delivery. |

The payload envelope is:

```json
{
  "id": "evt_...",
  "event": "note.enhanced",
  "created_at": "2026-07-28T09:00:00.000Z",
  "data": {
    "meeting": { "id": "...", "title": "...", "note": {...}, "summaries": [...], "participants": [...], "action_items": [...] },
    "transcript_text": "..."
  }
}
```

Meeting event deliveries time out after 10 seconds. Failed attempts retry after 5 and 30 seconds. A `webhook.test` request makes one attempt. Each request includes:

| Header | Content |
| --- | --- |
| `x-anarlog-event` | Event name. |
| `x-anarlog-delivery` | Unique delivery ID. |
| `x-anarlog-timestamp` | Unix timestamp (seconds). |
| `x-anarlog-signature` | `sha256=<hex>` — HMAC-SHA256 of the raw request body using your endpoint's `whsec_...` secret. |

## Verify signatures

Compute the HMAC over the exact raw body:

```js
import crypto from "node:crypto";

const expected = `sha256=${
  crypto.createHmac("sha256", secret).update(rawBody).digest("hex")
}`;
const signature = request.headers["x-anarlog-signature"];
const received = typeof signature === "string" ? signature : "";
const valid =
  Buffer.byteLength(received) === Buffer.byteLength(expected) &&
  crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
```

Verify the raw body before parsing it. For replay protection, reject stale signed `created_at` values and store each payload `id` so retries are processed once.

## Limits

<Warning>
  Deliveries only run while the desktop app is open. Events that occur while it is closed are dropped, not queued for later delivery.
</Warning>

Anarlog delivers to at most 64 endpoints per event and runs at most 4 deliveries at a time.

---

### Enterprise Docs Teams Capture (`enterprise/docs/teams-capture.md`)

# Microsoft Teams enterprise capture

## Selected connector

Anarlog does **not** use a Chromium bot against the Teams web client. That path is unsupported against current Teams terms and DOM churn.

The supported connector is a **Microsoft Graph application-hosted media bot** running as a Windows sidecar. The sidecar speaks the MIT `MeetingSdkBridge` protocol (JSON lines) to `anarlog-enterprise-meeting-sdk-bridge-worker`, which normalizes events onto the shared capture contract (`CaptureProviderKind::MicrosoftGraph`, `MeetingPlatform::MicrosoftTeams`).

## Official alternative and constraints

Graph application-hosted media requires:

- Azure subscription and a Teams app with application-hosted media
- Windows Server for the media bot runtime
- Certificate/app registration, organizer policy, and lobby admission under tenant admin control

This is **not** deployable on Linux-only clusters or a fully air-gapped network that cannot reach Teams/Graph.

## Reliability matrix

Replay fixtures in `enterprise/meeting-sdk-bridge-worker/tests/teams_reliability.rs` cover:

| Scenario                              | Terminal reason              |
| ------------------------------------- | ---------------------------- |
| Admitted then capturing               | (non-terminal)               |
| Lobby timeout                         | `admission_timeout`          |
| Organizer denied                      | `admission_denied`           |
| Removed by organizer                  | `removed_from_meeting`       |
| Meeting ended                         | `meeting_ended`              |
| Participant upsert / leave / captions | non-terminal until host ends |

## Deployment modes

| Mode                                       | Supported           |
| ------------------------------------------ | ------------------- |
| Customer Azure + Windows Server sidecar    | yes                 |
| Linux-only Helm capture chart              | no (Meet/Zoom only) |
| Air-gapped / no Graph                      | no                  |
| Browser worker against teams.microsoft.com | no                  |

---

### Enterprise Docs Zoom Rtms (`enterprise/docs/zoom-rtms.md`)

# Zoom RTMS enterprise capture

Anarlog captures Zoom through [Realtime Media Streams](https://developers.zoom.us/docs/rtms/), not a browser bot. The meeting materializes as an Anarlog session from RTMS audio, transcript, chat, and participant events.

## Customer tenant prerequisites

1. Zoom account on a plan that includes **Zoom Developer Pack** / RTMS.
2. A Zoom app with RTMS scopes installed to the customer tenant (account-level).
3. Host or admin approval for the Anarlog app, plus any required recording disclosure in the Zoom admin console.
4. Webhook endpoint on the Anarlog control plane (`POST /webhooks/zoom`) with `ANARLOG_ENTERPRISE_ZOOM_WEBHOOK_SECRET`.
5. Control-plane env:
   - `ANARLOG_ENTERPRISE_ZOOM_CLIENT_ID`
   - `ANARLOG_ENTERPRISE_ZOOM_CLIENT_SECRET`
   - `ANARLOG_ENTERPRISE_ZOOM_ACCOUNT_WORKSPACES` mapping Zoom account IDs to Anarlog workspace IDs

## Runtime

The control plane verifies Zoom webhooks, creates a durable capture job, and hands the RTMS session to `anarlog-enterprise-zoom-rtms-worker`. Stream reconnect, terminal reasons, and meeting finalization follow the shared capture contract. There is no visible third-party browser participant.

## Limits

- RTMS cannot join meetings the Zoom account is not authorized to record.
- Air-gapped deployments cannot reach Zoom's cloud media edge.
- Video frames are metadata-only in v1; audio + transcript + chat + participants are the durable session.

---

### Enterprise Deploy Docs Operations (`enterprise/deploy/docs/operations.md`)

# Capture data plane operations

This is the customer-hosted meeting capture distribution. Evaluation Compose does not require an offline license. Production Compose and Helm do.

## Layout

| Mode               | Manifest                                 | License  | Typical use                          |
| ------------------ | ---------------------------------------- | -------- | ------------------------------------ |
| Evaluation         | `enterprise/control-plane/compose.yaml`  | optional | Single-box soak of the control plane |
| Production Compose | `enterprise/deploy/compose.prod.yaml`    | required | Compose on customer VMs              |
| Production Helm    | `enterprise/deploy/helm/anarlog-capture` | required | Kubernetes                           |

Pinned images live in the Compose files and Helm `values.yaml`. Do not float untagged `latest`.

## Secrets

Customer-managed, never committed:

- `ANARLOG_ENTERPRISE_WORKSPACE_TOKENS` / Helm `workspaceTokens.existingSecret`
- `ANARLOG_ENTERPRISE_LICENSE` + `ANARLOG_ENTERPRISE_LICENSE_KEY`
- Postgres and object-storage passwords
- Optional Zoom client/webhook secrets
- Optional customer STT URL (`ANARLOG_ENTERPRISE_STT_URL`)

Offline license validation uses HMAC-SHA256 over versioned claims. Telemetry is not exported; scrape `/health/live` and `/health/ready` from customer-owned collectors.

## Health, backups, upgrades

- Control plane liveness/readiness: `/health/live`, `/health/ready`.
- Back up Postgres volume `postgres-data` (durable jobs, leases, scheduled captures), object storage `object-data`, and the Meet worker recordings PVC separately.
- Schema migrations are additive. Roll forward by deploying the new image; roll back by redeploying the previous image so long as no `-- breaking` migration was applied.
- Capture workers are fenced by durable leases. A crashed replica does not strand a job: another worker can reclaim after lease expiry.

## Capture workers

Google Meet workers join as a visible Anarlog participant. If `ANARLOG_ENTERPRISE_CAPTURE_JOB_ID` is unset they poll dispatched calendar jobs for the workspace. Zoom uses RTMS in the control plane (no browser bot). Optional STT is customer-hosted; leaving `ANARLOG_ENTERPRISE_STT_URL` empty keeps transcript finalization local to whatever the worker is configured with.

## Network

The data plane must reach the meeting platform (Meet, Zoom, or Teams). A fully air-gapped cluster cannot join public cloud meetings. Outbound policy should allow only the meeting provider, customer STT, and object storage.

## Stock client

Point the stock Anarlog desktop/web client at the customer control plane workspace token and session ingest endpoints. No Fastrepl-operated capture service is required after this package is running.

---

### Enterprise Docs Planning Access Control Remote Deletion (`enterprise/docs/planning/access-control-remote-deletion.md`)

# Enterprise access control and remote deletion

ANLG-133. Spec only.

## v1 admin surface

Roles: workspace owner, admin, member. Owners transfer/delete the workspace. Admins manage members, invitations, share policy, retention, SSO/SCIM domain, and usage overview. Members read allowed share scopes and honor them in the share panel.

Non-goals for v1: folder ACLs, per-note classification labels, MDM APIs, agent-specific roles, org-wide audit log UI beyond share access events.

## Revocation

- Remove member or SCIM deprovision: membership `deleted_at`, `sync_devices` deleted, E2EE workspace key rotation (ANLG-211).
- Sign out everywhere revokes refresh tokens.
- Offline devices keep local ciphertext until they next sync; they cannot decrypt rotated workspace keys.

## Remote deletion

Retention job `enforce_workspace_retention` soft-deletes expired `session_shares` and drops snapshots. CloudSync then stops serving those rows; local mirrors delete on next sync. Hard technical constraint: a device that never comes online cannot be forced to wipe. v1 states that limitation instead of pretending MDM exists.

Audit: `session_access_events` is the share access log. Org-wide admin audit of exports/deletes is later.

## Policy controls in v1

Allowed share scopes, default scope, retention days, model-training opt-out, consent notification default, require SSO.

---

### Enterprise Docs Planning Compliance Procurement (`enterprise/docs/planning/compliance-procurement.md`)

# Compliance and procurement roadmap

ANLG-136.

## Immediate (sales/procurement, no certification claimed)

- DPA, privacy policy, ToS, subprocessor list
- Security questionnaire answers grounded in: local-first E2EE, customer-hosted capture option, metadata-only analytics, offline license, no mandatory telemetry
- Incident response and access-review procedures for Fastrepl-operated cloud
- Data residency: customer-hosted data plane in the customer's region; Fastrepl cloud is US unless a certified-cloud SKU exists

## Certification programs (later, separately funded)

1. SOC 2 Type I then Type II for Fastrepl-operated cloud and control plane
2. ISO 27001 after SOC 2 evidence exists
3. AIUC-1 for agent access once CLI/MCP permission boundaries are productized (ANLG-138)
4. HIPAA: only if we take on BAAs for certified-cloud; self-hosted customers own their covered-entity posture

Do not claim "HIPAA compliant" or "SOC 2" in product copy until the named program is complete.

---

### Enterprise Docs Planning Consent Model (`enterprise/docs/planning/consent-model.md`)

# Meeting recording disclosure and consent model

Parent: ANLG-135.

Posting a recording/transcription disclosure is an opt-in transport. A sent disclosure is not proof that every participant consented. Anarlog keeps disclosure delivery and consent evidence as separate product concepts.

## V1 Slack huddle transport

- `consent_auto_send_chat` defaults to false.
- After listening starts, Anarlog may post one disclosure to the recognized native Slack Huddle chat (macOS Accessibility only).
- Delivery is once-per-session, with bounded retry/cancellation. Posting failure never stops listening.
- The disclosure is excluded from captured Memos.
- Safe chat mutation stays disabled for Zoom, Meet, Teams, Webex, and browser surfaces until each has controlled live validation.

## Evidence vs consent

| Event                                                                       | Product meaning                                                  |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `session_disclosure_attempts` row with `delivery = sent`                    | Transport evidence only                                          |
| `session_participant_consent.status = unknown`                              | Default, including late joiners                                  |
| `status = consented` with `source` in `explicit_chat_reply` / `explicit_ui` | That participant answered; not legal consent for the room        |
| `status = declined`                                                         | Stop listening. Still not a legal record of anyone else's choice |

`sessionHasLegalConsent()` is always false. Schema CHECK constraints reject a `disclosure_sent` consent source. These tables are local-only and are not in CloudSync or the E2EE domain.

## Decline, late joiners, unseen chat

- Anyone declining stops listening.
- Late joiners start `unknown` / `unseen`.
- Participants who cannot see huddle chat remain `unknown`.
- Regional defaults, DPA language, and whether chat replies are sufficient evidence are counsel questions, not product defaults.

## Enterprise controls

Workspace admins can require or forbid auto-posting later via policy. They must not get an "everyone consented" dashboard derived from disclosure delivery.

## Live verification

Slack huddle AX send is macOS-only (`send_meeting_chat_message`). Linux/cloud agents cannot complete controlled live huddle testing. Unit and fixture coverage lives in `crates/detect` and `apps/desktop/src/stt/meeting-consent.test.ts`.

---

### Enterprise Docs Planning Deployment Options (`enterprise/docs/planning/deployment-options.md`)

# Self-hosted and certified-cloud deployment

ANLG-137.

## v1 recommended story

Ship a **customer-controlled data plane**: commercially licensed control plane + Postgres + object storage + Meet worker + optional Zoom RTMS, running in the customer's VPC. The MIT desktop/web client still runs on Mac and Windows endpoints. This is not AGPL and not an air-gapped meeting joiner.

Eval: `enterprise/control-plane/compose.yaml`. Prod: `enterprise/deploy/compose.prod.yaml` and Helm chart `anarlog-capture`. Operations: `enterprise/deploy/docs/operations.md`.

## Later SKUs

- Certified cloud: Fastrepl operates the same images in a named region under a BAA/DPA
- Full self-host of sync/auth (Supabase) is a separate product; v1 still uses Fastrepl or customer Supabase for identity
- Windows vs Mac local data paths stay in the MIT client; capture workers are Linux containers except the Teams Graph sidecar (Windows Server)

## Tradeoffs

Customers who need "no Fastrepl in the data path for meetings" take the Helm chart. Customers who need "no public meeting egress" cannot capture Meet/Zoom/Teams. Customers who need Teams take Azure + Windows Server after the Meet reliability gate (ANLG-232).

---

### Enterprise Docs Planning Inference Routing (`enterprise/docs/planning/inference-routing.md`)

# Enterprise-controlled inference routing

ANLG-132.

## Modes

Transcription:

- Local machine (on-device STT already in the desktop app)
- Customer-hosted STT (`ANARLOG_ENTERPRISE_STT_URL` on capture workers)
- Approved third-party cloud (BYO key in settings)
- Certified-cloud provider (later Fastrepl-operated region)

LLM:

- Local model
- Customer-hosted gateway
- Approved external API (BYO key)
- Certified-cloud provider (later)

## Policy

Workspace policy `model_training_opt_out` defaults on for enterprise. Admins can disable external model calls by leaving only local/customer-hosted providers in the allowed set. The desktop AI settings surface names the destination ("this computer", "your gateway", "approved cloud") and never the plumbing.

v1 ships the policy flag and customer STT URL. Enforced provider allowlists in the LLM/STT proxies are the next implementation slice.

---

### Enterprise Docs Planning No Lock In (`enterprise/docs/planning/no-lock-in.md`)

# No-lock-in data and agent access

ANLG-138.

## Promise

Customers can inspect, export, automate, and leave with their Anarlog data. Notes are local-first SQLite. Cloud holds ciphertext plus metadata. Agents see only what the user (or workspace policy) grants.

## Durable surfaces (v1)

- Desktop/CLI against the local SQLite canonical model
- MCP tools that call the same local/session APIs
- Structured export of sessions (markdown/JSON) from the client
- Session ingest envelopes from the customer-hosted capture plane

## Later

Versioned HTTP API for automation, workspace-scoped agent tokens, and offboarding bundles that include E2EE key material the customer already holds.

## Boundaries

Local recordings and notes never become server-readable to satisfy an agent. Workspace remote deletion (ANLG-133) can drop cloud ciphertext; offline devices remain a disclosed limitation. Agent write-back is limited to the same session document schema the human editor uses.

---

### Enterprise Docs Planning Owned Stack Roadmap (`enterprise/docs/planning/owned-stack-roadmap.md`)

# Enterprise owned-stack readiness roadmap

Parent: ANLG-131.

Anarlog's enterprise position is that customers can own every sensitive part of the stack. The community application and shared contracts stay MIT. Enterprise orchestration, administration, deployment, licensing, and meeting-bot services are commercially licensed.

## v1 advocacy vs later certification

v1 is a customer-controlled data plane plus admin controls that are true in product, not marketing:

- Local-first notes on Mac and Windows
- Customer-hosted capture (Google Meet visible bot, Zoom RTMS)
- Workspace policies, SSO/SCIM, metadata-only usage analytics
- Offline license validation, no mandatory telemetry
- CLI/MCP/export as the no-lock-in surface

Later: SOC 2 / ISO 27001 / AIUC-1 / HIPAA programs, certified-cloud SKU, Teams Graph media bot in Azure, MDM remote wipe, virtual-camera disclosure.

## Workstreams

| Workstream           | Tickets                 | v1 vs later                                          |
| -------------------- | ----------------------- | ---------------------------------------------------- |
| Capture data plane   | ANLG-223 and children   | Meet + Zoom v1; Teams after Meet reliability         |
| Inference routing    | ANLG-132                | Policy model v1; certified-cloud providers later     |
| Admin / deletion     | ANLG-133, 216, 217, 218 | Policies + SSO/SCIM + analytics v1; MDM later        |
| Disclosure / consent | ANLG-134, 135           | Slack huddle transport v1; virtual camera later      |
| Trust / procurement  | ANLG-136                | Questionnaires and DPA v1; certifications later      |
| Deployment SKUs      | ANLG-137, 233           | Customer-hosted data plane v1; certified cloud later |
| No lock-in           | ANLG-138                | CLI/MCP/export v1; public HTTP API later             |

## Platform constraints

- Mac and Windows both ship the MIT client. Linux is a cloud-agent/dev target, not a GA desktop SKU.
- Local-first SQLite remains the source of truth on device. Cloud rows are ciphertext plus metadata.
- Customer-hosted capture still needs egress to Meet/Zoom/Teams. Air-gap is "private data plane", not "join public meetings offline".

---

### Enterprise Docs Planning Virtual Camera Disclosure (`enterprise/docs/planning/virtual-camera-disclosure.md`)

# Virtual camera disclosure

ANLG-134.

## Verdict

Not v1. Technically viable later on both Mac and Windows, with a high installer/signing cost and uneven meeting-app compatibility.

## macOS

System extension / Camera Extension (CoreMediaIO) can publish a virtual camera. Meeting apps that list cameras (Zoom, Meet via Chrome, Teams) generally can select it. Requires notarization, TCC camera permission, and a separate extension target. Overlaying a "Recording" chip on the outgoing feed is the useful disclosure UX. Replacing the real camera entirely is too invasive for enterprise defaults.

## Windows

A virtual camera driver (DirectShow / Media Foundation, or OBS-style) can do the same. Signing (EV cert + attestation) and enterprise deployment via Intune/MSI are the real cost. Teams and Zoom on Windows honor virtual cameras; some GPU capture paths do not.

## Product decision

v1 disclosure is chat/email/bot-visible participant (ANLG-135), not a virtual camera. Revisit after capture reliability and when a customer is blocked on visual disclosure specifically.

---

--- METRICS ---
- Files Extracted: 52
- Estimated Token Budget: ~51672 tokens
- Canonical Reference: https://codewiki.google/github.com/fastrepl/anarlog
