syntheo CLI and its MCP server to the documentation pages to update when it changes. For the monorepo overview, see Architecture.
Contracts checked by tests
Two tests inapps/cli read the public documentation directly. A command or MCP tool change breaks CI until these pages follow:
docs/AGENTS.md names apps/cli/src/cli.rs as the command contract and apps/cli/src/mcp/ as the MCP tools and resources contract.apps/cli: the syntheo binary
- Path:
apps/cli(Cargo packagesyntheo-cli, binarysyntheo,src/main.rs). - Role: command-line access to the local
app.dbdatabase and stdio MCP server. - Internal dependencies:
crates/agent-access,crates/db-app,crates/db-core. In development only:crates/cli-docs. - Affected doc pages: /en/reference/cli, /en/reference/mcp, /en/reference/errors, /en/agents/cli, /en/agents/mcp, /en/agents/overview, /en/installation, /en/import-recordings.
Modules
Commands
Global options:
--base (SYNTHEO_BASE), --db-path (SYNTHEO_DB_PATH), --json. meetings accepts --source (SYNTHEO_SOURCE, local by default; auto is an alias of local).
Database access
db.rs looks for the database in this order: --db-path, then --base/app.db, then the system’s data folder. Under that folder, the CLI tries syntheo/app.db, then fr.willisback.syntheo/app.db. A binary named syntheo-dev reads fr.willisback.syntheo.dev/app.db. A missing database gives the database_not_found error: the CLI never creates or migrates the database.
Error codes
An import started with
--wait that exceeds --timeout also returns code 2, keeping the job queued for import-status.
MCP server
mcp.rs declares a syntheo server (tools and resources enabled) with instructions that point the agent to list_meetings first and forbid direct access to SQLite.
Resources:
syntheo://meetings/{meeting_id} (Markdown), syntheo://meetings/{meeting_id}/transcript{?offset,limit} (text, bounded limit) and syntheo://series/{series_id} (Markdown list of the series).
Crates serving the CLI
crates/agent-access
- Path:
crates/agent-access(packageagent-access, workspace aliassyntheo-agent-access). - Role: shared meeting operations, called by the CLI, the MCP server and the app.
- Main API:
- read:
list_meetings,list_folders,get_meeting,get_meeting_transcript,get_recurring_meeting_history,get_meeting_export,get_local_meeting_export,paginate_transcripts; - proposals (
proposals.rs):create_proposal,list_proposals,get_proposal,decline_proposal,proposal_unified_diff; - import (
recording_import.rs):import_recording,get_recording_import. The import is only queued if the app reports an active worker: it renews a heartbeat in thelocal_recording_import_workertable (seeapps/desktop/src/stt/recording-import.tsx); - rendering:
to_markdown,to_export_markdown,ExportLocale,format_export_date,localize_speaker_label(export_markdown.rs,transcript_render.rs); - limits:
DEFAULT_LIST_LIMIT20,MAX_LIST_LIMIT200,DEFAULT_TRANSCRIPT_LIMIT200,MAX_TRANSCRIPT_LIMIT500,DEFAULT_FOLDER_LIST_LIMIT100.
- read:
- Internal dependencies:
crates/db-app,crates/tiptap,crates/transcript. - Used by:
apps/cli,plugins/db(meeting export),plugins/local-api,crates/session-ingest. - Affected doc pages: /en/reference/cli, /en/reference/mcp, /en/agents/cli, /en/agents/mcp, /en/import-recordings, /en/notes (Markdown export).
crates/cli-docs
- Path:
crates/cli-docs(publish = false). - Role: generates a description of the clap tree, in Markdown (
generate) or in JSON (generate_json, typesCommandDoc,OptionDoc,ArgumentDoc). - Internal dependencies: none.
- Used by: only the
apps/clitests (dev-dependencies), for the contract snapshot. - Affected doc pages: none directly; protects /en/reference/cli against unnoticed drift.
crates/agent-core
- Path:
crates/agent-core(aliassyntheo-agent-core). - Role: diagnosis and installation of a hook-based integration for three third-party agent CLIs: Codex, Claude Code and OpenCode (
ProviderKind). - Main API:
health_check,install_cli,uninstall_cli,upgrade_hooks; typesProviderHealth,ProviderHealthStatus,ProviderAuthStatus. - Internal dependencies:
crates/claude,crates/codex,crates/opencode. - Used by:
plugins/agent, registered byapps/desktop/src-taurioutside App Store builds. - Status: inherited from Anarlog. The installed hooks call the
charcommand (for examplechar claude notify), notsyntheo, and no code inapps/desktop/srcimports@syntheo/plugin-agent. Nothing here serves thesyntheoCLI. - Affected doc pages: none. The agent skills installation documented in /en/agents/skills goes through
apps/desktop/src-tauri/src/agent_skills.rs, not through this crate.
crates/cli-process
- Path:
crates/cli-process(aliassyntheo-cli-process). - Role: launching child processes with tokio:
spawn_with_retry,run_to_string,spawn_streaming_lines(stream of typed lines), bounded reading of stdout and stderr (MAX_PROCESS_STDOUT_BYTES64 MB,MAX_PROCESS_STDERR_BYTES1 MB). - Internal dependencies: none.
- Used by:
crates/claude,crates/codex,crates/opencode. Neitherapps/clinor the MCP server uses it. - Affected doc pages: none.
App side
The app installs and documents the CLI, but this code lives inapps/desktop:
apps/desktop/src-tauri/src/embedded_cli.rs: installs thesyntheobinary shipped with the app (see Code map: desktop app).apps/desktop/src-tauri/src/agents-content.md:AGENTS.mdfile written to the data folder at startup, which points to the MCP tools and the CLI.plugins/local-apiandplugins/mcp: app-side commands and types, see /en/code/plugins.