# The glance card

What the agent pushes to the glasses display. One page, because the format is
small on purpose.

## Shape

A card is **three lines of text**. Nothing else. No colour, no icons, no
graphics, no animation.

| Field | Type | Rule |
| --- | --- | --- |
| `lines` | list of strings | Up to 3. Fewer is fine; the rest blank |
| line length | n/a | 24 characters. Longer is **cut, never wrapped** |
| whitespace | n/a | Runs of spaces collapse to one |

There is no title, no priority, no timestamp field. If the time matters, put it
on a line.

## Update semantics

- A push **replaces** the whole card. There is no partial update.
- The display holds the last card **indefinitely**. Cards do not expire on their
  own; push a blank card to clear.
- Pushes are **last-write-wins**. No queue, no history, no stacking.
- Pushing an identical card is a no-op and does not redraw.

## Why it is this small

The display is monochrome, single-eye, and read in a glance while the wearer is
doing something else. A card that needs a second look has already failed. Three
lines is roughly what someone takes in without stopping.

Design for the glance, not the screen: the first line should be readable alone.

## Examples

**Time and next event**

```
09:41
Standup in 8 min
Room 2
```

**Heart-rate trend**: a trend, not a diagnosis

```
Resting HR
trending down 4 days
since Tuesday
```

**A notification**

```
Sam
"are we still on for 6?"
reply / dismiss
```

## Pushing one

Command line:

```
python3 hud.py --push "09:41|Standup in 8 min|Room 2"
```

From Python:

```python
from hud import push
push(["09:41", "Standup in 8 min", "Room 2"])
```

From the agent: the `glance` tool in `tools/glance.py` exposes a `show_glance`
action, so FERAL can push a card the same way it calls any other tool.

## Health language

Cards describe what a sensor measured and how it is trending. They do not name
conditions, do not advise, and do not warn. "Resting HR trending down 4 days" is
a card. Anything that reads as a finding is not.
