Примеры

Практические сценарии работы с TalkBar через MCP и CLI с настоящими запросами и ответами — от вопроса о сессиях прошлой недели до закладки во время записи.

Эти сценарии показывают, что происходит, когда вы просите ассистента поработать с TalkBar: какой инструмент он вызывает, с какими аргументами и что получает в ответ. Идентификаторы, время и текст вымышлены, а длинные ответы сокращены, но каждый запрос и ответ имеет ту же структуру, что и в настоящем TalkBar.

Писать эти запросы самим не нужно. Ваше ИИ-приложение составляет их по вашему вопросу. Они приведены здесь, чтобы вы знали, что может ассистент, и могли проверить его работу.

Спросить о сессиях прошлой недели

Подготовка: включите MCP и подключите Claude Desktop, как описано в разделе Настройка MCP. Чтение включено по умолчанию, так что больше ничего не нужно.

Затем спросите Claude: «О чём я говорил на сессиях TalkBar на прошлой неделе?»

Ассистент получает список сессий, начавшихся на той неделе, с помощью talkbar_read. Время указывается в миллисекундах с 1970 года (UTC); граница startedBeforeMs не включается.

talkbar_read
{
  "tool": "sessions.list",
  "args": { "startedAfterMs": 1792368000000, "startedBeforeMs": 1792972800000, "limit": 20 }
}
Ответ
{
  "items": [
    {
      "sessionId": "0b7e4d1a-93c2-4f5e-8a61-2f9d3c7b5e08",
      "title": "Weekly sync",
      "status": "complete",
      "startedAtMs": 1792747800000,
      "endedAtMs": 1792749940000,
      "projectId": "project-p8d3k2m1q9w7e5r4t6y0u2i1",
      "seriesId": null,
      "participantCount": 4,
      "pinned": false,
      "source": "live",
      "private": false
    },
    {
      "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10",
      "title": "Pricing review with Acme",
      "status": "complete",
      "startedAtMs": 1792594800000,
      "endedAtMs": 1792597632000,
      "projectId": "project-p8d3k2m1q9w7e5r4t6y0u2i1",
      "seriesId": null,
      "participantCount": 3,
      "pinned": true,
      "source": "live",
      "private": false
    }
  ],
  "nextCursor": null,
  "hasMore": false,
  "totalCount": 2
}

Самые новые сессии идут первыми. Чтобы прочитать итоги, ассистент объединяет в один вызов по одному sessions.get на сессию:

talkbar_read
{
  "calls": [
    { "tool": "sessions.get", "args": { "sessionId": "0b7e4d1a-93c2-4f5e-8a61-2f9d3c7b5e08" } },
    { "tool": "sessions.get", "args": { "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10" } }
  ]
}

Ответ имеет вид {"results": [...]}, по одной записи на сессию, и в каждой — полные итоги, их разделы, задачи и решения. После этого Claude пишет вам краткий обзор.

Найти сессию и прочитать транскрипт по частям

Спросите: «Найди мою встречу с Acme о ценах и покажи, что Дана говорила о скидке».

Сначала ассистент выполняет поиск, чтобы получить идентификатор сессии:

talkbar_find
{ "query": "pricing review Acme", "kinds": ["session"], "limit": 3 }

У первого совпадения "kind": "session" и "id": "6f1c2a9e-…". Затем ассистент читает транскрипт. Транскрипт выдаётся страницами из целых реплик, по умолчанию по 20 000 символов. speaker оставляет реплики одного человека (любая часть имени, без учёта регистра):

talkbar_read
{
  "tool": "sessions.transcript",
  "args": { "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10", "speaker": "Dana", "maxChars": 4000 }
}
Ответ
{
  "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10",
  "title": "Pricing review with Acme",
  "startedAtMs": 1792594800000,
  "private": false,
  "truncated": true,
  "excludedFromAiSpeakers": [],
  "nextCursor": null,
  "totalTurns": 38,
  "turnOffset": 0,
  "nextTurnOffset": 14,
  "transcript": "[02:15] Dana Lee: We can go to twelve percent if the contract is two years.\n[02:41] Dana Lee: That's the most I can do this quarter.\n…"
}

truncated: true означает, что есть продолжение. Ассистент передаёт nextTurnOffset обратно как turnOffset для следующей страницы и останавливается, когда nextTurnOffset равен null:

talkbar_read
{
  "tool": "sessions.transcript",
  "args": { "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10", "speaker": "Dana", "maxChars": 4000, "turnOffset": 14 }
}

С "format": "json" транскрипт возвращается в виде массива turns, где у каждой реплики есть turnId, startMs и endMs (миллисекунды от начала сессии), speaker и text. Используйте эту форму, если хотите поставить закладку на реплику или привязать к ней задачу.

То же чтение из терминала:

talkbar-cli tools call sessions.transcript --args-file read.json

Создать заметку и задачу

Подготовка: в разделе Настройки → Доступ по MCP откройте строку Заметки и включите Создать заметку, затем откройте Задачи и включите Создать задачу (action_items.create). Остальные изменения, если они не нужны, оставьте выключенными.

Спросите: «Оформи договорённости со встречи с Acme о ценах заметкой к этой сессии и поставь мне задачу отправить обновлённое коммерческое предложение до вторника».

Ассистент отправляет оба изменения одним пакетом talkbar_change:

talkbar_change
{
  "calls": [
    {
      "tool": "notes.create",
      "args": {
        "title": "Acme pricing follow-ups",
        "markdown": "## Follow-ups\n\n- Revised quote at 12% for a two-year term\n- Confirm the start date with legal",
        "sessionIds": ["6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10"]
      }
    },
    {
      "tool": "action_items.create",
      "args": {
        "title": "Send the revised quote to Acme",
        "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10",
        "itemType": "task",
        "dueAtMs": 1793725200000,
        "assignees": ["Alex Kim"]
      }
    }
  ],
  "stopOnError": true
}
Ответ
{
  "results": [
    {
      "tool": "notes.create",
      "ok": true,
      "result": {
        "noteId": "note-k2v9w8x7c6b5n4m3l2j1h0g9",
        "title": "Acme pricing follow-ups",
        "pinned": false,
        "sessionId": null,
        "updatedAt": 1793369525000,
        "projectId": null,
        "sessionIds": ["6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10"]
      }
    },
    {
      "tool": "action_items.create",
      "ok": true,
      "result": {
        "itemId": "outcome-x4c8v2b6n1m9q3w7e5r0t2y8",
        "itemType": "task",
        "title": "Send the revised quote to Acme",
        "status": "open",
        "dueAtMs": 1793725200000,
        "sessionId": "6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10",
        "sessionTitle": "Pricing review with Acme",
        "projectId": "project-p8d3k2m1q9w7e5r4t6y0u2i1",
        "assignees": [{ "name": "Alex Kim", "contactId": null }],
        "origin": "manual",
        "sources": [],
        "sessionStatus": "complete"
      }
    }
  ]
}

Ответ для задачи сокращён. Заметка, привязанная к сессии, показывается на странице этой сессии; sessionId остаётся null, потому что это не собственная заметка сессии. Задача получает проект сессии, если вы не укажете другой. Если TalkBar открыт, обе записи сразу появятся в нём.

Добавить закладку во время записи

Подготовка: включите Добавить закладку (markers.create) в строке Закладки. Сама запись всегда управляется только из приложения.

Во время записи попросите: «Поставь закладку на момент, когда Сэм упомянул заморозку бюджета».

Сначала ассистент находит сессию, которая записывается сейчас:

talkbar_read
{ "tool": "sessions.recording" }
Ответ
{
  "recording": {
    "sessionId": "c3a9f2e7-1d84-4b6a-9e05-7f2b8d1c6a34",
    "title": "Budget planning",
    "startedAtMs": 1793368800000,
    "elapsedMs": 725000,
    "revision": "…",
    "appRunning": true,
    "stale": false
  }
}

Если ничего не записывается, recording равен null. stale: true означало бы, что TalkBar не запущен и сессия лишь выглядит записывающейся.

Затем ассистент читает уже записанную часть транскрипта в JSON. Чтение с cursor: "0:" возвращает реплики в порядке их изменения и nextCursor, чтобы в следующий раз получить только новое:

talkbar_read
{
  "tool": "sessions.transcript",
  "args": { "sessionId": "c3a9f2e7-1d84-4b6a-9e05-7f2b8d1c6a34", "format": "json", "cursor": "0:" }
}
Ответ
{
  "sessionId": "c3a9f2e7-1d84-4b6a-9e05-7f2b8d1c6a34",
  "title": "Budget planning",
  "startedAtMs": 1793368800000,
  "private": false,
  "truncated": false,
  "excludedFromAiSpeakers": [],
  "nextCursor": "1793369523871:turn-42",
  "recording": true,
  "turns": [
    {
      "turnId": "turn-42",
      "chunkId": "chunk-17",
      "provisional": true,
      "startMs": 641000,
      "endMs": 652500,
      "speaker": "Sam Ortiz",
      "isUser": false,
      "excludedFromAi": false,
      "text": "Heads up, finance just told us there's a budget freeze until January.",
      "translatedText": null
    }
  ]
}

Ассистент добавляет закладку на эту реплику с короткой пометкой:

talkbar_change
{
  "tool": "markers.create",
  "args": {
    "sessionId": "c3a9f2e7-1d84-4b6a-9e05-7f2b8d1c6a34",
    "turnId": "turn-42",
    "body": "Budget freeze until January"
  }
}
Ответ
{
  "markerId": "…",
  "sessionId": "c3a9f2e7-1d84-4b6a-9e05-7f2b8d1c6a34",
  "kind": "bookmark",
  "body": "Budget freeze until January",
  "quote": null,
  "atMs": 641000,
  "turnId": "turn-42",
  "chunkId": null,
  "pointId": null,
  "color": "",
  "updatedAt": 1793369525000,
  "sessionStatus": "recording"
}

Закладка сразу появляется на экране записи. Вместо turnId ассистент может указать место закладки через chunkId, pointId (точку хронологии из sessions.timeline), atMs (момент от начала сессии) или quote (слова, к которым она относится).

Экспортировать сессию

Подготовка: сначала добавьте место экспорта в приложении, например папку в вашем хранилище Obsidian; см. Экспорт. Операции экспорта включены по умолчанию, как только включён MCP.

Попросите: «Экспортируй встречу с Acme о ценах в моё хранилище Obsidian».

Ассистент получает список мест экспорта:

talkbar_read
{ "tool": "exports.config" }
Ответ
{
  "destinations": [
    {
      "destinationId": "5d2e7a10-8c3b-4f69-b1e4-0a9c6d3f2b87",
      "workspaceId": "…",
      "name": "Obsidian vault",
      "format": "obsidian",
      "location": "PATH_TO_VAULT/Meetings",
      "enabled": true,
      "layout": "flat",
      "credentialRef": null
    }
  ],
  "rules": []
}

Затем ставит экспорт в очередь, выбирая, что в него включить:

talkbar_change
{
  "tool": "exports.enqueue",
  "args": {
    "sessionIds": ["6f1c2a9e-4b7d-4c1e-9a53-0d2e8b7f4c10"],
    "destinationIds": ["5d2e7a10-8c3b-4f69-b1e4-0a9c6d3f2b87"],
    "selection": { "summary": true, "transcript": true, "metadata": true, "notes": true, "audio": "none" }
  }
}

В ответ приходит новый пакет экспорта с batchId, status и записью в deliveries для каждой пары «сессия — место экспорта». exports.enqueue только ставит работу в очередь. Экспорт из очереди доставляет приложение TalkBar, пока оно запущено. Чтобы доставить сразу, ассистент может вызвать exports.run с batchId, а затем проверить результат с помощью exports.status:

talkbar_change
{ "tool": "exports.run", "args": { "batchId": "…" } }

У доставленной записи "status": "exported" и её location. Сессию, которая ещё записывается, поставить в очередь нельзя: такой вызов отвечает session_recording.

В терминале talkbar-cli exports run --workspace WORKSPACE_ID --batch BATCH_ID --wait продолжает доставку, пока пакет не будет выполнен. См. Экспорт в talkbar-cli.

Безопасное удаление

Подготовка: включите Переместить заметку в корзину (notes.trash) в строке Заметки. Оставьте Разрешить удаление без подтверждения выключенным.

Попросите: «Перемести старый черновик заметки про Acme в корзину».

Ассистент находит заметку с помощью talkbar_find, затем вызывает talkbar_delete:

talkbar_delete
{ "tool": "notes.trash", "args": { "noteId": "note-a1s2d3f4g5h6j7k8l9z0x1c2" } }

Прежде чем что-либо выполнится, ваше ИИ-приложение покажет вопрос TalkBar:

An assistant wants TalkBar to run:
- notes.trash {"noteId":"note-a1s2d3f4g5h6j7k8l9z0x1c2"}
Confirm to run it, or decline to run nothing.

Если вы откажетесь или не ответите в течение 5 минут, ничего не выполнится, а ассистент получит:

{ "error": { "code": "declined", "message": "The user did not confirm, so nothing ran" } }

Если подтвердите, заметка переместится в корзину:

{ "noteId": "note-a1s2d3f4g5h6j7k8l9z0x1c2", "trashed": true }

Передумали? notes.restore вернёт заметку. Эта операция выполняется через talkbar_change, поэтому подтверждения не требует, но её нужно включить — Восстановить заметку:

talkbar_change
{ "tool": "notes.restore", "args": { "noteId": "note-a1s2d3f4g5h6j7k8l9z0x1c2" } }
Ответ
{ "noteId": "note-a1s2d3f4g5h6j7k8l9z0x1c2", "restored": true }

notes.trash.list выводит содержимое корзины заметок. Никакие действия ассистента не удаляют заметку навсегда; очистка корзины остаётся в приложении.

Если ваше ИИ-приложение не умеет показывать вопросы от сервера, удаление вместо этого отклоняется с кодом confirmation_unavailable, и ничего не выполняется. См. Приложения, которые не умеют спрашивать.

См. также