Meeting Rooms (one-click speed-dial for your meeting links)
A speed-dial for video conferencing links: store your recurring meeting URLs and people's personal room links once, then launch any of them with one click or a keyboard shortcut. Works across Zoom, Google Meet, Teams, Skype, Webex and any other meeting URL, with the platform detected from the link itself.
What it is
What it is
Meeting Rooms is a speed-dial for video conferencing links across multiple platforms: Zoom, Google Meet, Microsoft Teams, Skype, Webex, and any other meeting URL. Store recurring meeting URLs and people's personal room links, then launch them with one click or a keyboard shortcut. There is no API integration or OAuth for any platform; the feature is a local bookmark + launcher that opens links in your default browser via shell.openExternal().
The feature appears as a Video icon entry in the Omniscio sidebar under the agent tools group. It is disabled by default (meetingRoomsEnabled: false in Settings). When the user enables it at Settings → Agent Tools → Meeting Rooms, the sidebar row is created and the Ctrl+Shift+Z palette shortcut becomes active. When disabled, the sidebar entry is hidden and the palette shortcut is suppressed. Stored rooms are preserved across toggles.
Two use cases:
- General — store predetermined meeting links (recurring standups, team syncs, one-on-ones) so you don't have to dig through calendar invites or Slack messages.
- Personal rooms — store people's standing personal room links ("Sarah's Room" with her personal meeting URL) for instant access. Personal rooms are tagged with a badge so you can tell them apart from one-off meeting links.
All data is local-only — rooms live in the SQLite zoom_rooms table inside mission-control.db. Nothing syncs to any external service.
Where to find it
The Meeting Rooms entry in the sidebar opens the room list; the Ctrl+Shift+Z command palette reaches a room from anywhere. The enable switch is in Settings → Agent Tools → Meeting Rooms.
How it behaves
Supported platforms
Each room has a platform field identifying which conferencing service it belongs to. The platform is auto-detected from the URL when creating or editing a room, and can be overridden manually via a dropdown.
| Platform | Detection | Badge color |
|---|---|---|
| Zoom | *.zoom.us, zoom.us, *.zoom.com, zoom.com |
Blue |
| Google Meet | meet.google.com |
Green |
| Teams | teams.microsoft.com, teams.live.com |
Purple |
| Skype | *.skype.com, join.skype.com |
Cyan |
| Webex | *.webex.com |
Orange |
| Other | Any unrecognized URL | Gray |
Detection uses new URL(url).hostname matching (not regex) to prevent subdomain spoofing. The detection logic lives in src/shared/meeting-platform.ts.
How to use it
Add a room
- Click the Meeting Rooms entry in the sidebar to open the virtual project view.
- Click the + Add Room button in the header (or the call-to-action in the empty state).
- Fill in the form:
- Name (required) — a short label like "Daily Standup" or "Sarah's Room".
- Meeting URL (required) — the full meeting URL. Must start with
https://(thehttp://protocol is auto-upgraded). - Platform — auto-detected from the URL, shown as a dropdown. Can be overridden manually.
- Category (optional) — free-text grouping like "Engineering", "1:1s", "All Hands". Rooms with the same category are grouped together in the view.
- Personal Room (optional) — toggle on if this is someone's standing personal room. Adds a "Personal" badge to the room card.
- Keyboard Shortcut (optional) — a text label for the shortcut (display-only in v1; per-room global shortcuts are deferred).
- Press Ctrl+Enter or click Save.
Launch a room
- From the view: Click any room card. Omniscio opens the URL in your default browser via
shell.openExternal()and records the launch time. - From the command palette: Press Ctrl+Shift+Z to open the Meeting Rooms palette. Type to filter by name, URL, or category. Press Enter or click a result to launch. Recently-launched rooms sort first.
Edit or delete a room
Each room card has pencil (edit) and trash (delete) buttons. Edit opens the same form as Add, pre-filled. Delete shows a confirmation dialog before removing the room.
Reorder rooms
Rooms display in display_order within their category group. Drag any room card within its category to reorder it — the new position persists immediately via the meeting-rooms:reorder IPC. Each category group is an independent drag zone (rooms cannot be dragged across categories). The drag interaction uses the standard useDragReorder hook with a Notion-style drop indicator.
Command palette (Ctrl+Shift+Z)
The palette is built on CommandPaletteShell — the same shell used by Super Prompts (Ctrl+Shift+K) and Session Search (Ctrl+K). It:
- Opens centered at the top of the window with a search input.
- Filters rooms by name, URL, or category as you type (case-insensitive substring match).
- Sorts results by most-recently-launched first (rooms never launched sort last, alphabetically).
- Shows a colored platform badge next to each room name.
- Launches on Enter or click, then closes.
- Has a "Manage rooms" footer link that navigates to the Meeting Rooms virtual project.
- Lazy-loads via
MeetingPaletteGate(aCustomEvent-driven gate component mounted inApp.tsx) so the palette code is not in the main bundle.
The shortcut is defined in keybindings.ts as openMeetingPalette with default binding Ctrl+Shift+Z. It is suppressed when meetingRoomsEnabled is false.
Settings
Settings → Agent Tools → Meeting Rooms holds a single Enable Meeting Rooms toggle bound to the meetingRoomsEnabled setting (default false). When toggled on, the main process creates the virtual project row in the sidebar and emits PROJECTS_CHANGED. The Ctrl+Shift+Z palette shortcut and MeetingPaletteGate event listener are also gated on this flag. When off, the sidebar entry is hidden and the palette is inactive. Stored rooms are preserved — nothing is deleted.
The setting is searchable via the settings search index with keywords: meeting, zoom, video call, room, standup, quick launch, video conference, google meet, teams, skype, webex.
Data model
The zoom_rooms table (migration v166, platform column added by ledger migration):
| Column | Type | Notes |
|---|---|---|
id |
TEXT PK | UUID, generated on create |
name |
TEXT | NOT NULL, room display name |
url |
TEXT | NOT NULL, must be https:// |
platform |
TEXT | NOT NULL, DEFAULT 'zoom', one of the 6 platform ids |
category |
TEXT | Nullable, free-text grouping |
is_personal_room |
INTEGER | 0 or 1, default 0 |
shortcut |
TEXT | Nullable, display-only label |
display_order |
INTEGER | NOT NULL, sequential within the full list |
last_launched_at |
TEXT | Nullable ISO timestamp, updated on launch |
created_at |
TEXT | NOT NULL, ISO timestamp |
updated_at |
TEXT | NOT NULL, ISO timestamp |
Indexes: idx_zoom_rooms_category on category, idx_zoom_rooms_order on display_order.
For agents
How it works
- Platform detection: src/shared/meeting-platform.ts —
MeetingPlatformtype,detectPlatformFromUrl(),PLATFORM_DISPLAYconfig. - Queries: src/main/db/meeting-rooms-queries.ts —
listMeetingRooms,createMeetingRoom,updateMeetingRoom,deleteMeetingRoom,reorderMeetingRooms,touchLastLaunched. Follows thebookmarks-queries.tspattern (internalDbRow+ camelCase API mapper). - Launcher: src/main/services/meeting-launcher.ts — validates
https:protocol, callsshell.openExternal(), updateslast_launched_at, per-id 200ms debounce. - IPC handlers: src/main/ipc/meeting-rooms-handlers.ts — 6 handlers via
wrapHandler(), mutations emitMEETING_ROOMS_CHANGEDpush. - IPC channels:
meeting-rooms:list,meeting-rooms:create,meeting-rooms:update,meeting-rooms:delete,meeting-rooms:launch,meeting-rooms:reorder, plusmeeting-rooms:changedpush event. - Zustand store: src/renderer/src/stores/meeting-rooms-store.ts — rooms, loading, CRUD actions, push-listener re-fetch.
- View: src/renderer/src/features/meeting-rooms/MeetingRoomsView.tsx — virtual project panel with category-grouped room cards; each category group is an independent
useDragReorderdrag zone. Platform badges render next to room names. - Utils: src/renderer/src/features/meeting-rooms/meeting-rooms-utils.ts —
groupByCategory+buildReorderedIds. - Form: src/renderer/src/features/meeting-rooms/MeetingRoomFormModal.tsx —
DialogShell-based create/edit form with platform dropdown and URL-based auto-detection. - Palette: src/renderer/src/features/meeting-rooms/MeetingPalette.tsx —
CommandPaletteShell-based speed-dial with platform badges. - Palette gate: src/renderer/src/features/meeting-rooms/MeetingPaletteGate.tsx — lazy-loads
MeetingPaletteontoggle-meeting-paletteCustomEvent. - UI registry: src/renderer/src/integrations/ui-registry.ts —
Videoicon,text-blue-500, lazy panel. - Integration manifest: src/shared/integrations/meeting-rooms.ts — id
meeting-rooms,parentGroupId: 'agent-tools'. - CLI routes: src/main/services/cli/cli-server-meeting-rooms-routes.ts — 6 routes at
/meeting-rooms/*for external automation.
Related
Related
- bookmarks.md — Bookmarks is a general-purpose launcher (URLs, paths, executables, commands). Meeting Rooms is purpose-built for video conferencing links with categories, personal-room badges, platform detection, and a dedicated command palette.
- keyboard-shortcuts.md — Ctrl+Shift+Z is the Meeting Rooms palette shortcut; rebindable via Settings → Keyboard Shortcuts.
Last verified 2026-10-06