> For the complete documentation index, see [llms.txt](https://docs.slatecx.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.slatecx.com/concepts/the-agent.md).

# The agent

The agent is a document-grounded assistant that runs in text and voice with the same tools and prompts.

## One thread per participant

`chat_thread` is unique on `(slateId, participantId)`. Cards are shared on the Slate; conversation is private to the participant.

## Grounding

Answers come from the campaign's selected sources, retrieved through Amazon Bedrock Knowledge Base. Derived transcription documents are included alongside their source material.

The agent has no knowledge of tenant content that is not a selected campaign source.

## Text

Text chat streams over SSE, emitting tokens and tool events in real time.

When a campaign has assigned skills, streaming changes: model text is buffered until the answer is complete, then skill names and private markers are removed before one guarded answer is released. The guarded answer is what gets persisted.

## Voice

Voice uses the OpenAI Realtime API over WebRTC with a server sideband. It requires the campaign's `voiceModeEnabled` setting and tenant voice access.

Voice has a tighter instruction budget than text: a 32,000 UTF-8-byte stable-instruction ceiling against a fixed 128,000 supported provider window. Realtime keeps the same ordered fourteen tool definitions whether skills and runtime data are sparse or full — tools are never dropped to recover capacity.

## Prompt composition

Instructions are assembled in a deliberate order:

```
1. Stable tenant and campaign settings
2. Active assigned skills (optional, all-or-nothing tail)
3. Current runtime state: goals, questions, cards, participant, answers, form state
```

Campaign definitions are placed in the current-state snapshot rather than a parallel cached collection, so the model receives one self-contained picture of the present.

## What the agent can do

| Capability                   | Notes                                                          |
| ---------------------------- | -------------------------------------------------------------- |
| Answer from sources          | With optional prospect-visible citations                       |
| Push cards                   | Guided by each card's `whenToPush`                             |
| Record goal achievements     | Only for goals with no automatic triggers                      |
| Capture answers              | Custom campaign questions                                      |
| Capture identity             | Participant email and name, captured separately from questions |
| Nudge                        | A proactive turn after configured inactivity                   |
| Assist with HubSpot forms    | When the card uses `agent_assists`                             |
| Assist with HubSpot meetings | When the card uses `agent_assists`                             |

## Consent boundaries for assisted actions

Agent-assisted HubSpot flows never act on silence. The agent discloses collection once per flow version and must have either a same-run prospect-requested push or a current direct instruction before one submission attempt. Silence, inactivity, card close, and timers never submit or book. The native form and scheduler always remain available as a prospect-operated fallback.

## Feedback

Prospects can rate assistant messages: `POST /slates/:slateId/chatbot/messages/:messageId/feedback`.

## What prospects never see

Wallet does not expose tenant-internal prompts, backend configuration, admin-only information, or tenant-user data. Skill names and private markers are stripped from answers.

## See also

* [Configure the agent](broken://pages/JpphX3p7YGodo7oThSoD)
* [Agent skills](/guides/agent-skills.md)
* [Goals](/concepts/goals.md)
