# Support

URL: /workflows/processes/support · Id: `process:support`

> Support answers every Conversation from the record in one Thread and fixes causes, not symptoms.

Support answers every [Conversation](/business/nouns/conversation) from the record in one [Thread](/business/nouns/thread) and fixes causes, not symptoms.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each Conversation is answered from the record, and each cause is fixed or filed as an Issue. |
| Reads | [Conversation](/business/nouns/conversation) |
| Leaves | [Message](/business/nouns/message), [Issue](/business/nouns/issue) |
| On time | Within 1 hour (business hours); the clock stops while an Action waits on `awaitingInput`. Late Actions go to the [Founder](/agents/founding/founder). |
| Runs in | Each Startup |

## Accountable
[Customer Lead](/agents/customer/customer-lead), [Customer Team](/agents/customer).

Responsible: [Customer Lead](/agents/customer/customer-lead).

Consulted: [Billing Specialist](/agents/finance/billing-specialist), [Privacy Officer](/agents/legal/privacy-officer), [Reliability Engineer](/agents/engineering/reliability-engineer).

Informed: [Product Lead](/agents/product/product-lead).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Answer a message](/workflows/processes/support/answer-message) | on `Conversation.created` | [Customer Team](/agents/customer) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Answer a message](/workflows/processes/support/answer-message) | 1. Read the Customer’s Thread and records. | [Customer Lead](/agents/customer/customer-lead) |  |  |
| [Answer a message](/workflows/processes/support/answer-message) | 2. Answer from the record within the first-response target. | [Customer Lead](/agents/customer/customer-lead) | [Conversation.answer](/business/nouns/conversation/answer) | Within a Mandate |
| [Answer a message](/workflows/processes/support/answer-message) | 3. Fix the cause, or open an Issue for the Product Team. | [Customer Lead](/agents/customer/customer-lead) | [Issue.create](/business/nouns/issue/create) | None |
| [Answer a message](/workflows/processes/support/answer-message) | 4. Ask at most one question when the Message carries a signal. | [Customer Lead](/agents/customer/customer-lead) | [Message.create](/business/nouns/message/create) | Within a Mandate |
| [Answer a message](/workflows/processes/support/answer-message) | 5. Hand refunds to the Billing Specialist and privacy requests to the Privacy Officer. | [Customer Lead](/agents/customer/customer-lead) | [Conversation.assign](/business/nouns/conversation/assign) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Conversation.created` | Starts [Answer a message](/workflows/processes/support/answer-message) |
| In | On `Conversation.created` | Wakes this Process, the first time only. The first Customer writes in. |
| Out | [`Conversation.answered`](/business/events/Conversation.answered) | Raised by step 2 of [Answer a message](/workflows/processes/support/answer-message) |
| Out | `Issue.created` | Raised by step 3 of [Answer a message](/workflows/processes/support/answer-message) |
| Out | `Message.created` | Raised by step 4 of [Answer a message](/workflows/processes/support/answer-message) |
| Out | [`Conversation.assigned`](/business/events/Conversation.assigned) | Raised by step 5 of [Answer a message](/workflows/processes/support/answer-message) |

## Plays
No Play names this Process.

## Controls
No Control names this Process or a Workflow of it.

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `support.firstResponse` | `string` | `1h` | Answer every message within an hour | [Setting.update](/business/nouns/setting/update) |
| `support.agentAnswers` | `boolean` | `true` | Let the agent answer without my review | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Founder](/agents/founding/founder).

| Step | On failure |
| --- | --- |
| [Answer a message](/workflows/processes/support/answer-message) 2. Answer from the record within the first-response target. | Times out after 1 hour. Goes to the [Founder](/agents/founding/founder). |
| [Answer a message](/workflows/processes/support/answer-message) 5. Hand refunds to the Billing Specialist and privacy requests to the Privacy Officer. | `refund`: The Customer asks for money back, which only the Billing Specialist may send. `privacy`: The Customer asks for their records, which starts the legal clock. |

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | Answers drafted from the Customer’s own record resolve in one reply and keep more Customers to month three. |
| Measure | [Month-3 retention](/agents/customer#month-3-retention) over 90d, at least 100 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on support
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Answer every message within an hour
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":"1h","key":"support.firstResponse"}'

curl -X PATCH https://api.sb/leaseline.app/settings/setting_2 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":true,"key":"support.agentAnswers"}'
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Setting.update({ id: 'setting_1', value: '1h', key: 'support.firstResponse' })
await $.Setting.update({ id: 'setting_2', value: true, key: 'support.agentAnswers' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":"1h","key":"support.firstResponse"}'
npx startup-builder do Setting.update --json '{"id":"setting_2","value":true,"key":"support.agentAnswers"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "await $.Setting.update({ id: 'setting_1', value: '1h', key: 'support.firstResponse' })\nreturn await $.Setting.update({ id: 'setting_2', value: true, key: 'support.agentAnswers' })"
  }
}
```

## Example
A recruiting agency writes that its import stalls at 10,000 rows. The support [Agent](/business/nouns/agent) answers from the import log in the same Thread and raises the batch size for its [Tenant](/business/nouns/tenant). It also opens an [Issue](/business/nouns/issue) for the slow parser, the cause.