Omi

pending

by Salman M.

Sync your Omi AI conversation memories into organized markdown files.

7 starsUpdated 3mo ago0BSDDiscovered via Obsidian Unofficial Plugins
View on GitHub

Omi for Obsidian

Sync your Omi AI conversations, tasks, and memories to Obsidian as searchable markdown files with Dataview-compatible metadata.

Features

  • Conversations Sync - Download conversations with AI summaries, action items, events, and transcripts
  • Omi Hub - Interactive dashboard with multiple views (tasks, conversations, memories, stats, map)
  • Tasks Hub - Bidirectional task sync with list, kanban, and calendar views
  • Memories - Browse and search your Omi memories with tag graph visualization
  • Stats Dashboard - Analytics, heatmaps, and achievement tracking
  • Map View - Geographic visualization of conversations
  • Dataview Integration - YAML frontmatter for powerful queries
  • Daily Notes - Automatic linking to your daily notes

Installation

Manual Installation

  1. Download the latest release
  2. Extract into your vault's .obsidian/plugins/obsidian-omi folder
  3. Reload Obsidian
  4. Enable "Omi" in Community Plugins

Quick Start

  1. Open Settings > Omi
  2. Enter your Omi Developer API Key (see below)
  3. Click the brain icon in the ribbon to open Omi Hub
  4. Go to the Sync tab and click Full Resync

Getting Your Omi API Key

  1. Open the Omi app on your device
  2. Navigate to Settings > Developer
  3. Click "Create Key" under Developer API Keys
  4. Copy the key (starts with omi_dev_)
  5. Paste into plugin settings

File Structure

The plugin creates organized markdown files in a nested hierarchy:

Omi/
├── _omi-index.md          # Master index linking all conversations
├── Memories.md            # Searchable backup of all memories
├── Tasks.md               # Backup of all tasks
└── 2025/
    └── 01/
        └── 09/
            ├── 2025-01-09.md    # Daily index with navigation
            ├── overview.md       # AI summaries for each conversation
            ├── action-items.md   # Tasks extracted from conversations
            ├── events.md         # Calendar events mentioned
            └── transcript.md     # Full conversation transcripts

Daily Index Navigation

Each daily index includes prev/next day navigation:

[[2025/01/08/2025-01-08|<< 2025-01-08]] | **2025-01-09** | [[2025/01/10/2025-01-10|2025-01-10 >>]]

YAML Frontmatter

Each file includes structured metadata compatible with Dataview:

---
date: 2025-01-09
category: work
duration: 45
location: San Francisco, CA
conversations: 3
action_items: 5
events: 2
tags:
  - omi/work
  - omi/location/san-francisco
---

Properties

PropertyDescription
dateDate of the conversation (YYYY-MM-DD)
categoryAI-detected category (work, personal, health, etc.)
durationLength in minutes
locationAddress where conversation occurred
conversationsNumber of conversations that day
action_itemsTasks extracted from conversations
eventsCalendar events mentioned
tagsHierarchical tags with omi/ prefix

Tags

All tags use the #omi/ prefix to avoid conflicts with your existing tags:

  • Categories: #omi/work, #omi/personal, #omi/health, #omi/finance
  • Locations: #omi/location/san-francisco, #omi/location/new-york

Dataview Queries

With the Dataview plugin installed, you can query your Omi data:

Basic Queries

List work conversations

TABLE date, duration, location
FROM "Omi"
WHERE category = "work"
SORT date DESC

Conversations by location

LIST
FROM #omi/location/san-francisco
SORT date DESC

Pending action items

TASK
FROM "Omi"
WHERE !completed
LIMIT 20

📊 Analytics & Summaries

Weekly conversation summary

TABLE
    length(rows) as "Conversations",
    sum(rows.duration) as "Total Min",
    round(sum(rows.duration)/60, 1) as "Hours"
FROM "Omi"
WHERE date >= date(today) - dur(7 days)
GROUP BY dateformat(date, "ccc, MMM d") as Day
SORT date DESC

Category breakdown with stats

TABLE WITHOUT ID
    category as "Category",
    length(rows) as "Count",
    round(sum(rows.duration)/60, 1) + " hrs" as "Time",
    round(length(rows) / 7 * 100) + "%" as "% of Week"
FROM "Omi"
WHERE date >= date(today) - dur(7 days)
GROUP BY category
SORT length(rows) DESC

Monthly totals dashboard

TABLE WITHOUT ID
    dateformat(date, "MMMM yyyy") as "Month",
    length(rows) as "Conversations",
    round(sum(rows.duration)/60, 1) + " hours" as "Total Time",
    round(average(rows.duration), 0) + " min" as "Avg Length"
FROM "Omi"
GROUP BY dateformat(date, "yyyy-MM")
SORT date DESC
LIMIT 6

🔥 Insights & Patterns

Long conversations (deep work sessions)

TABLE date, category, duration + " min" as "Length", location
FROM "Omi"
WHERE duration > 30
SORT duration DESC
LIMIT 10

Most productive locations

TABLE WITHOUT ID
    location as "Location",
    length(rows) as "Visits",
    round(sum(rows.duration)/60, 1) + " hrs" as "Time Spent"
FROM "Omi"
WHERE location != null
GROUP BY location
SORT sum(rows.duration) DESC
LIMIT 5

Recent activity streak

LIST WITHOUT ID
    "📅 " + dateformat(date, "ccc, MMM d") + " — " +
    length(rows) + " conversations (" +
    sum(rows.duration) + " min)"
FROM "Omi"
WHERE date >= date(today) - dur(14 days)
GROUP BY date
SORT date DESC

🎯 Task & Action Item Queries

Action items by conversation

TABLE WITHOUT ID
    file.link as "Day",
    action_items as "Tasks",
    category
FROM "Omi"
WHERE action_items > 0
SORT date DESC
LIMIT 10

Days with most action items

TABLE WITHOUT ID
    dateformat(date, "MMM d, yyyy") as "Date",
    action_items as "Tasks Created",
    category,
    duration + " min" as "Duration"
FROM "Omi"
WHERE action_items > 3
SORT action_items DESC

🗓️ Time-Based Views

Today's conversations

LIST
FROM "Omi"
WHERE date = date(today)
SORT file.ctime DESC

This week's highlights

TABLE WITHOUT ID
    dateformat(date, "ccc") as "Day",
    category,
    duration + " min" as "Duration",
    action_items as "Tasks"
FROM "Omi"
WHERE date >= date(today) - dur(7 days)
SORT date DESC

Busiest days of the week

TABLE WITHOUT ID
    dateformat(date, "cccc") as "Day of Week",
    length(rows) as "Total Conversations",
    round(average(rows.duration), 0) + " min" as "Avg Duration"
FROM "Omi"
GROUP BY dateformat(date, "c")
SORT length(rows) DESC

🏷️ Tag-Based Queries

All work-related conversations

LIST
FROM #omi/work
SORT date DESC
LIMIT 15

Cross-reference: Work + specific location

TABLE date, duration, location
FROM #omi/work AND #omi/location/san-francisco
SORT date DESC

Browse by any category

TABLE WITHOUT ID
    category as "Category",
    length(rows) as "Count",
    min(rows.date) as "First",
    max(rows.date) as "Latest"
FROM "Omi"
GROUP BY category
SORT length(rows) DESC

🔗 Daily Notes Integration

Embed today's Omi summary in your daily note

TABLE WITHOUT ID
    file.link as "Conversation",
    duration + " min" as "Duration",
    action_items as "Tasks"
FROM "Omi"
WHERE date = this.file.day

Link recent conversations from daily note

LIST
FROM "Omi"
WHERE date >= this.file.day - dur(3 days) AND date <= this.file.day
SORT date DESC

Omi Hub

Click the brain icon to open Omi Hub, a unified dashboard with multiple tabs:

Tasks Tab

  • Dashboard - Overview with pending tasks and streaks
  • List - Collapsible sections by due date
  • Kanban - Drag-and-drop columns
  • Calendar - Monthly/weekly grid view

Conversations Tab

  • List - Card view of synced conversations
  • Timeline - Daily/weekly timeline visualization
  • Detail - Split pane with summary and transcript

Memories Tab

  • List - Browse memories by category
  • Graph - Tag relationship visualization

Stats Tab

  • Analytics with time range filtering
  • Category breakdown
  • Duration distribution
  • Achievements and streaks

Heatmap Tab

  • Activity calendar showing conversation frequency

Map Tab

  • Geographic view using conversation geolocation data

Sync Tab

  • Live sync progress with cancel button
  • Status cards for conversations, tasks, memories
  • Auto-sync toggles and interval settings
  • Sync history log (last 24 hours)

Daily Notes Integration

Automatically add links to Omi conversations in your daily notes:

  1. Go to Settings > Omi > Daily Notes
  2. Enable "Daily notes linking"
  3. Set your daily notes folder and filename format

After syncing, your daily note will include:

## Omi
See [[Omi/2025/01/09/2025-01-09|today's conversations]]

Commands

CommandDescription
Omi: Sync conversationsFetch new conversations
Omi: Full resyncRe-download all conversations
Omi: Sync Tasks HubRefresh tasks backup file
Omi: Sync Memories HubRefresh memories backup file
Omi: Open HubOpen the main dashboard

Settings

SettingDescription
API KeyYour Omi developer API key (omi_dev_*)
Folder PathWhere to store conversation files
Start DateOnly sync conversations after this date
Auto-syncAutomatically sync at intervals (0 = disabled)
Include OverviewCreate overview.md with AI summaries
Include Action ItemsCreate action-items.md with tasks
Include EventsCreate events.md with calendar events
Include TranscriptCreate transcript.md with full text
Enable Tasks HubEnable tasks backup file
Daily Notes FolderPath to daily notes folder
Daily Notes FormatFilename format (e.g., YYYY-MM-DD)

Troubleshooting

Rate Limiting

  • The plugin automatically retries with exponential backoff
  • Check the Sync tab for detailed error messages

Links Not Working

  • Ensure headings match exactly (including emojis and timestamps)
  • Try re-syncing to regenerate files

No Conversations Appearing

  • Verify your API Key is correct (starts with omi_dev_)
  • Check your start date (YYYY-MM-DD format)
  • Confirm you have conversations in your Omi account

Timezone Issues

  • All timestamps are converted to your computer's local timezone
  • Files are organized by local date, not UTC

API Information

This plugin uses the Omi Developer API:

  • Endpoint: GET /v1/dev/user/conversations
  • Authentication: Developer API key
  • Features: Server-side date filtering, pagination, incremental sync
  • See docs.omi.me for details

License

MIT

Credits

By Salman M.

Support

For issues or feature requests, visit GitHub

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.