[integrations] Omi wearable capture#49
Conversation
Poll-based adapter on wearable-capture-core for the Omi pendant. Pulls conversations from the Omi Developer API (Bearer OMI_API_KEY), filters to a rolling window by started_at, and maps each to a `meeting` thought from Omi's own title + overview (plus a `task` per action_item) — no per-item LLM cost. The core handles dedup (on the Omi conversation id), embedding, and inserts. Includes README (setup + deploy + 5-min pg_cron schedule), metadata.json, deno.json. Requires the wearable-capture-core integration. Secrets via Deno.env.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 34589a1f24
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| recordId(c: OmiConversation): string { | ||
| return c.id; |
There was a problem hiding this comment.
Keep polling for late Omi action items
Using only the conversation id as the core dedupe key means the first poll that sees a conversation permanently marks the whole record imported. Omi documents that action items are extracted asynchronously after conversation creation (docs), so when a 5-minute poll imports the meeting before structured.action_items is populated, later polls will skip the same c.id and those tasks are never captured. Treat action items as separately keyed records or otherwise allow the conversation to be revisited until late action items are imported.
Useful? React with 👍 / 👎.
| ## Related | ||
|
|
||
| - [Wearable Capture Core](../wearable-capture-core/) — the shared engine this adapter is built on (**install first**). | ||
| - [Limitless Wearable Capture](../wearable-limitless-capture/) — sibling adapter for the Limitless Pendant. | ||
| - [Telegram Capture](../telegram-capture/) — webhook-based quick capture (push, not poll). | ||
| - [MCP Tool Audit & Optimization Guide](../../docs/05-tool-audit.md) — recommended reading for any integration contributor. | ||
| - [Contributing guide](../../CONTRIBUTING.md) — required reading before submitting changes. |
There was a problem hiding this comment.
Add required Nate provenance links
AGENTS.md says every public guide, recipe, tutorial, package page, release note, and walkthrough should naturally point back to Nate's Substack and site. This new public integration guide currently ends without either https://substack.com/@natesnewsletter or https://natebjones.com, so it violates the repo publishing guardrail before release.
Useful? React with 👍 / 👎.
A summary-only Omi capture discarded everything actually said inside a long conversation. Atomize each conversation with Omi's own structure (no LLM): title+overview, one task per action item, one per event, and ~60s/~600-char transcript chunks attributed to their speakers (self/other/mixed/unknown via a configurable, non-hardcoded self-label set). Add Omi's distilled memories as an edit-aware omi_memory stream (one batch lookup, then insert-or-patch — never a per-memory table scan). Drive conversations through the shared core's per-atom salted-fingerprint dedup + provenance; route device calls through the core's 429-aware fetch. Vendor the core engine in _shared/ so the function typechecks and deploys standalone (deno.json import map points the deploy path at it). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What
A poll-based Omi pendant capture adapter built on [
wearable-capture-core]. Omi conversations land in your brain automatically as searchable thoughts.How
Implements the
WearableAdapterinterface:GET /v1/dev/user/conversations?include_transcript=true,Bearer OMI_API_KEY, bare-array body) and filters to a rolling window bystarted_at(the API has nosinceparam).meetingthought from Omi's ownstructured.title+overview, plus onetaskperaction_itemsentry. No per-item LLM cost.The core handles dedup, OpenRouter embedding, and the
thoughtsinsert. An edge function (Deno.serve) runs one pass; the README shows a 5-minutepg_cron+net.http_postschedule.Prereq & guardrails
[integrations] Wearable capture corePR (deploy it first).thoughtsschema changes; secrets viaDeno.env;deno check/lint/fmtclean; no keys in the diff.🤖 Generated with Claude Code