Skip to main content

User Profile

In plain terms

The User Profile is a tidy profile card for each person: name, role, company, timezone, language — plus any custom fields you define. One value per field, like a CRM contact record.
The analogy: the contact card in your phone. Structured slots (name, number, company), not free-form notes.
It complements User Facts: Profile is the form with known fields; Facts are the free-form notes for everything you can’t predict.

When to use it

  • You have a fixed set of attributes you always want to know: name, role, timezone, plan tier, department.
  • You want clean structured values you can render in a UI or use in logic (e.g. branch on profile.plan === "enterprise").
  • Timezone-aware behavior — the agent can schedule or phrase things in the user’s local time.

When NOT to use it

  • For open-ended preferences (“likes dark mode,” “into sci-fi”) — those are unpredictable, so use User Facts instead.
  • For transient data — see the same guidance as User Facts.

Configuration

PropertyTypeDefaultWhat it controls
customFieldsstring[][]Extra named fields the extractor is allowed to fill, beyond the built-ins
The four built-in fields (name, role, timezone, language) are always tracked. customFields adds your own:
Why it’s a whitelist: the agent can only populate fields you list. It won’t invent a salary field unless you ask for one. This keeps the profile clean, predictable, and safe to render in a UI.

What gets stored

A single structured object per user:
This is injected into the system prompt as a clean block:

Direct access

Cross-references