> 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/goals.md).

# Goals

A goal is a campaign-defined outcome worth recording when it happens in a conversation.

## Authority

A goal's trigger array decides who can complete it. There is no separate mode field.

| Triggers    | Completion authority                     |
| ----------- | ---------------------------------------- |
| None        | The agent, by assessing the conversation |
| One or more | Only matching system-recorded events     |

Changing triggers changes future authority only. Adding triggers does not rewrite an earlier agent-owned achievement; removing the last trigger restores agent authority without a backfill.

## Trigger types

| Trigger                               | Scope                                                                     |
| ------------------------------------- | ------------------------------------------------------------------------- |
| `card_added_to_slate`                 | A selected campaign card                                                  |
| `card_external_link_opened`           | Primary action link only                                                  |
| `card_host_navigation_opened`         | Embedded host-navigation link, recorded with `surface: "host_navigation"` |
| `hubspot_form_submitted`              | A selected active HubSpot form card                                       |
| `hubspot_meeting_booked`              | A selected active HubSpot meeting card                                    |
| `cards_pushed_to_slate_count_reached` | Threshold 1 to 100                                                        |
| `prospect_message_count_reached`      | Threshold 1 to 100                                                        |

Selected-card triggers are campaign-card scoped. Markdown bookmark cards do not complete `card_added_to_slate` because they have no campaign card.

## Achievement records

One primary achievement row exists per thread and goal. The first matching signal wins. Later matching signals are recorded as secondary evidence events rather than overwriting the original source.

Goal definitions are versioned lazily: an immutable `campaign_chatbot_goal_version` is created when it is first needed, so an achievement always points at the definition that was in force.

## Transactional conversions

HubSpot conversion triggers run inside the same transaction that first persists the form submission or meeting booking. A duplicate conversion request returns the existing conversion without re-evaluating later goal definitions.

Evidence recorded for a conversion is non-PII: the conversion ID and the exact Slate and card provenance.

## Side effects

First-achievement side effects — contact syncs and Slack notifications — are scheduled after the transaction commits, never inside it.

## Schema version guard

Removing either HubSpot conversion trigger requires declaring `automaticCompletionTriggerSchemaVersion: 2`. An older client gets `409` instead of silently dropping a trigger it cannot represent.

## See also

* [Goals and questions](/guides/goals-and-questions.md)
* [Review insights](/guides/review-insights.md)
