mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 21:01:34 +00:00
* feat(meetings): auto-collect durable transcripts * chore(plugin-sdk): refresh meeting transcript API baseline * fix(plugin-sdk): keep meeting transcript options implicit * fix(meetings): satisfy transcript bridge typecheck * fix(google-meet): preserve optional caption policy context * fix(google-meet): retain caption mode callback type * refactor(meetings): split transcript lifecycle helpers * chore(plugin-sdk): refresh split meeting runtime baseline * refactor(google-meet): split session helpers * fix(meetings): decouple transcript retries from leave * fix(meetings): isolate provider subscribers * fix(meetings): harden capture lifecycle * fix(meetings): preserve capture during storage outages * fix(meetings): preserve pending transcript ordering * fix(meetings): retry capture initialization * test(agents): reflect default transcript registration
171 lines
6.4 KiB
Markdown
171 lines
6.4 KiB
Markdown
---
|
|
summary: "CLI reference for `openclaw transcripts` (list, show, and export stored transcripts)"
|
|
read_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
|
|
title: "Transcripts CLI"
|
|
---
|
|
|
|
# `openclaw transcripts`
|
|
|
|
Inspector and export command for durable meeting transcripts. Google Meet,
|
|
Microsoft Teams, and Zoom browser participants capture notes automatically;
|
|
the `transcripts` agent tool also supports provider capture and manual import.
|
|
|
|
Canonical transcript state lives in the shared SQLite database at
|
|
`$OPENCLAW_STATE_DIR/state/openclaw.sqlite`. `show` and `path` explicitly
|
|
materialize user-facing artifacts under the state directory:
|
|
|
|
```text
|
|
$OPENCLAW_STATE_DIR/transcripts/YYYY-MM-DD/<session>/
|
|
metadata.json
|
|
transcript.jsonl
|
|
summary.json
|
|
summary.md
|
|
```
|
|
|
|
These files are exports, not a second runtime store. OpenClaw does not read them
|
|
back during capture, summarization, or listing. Default state directory is
|
|
`~/.openclaw`; override with `OPENCLAW_STATE_DIR`. The date directory comes
|
|
from the session start time; the session directory is a filesystem-safe slug
|
|
derived from the session id.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
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
|
|
```
|
|
|
|
| Command | Description |
|
|
| ----------------------------- | ---------------------------------------------------- |
|
|
| `list` | List stored sessions. |
|
|
| `show <session>` | Print and materialize `summary.md`. |
|
|
| `path <session>` | Materialize and print the `summary.md` path. |
|
|
| `path <session> --dir` | Materialize all artifacts and print their directory. |
|
|
| `path <session> --metadata` | Materialize and print `metadata.json`. |
|
|
| `path <session> --transcript` | Materialize and print `transcript.jsonl`. |
|
|
| `--json` | Print 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
|
|
occurs on more than one day, for example `openclaw transcripts show
|
|
2026-05-22/standup`. Default session ids include a timestamp and random
|
|
suffix; give a session a fixed id only when that id is unique within the day.
|
|
|
|
## Output
|
|
|
|
`list` prints one tab-separated line per session: selector, start time, title,
|
|
summary path.
|
|
|
|
```text
|
|
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 safest value to pass back to `show` or `path`.
|
|
|
|
`list --json` returns objects with `sessionId`, `selector`, `date`, `title`,
|
|
`startedAt`, `stoppedAt`, `source`, `path`, `summaryPath`, `hasSummary`.
|
|
Stored meeting source URLs contain only the origin and path; query strings,
|
|
fragments, and embedded credentials are removed before persistence.
|
|
|
|
`show --json` returns the stored session metadata, selector, session
|
|
directory, summary path, and summary Markdown text.
|
|
|
|
`path --json` returns the selected path and whether that 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 group by date, then by session id. Ten meetings on one day become
|
|
ten sibling folders:
|
|
|
|
```text
|
|
~/.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 can 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 beneath `$OPENCLAW_STATE_DIR/transcripts/`. Run:
|
|
|
|
```bash
|
|
openclaw doctor --fix
|
|
```
|
|
|
|
Doctor imports the complete 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 rely on.
|
|
|
|
## Configuration
|
|
|
|
Meeting transcript capture is enabled by default. To opt out globally:
|
|
|
|
```json
|
|
{
|
|
"transcripts": {
|
|
"enabled": false
|
|
}
|
|
}
|
|
```
|
|
|
|
- `enabled` (default `true`): enable automatic meeting notes, the transcripts
|
|
tool, and configured auto-start sources. Set it to `false` when meeting
|
|
notes should not be persisted on the host. An explicitly requested meeting
|
|
`transcribe` mode keeps its existing bounded live-caption tail, but does not
|
|
write durable rows while this setting is false.
|
|
Configure auto-start sources with `transcripts.autoStart`. Each entry is
|
|
enabled by being present; omit an entry to disable that source. `discord-voice`
|
|
is the bundled auto-start-capable source and requires `guildId` and
|
|
`channelId`:
|
|
|
|
```json
|
|
{
|
|
"transcripts": {
|
|
"enabled": true,
|
|
"autoStart": [
|
|
{
|
|
"providerId": "discord-voice",
|
|
"guildId": "1234567890",
|
|
"channelId": "2345678901"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
The meeting provider ids are `google-meet`, `teams`, and `zoom`. Their aliases
|
|
are `googlemeet`/`meet`, `teams-meetings`/`microsoft-teams`/`msteams`, and
|
|
`zoom-meetings`, respectively. Meeting providers attach to an already-active
|
|
meeting bot session; normal meeting joins do not need an `autoStart` entry.
|