---
title: PM Time Tracker Bridge
---

# PM Time Tracker Bridge

## What it is

**PM Time Tracker Bridge** connects Mission Control items to the Time Tracker -- a Time tab in the
item card lets you start/stop timers and view logged time against any PM item, directly from the
board.

Starting a timer from an item card creates a time entry linked to that PM item (`pm_item_id` on
`time_entries`). The entry appears in both the item card's Time tab and the Time Tracker's Today
timeline (with a PM item name chip).

## Where to find it

In two places. On the board, an item card carries a **Time** tab where a timer is started and
stopped and the logged time for that item is listed. In the Time Tracker, the same entry shows up
on the **Today** timeline, tagged with a chip carrying the PM item's name.

## How it behaves

All Time Tracker invariants are preserved:

- **Single-running**: starting a timer auto-stops any running entry (reuses the existing
  `TIME_TRACKER_ENTRY_START` channel, extended with optional `pmItemId`)
- **Derive-once money**: billable amounts are derived at read time using BigInt-exact
  multiply/divide (never stored per entry)
- **Plugin isolation**: the Mission Control plugin communicates only through
  `window.__AMC_MISSION_CONTROL_SESSION__` bridge methods, never importing AMC modules directly

There are no dedicated settings; the feature requires both Mission Control and the Time Tracker to
be enabled.

## For agents

Two read-only channels were added (both in `BLOCKED_CHANNELS` for desktop-only):

- `TIME_TRACKER_PM_ENTRIES` -- list time entries for a PM item
- `TIME_TRACKER_PM_TOTAL` -- total time + billable amount for a PM item

Timer start/stop reuses the existing Time Tracker channels -- no new write channels were added.

### Data model

| Column | Type | Table | Purpose |
|--------|------|-------|---------|
| `pm_item_id` | TEXT, nullable | `time_entries` | Links entry to a PM item |
| `pm_item_name` | TEXT, nullable | `time_entries` | Denormalized name for display |

A filtered index (`idx_time_entries_pm_item`) covers non-null `pm_item_id`.

**Settings**: no dedicated settings. Requires `missionControlEnabled` and the Time Tracker to be
enabled.

## Related

The time side of this bridge is documented in [time-tracker.md](time-tracker.md), and the board
side in [mission-control.md](mission-control.md) -- the parent page. Because a timer is started from
an item card, [pm-my-work.md](pm-my-work.md) is often the quicker way to reach your own items. The
full behavioural contract is recorded in
[pm-time-tracker-bridge-contract.md](../../.claude/memory/contracts/pm-time-tracker-bridge-contract.md),
and every other page in this library is listed in [INDEX.md](INDEX.md).
