> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntheo.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Doc ↔ code mapping

> For each user page, the code sources that determine its content.

This page links each documentation page to the sources that determine its content. When you change one of these sources, review the matching pages and update them in the same pull request.

> [!NOTE]
>
> The tests in `apps/cli/src/cli.rs` and `apps/cli/src/mcp/tests.rs` compare the CLI and MCP server contract against `docs/reference/cli.mdx`, `docs/reference/mcp.mdx` and `skills/syntheo/references/`. Changing this contract without updating the documentation makes CI fail.

> [!NOTE]
>
> The interactive reproductions of the app (`docs/snippets/*.gen.jsx`, generated by `scripts/sync-docs-ui.mjs` from `scripts/docs-ui/*.jsx.tpl`) use the colors from `packages/design-system/src/tokens.css`, the labels from `apps/desktop/src/i18n/locales/fr/messages.po` and the icons from `packages/ui/src/components/icons-*.tsx`. A change of color, label or icon is picked up by running the script again; a removed label makes `apps/desktop/src/docs-ui.test.ts` fail. When the structure of a screen changes, update the template listed in [Interactive reproductions](#interactive-reproductions).

## Getting started

| Page | Sources |
| - | - |
| [Syntheo](https://docs.syntheo.studio/en/index.md) | Editorial content, with no source in the code. |
| [Install the app](https://docs.syntheo.studio/en/desktop-installation.md) | `apps/desktop/src-tauri/src/lib.rs` |
| [Uninstall Syntheo](https://docs.syntheo.studio/en/uninstall.md) | `plugins/store2` `crates/storage` `crates/brand` |
| [Set up transcription and AI](https://docs.syntheo.studio/en/ai-setup.md) | `packages/provider-validation` `packages/store` `crates/owhisper-client` `crates/owhisper-interface` `crates/openai-transcription` `crates/ws-client` `plugins/transcription` `plugins/store2` `apps/desktop/src/ai` `apps/desktop/src/onboarding` `apps/desktop/src/settings/ai/stt` `apps/desktop/src/settings/ai/llm` |
| [Your first meeting](https://docs.syntheo.studio/en/quickstart.md) | `plugins/permissions` `apps/desktop/src/home` `apps/desktop/src/onboarding` |
| [The Syntheo philosophy](https://docs.syntheo.studio/en/philosophy.md) | Editorial content, with no source in the code. |

## Using Syntheo

| Page | Sources |
| - | - |
| [Record a meeting](https://docs.syntheo.studio/en/meetings.md) | `packages/editor` `packages/utils` `packages/utils/src/summary-eligibility.ts` `crates/audio` `crates/audio-actual` `crates/audio-device` `crates/device-monitor` `crates/audio-sync` `crates/aec` `crates/vad-masking` `crates/listener-core` `crates/transcription-core` `crates/supervisor` `crates/owhisper-client` `crates/owhisper-interface` `crates/transcript` `plugins/transcription` `plugins/windows` `plugins/db` `plugins/session` `crates/db-app (session_ops, session_lifecycle_ops, session_content_ops, session_move_ops, session_participant_ops)` `crates/db-app (session_transcript_ops, transcript_batch_ops, transcript_live_ops)` `crates/fs-sync-core` `apps/desktop/src/stt` `apps/desktop/src/store/zustand/listener` `apps/desktop/src/store/zustand/ai-task` `apps/desktop/src/services/enhancer` `apps/desktop/src/session` `apps/desktop/src/meeting-float` `apps/desktop/src/settings/general` `apps/desktop/src/session/components/capsule/channel-toggles.tsx` `apps/desktop/src/store/zustand/listener/muted-channels.ts` `apps/desktop/src/settings/general/audio-settings.tsx` `apps/desktop/src/settings/general/speaker-device.ts` `apps/desktop/src/stt/system-audio-change-notice.tsx` `crates/audio-device/src/speaker_output.rs` `plugins/windows/src/window/layer_shell.rs` |
| [Dictate in other apps](https://docs.syntheo.studio/en/dictation.md) | `crates/audio` `crates/owhisper-client` `plugins/dictation` `plugins/shortcut` `apps/desktop/src/dictation` `apps/desktop/src/settings/dictation.tsx` `apps/desktop/src/settings/dictionary` |
| [Automate capture](https://docs.syntheo.studio/en/automatic-capture.md) | `crates/listener-core` `crates/detect` `plugins/detect` `plugins/notification` `plugins/windows` `crates/notification` `crates/notification-interface` `crates/notification-linux` `crates/notification-windows` `apps/desktop/src/stt` `apps/desktop/src/meeting-float` `apps/desktop/src/settings/general` |
| [Import a recording](https://docs.syntheo.studio/en/import-recordings.md) | `crates/audio-utils` `crates/mp3` `crates/listener2-core` `crates/transcription-core` `crates/owhisper-client` `crates/owhisper-interface` `plugins/transcription` `plugins/fs-sync` `crates/db-app (session_transcript_ops, transcript_batch_ops, transcript_live_ops)` `crates/fs-sync-core` `apps/cli/src/commands/recording_import.rs` `crates/agent-access/src/recording_import.rs` `apps/desktop/src/stt` `apps/desktop/src/stt/transcription-route.ts` `apps/desktop/src/stt/batch-eta.ts` `crates/listener-core/src/actors/file_stream` |
| [Notes, summaries and transcripts](https://docs.syntheo.studio/en/notes.md) | `packages/editor` `packages/utils` `packages/utils/src/folders.ts` `crates/transcript` `plugins/db` `plugins/session` `plugins/fs-sync` `plugins/tantivy` `plugins/export` `crates/db-app (session_ops, session_lifecycle_ops, session_content_ops, session_move_ops, session_participant_ops)` `crates/db-app/src/session_review_ops.rs` `crates/db-app/src/summary_ops.rs` `crates/db-app (folder_catalog_ops, attachment_ops)` `crates/fs-sync-core` `crates/export-core` `crates/template-app` `crates/summary` `crates/agent-access/src/export_markdown.rs` `apps/desktop/src-tauri/src/search_index.rs` `apps/desktop/src/session` `apps/desktop/src/folders` `apps/desktop/src/home` `apps/desktop/src/search` |
| [Folders and projects](https://docs.syntheo.studio/en/folders.md) | `apps/desktop/src/folders` `apps/desktop/src/folders/project` `apps/desktop/src/folders/suggestion` `apps/desktop/src/session/components/folder-picker.tsx` `apps/desktop/src/session/components/living-document/fiche-folder.tsx` `apps/desktop/src/session/late-filing.ts` `apps/desktop/src/home` `apps/desktop/src/search/unified` `apps/desktop/src/shared/open-note-dialog.tsx` `apps/desktop/src/shared/palette-search-groups.tsx` `apps/desktop/src/templates/resolution.ts` `crates/db-app (folder_catalog_ops, attachment_ops)` |
| [Customize summaries](https://docs.syntheo.studio/en/customize-summaries.md) | `packages/store` `plugins/template` `crates/db-app/src/summary_ops.rs` `crates/db-app (template_ops, template_types)` `crates/template-app` `crates/template-app/assets` `crates/summary` `apps/desktop/src/templates/auto-form.tsx` `apps/desktop/src/templates/resolution.ts` `apps/desktop/src/folders/folder-template.ts` `apps/desktop/src/store/zustand/ai-task` `apps/desktop/src/services/enhancer` `apps/desktop/src/templates` |
| [Chat with your meetings](https://docs.syntheo.studio/en/chat.md) | `packages/editor` `packages/store` `plugins/session` `plugins/template` `crates/template-app` `crates/template-app/assets` `apps/desktop/src/chat` `apps/desktop/src/composer` `apps/desktop/src/chat/ask-folder.ts` `apps/desktop/src/shared/palette-search-groups.tsx` |
| [Contacts](https://docs.syntheo.studio/en/contacts.md) | `crates/transcript` `plugins/contacts` `crates/db-app (session_ops, session_lifecycle_ops, session_content_ops, session_move_ops, session_participant_ops)` `crates/db-app/src/contact_ops.rs` `apps/desktop/src/contacts` |
| [Automations](https://docs.syntheo.studio/en/automations.md) | `plugins/local-api` `apps/desktop/src/automations` `apps/desktop/src/settings/automations` `plugins/local-api/src/automation_command.rs` `apps/desktop/src/session/components/capsule/automation-menu.tsx` `apps/desktop/src/session/components/outer-header/overflow` `apps/desktop/src/chat/components/body/empty.tsx` |
| [Use multiple languages](https://docs.syntheo.studio/en/languages.md) | `crates/listener2-core` `crates/language` `plugins/transcription` `plugins/template` `crates/template-app` `crates/template-app/assets` `crates/askama-utils` `apps/desktop/src/stt` `apps/desktop/src/i18n` `apps/desktop/src/settings/general` `apps/desktop/src/settings/dictionary` |

## Privacy and security

| Page | Sources |
| - | - |
| [Data and privacy](https://docs.syntheo.studio/en/data-and-privacy.md) | `packages/db` `crates/audio-actual` `crates/listener-core` `plugins/transcription` `plugins/db` `plugins/fs-sync` `plugins/settings` `plugins/store2` `plugins/tracing` `crates/db-core` `crates/db-app/src/managed_settings.rs` `crates/db-app (session_audio_ops, capture_lifecycle_ops, session_hold, session_purge)` `crates/storage` `crates/brand` `apps/desktop/src-tauri/src/db.rs` `apps/desktop/src/services/audio-retention.ts` `apps/desktop/src/lock` `apps/desktop/src/settings/privacy` |
| [Use Syntheo offline](https://docs.syntheo.studio/en/offline.md) | `packages/provider-validation` `crates/listener-core` `crates/owhisper-client` `plugins/transcription` `apps/desktop/src/ai` `apps/desktop/src/settings/ai/stt` `apps/desktop/src/settings/ai/llm` |
| [Security](https://docs.syntheo.studio/en/security.md) | `packages/provider-validation` `plugins/store2` `crates/db-app/src/managed_settings.rs` `apps/desktop/src/lock` `apps/desktop/src/settings/privacy` |
| [Syntheo Desktop and the GDPR](https://docs.syntheo.studio/en/conformite/rgpd.md) | `crates/owhisper-client` `apps/desktop/src/services/audio-retention.ts` `apps/desktop/src/docs-rgpd.test.ts` |

## CLI and agents

| Page | Sources |
| - | - |
| [Install the CLI](https://docs.syntheo.studio/en/installation.md) | `skills/syntheo` `agent-plugins/syntheo` `crates/xtask` `apps/cli/src/db.rs` `apps/cli/src/commands/doctor.rs` `apps/desktop/src-tauri/src/embedded_cli.rs` `apps/desktop/src/settings/developers/cli.tsx` |
| [Agents overview](https://docs.syntheo.studio/en/agents/overview.md) | `skills/syntheo` `agent-plugins/syntheo` `apps/cli/src/commands/proposals.rs` `crates/agent-access/src/proposals.rs` `apps/desktop/src-tauri/src/agents-content.md` `apps/desktop/src/session` |
| [CLI for agents](https://docs.syntheo.studio/en/agents/cli.md) | `skills/syntheo` `crates/db-core` `crates/db-app/src/session_review_ops.rs` `crates/tiptap` `apps/cli/src/db.rs` `apps/cli/src/cli.rs` `apps/cli/src/commands/meetings.rs` `crates/agent-access/src/lib.rs` `apps/desktop/src-tauri/src/embedded_cli.rs` |
| [MCP for agents](https://docs.syntheo.studio/en/agents/mcp.md) | `skills/syntheo` `agent-plugins/syntheo` `crates/db-app/src/session_review_ops.rs` `crates/tiptap` `apps/cli/src/mcp/` `crates/agent-access/src/lib.rs` |
| [Syntheo skill](https://docs.syntheo.studio/en/agents/skills.md) | `skills/syntheo` `agent-plugins/syntheo` `docs/skill.md` `scripts/publish-syntheo-skill.mjs` `apps/desktop/src-tauri/src/agent_skills.rs` `apps/desktop/src/settings/developers/skills.tsx` |

## Recipes

| Page | Sources |
| - | - |
| [Prepare a recurring meeting](https://docs.syntheo.studio/en/recipes/meeting-prep.md) | Editorial content, with no source in the code. |

## Reference

| Page | Sources |
| - | - |
| [CLI reference](https://docs.syntheo.studio/en/reference/cli.md) | `skills/syntheo` `crates/transcript` `crates/tiptap` `apps/cli/src/cli.rs` `apps/cli/src/output.rs` `apps/cli/src/commands/recording_import.rs` `apps/cli/src/commands/proposals.rs` `apps/cli/src/commands/meetings.rs` `apps/cli/src/commands/doctor.rs` `crates/agent-access/src/lib.rs` `crates/agent-access/src/export_markdown.rs` `crates/cli-docs` |
| [MCP reference](https://docs.syntheo.studio/en/reference/mcp.md) | `skills/syntheo` `crates/transcript` `apps/cli/src/mcp/` `crates/agent-access/src/lib.rs` `crates/agent-access/src/recording_import.rs` `crates/agent-access/src/proposals.rs` |
| [Webhooks reference](https://docs.syntheo.studio/en/reference/webhooks.md) | `plugins/local-api` `crates/db-app (webhook_ops, webhook_types)` `apps/desktop/src/settings/developers/webhooks.tsx` |
| [Errors and exit codes](https://docs.syntheo.studio/en/reference/errors.md) | `skills/syntheo` `apps/cli/src/error.rs` |

## Project

| Page | Sources |
| - | - |
| [Architecture](https://docs.syntheo.studio/en/architecture.md) | `packages/db` `crates/listener-core` `crates/owhisper-client` `plugins/tantivy` |
| [Roadmap](https://docs.syntheo.studio/en/roadmap.md) | Editorial content, with no source in the code. |

## Help

| Page | Sources |
| - | - |
| [Frequently asked questions](https://docs.syntheo.studio/en/help.md) | Editorial content, with no source in the code. |
| [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md) | `crates/audio-actual` `crates/audio-device` `crates/device-monitor` `crates/listener-core` `crates/owhisper-client` `crates/ws-client` `plugins/transcription` `plugins/permissions` `plugins/tracing` `apps/cli/src/db.rs` `apps/cli/src/commands/doctor.rs` `apps/desktop/src-tauri/src/lib.rs` `apps/desktop/src-tauri/src/startup.rs` `apps/desktop/src-tauri/src/db.rs` `apps/desktop/src/stt` `apps/desktop/src/settings/ai/stt` |

## Interactive reproductions

Each component in `docs/snippets/*.gen.jsx` reproduces a screen of the app. When the structure of one of these sources changes (order, sections, states), update the matching template in `scripts/docs-ui/`, then run `node scripts/sync-docs-ui.mjs`.

| Component | Pages | Template | Reproduced sources |
| - | - | - | - |
| `<AppSettings>` (menu) | [Record a meeting](https://docs.syntheo.studio/en/meetings.md), [Set up transcription and AI](https://docs.syntheo.studio/en/ai-setup.md), [Use multiple languages](https://docs.syntheo.studio/en/languages.md), [Dictate in other apps](https://docs.syntheo.studio/en/dictation.md), [Automate capture](https://docs.syntheo.studio/en/automatic-capture.md), [Data and privacy](https://docs.syntheo.studio/en/data-and-privacy.md), [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md) | `settings.jsx.tpl` | `apps/desktop/src/sidebar/settings-nav-groups.ts` `apps/desktop/src/sidebar/settings.tsx` `apps/desktop/src/sidebar/settings-server-status.tsx` |
| `<AppSettings section="meetings">` | [Record a meeting](https://docs.syntheo.studio/en/meetings.md), [Automate capture](https://docs.syntheo.studio/en/automatic-capture.md), [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md) | `settings-meetings.jsx.tpl` | `apps/desktop/src/settings/general/index.tsx` `apps/desktop/src/settings/general/meeting-settings.tsx` `apps/desktop/src/settings/general/audio-settings.tsx` |
| `<AppSettings section="transcription">`, `section="intelligence"` | [Set up transcription and AI](https://docs.syntheo.studio/en/ai-setup.md), [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md) | `settings-servers.jsx.tpl` | `apps/desktop/src/settings/ai/stt` `apps/desktop/src/settings/ai/llm` `apps/desktop/src/settings/ai/shared` `packages/provider-validation/src/index.ts` |
| `<AppSettings section="app">` | [Use multiple languages](https://docs.syntheo.studio/en/languages.md) | `settings-profile.jsx.tpl` | `apps/desktop/src/settings/general/index.tsx` `apps/desktop/src/settings/general/account-profile.tsx` `apps/desktop/src/settings/general/app-settings.tsx` `apps/desktop/src/settings/general/main-language.tsx` `apps/desktop/src/settings/general/spoken-languages.tsx` `apps/desktop/src/settings/general/single-language-model-hint.tsx` `apps/desktop/src/settings/general/timezone.tsx` `apps/desktop/src/settings/general/storage` |
| `<AppSettings section="dictation">` | [Dictate in other apps](https://docs.syntheo.studio/en/dictation.md) | `settings-dictation.jsx.tpl` | `apps/desktop/src/settings/dictation.tsx` `apps/desktop/src/settings/dictation-shortcut.tsx` `apps/desktop/src/dictation/state.ts` |
| `<AppSettings section="privacy">`, `section="permissions"` | [Data and privacy](https://docs.syntheo.studio/en/data-and-privacy.md), [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md) | `settings-privacy.jsx.tpl` | `apps/desktop/src/settings/privacy/index.tsx` `apps/desktop/src/settings/general/permissions.tsx` |
| `<AppPalette>` | [Your first meeting](https://docs.syntheo.studio/en/quickstart.md), [Notes, summaries and transcripts](https://docs.syntheo.studio/en/notes.md), [Folders and projects](https://docs.syntheo.studio/en/folders.md) | `palette.jsx.tpl` | `apps/desktop/src/shared/open-note-dialog.tsx` `apps/desktop/src/shared/palette-search-groups.tsx` `apps/desktop/src/search/unified/labels.ts` |
| `<AppScreen>`, `<Capsule>` and shared capsule | [Record a meeting](https://docs.syntheo.studio/en/meetings.md) | `meeting.jsx.tpl`, `note.jsx.tpl` | `apps/desktop/src/session/components/capsule/index.tsx` |
| `<AppHome>` | [Your first meeting](https://docs.syntheo.studio/en/quickstart.md) | `quickstart.jsx.tpl` | `apps/desktop/src/home` |
| `<DictationScreen>` | [Dictate in other apps](https://docs.syntheo.studio/en/dictation.md) | `dictation.jsx.tpl` | `apps/desktop/src/meeting-float/overlay/bar.tsx` `apps/desktop/src/meeting-float/overlay/dictation.tsx` `apps/desktop/src/dictation/panel.ts` |
| `<AutoCaptureScreen>` | [Automate capture](https://docs.syntheo.studio/en/automatic-capture.md) | `automatic-capture.jsx.tpl` | `apps/desktop/src/stt/detect-events.ts` `apps/desktop/src/stt/meeting-apps.ts` `crates/notification-linux/src/impl.rs` `apps/desktop/src/meeting-float/overlay/bar.tsx` |
| `<ImportScreen>` | [Import a recording](https://docs.syntheo.studio/en/import-recordings.md) | `import.jsx.tpl` | `apps/desktop/src/session/components/outer-header` `apps/desktop/src/session/components/capsule/import-progress.tsx` `apps/desktop/src/session/components/capsule/session-import-progress.tsx` `apps/desktop/src/stt/batch-eta.ts` |
| `<NoteActions>` | [Notes, summaries and transcripts](https://docs.syntheo.studio/en/notes.md) | `notes.jsx.tpl` | `apps/desktop/src/session/components/outer-header/overflow` `apps/desktop/src/session/components/living-document` `apps/desktop/src/session/components/capsule/automation-menu.tsx` |
| `<FolderPage>` | [Folders and projects](https://docs.syntheo.studio/en/folders.md) | `folders.jsx.tpl` | `apps/desktop/src/folders` `apps/desktop/src/sidebar/folders.tsx` `apps/desktop/src/session/folder-instructions.tsx` |
| `<TemplatesEditor>` | [Customize summaries](https://docs.syntheo.studio/en/customize-summaries.md) | `templates.jsx.tpl` | `apps/desktop/src/templates` |
| `<ContactsScreen>` | [Contacts](https://docs.syntheo.studio/en/contacts.md) | `contacts.jsx.tpl` | `apps/desktop/src/sidebar/contacts.tsx` `apps/desktop/src/contacts` |
| `<AskNote>` | [Chat with your meetings](https://docs.syntheo.studio/en/chat.md) | `chat.jsx.tpl` | `apps/desktop/src/chat/components` `apps/desktop/src/editor-bridge/mention-config.ts` `apps/desktop/src/session/components/living-document/summary-review.tsx` `apps/desktop/src/automations/launch.tsx` |
| `<AutomationEditor>` | [Automations](https://docs.syntheo.studio/en/automations.md) | `automations.jsx.tpl` | `apps/desktop/src/sidebar/automations.tsx` `apps/desktop/src/settings/automations` `apps/desktop/src/automations` |
| `<Troubleshooter>`, `<DataFlows>` | [Troubleshooting](https://docs.syntheo.studio/en/troubleshooting.md), [Data and privacy](https://docs.syntheo.studio/en/data-and-privacy.md) | `troubleshooting.jsx.tpl` | `apps/desktop/src/stt/live-transcript-interrupted.ts`; the rest reuses the screens above. `<DataFlows>` is a documentation illustration, not an app screen. |

## Sources without a user page

Internal code, test tools and leftovers inherited from Anarlog have no user page. They are flagged on the page for their area: [Tauri plugins](https://docs.syntheo.studio/en/code/plugins.md), [Audio and transcription](https://docs.syntheo.studio/en/code/crates-audio.md), [Data, export and platform](https://docs.syntheo.studio/en/code/crates-data.md), [TypeScript packages](https://docs.syntheo.studio/en/code/packages.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.