OpenClaw Transcripts CLI: List, Show, and Export Meeting Transcripts

Reference for the openclaw transcripts command group. Use it to list, view, and export durable meeting transcripts captured from Google Meet, Microsoft Teams, and Zoom.

Read this when

  • You want to read stored transcript summaries from the terminal
  • You need the path to a transcripts markdown summary
  • You are debugging the core transcripts storage layout

openclaw transcripts

Commands for inspecting and exporting durable meeting transcripts. Notes are automatically captured from participants in Google Meet, Microsoft Teams, and Zoom browser sessions; the transcripts agent tool additionally supports provider capture and manual import.

The canonical transcript state resides in the shared SQLite database located at $OPENCLAW_STATE_DIR/state/openclaw.sqlite. Under the state directory, show and path explicitly materialize artifacts intended for end users:

$OPENCLAW_STATE_DIR/transcripts/YYYY-MM-DD/<session>/
  metadata.json
  transcript.jsonl
  summary.json
  summary.md

These are export files, not a secondary runtime store. OpenClaw never reads them back during capture, summarization, or listing operations. The default state directory is ~/.openclaw; override it with OPENCLAW_STATE_DIR. The date directory is derived from the session start time, and the session directory is a filesystem-safe slug generated from the session id.

Commands

openclaw transcripts list
openclaw transcripts show <session>
openclaw transcripts show YYYY-MM-DD/<session>
openclaw transcripts path <session>
openclaw transcripts path YYYY-MM-DD/<session>
openclaw transcripts path <session> --dir
openclaw transcripts path <session> --metadata
openclaw transcripts path <session> --transcript
openclaw transcripts list --json
openclaw transcripts show <session> --json
openclaw transcripts path <session> --json
CommandDescription
listShow all stored sessions.
show <session>Print and materialize summary.md.
path <session>Materialize and print the summary.md path.
path <session> --dirMaterialize every artifact and print their directory.
path <session> --metadataMaterialize and print metadata.json.
path <session> --transcriptMaterialize and print transcript.jsonl.
--jsonProduce machine-readable output (any subcommand).

<session> accepts either a bare session id or a date-qualified selector (YYYY-MM-DD/<session>). Use the qualified form when the same session id appears on multiple days, for example openclaw transcripts show 2026-05-22/standup. Default session ids include a timestamp and random suffix; assign a fixed id to a session only when that id is unique within a single day.

Output

list outputs one tab-separated line per session: selector, start time, title, and summary path.

2026-05-22/standup  2026-05-22T09:00:00.000Z  Weekly standup  /Users/user/.openclaw/transcripts/2026-05-22/standup/summary.md

The selector is the most reliable value to supply back to show or path.

list --json returns objects containing sessionId, selector, date, title, startedAt, stoppedAt, source, path, summaryPath, hasSummary. Stored meeting source URLs include only the origin and path; query strings, fragments, and embedded credentials are stripped before storage.

show --json returns the stored session metadata, selector, session directory, summary path, and summary Markdown text.

path --json returns the selected path and a boolean indicating whether the artifact could be materialized. Metadata and transcript exports always exist for a stored session; a summary path reports exists: false until the session has a summary.

Many sessions per day

Sessions are grouped by date, then by session id. Ten meetings on the same day become ten sibling folders:

~/.openclaw/transcripts/2026-05-22/
  transcript-2026-05-22T09-00-00-000Z-a1b2c3d4/
  transcript-2026-05-22T10-30-00-000Z-b2c3d4e5/
  standup/

Use default generated ids for automation. Use a fixed id like standup only when it will not repeat on the same date.

Missing summaries

Live sessions store and materialize summary.md when the session stops; imported transcripts do so immediately after import. A session may appear in list without a summary while capture is still active, if a provider failed during stop, or if metadata was stored before any utterances arrived.

Use path <session> --transcript to inspect the raw append-only transcript, or run the transcripts tool's summarize action to regenerate the Markdown summary.

Upgrading the legacy file store

OpenClaw releases that predate the SQLite store wrote canonical runtime state directly under $OPENCLAW_STATE_DIR/transcripts/. Run:

openclaw doctor --fix

Doctor imports the entire legacy tree into SQLite, verifies row counts and ordering, records migration receipts, and moves the verified source tree to a timestamped transcripts.migrated-* archive. Runtime commands do not fall back to the legacy files. Keep the archive until you have verified the imported sessions and any exports you depend on.

Configuration

Meeting transcript capture is enabled by default. To opt out globally:

{
  "transcripts": {
    "enabled": false
  }
}
  • enabled (default true): activates automatic meeting notes, the transcripts tool, and any configured auto-start sources. Use false when meeting notes should not be saved to the host. A meeting that was explicitly requested in transcribe mode retains its existing bounded live-caption tail, but no persistent rows are written while this setting is false.
    Configure auto-start sources through transcripts.autoStart. Each source is enabled simply by including it; to disable a source, leave it out. discord-voice is the built-in auto-start-capable source and depends on guildId and channelId:
{
  "transcripts": {
    "enabled": true,
    "autoStart": [
      {
        "providerId": "discord-voice",
        "guildId": "1234567890",
        "channelId": "2345678901"
      }
    ]
  }
}

The meeting provider identifiers are google-meet, teams, and zoom. Their corresponding aliases are googlemeet/meet, teams-meetings/microsoft-teams/msteams, and zoom-meetings. Meeting providers connect to an existing meeting bot session; normal meeting joins do not require an autoStart entry.