Technical Documentation: fastrepl/anarlog
ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference
Overview (README.md)
Note: The team is now building char. 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.
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 for the current routes, local model list, and privacy boundaries.
Get started
- Download Anarlog for macOS, Windows, or Linux.
- Open it and join a meeting. anarlog records on your device and transcribes with the model you selected.
- Generate a note, edit it like a document, and export Markdown when you need it.
- Optional: connect an LLM provider or a local model in settings for summaries and chat.
Product docs live at docs.anarlog.so. To build the desktop app or website from source, follow 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 1.122.0 or later (brew install process-compose on macOS), and the Tauri v2 system dependencies. 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 scripts/setup-linux.shInstall the workspace and start the app you want to work on:
pnpm install --frozen-lockfile
pnpm dev:desktop
# or
pnpm dev:webProcess 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 for backend setup, process controls, validation commands, code ownership, and the contribution workflow. Ask DeepWiki 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 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 before opening a pull request.
- Join the community on Discord or r/anarlog.
Contributions outside enterprise/ are distributed under the MIT license.
License
- Community application: MIT
- Enterprise components: commercial
- Full boundary: LICENSING.md
Maintained by fastrepl.
Contributors
README (`docs/README.md`)
Anarlog documentation
This Mintlify project is published at 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:
- Add the verification records shown in the dashboard.
- Wait for both records and TLS provisioning to verify.
- Point the
docsCNAME 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:
npm install mint
cd docs
mint devUpdate 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:
mint validate
mint broken-links --check-anchors --check-redirectsIndex (`docs/index.mdx`)
title: "Anarlog"
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.
Popular questions
The short version
- Open a calendar event or create a note.
- Click Join & record or Record.
- Take rough notes in Memos while Anarlog listens.
- 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 for the exact boundaries.
Quickstart (`docs/quickstart.mdx`)
title: "Your first meeting"
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 for the full flow.
If Anarlog cannot hear the call, start with audio troubleshooting.
Agents Overview (`docs/agents/overview.mdx`)
title: "Agent overview"
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
- 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. - 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.
- Use a returned meeting ID. Never infer or invent one.
- Fetch the meeting detail before requesting transcript text.
- Fetch recurring history only when earlier meetings are relevant.
- 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 before enabling it.
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.rsas the CLI command contract. - Treat
apps/cli/src/mcp.rsas 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
Anarlogfor the product andanarlogfor the executable. - Use root-relative links between Mintlify pages. Use
https://docs.anarlog.soin 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.jsonafter 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 validateandmint broken-links --check-anchors --check-redirectsfromdocs/before deploying.
Ai Setup (`docs/ai-setup.mdx`)
title: "Transcription and AI"
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 explains the current Anarlog Cloud routes, built-in on-device models, and how bring-your-own-provider requests work.
Choose a setup
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. For every on-device transcription path, see How can I 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?.
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:
- Turn on Apple Intelligence in System Settings and wait for its model to finish downloading.
- In Anarlog, open Settings → Intelligence → Configure Providers → Apple Intelligence.
- Select System Language Model under Model being used.
LM Studio
- Install LM Studio and download a model.
- Start its local server on port
1234and enable CORS. - In Anarlog, open Settings → Intelligence → Configure Providers → LM Studio.
- Select the LM Studio model under Model being used.
Ollama
Install Ollama.
Start it and pull a model:
bashollama serve ollama pull llama3.2In Anarlog, open Settings → Intelligence → Configure Providers → Ollama.
Select the Ollama model under Model being used.
Unsloth
- Install Unsloth Desktop and load a model.
- Start its local server on port
8888and copy the API key. It starts withsk-unsloth-. - In Anarlog, open Settings → Intelligence → Configure Providers → Unsloth and paste the API key.
- 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 for a feature-by-feature explanation.
Automatic Capture (`docs/automatic-capture.mdx`)
title: "Automate meeting capture"
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 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.
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.
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"
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. |
- Select the starter.
- Connect the service or choose the local folder it needs.
- Review the trigger, source content, and result preview.
- 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:
- Choose when it should run: after the meeting summary is ready, or after the meeting ends.
- Add one or more actions: Slack recap, Notion update, Linear issues, or Markdown export.
- Configure each destination.
- 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.
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"
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.
- Choose Apple Calendar.
- Allow Calendar access when macOS asks.
- 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
- Sign in to Anarlog.
- Choose Google Calendar, then finish authorization in your browser.
- Return to Anarlog and enable the calendars you want to sync.
Outlook Calendar
- Sign in to Anarlog.
- Choose Outlook Calendar, then finish authorization in your browser.
- 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:
- Open Calendar.
- Hover over or right-click Apple Calendar.
- 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:
- Open Calendar and expand Google or Outlook.
- Hover over or right-click the connected account heading.
- 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, the Microsoft My Apps portal for a work or school account, or Microsoft account app access 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:
- Export anything you want to keep, then quit Anarlog.
- In Finder, choose Go → Go to Folder.
- Move any of these folders that exist to Trash:
~/Library/Application Support/anarlog~/Library/Application Support/hyprnote~/Library/Application Support/com.hyprnote.stable
- 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 [email protected].
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"
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
- Open a meeting note.
- Open Chat.
- 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.
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.
Contacts (`docs/contacts.mdx`)
title: "Contacts and CRM"
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
- Sign in to Anarlog and open Settings → CRM.
- Choose Connect beside HubSpot, Attio, or Pipedrive, then finish authorization in your browser.
- 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"
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
- Open Settings → Templates.
- Select Auto.
- Edit Summary format, then click Save.
For example:
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 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"
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 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 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.
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 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 uploads the generated summary and any audio you explicitly include. Your private memo is not part of the shared note.
- 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, 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 for the current Anarlog Cloud routes and how direct provider requests work.
Keep a meeting fully local
- Select an on-device model under Settings → Transcription.
- Select LM Studio, Ollama, Unsloth, or eligible Apple Intelligence under Settings → Intelligence.
- Avoid cloud sync, share links, Cloud API & Connectors, and hosted providers for that content.
See Use Anarlog 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
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.
Desktop Installation (`docs/desktop-installation.mdx`)
title: "Install the desktop app"
Download Anarlog 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
- Download the DMG that matches your Mac.
- Open the DMG and move Anarlog to Applications.
- Open Anarlog and follow the setup screen.
- Allow microphone, system audio, and calendar access when you want to use those features.
Windows
- Download the Windows x64 installer or get Anarlog from Microsoft Store.
- For the direct download, run the EXE and follow the installer. Microsoft Store handles installation and updates automatically.
- Open Anarlog and complete setup.
- 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:
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 anarlogAPT 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:
sudo apt install ./anarlog-*.debAppImage
For an AppImage, make it executable and open it:
chmod +x ./anarlog-*.AppImage
./anarlog-*.AppImageOn Wayland with an NVIDIA GPU, if the window is black or only audio plays, launch with:
WEBKIT_DISABLE_DMABUF_RENDERER=1 ./anarlog-*.AppImageIf the window is still black, also disable compositing:
WEBKIT_DISABLE_DMABUF_RENDERER=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 ./anarlog-*.AppImageCurrent 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:
git clone https://github.com/fastrepl/anarlog.git
cd anarlog/packaging/aur/anarlog-bin
makepkg -siThe 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 and local models for 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 on iOS and Google Play beta on Android.
When installation is complete, continue to Your first meeting. If the app does not open or cannot capture audio, see Troubleshooting.
Nightly
Anarlog Nightly is no longer published and does not receive updates. Install
the stable app 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.
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"
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
- Open Settings → Dictation and enable dictation.
- Record your preferred shortcut and choose a microphone.
- Use Language & transcription to choose the language and Transcription provider. Hosted providers receive your audio; a supported local provider keeps transcription on your computer.
- Allow microphone access and any permissions requested under Settings → Permissions. On macOS, text insertion needs Accessibility permission.
- 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"
Browse a topic, then expand the question. If something is not working, go to Troubleshooting. For a question not covered here, email [email protected] or join Discord.
Transcription and cost
| 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).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).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).Recording and notes
AI, offline use, and privacy
| 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).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).Sharing, sync, and automation
Platforms and developer tools
Import Recordings (`docs/import-recordings.mdx`)
title: "Import audio or a transcript"
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 instead.
Import audio
- Create a New Note or open an empty note.
- Open the ••• menu and choose Upload audio.
- Select a supported audio file.
- 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
- Create a New Note or open an empty note.
- Open the ••• menu and choose Upload transcript.
- 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 for model setup or Troubleshooting for common failures.
Imports (`docs/imports.mdx`)
title: "Import meeting history"
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.
Import exported meetings
- Export your meetings from the original assistant.
- Open Settings → Imports in Anarlog.
- Find the detected assistant and click Import.
- Select one or more JSON, CSV, Markdown, text, VTT, or SRT export files.
- 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.
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 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.
See Troubleshooting if no supported app appears or an export fails.
Installation (`docs/installation.mdx`)
title: "CLI installation"
Current availability
The anarlog executable includes both the CLI and the local MCP server.
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:
export PATH="$HOME/.local/bin:$PATH"On Windows, open a new terminal after installing so the PATH update applies.
Build from source
To build the CLI yourself instead:
git clone https://github.com/fastrepl/anarlog.git
cd anarlog
cargo install --locked --path apps/cli
anarlog --versioncargo 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:
anarlog --db-path /path/to/app.db --json meetings list
ANARLOG_DB_PATH=/path/to/app.db anarlog --json meetings listIf you have an Anarlog data directory containing app.db, use:
anarlog --base /path/to/anarlog-data --json meetings listThe 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"
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
.binyou select. - A bring-your-own-key provider uses that provider's language list. See How can I 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.
Meetings (`docs/meetings.mdx`)
title: "Record meetings"
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.
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 for supported formats and the complete flow.
For automatic start, meeting detection, and stop controls, see Automate meeting capture.
Models And Providers (`docs/models-and-providers.mdx`)
title: "Models and providers"
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.
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-v5live andstt-async-v5after 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-realtimefor live transcription anduniversal-3-5-proafter 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:
google/gemini-3.1-pro-previewgoogle/gemini-3.6-flashmistralai/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.
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 |
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 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-liveduring the meeting,gemini-3.5-transcribeafter recording) - AssemblyAI Universal 3.5 Pro (
universal-3-5-pro-realtimeduring the meeting,universal-3-5-proafter 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
:freemove 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?. For every on-device path, see How can I use on-device models?. For a fully local checklist, see Use Anarlog offline. For the data sent by each feature, see Data, privacy, and retention.
Notes (`docs/notes.mdx`)
title: "Notes, summaries, and transcripts"
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.
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 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 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
- Open the ••• menu in the meeting header.
- Choose Export.
- Select PDF, text, Markdown, or Org format.
- 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"
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
.binon 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
- Open Settings → Transcription.
- 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. - Download the Soniqo model. For Apple Speech, add the supported language in macOS System Settings.
- Select the model under Model being used.
- 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, Ollama, or Unsloth 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? for each transcription path, Models and providers for the current model list, and Data, privacy, and retention for what each provider receives.
Security (`docs/security.mdx`)
title: "Security and procurement"
Enterprise buyers should start at the Anarlog security page. 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 for the in-app settings that control audio retention, analytics, and a fully local meeting.
Documents
- Security
- Privacy Policy
- Terms of Service
- Data Processing Addendum: email [email protected]
Report a vulnerability
Use private GitHub reporting or email [email protected]. See the repository security policy.
Sharing (`docs/sharing.mdx`)
title: "Share meetings"
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
- Open a meeting with a generated summary.
- Click Share in the meeting header.
- 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.
- 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.
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 to create a workspace, manage members, or share reusable folders, templates, and automations.
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 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 for what sharing sends to Anarlog's hosted service.
Skill (`docs/skill.md`)
name: anarlog
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
- Honor an explicit local-only or Cloud request. Do not silently switch its source.
- Otherwise, prefer a connected local MCP server. If shell access is available, select the CLI executable available on
PATH:anarlog-clion Flatpak, otherwiseanarlog. Use that executable for every CLI command below, including the--json doctorreadiness check. Read with the selected executable and--json meetings --source local listwhen ready, even if Cloud MCP is connected. - 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, andget_recurring_meeting_history. If MCP is unavailable but CLI login is available, use the selected executable with--json meetings --source cloud listfor the same hosted snapshots. - 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.
- Local reads need no Cloud login, Pro subscription, or completed sync. If neither source is available, offer local CLI installation 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
- 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.
- Use a meeting ID returned by the search. Never guess one.
- Get the meeting before requesting its transcript. Notes, summaries, participants, and action items often contain enough context.
- Ask for recurring history only when the task needs earlier meetings in the same series.
- 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 and MCP tools.
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_atis 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_offsetonly 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
--forceunless 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 and errors.
Sync (`docs/sync.mdx`)
title: "Cloud sync"
Cloud sync keeps your notes up to date across your signed-in devices. It is part of Anarlog Pro.
Turn sync on or off
- Open Settings → Sync.
- 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.
See Data, privacy, and retention 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.
Add another device
- Install Anarlog and sign in with the same Pro account on the new device.
- Keep Anarlog open and sync enabled on an existing synced device. It transfers the key automatically; no approval button is required.
- Keep the new device open while it connects and downloads your notes. If all existing devices are offline, setup waits until one comes online.
- 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.
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 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:
- Check that the device is online and that a firewall, VPN, or proxy is not blocking
api.anarlog.so. Openinghttps://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. - Check the date and time on this device. A wrong clock makes sync credentials expire immediately; Anarlog reports this as a clock problem.
- Keep Anarlog open. A large first download can take several minutes and resumes if the app was closed.
- Turn Cloud sync off and on again from Settings → Sync.
- 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 [email protected] 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.
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"
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
- Sign in to Anarlog.
- Open Settings → Teams.
- Enter a workspace name and click Create. If workspace creation is locked, upgrade to Pro first.
- 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.
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 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.
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:
- Open the folder, template, or automation and click Share.
- Under Team library, choose a workspace.
- 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 for current prices and plan availability.
Troubleshooting (`docs/troubleshooting.mdx`)
title: "Troubleshooting"
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.
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 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.
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.
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 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.
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.
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.
See Cloud 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:
chmod +x ./anarlog-*.AppImageFor Debian or Ubuntu, install the DEB with sudo apt install ./anarlog-*.deb so the package manager can resolve dependencies. See Install the desktop app.
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:
WEBKIT_DISABLE_DMABUF_RENDERER=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 ./anarlog-*.AppImageThe same variables work for the installed anarlog command. See Install the desktop app.
Get more help
Email [email protected], join Discord, or open a GitHub issue.
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.
For CLI and MCP errors, use the error reference.
Zoom (`docs/zoom.mdx`)
title: "Import Zoom meetings"
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.
Before you connect
- Install Anarlog 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
- Open Settings → Imports in Anarlog. You can also connect during the Bring your meeting history onboarding step.
- Find Zoom and select Connect. Sign in to Anarlog if prompted.
- In the browser, sign in to the intended Zoom account and review the requested permissions.
- Authorize Anarlog and return to the desktop app. Keep Anarlog open while the import completes.
- 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 for the import result categories.
Disconnect and remove access
- Open Settings → Imports in Anarlog.
- On the Zoom row, select Disconnect and complete the browser flow if prompted.
- Return to Anarlog and confirm that Zoom offers Connect again.
To revoke access directly in Zoom:
- Sign in to the Zoom App Marketplace with the connected account.
- Open My Library and find Anarlog.
- Under Actions, open the More menu, select Remove, and confirm the removal.
See Zoom's app removal instructions 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 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 and sharing follow your app settings. Read the Privacy Policy and Terms of Service.
For help, email [email protected]. 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"
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
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 10Search is case-insensitive across meeting titles and IDs. If several meetings match, ask the user to choose one.
Read the smallest useful surface
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 0Use meetings get when participants or action items matter. Use meetings note when note content alone is enough.
Stage an edit
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_IDTranscripts
anarlog --json meetings transcript MEETING_ID --limit 200 --offset 0Transcript limits are measured in words. A page defaults to 200 words and caps at 500. Stop paging once you have enough evidence.
Diagnose setup
anarlog --json doctorThe 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:
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.jsonSee the CLI reference for every option.
Agents Mcp (`docs/agents/mcp.mdx`)
title: "MCP for agents"
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 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.
Clients that do not install plugins can add:
{
"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.
{
"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:
{
"mcpServers": {
"anarlog": {
"command": "anarlog",
"args": ["--db-path", "/path/to/app.db", "mcp"]
}
}
}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 for exact parameters and resources.
Agents Skills (`docs/agents/skills.mdx`)
title: "Anarlog skill"
The public Anarlog skill teaches agents a single workflow across Cloud MCP and the local CLI:
- Prefer local MCP or
anarlog --json meetings --source local listwhen the agent can access your database. - Use OAuth-connected Cloud MCP when running remotely or when local access is unavailable.
- Resolve meeting IDs from search results.
- Fetch meeting detail before transcript text.
- Keep transcript reads bounded and never access SQLite directly.
Sources
- Published skill:
https://docs.anarlog.so/skill.md - Repository package:
skills/anarlog - Agent plugin:
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 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.
For Claude Code:
claude plugin marketplace add fastrepl/anarlog
claude plugin install anarlog@fastreplFor GitHub Copilot CLI:
copilot plugin marketplace add fastrepl/anarlog
copilot plugin install anarlog@fastreplFor ChatGPT and Codex, add the repository source, restart the ChatGPT desktop app, then install Anarlog from the Fastrepl source in the Plugins Directory:
codex plugin marketplace add fastrepl/anarlog \
--sparse .agents/plugins \
--sparse agent-plugins/anarlogUse 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:
npx skills add https://docs.anarlog.soFor 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.
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"
This recipe helps an agent prepare for the next occurrence of a recurring meeting without loading every transcript.
```bash
anarlog --json meetings list --query "project sync" --limit 10
```
Resolve the latest relevant meeting ID from the results.```bash
anarlog --json meetings get MEETING_ID
```
Extract open action items, decisions in notes or summaries, participants, and the meeting's series ID.```bash
anarlog --json meetings history MEETING_ID --limit 5 --offset 0
```
Fetch detail only for earlier meetings that appear relevant.```bash
anarlog --json meetings transcript MEETING_ID --limit 200 --offset 0
```
Continue from `next_offset` only when needed.Reference Api Cloud (`docs/reference/api-cloud.mdx`)
title: "Cloud API and connectors"
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.
Enable cloud access
- Open Settings → Developers → Cloud API & Connectors.
- Review the disclosure and turn the feature on.
- Wait for Anarlog to upload your existing meetings.
- 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:
curl \
-H "Authorization: Bearer anl_..." \
https://api.anarlog.so/v1/meetingsThe 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 for the complete hosted schema.
Errors use this envelope:
{ "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_requiredwhen the account does not have Pro access through a personal plan or an active paid Pro workspace membership.403 cloud_api_not_enabledwhen the account has opted out.429with a plain-textrate limit exceededbody andretry-afterheader 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.
Remote MCP
The Streamable HTTP endpoint is:
https://api.anarlog.so/mcpIt exposes the same five meeting-read tools as the local MCP server:
list_meetingsget_meetingget_meeting_transcriptget_recurring_meeting_historyexport_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:
https://api.anarlog.so/.well-known/oauth-protected-resource/mcpThe 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.
Claude Code
Install the Anarlog plugin:
claude plugin marketplace add fastrepl/anarlog
claude plugin install anarlog@fastreplOr add the remote server directly. Claude discovers OAuth from the MCP endpoint:
claude mcp add --transport http anarlog https://api.anarlog.so/mcpCursor
Import https://github.com/fastrepl/anarlog as a team marketplace and install Anarlog, or add this MCP server:
{
"mcpServers": {
"anarlog": {
"url": "https://api.anarlog.so/mcp"
}
}
}GitHub Copilot CLI
copilot plugin marketplace add fastrepl/anarlog
copilot plugin install anarlog@fastreplChatGPT and Codex
Add the Fastrepl source, restart the ChatGPT desktop app, then install Anarlog:
codex plugin marketplace add fastrepl/anarlog \
--sparse .agents/plugins \
--sparse agent-plugins/anarlogPublic 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:
Add this custom MCP server: https://api.anarlog.so/mcpConfirm 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
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:
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:
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.
Other MCP clients
Choose Streamable HTTP, use https://api.anarlog.so/mcp as the server URL, and add:
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"
Global syntax
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
anarlog auth login
anarlog auth status
anarlog auth logoutauth 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:
anarlog meetings --source cloud list
anarlog meetings --source auto get MEETING_IDlocal 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
anarlog --json doctorChecks 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
anarlog mcpStarts the local MCP server over stdio. Meeting reads are idempotent. Proposal tools stage or decline pending edits without applying them to the meeting.
Help and version
anarlog --help
anarlog auth --help
anarlog meetings --help
anarlog meetings list --help
anarlog --versionManaged 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"
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.
Reference Mcp (`docs/reference/mcp.mdx`)
title: "MCP reference"
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"
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.
To read meeting data instead of receiving it, use the CLI, the local MCP server, or the Cloud API.
Add an endpoint
- Open Settings → Developers → Webhooks.
- Enter an
https://URL and click Add webhook. - Copy the signing secret (
whsec_...). It is shown once. - Click Test to send one
webhook.testdelivery and confirm your endpoint responds.
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:
{
"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:
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
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, not a browser bot. The meeting materializes as an Anarlog session from RTMS audio, transcript, chat, and participant events.
Customer tenant prerequisites
- Zoom account on a plan that includes Zoom Developer Pack / RTMS.
- A Zoom app with RTMS scopes installed to the customer tenant (account-level).
- Host or admin approval for the Anarlog app, plus any required recording disclosure in the Zoom admin console.
- Webhook endpoint on the Anarlog control plane (
POST /webhooks/zoom) withANARLOG_ENTERPRISE_ZOOM_WEBHOOK_SECRET. - Control-plane env:
ANARLOG_ENTERPRISE_ZOOM_CLIENT_IDANARLOG_ENTERPRISE_ZOOM_CLIENT_SECRETANARLOG_ENTERPRISE_ZOOM_ACCOUNT_WORKSPACESmapping 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/ HelmworkspaceTokens.existingSecretANARLOG_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 storageobject-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
-- breakingmigration 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_devicesdeleted, 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)
- SOC 2 Type I then Type II for Fastrepl-operated cloud and control plane
- ISO 27001 after SOC 2 evidence exists
- AIUC-1 for agent access once CLI/MCP permission boundaries are productized (ANLG-138)
- 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_chatdefaults 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_URLon 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