The service
Circleback records meetings and produces AI notes, action items and a full speaker-attributed transcript. For anyone whose decisions land in meetings rather than in chat, that content is exactly what Void is good at surfacing, but today it sits in a separate silo, unsearchable next to Slack, Gmail and WhatsApp.
I have a working connector and would rather discuss the approach before opening the PR, as CONTRIBUTING.md asks.
Auth model
API key, entered once via void setup (Circleback then Settings then API). No OAuth dance, no refresh token, nothing to renew.
Push vs polling
Polling. Circleback has no webhook or streaming API that I could find, so the connector polls the meetings endpoint on the normal sync interval.
Two details keep the polling cheap:
- a meeting already imported is re-fetched only when Circleback reports it changed
- the transcript, which is the expensive call, is fetched once per meeting
Meetings still being processed on Circleback's side are skipped and picked up on a later poll, rather than imported half-empty.
Data model
One meeting becomes one conversation, and its parts become messages sharing a single context group, so the inbox shows one row per meeting while void messages and void search reach every spoken turn:
- a notes message: title, duration, attendees, meeting URL, then the summary
- an action items message: a checklist with each item's assignee
- one message per transcript turn, attributed to the speaker, ordered by timestamp
Transcript import is opt-out via include_transcript = false for people who only want notes and action items, and first-sync depth is bounded by backfill_days (default 365).
Read-only
The connector refuses void send and void reply on a Circleback conversation. Circleback is a record of what was said in a meeting; there is nothing meaningful to write back to.
Status
Implemented, 11 unit tests, ./scripts/check.sh green (fmt, clippy with -D warnings, tests).
Happy to adjust the shape before I open the PR, in particular whether one message per transcript turn is the right granularity, or whether the whole transcript should be a single message.
The service
Circleback records meetings and produces AI notes, action items and a full speaker-attributed transcript. For anyone whose decisions land in meetings rather than in chat, that content is exactly what Void is good at surfacing, but today it sits in a separate silo, unsearchable next to Slack, Gmail and WhatsApp.
I have a working connector and would rather discuss the approach before opening the PR, as CONTRIBUTING.md asks.
Auth model
API key, entered once via
void setup(Circleback then Settings then API). No OAuth dance, no refresh token, nothing to renew.Push vs polling
Polling. Circleback has no webhook or streaming API that I could find, so the connector polls the meetings endpoint on the normal sync interval.
Two details keep the polling cheap:
Meetings still being processed on Circleback's side are skipped and picked up on a later poll, rather than imported half-empty.
Data model
One meeting becomes one conversation, and its parts become messages sharing a single context group, so the inbox shows one row per meeting while
void messagesandvoid searchreach every spoken turn:Transcript import is opt-out via
include_transcript = falsefor people who only want notes and action items, and first-sync depth is bounded bybackfill_days(default 365).Read-only
The connector refuses
void sendandvoid replyon a Circleback conversation. Circleback is a record of what was said in a meeting; there is nothing meaningful to write back to.Status
Implemented, 11 unit tests,
./scripts/check.shgreen (fmt, clippy with -D warnings, tests).Happy to adjust the shape before I open the PR, in particular whether one message per transcript turn is the right granularity, or whether the whole transcript should be a single message.