---
title: Team Time — World Clock Dashboard
---

# Team Time — World Clock Dashboard

## What it is

Team Time is a built-in Omniscio feature for managing team members across timezones. It provides live clocks with working-hours status indicators, a meeting planner with overlap detection, and a reverse time converter for scheduling emails at specific times in someone else's timezone.

## Where to find it

Settings > Features > Enable Team Time (toggle, default off). When enabled, a Globe icon appears in the toolbar. The Quick Launch (Ctrl+Space) also gains a Team Time tab for fast timezone lookups.

## How it behaves

### Three Tabs

#### Dashboard

Live clocks for every saved team member, organized by group. Each card shows:

- Current local time (updates every 30 seconds)
- Working status dot: green (working hours), amber (within 1 hour of start/end), red (off hours)
- Timezone name with UTC offset
- Working hours range

A "Your time" reference clock at the top updates in sync.

#### Planner

Two modes:

**Schedule a meeting** — Enter an optional meeting title, pick a date, start time, and duration (15 min to 4 hours, default 1 hour), then select people. Shows what that time would be in each person's timezone with status indicators. An overlap bar visualizes working-hours overlap when 2+ people are selected. Three actions on results:

- **Copy summary** — generates a formatted text block for calendar invites
- **Create Meeting** — creates a Google Calendar event with the chosen title (or auto-generated "Meeting - Names"), duration, and timezone breakdown in the description. Requires `calendarEnabled` + Calendar channel connected (checked via `useChannelsStore`). Shows a success toast on creation. Disabled (grayed out) otherwise.
- **Draft Email** — creates a Gmail draft with a formatted meeting invite body. The draft is created without a recipient (`to` is optional via `gmailDraftSchema`) so the user can add addresses manually in Gmail. Requires `gmailEnabled` + Gmail authenticated (checked via `useGmailStore`, NOT the channels store — Gmail is not a channel adapter). Shows a success toast on creation. Uses the `GMAIL_CREATE_DRAFT` IPC channel.
- **Send Booking Link** — creates a Gmail draft containing a Calendar Scheduler booking link so recipients can self-schedule. Only visible when the Calendar Scheduler marketplace plugin is installed, enabled, and running. Five states: hidden (plugin absent), connect prompt (plugin not connected), disabled (no booking pages), direct send (one link), or picker dropdown (multiple links). Requires Gmail connected (same as Draft Email). Uses `TEAM_TIME_BOOKING_LINKS` to fetch links from the plugin, then `GMAIL_CREATE_DRAFT` to compose the draft.

**Convert a time** — Pick a person and a time in their timezone. Shows what that time would be in your local timezone. Useful for scheduling emails to arrive at a specific time in someone else's workday.

#### Manage

Add, edit, and delete team members and groups. Each person has:

- Name
- IANA timezone (searchable picker with ~400 zones)
- Working hours (start/end times, default 09:00–17:00)
- Color (8 presets, optional)
- Group assignment (optional)

Groups have a name and optional color. People within a group are displayed together on the Dashboard.

### Bulk Add (UI)

The Manage tab has an "Add Multiple" button that opens a paste-friendly dialog. Users type one person per line as `Name, Timezone` (e.g. `Holly Ocaya, CST`). Abbreviations like CST, IST, JST, EST are auto-resolved to IANA zones. A preview step shows which entries are valid before committing.

### Future: Contact Info for Meeting Notifications

Currently Team Time tracks names and timezones but not contact information (email addresses, etc.). The Planner creates calendar events and email drafts for the user's own benefit — the listed people are never notified directly. To scale this into a proper meeting-invitation flow, each person would need at least an email field so that:

- Calendar events can add attendees (Google Calendar sends invites automatically when attendees are present)
- The Draft Email button can pre-fill the "To" field with selected people's addresses

This would require adding an `email` column to `team_time_people`, updating the Manage tab's add/edit forms, the bulk-add parser, the CLI `POST /team-time/people` body schema, and the Planner's `handleCreateEvent`/`handleDraftEmail` functions.

## For agents

### Data Model

Three SQLite tables (migration v236):

- `team_time_groups` — id, name, color, sortOrder
- `team_time_people` — id, name, timezone, workStart, workEnd, color, groupId (FK), sortOrder
- `team_time_project_links` — projectId (FK), personId (FK), composite PK

Soft-delete via `is_deleted` on people and groups.

### CLI Endpoints

The CLI control server exposes Team Time management so agents can add people programmatically. All endpoints require bearer-token auth.

| Method   | Path                     | Purpose                        |
| -------- | ------------------------ | ------------------------------ |
| `GET`    | `/team-time/people`      | List all people                |
| `POST`   | `/team-time/people`      | Create one person              |
| `POST`   | `/team-time/people/bulk` | Create up to 50 people at once |
| `DELETE` | `/team-time/people/:id`  | Soft-delete a person           |

**POST body** (single): `{ "name": "Holly", "timezone": "America/Chicago", "workStart": "09:00", "workEnd": "17:00" }`. `workStart`/`workEnd` default to 09:00/17:00 if omitted.

**POST body** (bulk): `{ "people": [{ "name": "...", "timezone": "..." }, ...] }`. Max 50 per call.

Common timezone abbreviations (IST, CST, EST, etc.) are NOT resolved by the CLI — callers must pass IANA zone names (e.g. `Asia/Kolkata`, `America/Chicago`). The UI bulk-add dialog handles abbreviation resolution.

### IPC Channels

14 request channels (`team-time:people:*`, `team-time:groups:*`, `team-time:project-links:*`, `team-time:booking-links`) + 1 push channel (`team-time:changed`). All follow the standard `wrapHandler` + Zod validation pattern. The `booking-links` channel is a read-only proxy to the Calendar Scheduler plugin's CLI endpoint; it returns one of four states (hidden/connect/disabled/ready) and is blocked on the mobile WS bridge.

### Key Files

- Store: `src/renderer/src/stores/team-time-store.ts`
- Utilities: `src/renderer/src/lib/team-time-utils.ts` (timezone math via native `Intl` APIs)
- Components: `src/renderer/src/features/team-time/`
- CLI routes: `src/main/services/cli/cli-server-team-time-routes.ts`
- Queries: `src/main/db/queries-team-time.ts`
- Handlers: `src/main/ipc/team-time-handlers.ts`, `src/main/ipc/team-time-booking-handlers.ts`
- Feature flag: `teamTimeEnabled` in `AppSettings`

## Related

The Planner hands off to two other surfaces: [Meetings](meetings.md) collects the calls the app knows about, and [Calendar Quick Add](calendar-quick-add.md) is the fast path for putting one on your calendar. [Google Integrations](google-integrations.md) covers the Calendar and Gmail connections its Create Meeting and Draft Email actions depend on, and [Google Meet](google-meet.md) is the separate in-app meeting surface.
