# Chat app

URL: /code/sdk/guides/chat · Id: `page:code/sdk/guides/chat`

> A Chat app reaches a Product inside a chat workspace, with the Product's Verbs as commands, its Approvals and Questions as cards, and its Agent in threads.

A Chat app is the [Interface](/business/nouns/interface) that reaches a [Product](/business/nouns/product) inside a chat workspace, such as Slack or Discord. It compiles from the Product's [Verbs](/business/nouns/verb), like the API, and ships through the workspace's own app directory.

## Two audiences, one generator
Every [Startup](/business/nouns/startup) gets a Chat app for its own team: the [Humans](/business/nouns/human) and [Agents](/business/nouns/agent) seated in its [Roles](/business/nouns/role). Every Product can also ship one to its [Customers](/business/nouns/customer), under the Startup's [Brand](/business/nouns/brand) and inside its [Publication](/business/nouns/publication). A Customer installs the Product's app, never a platform app.

Both come from one generator over the registry. Add a Verb to a Product, and its command appears in the app on the next release.

## Verbs are commands
Every Verb the caller's Role may call is a command. A command resolves to the same [Action](/business/nouns/action), under the same [Permissions](/business/nouns/permission) and [Limits](/business/nouns/limit), as the API.

```text
/patentpad try Offer.publish offer=offer_provisional
```

The [Mode](/business/nouns/mode) decides the reply. `try` returns a preview card with a `Run` button and stores nothing, and `Run` executes exactly what the card showed. `send` returns a card for the pending Action that updates in place when it settles.

A message shortcut passes the message as input, such as filing it as an [Issue](/business/nouns/issue). Each Verb is also a step in the workspace's own workflow builder, so a team composes [Processes](/business/nouns/process) in chat with no new screen.

## Mentions hand work to an Agent
Mentioning a Role's Agent hands it the request as a [Task](/business/nouns/task). The Agent replies in the thread with its progress and its result.

A Customer of an Agent Product hires it the same way. A mention in their workspace starts work under the Customer's [Subscription](/business/nouns/subscription), metered like any API call, and the Agent answers in the workspace's assistant threads.

## Cards for Approvals and Questions
An [Approval](/business/nouns/approval) posts to its [Thread](/business/nouns/thread) as a card with `Approve` and `Refuse`. A press counts only from a chat account linked to a Human who may answer it, and the first valid answer wins for everyone. A [Question](/business/nouns/question) from [ask and answer](/code/sdk/guides/ask-and-answer) posts as a card whose buttons are its choices.

Each press runs as an Action `via: chat` that records the chat message it came from.

## Who is acting
Every chat account links to a [Worker](/business/nouns/worker) or a [Contact](/business/nouns/contact). An unlinked account can read and reply, but it cannot call a Verb or answer an Approval.

An Agent posts under its own name, labeled as an Agent. It posts as a Human only under that Human's [Mandate](/business/nouns/mandate), and the Human's stream shows every post sent in their name.

## What the workspace keeps
The app imports only what becomes a record: [Messages](/business/nouns/message) addressed to a Worker, mentions, Approval answers and [Conversation](/business/nouns/conversation) turns. It never backfills channel history, and nothing it reads trains a model.

A Customer-facing app ships through the workspace's app directory, such as the Slack Marketplace, and passes that directory's review before Live. [Chat delivery](/systems/communications/chat) specifies the delivery contract underneath.