log_interaction
Record a touchpoint — say WHAT it was with type: 'in_person', 'call', or 'message'. Everything else is optional detail that defaults sensibly. Builds the relationship timeline and feeds recency and relationship strength. Each call appends a new event. Works on any search_people hit — if they're not in your network yet, they're added first. NOT for notes — a note about someone is a memory, so use add_memory instead.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Event/context tags for THIS touchpoint — WHERE / WHEN you met: an event, a place, a trip (e.g. 'friendly-machines-2026', 'event:agents-day', 'berlin'). Put them here, on the interaction, not on the person — they describe the meeting, not a durable trait, and are surfaced back on the person view as aggregated context. Use update_person's tags only for lasting traits of the person. | |
| type | Yes | What the interaction was: 'in_person' (you were physically together), 'call' (a live conversation — phone or video), or 'message' (an asynchronous written exchange). | |
| format | No | Group size, for in_person and call only — 'one_to_one' (default) or 'group'. A group counts for less than a 1:1. A message has no size. | |
| channel | No | Where it happened. For a call: 'phone' (default) or 'video'. For a message: 'email' | 'linkedin' | 'x' | 'whatsapp' | 'sms'. Not used for in_person. | |
| payload | No | Optional freeform details (e.g. { topic: 'fundraising' }). | |
| direction | No | Messages only — 'outbound' (you sent it) or 'inbound' (they sent it). Set it whenever you know; it is what lets a real back-and-forth be told apart from a message that was never answered. Omit it when you genuinely don't know: the message is still recorded and still counts, it just carries no direction verdict. Never guess. A call or an in-person meeting is a two-way event and carries no direction. | |
| person_id | Yes | The person this interaction is with. | |
| occurred_at | No | When it HAPPENED (ISO timestamp). Omit → defaults to now. Pass null for undated items (e.g. open-ended follow-ups) — the timeline then shows only when it was recorded. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | Whether noticed completed the operation. | |
| data | No | The operation result when ok is true. | |
| error | No | A human-readable error when ok is false. |