Apus normalizes shared locations from chat channels into:

Currently supported:

Text formatting

Locations are rendered as friendly lines without brackets. Coordinates use six decimal places; accuracy is rounded to whole meters:

If the channel includes a label, address, or caption/comment, it is preserved in the context payload and appears in the prompt as fenced untrusted JSON (fields are omitted when absent):

Location:
```json
{
  "latitude": 48.858844,
  "longitude": 2.294351,
  "accuracy_m": 12,
  "source": "place",
  "name": "Eiffel Tower",
  "address": "Champ de Mars, Paris",
  "caption": "Meet here"
}
```

Context fields

When a location is present, these fields are added to ctx:

When the channel does not set an explicit source, Apus infers it: live shares become live, locations with a name or address become place, everything else is pin.

The prompt renderer treats LocationName, LocationAddress, and LocationCaption as untrusted metadata and serializes them through the same bounded JSON path used for other channel context.

Outbound payloads

The message tool and Plugin SDK use the same NormalizedLocation shape for portable outbound locations. A coordinate-only payload represents a pin. Channels with native venue support may map name plus address to a venue card.

Telegram currently exposes this through message(action="send"). Its first implementation is deliberately standalone: location payloads cannot be mixed with text or media, and incomplete venue pairs fail instead of silently dropping a name or address. Unsupported channels do not advertise the location parameter.

Channel notes

Related