The Meeting Notes plugin is the generic notes layer for live calls and imported meeting transcripts. It owns transcript storage, summary rendering, and theDocumentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
meeting_notes tool. Channel plugins own capture, authentication, and
platform-specific meeting joins.
Use this page when you want OpenClaw to capture Discord voice notes today, when
you want to import a transcript from another meeting system, or when you are
building a Google Meet, Slack huddle, Zoom, or calendar-owned source provider.
Source model
Meeting sources registermeetingNotesSourceProviders through the plugin SDK.
The first live provider is discord-voice; the built-in manual-transcript
provider imports post-meeting transcripts.
live-audio: source joins or listens to a call and streams final utterances.live-caption: source reads captions from a browser or meeting surface.posthoc-transcript: source imports a transcript or notes artifact after the meeting.recording-stt: source transcribes a recording before importing utterances.
Install and enable
Meeting Notes is an external source plugin in this repository. It is not part of the core OpenClaw npm package and becomes available only when the plugin is installed as a plugin or loaded from a source checkout that containsextensions/meeting-notes.
Once the plugin is loaded, it is enabled by default unless one of these settings
blocks it:
plugins.enabled: falsedisables all plugins.plugins.denycontainsmeeting-notes.plugins.allowis set and does not containmeeting-notes.plugins.entries.meeting-notes.enabled: falsedisables this plugin entry.plugins.entries.meeting-notes.config.enabled: falsekeeps the plugin loaded but disables themeeting_notestool and auto-start service.
~/.openclaw/openclaw.json. The plugins
section controls plugin loading, and the nested entries.<pluginId>.config
object is passed to that plugin as plugin-specific config. A separate
config: { ... } block under meeting-notes is expected; it is how plugins
receive their own options without adding core config keys.
Use this shape when your config has a plugin allowlist:
Configuration
Meeting Notes has three plugin config fields:enabled:trueby default. Setfalseto leave the plugin installed but disable the tool and auto-start service.maxUtterances:2000by default. Summary generation reads only the newest N utterances fromtranscript.jsonl; valid values are clamped to1through10000.autoStart: empty by default. Each entry starts a live notes source when the Gateway starts or reloads the plugin.
autoStart entry accepts:
providerId: required. Usediscord-voicefor Discord voice.enabled: optional, defaulttrue. Setfalseto keep an entry without starting it.sessionId: optional. If omitted, OpenClaw generates a timestamped id.title: optional human-readable title for summaries and CLI output.accountId: optional source account id when more than one account exists.guildId: provider-specific Discord guild id.channelId: provider-specific Discord voice channel id.meetingUrl: provider-specific meeting URL for browser or calendar sources.
autoStart when OpenClaw should begin notes capture automatically on
gateway startup:
Discord voice
Discord is the first live source. The Discord plugin owns the voice connection, speaker detection, audio decoding, and transcription. Meeting Notes receives final speaker-labeled utterances and persists them. For Discord live capture:- Enable and configure the Discord plugin first.
- Configure Discord voice mode so OpenClaw can join the target voice channel.
- Use
providerId: "discord-voice". - Provide
guildIdandchannelId. - Add
accountIdonly when you run more than one Discord account.
stt-tts
voice mode, STT uses tools.media.audio; voice.model controls the agent reply
model, not transcription. In realtime voice modes, transcription follows the
configured realtime provider and model. See Discord voice
for the current Discord voice model and provider knobs.
Google Meet, Slack huddles, and other sources
Meeting Notes is intentionally source-neutral. Google Meet, Slack huddles, Zoom, calendar recordings, or browser caption capture should be separate source providers that register with the plugin SDK. Recommended source choices:- Google Meet live browser/caption support: implement a
live-captionprovider that acceptsmeetingUrland emits final caption utterances. - Google Meet recordings or downloaded transcripts: implement
posthoc-transcriptor usemanual-transcriptuntil a provider exists. - Slack huddles today: import post-meeting huddle notes or transcript artifacts. Slack does not expose a general bot-join live huddle audio API.
- Slack huddles later: keep the Slack-owned source provider responsible for Slack auth, artifact lookup, and transcript normalization.
Tool
Usemeeting_notes with an action:
status: list registered providers and active sessions.start: start a live notes session.stop: stop a live session and writesummary.md.import: import a transcript and writesummary.md.summarize: regenerate a summary for an existing session.
providerId: "discord-voice", plus guildId and
channelId. accountId is optional when only one Discord account is active.
manual-transcript splits plain transcript text into utterances. Use it for
copied Google Meet notes, Slack huddle summaries, calendar transcripts, or any
source that already produced text.
Storage layout
Artifacts are stored under the OpenClaw state directory:OPENCLAW_STATE_DIR is unset, the default state directory is
~/.openclaw. A normal local install therefore writes notes under
~/.openclaw/meeting-notes/....
Each file has one job:
metadata.json: session id, source provider, title, start time, stop time, and provider metadata.transcript.jsonl: append-only speaker utterances. Each line is one JSON object with the utterance text and the session id.summary.json: structured summary data used by tooling, including the speaker-labeled transcript window used for the generated summary.summary.md: human-readable notes for terminals, editors, and document workflows, including a speaker-labeled transcript section.
openclaw meeting-notes list, such as
2026-05-22/standup.
By default, OpenClaw generates timestamped session ids:
sessionId only when that id is unique for the day. Human ids such as
standup are fine for one recurring meeting per day. If the same id appears on
multiple days, use the date-qualified selector in the CLI.
CLI access
Use the read-only CLI to find or print stored summaries:Long meetings
For long meetings, utterances are appended totranscript.jsonl as they arrive.
Summary generation reads a bounded window controlled by
plugins.entries.meeting-notes.config.maxUtterances (default: 2000) so a
multi-hour call does not require unbounded summary memory.
This means the transcript can keep growing on disk, while summarization stays
bounded. Increase maxUtterances when you need more of a multi-hour meeting in
the generated summary and speaker-labeled transcript section. Decrease it when
summaries are too slow or too large.
Current summaries are generated when a session stops, after an import, or when
the summarize action runs. They are not continuously rewritten for every
utterance.
Troubleshooting
meeting_notes is missing
Check that the plugin is installed or loaded from source, and that plugin
loading does not exclude it:
plugins.allow is set, it must include meeting-notes. If plugins.deny
contains meeting-notes, remove it.
Auto-start does not join Discord
Confirm theautoStart entry uses providerId: "discord-voice" and includes
both guildId and channelId. If you run multiple Discord accounts, include
accountId. Also verify Discord voice works outside Meeting Notes by joining
the same voice channel through the Discord voice commands.
Summary is missing
Live sessions writesummary.md when stopped. Stop the session with
meeting_notes action stop, then inspect it:
meeting_notes action summarize to regenerate summary.md for an
existing stored session.
Selector is ambiguous
If you reused a human session id such asstandup, use the date-qualified
selector shown by openclaw meeting-notes list: